[*] 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-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x17310 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00017310 ()                                  | void fcn_00017310 (int16_t arg1) {
                                                             |     r0 = arg1;
                                                             |     if (? != ?) {
    0x00017310 andeq r0, r0, r1                              |         r0 &= r1;
                                                             |     }
    0x00017314 add.w r3, r0, 0x30                            |     r3 = r0 + 0x30;
    0x00017318 add.w r2, r0, 0x28                            |     r2 = r0 + 0x28;
    0x0001731c push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x00017320 ldrd r4, r8, [r0, 0x10]                       |     __asm ("ldrd r4, r8, [r0, 0x10]");
    0x00017324 mov.w sl, 0                                   |     sl = 0;
    0x00017328 mov r7, r0                                    |     r7 = r0;
    0x0001732a ldrd r5, sb, [r0, 0x30]                       |     __asm ("ldrd r5, sb, [r0, 0x30]");
    0x0001732e vst1.32 {d16}, [r2]                           |     __asm ("vst1.32 {d16}, [r2]");
    0x00017332 vst1.32 {d16}, [r3]                           |     __asm ("vst1.32 {d16}, [r3]");
    0x00017336 ldr r6, [r0, 0x20]                            |     r6 = *((r0 + 0x20));
    0x00017338 str.w sl, [r0, 0x20]                          |     __asm ("str.w sl, [r0, 0x20]");
    0x0001733c ldr r0, [r0, 0x24]                            |     r0 = *((r0 + 0x24));
    0x0001733e blx 0x9c24                                    |     fcn_00009c24 ();
    0x00017342 str.w sl, [r7, 0x24]                          |     __asm ("str.w sl, [r7, 0x24]");
    0x00017346 str.w sl, [r7, 0x18]                          |     __asm ("str.w sl, [r7, 0x18]");
                                                             |     if (r6 == 0) {
    0x0001734a cbz r6, 0x17358                               |         goto label_2;
                                                             |     }
                                                             |     do {
    0x0001734c mov r0, r6                                    |         r0 = r6;
    0x0001734e ldr r6, [r6]                                  |         r6 = *(r6);
    0x00017350 blx 0x9c24                                    |         fcn_00009c24 ();
    0x00017354 cmp r6, 0                                     |         
    0x00017356 bne 0x1734c                                   |         
                                                             |     } while (r6 != 0);
                                                             | label_2:
    0x00017358 movs r3, 0                                    |     r3 = 0;
    0x0001735a str r3, [r7, 0x1c]                            |     *((r7 + 0x1c)) = r3;
    0x0001735c cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x0001735e beq 0x1740c                                   |         goto label_3;
                                                             |     }
    0x00017360 mov r6, r5                                    |     r6 = r5;
                                                             |     do {
    0x00017362 ldr r3, [r6, 8]                               |         r3 = *((r6 + 8));
    0x00017364 mov r1, r3                                    |         r1 = r3;
                                                             |         if (r3 != 0) {
    0x00017366 cbz r3, 0x17370                               |             
    0x00017368 ldrb r0, [r3, 0xa]                            |             r0 = *((r3 + 0xa));
                                                             |             if (r0 != 0) {
    0x0001736a cbnz r0, 0x17370                              |                 goto label_4;
                                                             |             }
    0x0001736c bl 0x172ac                                    |             fcn_000172ac (r0, r1);
                                                             |         }
                                                             | label_4:
    0x00017370 ldr r6, [r6]                                  |         r6 = *(r6);
    0x00017372 cmp r6, 0                                     |         
    0x00017374 bne 0x17362                                   |         
                                                             |     } while (r6 != 0);
    0x00017376 mov r0, sb                                    |     r0 = sb;
    0x00017378 blx 0x9c24                                    |     fcn_00009c24 ();
                                                             |     do {
    0x0001737c mov r0, r5                                    |         r0 = r5;
    0x0001737e ldr r5, [r5]                                  |         r5 = *(r5);
    0x00017380 blx 0x9c24                                    |         fcn_00009c24 ();
    0x00017384 cmp r5, 0                                     |         
    0x00017386 bne 0x1737c                                   |         
                                                             |     } while (r5 != 0);
                                                             | label_0:
    0x00017388 vmov.i32 d16, 0                               |     __asm ("vmov.i32 d16, 0");
    0x0001738c add.w r2, r7, 8                               |     r2 = r7 + 8;
    0x00017390 add.w r3, r7, 0x10                            |     r3 = r7 + 0x10;
    0x00017394 vst1.32 {d16}, [r2]                           |     __asm ("vst1.32 {d16}, [r2]");
    0x00017398 vst1.32 {d16}, [r3]                           |     __asm ("vst1.32 {d16}, [r3]");
    0x0001739c cmp r4, 0                                     |     
                                                             |     if (r4 == 0) {
    0x0001739e beq 0x17414                                   |         goto label_5;
                                                             |     }
    0x000173a0 mov r5, r4                                    |     r5 = r4;
                                                             |     do {
    0x000173a2 ldr r3, [r5, 8]                               |         r3 = *((r5 + 8));
    0x000173a4 mov r1, r3                                    |         r1 = r3;
                                                             |         if (r3 != 0) {
    0x000173a6 cbz r3, 0x173b4                               |             
    0x000173a8 ldr r0, [r3, 0x18]                            |             r0 = *((r3 + 0x18));
    0x000173aa subs r0, 1                                    |             r0--;
    0x000173ac str r0, [r3, 0x18]                            |             *((r3 + 0x18)) = r0;
                                                             |             if (r0 != 0) {
    0x000173ae cbnz r0, 0x173b4                              |                 goto label_6;
                                                             |             }
    0x000173b0 bl 0x170b8                                    |             fcn_000170b8 (r0, r1);
                                                             |         }
                                                             | label_6:
    0x000173b4 ldr r5, [r5]                                  |         r5 = *(r5);
    0x000173b6 cmp r5, 0                                     |         
    0x000173b8 bne 0x173a2                                   |         
                                                             |     } while (r5 != 0);
    0x000173ba mov r0, r8                                    |     r0 = r8;
    0x000173bc blx 0x9c24                                    |     fcn_00009c24 ();
                                                             |     do {
    0x000173c0 mov r0, r4                                    |         r0 = r4;
    0x000173c2 ldr r4, [r4]                                  |         r4 = *(r4);
    0x000173c4 blx 0x9c24                                    |         fcn_00009c24 ();
    0x000173c8 cmp r4, 0                                     |         
    0x000173ca bne 0x173c0                                   |         
                                                             |     } while (r4 != 0);
                                                             | label_1:
    0x000173cc ldr r4, [r7, 0x40]                            |     r4 = *((r7 + 0x40));
    0x000173ce movs r5, 0                                    |     r5 = 0;
    0x000173d0 ldr r0, [r7, 0x44]                            |     r0 = *((r7 + 0x44));
    0x000173d2 str r5, [r7, 0x40]                            |     *((r7 + 0x40)) = r5;
    0x000173d4 blx 0x9c24                                    |     fcn_00009c24 ();
    0x000173d8 str r5, [r7, 0x44]                            |     *((r7 + 0x44)) = r5;
    0x000173da str r5, [r7, 0x38]                            |     *((r7 + 0x38)) = r5;
                                                             |     if (r4 == 0) {
    0x000173dc cbz r4, 0x173ea                               |         goto label_7;
                                                             |     }
                                                             |     do {
    0x000173de mov r0, r4                                    |         r0 = r4;
    0x000173e0 ldr r4, [r4]                                  |         r4 = *(r4);
    0x000173e2 blx 0x9c24                                    |         fcn_00009c24 ();
    0x000173e6 cmp r4, 0                                     |         
    0x000173e8 bne 0x173de                                   |         
                                                             |     } while (r4 != 0);
                                                             | label_7:
    0x000173ea ldrh.w r3, [r7, 0x4e]                         |     r3 = *((r7 + 0x4e));
    0x000173ee movs r2, 0                                    |     r2 = 0;
    0x000173f0 str r2, [r7, 0x3c]                            |     *((r7 + 0x3c)) = r2;
    0x000173f2 str r2, [r7, 0x48]                            |     *((r7 + 0x48)) = r2;
    0x000173f4 lsls r2, r3, 0x1f                             |     r2 = r3 << 0x1f;
    0x000173f6 bic r3, r3, 9                                 |     r3 = BIT_MASK (r3, 9);
    0x000173fa it mi                                         |     
                                                             |     if (r2 >= r3) {
    0x000173fc ldrmi r2, [r7, 4]                             |         r2 = *((r7 + 4));
                                                             |     }
    0x000173fe strh.w r3, [r7, 0x4e]                         |     *((r7 + 0x4e)) = r3;
    0x00017402 itt mi                                        |     
                                                             |     if (r2 >= r3) {
    0x00017404 addmi r2, 1                                   |         r2++;
                                                             |     }
                                                             |     if (r2 >= r3) {
    0x00017406 strmi r2, [r7, 4]                             |         *((r7 + 4)) = r2;
                                                             |     }
    0x00017408 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |     
                                                             | label_3:
    0x0001740c mov r0, sb                                    |     r0 = sb;
    0x0001740e blx 0x9c24                                    |     fcn_00009c24 ();
    0x00017412 b 0x17388                                     |     goto label_0;
                                                             | label_5:
    0x00017414 mov r0, r8                                    |     r0 = r8;
    0x00017416 blx 0x9c24                                    |     fcn_00009c24 ();
    0x0001741a b 0x173cc                                     |     goto label_1;
                                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x17744 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00017744 ()                  | void fcn_00017744 (int16_t arg1, uint32_t arg4) {
                                             |     r0 = arg1;
                                             |     r3 = arg4;
    0x00017744 push {r4, r5, r6, lr}         |     
    0x00017746 ldrd r4, r3, [r0, 0x10]       |     __asm ("ldrd r4, r3, [r0, 0x10]");
    0x0001774a cmp r3, 0                     |     
                                             |     if (r3 <= 0) {
    0x0001774c ble 0x1776e                   |         goto label_0;
                                             |     }
    0x0001774e mov r6, r0                    |     r6 = r0;
    0x00017750 subs r5, r3, 1                |     r5 = r3 - 1;
                                             |     do {
    0x00017752 ldr r0, [r4, 4]               |         r0 = *((r4 + 4));
    0x00017754 subs r5, 1                    |         r5--;
                                             |         if (r0 != 0) {
    0x00017756 cbz r0, 0x17766               |             
    0x00017758 ldr r3, [r6, 0x20]            |             r3 = *((r6 + 0x20));
    0x0001775a ldrb r1, [r4, 8]              |             r1 = *((r4 + 8));
    0x0001775c and r3, r3, 0x38              |             r3 &= 0x38;
    0x00017760 orrs r1, r3                   |             r1 |= r3;
    0x00017762 bl 0x1768c                    |             fcn_0001768c (r0, r1);
                                             |         }
    0x00017766 adds r3, r5, 1                |         r3 = r5 + 1;
    0x00017768 add.w r4, r4, 0x10            |         r4 += 0x10;
    0x0001776c bne 0x17752                   |         
                                             |     } while (r3 != r5);
                                             | label_0:
    0x0001776e pop {r4, r5, r6, pc}          |     
                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x17e28 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.00017e28 ()                          | void fcn_00017e28 (int16_t arg1) {
                                                     |     r0 = arg1;
    0x00017e28 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00017e2c mov.w r8, 0x47                        |     r8 = 0x47;
    0x00017e30 ldr r1, [pc, 0x50]                    |     
    0x00017e32 mov r5, r0                            |     r5 = r0;
    0x00017e34 movs r7, 0                            |     r7 = 0;
    0x00017e36 mov r3, r8                            |     r3 = r8;
    0x00017e38 ldr r6, [pc, 0x4c]                    |     
    0x00017e3a add r1, pc                            |     r1 = 0x2fcc2;
    0x00017e3c add r6, pc                            |     r6 = 0x2fcc8;
    0x00017e3e b 0x17e5c                             |     
                                                     |     while (r0 != 0) {
    0x00017e40 ite lt                                |         
                                                     |         if (r7 >= 0) {
    0x00017e42 addlt r8, r4, -1                      |             r8 = r4 + -1;
                                                     |         }
                                                     |         if (r7 >= 0) {
    0x00017e46 adds r7, r4, 1                        |             r7 = r4 + 1;
                                                     |         }
    0x00017e48 cmp r7, r8                            |         
    0x00017e4a add.w r3, r7, r8                      |         r3 = r7 + r8;
    0x00017e4e asr.w r2, r3, 1                       |         r2 = r3 >> 1;
                                                     |         if (r7 > r8) {
    0x00017e52 bgt 0x17e7c                           |             goto label_0;
                                                     |         }
    0x00017e54 add.w r2, r6, r2, lsl 4               |         r2 = r6 + (r2 << 4);
    0x00017e58 ldr.w r1, [r2, 0x298]                 |         r1 = *((r2 + 0x298));
    0x00017e5c mov r0, r5                            |         r0 = r5;
    0x00017e5e asrs r4, r3, 1                        |         r4 = r3 >> 1;
    0x00017e60 blx 0x9754                            |         r0 = fcn_00009754 ();
    0x00017e64 cmp r0, 0                             |         
    0x00017e66 bne 0x17e40                           |         
                                                     |     }
    0x00017e68 cmp r7, r8                            |     
                                                     |     if (r7 <= r8) {
    0x00017e6a bgt 0x17e78                           |         
    0x00017e6c ldr r0, [pc, 0x1c]                    |         
    0x00017e6e add r0, pc                            |         
    0x00017e70 add.w r0, r0, 0x298                   |         r0 = 0x2ff96;
    0x00017e74 add.w r0, r0, r4, lsl 4               |         r0 += (r4 << 4);
                                                     |     }
    0x00017e78 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_0:
    0x00017e7c movs r0, 0                            |     r0 = 0;
    0x00017e7e pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x17eec */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00017eec ()                          | void fcn_00017eec (int16_t arg2, int16_t arg3, int16_t arg4, arithmetic x) {
                                                     |     int16_t var_0h;
                                                     |     int16_t var_0h_2;
                                                     |     int16_t var_4h;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
                                                     |     r0 = x;
    0x00017eec push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00017ef0 mov r7, r1                            |     r7 = r1;
    0x00017ef2 ldr r1, [pc, 0x1d8]                   |     
    0x00017ef4 mov r5, r3                            |     r5 = r3;
    0x00017ef6 mov r4, r0                            |     r4 = r0;
    0x00017ef8 sub sp, 8                             |     
    0x00017efa ldr r3, [pc, 0x1d4]                   |     r3 = *(0x180d2);
    0x00017efc add r1, pc                            |     r1 = 0x2ffce;
    0x00017efe ldrb r0, [r0]                         |     r0 = *(r0);
    0x00017f00 ldr r3, [r1, r3]                      |     
    0x00017f02 ldr r3, [r3]                          |     r3 = *(0x2ffce);
    0x00017f04 str r3, [sp, 4]                       |     var_4h = r3;
    0x00017f06 mov.w r3, 0                           |     r3 = 0;
    0x00017f0a cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x00017f0c beq 0x17f8c                           |         goto label_6;
                                                     |     }
    0x00017f0e ldr.w r8, [pc, 0x1c4]                 |     r8 = *(0x000180d4);
    0x00017f12 mov.w lr, 0                           |     lr = 0;
    0x00017f16 subs r1, r2, 2                        |     r1 = r2 - 2;
    0x00017f18 mov r6, lr                            |     r6 = lr;
    0x00017f1a add r8, pc                            |     r8 += pc;
                                                     | label_0:
    0x00017f1c sub.w r3, r0, 0x30                    |     r3 = r0 - 0x30;
    0x00017f20 cmp r3, 9                             |     
    0x00017f22 it ls                                 |     
                                                     |     if (r3 > 9) {
    0x00017f24 movls r2, 0                           |         r2 = 0;
                                                     |     }
                                                     |     if (r3 > 9) {
    0x00017f26 bhi.w 0x1806e                         |         goto label_7;
                                                     |     }
                                                     |     do {
    0x00017f2a add.w r2, r2, r2, lsl 2               |         r2 += (r2 << 2);
    0x00017f2e add.w r2, r0, r2, lsl 1               |         r2 = r0 + (r2 << 1);
    0x00017f32 ldrb r0, [r4, 1]!                     |         r0 = *((r4 += 1));
    0x00017f36 subs r2, 0x30                         |         r2 -= 0x30;
    0x00017f38 sub.w ip, r0, 0x30                    |         
    0x00017f3c cmp.w ip, 9                           |         
    0x00017f40 bls 0x17f2a                           |         
                                                     |     } while (ip < 9);
    0x00017f42 cmp r2, 8                             |     
    0x00017f44 sbcs r3, r6, 0                        |     __asm ("sbcs r3, r6, 0");
                                                     |     if (r2 <= 8) {
    0x00017f48 blo 0x17ffc                           |         goto label_8;
                                                     |     }
    0x00017f4a clz r0, r2                            |     r0 &= r2;
    0x00017f4e rsb.w r0, r0, 0x1c                    |     r0 = 0x1c - r0;
    0x00017f52 add.w r3, r0, r0, lsl 2               |     r3 = r0 + (r0 << 2);
    0x00017f56 lsr.w r0, r2, r0                      |     r0 = r2 >> r0;
    0x00017f5a lsls r3, r3, 1                        |     r3 <<= 1;
    0x00017f5c adds r3, 0x28                         |     r3 += 0x28;
    0x00017f5e uxth r3, r3                           |     r3 = (int16_t) r3;
                                                     | label_2:
    0x00017f60 and r0, r0, 7                         |     r0 &= 7;
    0x00017f64 add.w r0, r8, r0, lsl 1               |     r0 = r8 + (r0 << 1);
    0x00017f68 subs r3, 0xa                          |     r3 -= 0xa;
    0x00017f6a ldrh.w r2, [r0, 0xd58]                |     r2 = *((r0 + 0xd58));
    0x00017f6e add r3, r2                            |     r3 += r2;
    0x00017f70 sxth r3, r3                           |     __asm ("sxth r3, r3");
                                                     | label_4:
    0x00017f72 strh r3, [r1, 2]!                     |     *((r1 += 2)) = r3;
    0x00017f76 add.w lr, lr, 1                       |     lr++;
    0x00017f7a ldrb r0, [r4]                         |     r0 = *(r4);
    0x00017f7c cmp r0, 0x20                          |     
    0x00017f7e itt eq                                |     
                                                     |     if (r0 != 0x20) {
    0x00017f80 ldrbeq r0, [r4, 1]                    |         r0 = *((r4 + 1));
                                                     |     }
                                                     |     if (r0 != 0x20) {
    0x00017f82 addeq r4, 1                           |         r4++;
                                                     |     }
    0x00017f84 cmp r0, 0                             |     
    0x00017f86 it ne                                 |     
                                                     |     if (r0 == 0) {
    0x00017f88 cmpne lr, r7                          |         __asm ("cmpne lr, r7");
                                                     |         goto label_9;
                                                     |     }
                                                     |     if (r0 < 0) {
                                                     | label_9:
    0x00017f8a blt 0x17f1c                           |         goto label_0;
                                                     |     }
                                                     | label_6:
    0x00017f8c ldrb.w r3, [r5, 0x37]                 |     r3 = *((r5 + 0x37));
    0x00017f90 bic r3, r3, 0x44                      |     r3 = BIT_MASK (r3, 0x44);
    0x00017f94 strb.w r3, [r5, 0x37]                 |     *((r5 + 0x37)) = r3;
    0x00017f98 ldrb r3, [r4]                         |     r3 = *(r4);
                                                     |     if (r3 == 0) {
    0x00017f9a cbz r3, 0x17fe2                       |         goto label_10;
                                                     |     }
    0x00017f9c ldr r6, [pc, 0x138]                   |     
    0x00017f9e ldr r7, [pc, 0x13c]                   |     
    0x00017fa0 ldr.w r8, [pc, 0x13c]                 |     
    0x00017fa4 add r6, pc                            |     r6 = 0x30080;
    0x00017fa6 add r7, pc                            |     r7 = 0x30088;
    0x00017fa8 add r8, pc                            |     r8 = 0x3008c;
                                                     | label_1:
    0x00017faa mov r1, r4                            |     r1 = r4;
    0x00017fac mov r0, r6                            |     r0 = r6;
    0x00017fae blx 0x9f4c                            |     r0 = fcn_00009f4c ();
                                                     |     if (r0 != 0) {
    0x00017fb2 cbnz r0, 0x18018                      |         goto label_11;
                                                     |     }
    0x00017fb4 ldrb.w r3, [r5, 0x37]                 |     r3 = *((r5 + 0x37));
    0x00017fb8 orr r3, r3, 4                         |     r3 |= 4;
    0x00017fbc strb.w r3, [r5, 0x37]                 |     *((r5 + 0x37)) = r3;
                                                     | label_3:
    0x00017fc0 ldrb r2, [r4]                         |     r2 = *(r4);
    0x00017fc2 tst.w r2, 0xdf                        |     
                                                     |     if ((r2 & 0xdf) == 0) {
    0x00017fc6 beq 0x17fda                           |         goto label_12;
                                                     |     }
                                                     |     do {
    0x00017fc8 ldrb r2, [r4, 1]!                     |         r2 = *((r4 += 1));
    0x00017fcc tst.w r2, 0xdf                        |         
    0x00017fd0 bne 0x17fc8                           |         
                                                     |     } while ((r2 & 0xdf) != 0);
    0x00017fd2 cmp r2, 0x20                          |     
                                                     |     if (r2 != 0x20) {
    0x00017fd4 bne 0x17fde                           |         goto label_13;
                                                     |     }
                                                     |     do {
    0x00017fd6 ldrb r2, [r4, 1]!                     |         r2 = *((r4 += 1));
                                                     | label_12:
    0x00017fda cmp r2, 0x20                          |         
    0x00017fdc beq 0x17fd6                           |         
                                                     |     } while (r2 == 0x20);
                                                     | label_13:
    0x00017fde cmp r2, 0                             |     
                                                     |     if (r2 != 0) {
    0x00017fe0 bne 0x17faa                           |         goto label_1;
                                                     |     }
                                                     | label_10:
    0x00017fe2 ldr r2, [pc, 0x100]                   |     
    0x00017fe4 ldr r3, [pc, 0xe8]                    |     r3 = *(0x180d0);
    0x00017fe6 add r2, pc                            |     r2 = 0x300d0;
    0x00017fe8 ldr r3, [r2, r3]                      |     r3 = *(0x300d0);
    0x00017fea ldr r2, [r3]                          |     r2 = *(0x300d0);
    0x00017fec ldr r3, [sp, 4]                       |     r3 = var_4h;
    0x00017fee eors r2, r3                           |     r2 ^= r3;
    0x00017ff0 mov.w r3, 0                           |     r3 = 0;
                                                     |     if (r2 != r3) {
    0x00017ff4 bne 0x180c6                           |         goto label_14;
                                                     |     }
    0x00017ff6 add sp, 8                             |     
    0x00017ff8 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_8:
    0x00017ffc cmp r2, 2                             |     
    0x00017ffe sbcs r3, r6, 0                        |     __asm ("sbcs r3, r6, 0");
                                                     |     if (r2 > 2) {
    0x00018002 blo 0x1806e                           |         
    0x00018004 adds r0, r2, r2                       |         r0 = r2 + r2;
    0x00018006 adc.w r3, r6, r6                      |         __asm ("adc.w r3, r6, r6");
    0x0001800a cmp r0, 8                             |         
    0x0001800c sbcs r3, r3, 0                        |         __asm ("sbcs r3, r3, 0");
                                                     |         if (r0 >= 8) {
    0x00018010 bhs 0x180c2                           |             goto label_15;
                                                     |         }
    0x00018012 lsls r0, r2, 2                        |         r0 = r2 << 2;
    0x00018014 movs r3, 0x14                         |         r3 = 0x14;
    0x00018016 b 0x17f60                             |         goto label_2;
                                                     | label_11:
    0x00018018 mov r1, r4                            |         r1 = r4;
    0x0001801a mov r0, r7                            |         r0 = r7;
    0x0001801c blx 0x9f4c                            |         r0 = fcn_00009f4c ();
    0x00018020 mov r3, r0                            |         r3 = r0;
                                                     |         if (r0 != 0) {
    0x00018022 cbnz r0, 0x18072                      |             goto label_16;
                                                     |         }
    0x00018024 mov r1, sp                            |         r1 = sp;
    0x00018026 adds r0, r4, 3                        |         r0 = r4 + 3;
    0x00018028 str r3, [sp]                          |         *(sp) = r3;
    0x0001802a bl 0xd180                             |         fcn_0000d180 (r0, r1);
    0x0001802e ldr r2, [sp]                          |         r2 = *(sp);
    0x00018030 cmp r2, 2                             |         
    0x00018032 mov r3, r2                            |         r3 = r2;
    0x00018034 it lt                                 |         
                                                     |         if (r2 >= 2) {
    0x00018036 movlt r3, 2                           |             r3 = 2;
                                                     |         }
    0x00018038 cmp r2, 7                             |         
    0x0001803a asr.w r0, r3, 0x1f                    |         r0 = r3 >> 0x1f;
                                                     |         if (r2 > 7) {
    0x0001803e bgt 0x1808c                           |             goto label_17;
                                                     |         }
    0x00018040 adds r2, r3, r3                       |         r2 = r3 + r3;
    0x00018042 adcs r0, r0                           |         __asm ("adcs r0, r0");
    0x00018044 cmp r2, 8                             |         
    0x00018046 sbcs r0, r0, 0                        |         __asm ("sbcs r0, r0, 0");
    0x0001804a itete hs                              |         
                                                     |         if (r2 < 8) {
    0x0001804c movhs r3, r2                          |             r3 = r2;
                                                     |         }
                                                     |         if (r2 >= 8) {
    0x0001804e movlo r2, 0x14                        |             r2 = 0x14;
                                                     |         }
                                                     |         if (r2 < 8) {
    0x00018050 movhs r2, 0x1e                        |             r2 = 0x1e;
                                                     |         }
                                                     |         if (r2 >= 8) {
    0x00018052 lsllo r3, r3, 2                       |             r3 <<= 2;
                                                     |         }
    0x00018054 subs r2, 0xa                          |         r2 -= 0xa;
    0x00018056 uxth r1, r2                           |         r1 = (int16_t) r2;
                                                     | label_5:
    0x00018058 ldr r2, [pc, 0x8c]                    |         
    0x0001805a and r3, r3, 7                         |         r3 &= 7;
    0x0001805e add r2, pc                            |         r2 = 0x3014a;
    0x00018060 add.w r3, r2, r3, lsl 1               |         r3 = r2 + (r3 << 1);
    0x00018064 ldrh.w r3, [r3, 0xd58]                |         r3 = *((r3 + 0xd58));
    0x00018068 adds r2, r1, r3                       |         r2 = r1 + r3;
    0x0001806a strh r2, [r5, 0x30]                   |         *((r5 + 0x30)) = r2;
    0x0001806c b 0x17fc0                             |         goto label_3;
                                                     |     }
                                                     | label_7:
    0x0001806e movs r3, 0                            |     r3 = 0;
    0x00018070 b 0x17f72                             |     goto label_4;
                                                     | label_16:
    0x00018072 mov r1, r4                            |     r1 = r4;
    0x00018074 mov r0, r8                            |     r0 = r8;
    0x00018076 blx 0x9f4c                            |     r0 = fcn_00009f4c ();
    0x0001807a cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x0001807c bne 0x17fc0                           |         goto label_3;
                                                     |     }
    0x0001807e ldrb.w r3, [r5, 0x37]                 |     r3 = *((r5 + 0x37));
    0x00018082 orr r3, r3, 0x40                      |     r3 |= 0x40;
    0x00018086 strb.w r3, [r5, 0x37]                 |     *((r5 + 0x37)) = r3;
    0x0001808a b 0x17fc0                             |     goto label_3;
                                                     | label_17:
    0x0001808c clz ip, r0                            |     
    0x00018090 cbz r0, 0x180b8                       |     
                                                     |     while (1) {
    0x00018092 rsb.w r2, ip, 0x3c                    |         r2 = 0x3c - ip;
    0x00018096 lsrs r3, r2                           |         r3 >>= r2;
    0x00018098 add.w r2, r2, r2, lsl 2               |         r2 += (r2 << 2);
    0x0001809c lsls r2, r2, 1                        |         r2 <<= 1;
    0x0001809e adds r2, 0x1e                         |         r2 += 0x1e;
    0x000180a0 uxth r1, r2                           |         r1 = (int16_t) r2;
    0x000180a2 sub.w r2, ip, 0x1c                    |         r2 = ip - 0x1c;
    0x000180a6 lsl.w r2, r0, r2                      |         r2 = r0 << r2;
    0x000180aa orrs r3, r2                           |         r3 |= r2;
    0x000180ac rsb.w r2, ip, 0x1c                    |         r2 = 0x1c - ip;
    0x000180b0 lsr.w r2, r0, r2                      |         r2 = r0 >> r2;
    0x000180b4 orrs r3, r2                           |         r3 |= r2;
    0x000180b6 b 0x18058                             |         goto label_5;
    0x000180b8 clz r2, r3                            |         r2 &= r3;
    0x000180bc add.w ip, r2, 0x20                    |         
    0x000180c0 b 0x18092                             |         
                                                     |     }
                                                     | label_15:
    0x000180c2 movs r3, 0x1e                         |     r3 = 0x1e;
    0x000180c4 b 0x17f60                             |     goto label_2;
                                                     | label_14:
    0x000180c6 blx 0x9b44                            |     fcn_00009b44 ();
    0x000180ca nop                                   |     
    0x000180cc ldrh r4, [r0, 0x20]                   |     r4 = *((r0 + 0x20));
    0x000180ce movs r0, r1                           |     r0 = r1;
    0x000180d0 lsls r0, r1, 0x13                     |     r0 = r1 << 0x13;
    0x000180d2 movs r0, r0                           |     
    0x000180d4 ldcl p0, c0, [sl, 0x1c]!              |     __asm ("ldcl p0, c0, [sl, 0x1c]!");
    0x000180d8 ldr r7, [pc, 0x20]                    |     r7 = *(0x180fc);
    0x000180da movs r7, r0                           |     r7 = r0;
    0x000180dc ldr r7, [pc, 0x48]                    |     r7 = *(0x18128);
    0x000180de movs r7, r0                           |     r7 = r0;
    0x000180e0 ldr r7, [pc, 0x70]                    |     r7 = *(0x18154);
    0x000180e2 movs r7, r0                           |     r7 = r0;
    0x000180e4 ldrh r2, [r3, 0x18]                   |     r2 = *((r3 + 0x18));
    0x000180e6 movs r0, r1                           |     r0 = r1;
    0x000180e8 ldc p0, c0, [r6], 0x1c                |     __asm ("ldc p0, c0, [r6], 0x1c");
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1834c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0001834c ()                                      | void fcn_0001834c (int16_t arg1, uint32_t arg2, 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;
                                                                 |     r3 = arg4;
    0x0001834c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00018350 mov r6, r1                                        |     r6 = r1;
    0x00018352 sub sp, 0x1c                                      |     
    0x00018354 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00018356 beq.w 0x18512                                     |         goto label_4;
                                                                 |     }
    0x0001835a mov.w r8, 0                                       |     r8 = 0;
    0x0001835e mov r4, r0                                        |     r4 = r0;
    0x00018360 mov sb, r8                                        |     sb = r8;
                                                                 | label_0:
    0x00018362 ldrd r5, r3, [r6, 0x1c]                           |     __asm ("ldrd r5, r3, [r6, 0x1c]");
    0x00018366 str r3, [sp, 4]                                   |     var_4h = r3;
                                                                 |     if (r5 == 0) {
    0x00018368 cbz r5, 0x183a0                                   |         goto label_5;
                                                                 |     }
    0x0001836a ldr r2, [r5]                                      |     r2 = *(r5);
    0x0001836c cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0001836e ble 0x183a0                                       |         goto label_5;
                                                                 |     }
    0x00018370 mov.w sl, 0                                       |     sl = 0;
    0x00018374 str r6, [sp, 8]                                   |     var_8h = r6;
    0x00018376 mov fp, sl                                        |     
    0x00018378 mov r7, sl                                        |     r7 = sl;
    0x0001837a mov r6, r2                                        |     r6 = r2;
                                                                 |     do {
    0x0001837c ldr r1, [r5, 8]                                   |         r1 = *((r5 + 8));
    0x0001837e mov r0, r4                                        |         r0 = r4;
    0x00018380 adds r7, 1                                        |         r7++;
    0x00018382 adds r5, 0x10                                     |         r5 += 0x10;
                                                                 |         if (r1 != 0) {
    0x00018384 cbz r1, 0x18392                                   |             
    0x00018386 bl 0x182e4                                        |             r0 = fcn_000182e4 (r0, r1);
    0x0001838a orr.w sl, r0, sl                                  |             sl = r0 | sl;
    0x0001838e orr.w fp, r1, fp                                  |             
                                                                 |         }
    0x00018392 cmp r7, r6                                        |         
    0x00018394 bne 0x1837c                                       |         
                                                                 |     } while (r7 != r6);
    0x00018396 ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x00018398 orr.w r8, sl, r8                                  |     r8 = sl | r8;
    0x0001839c orr.w sb, fp, sb                                  |     sb = fp | sb;
                                                                 | label_5:
    0x000183a0 ldr r5, [r6, 0x28]                                |     r5 = *((r6 + 0x28));
                                                                 |     if (r5 == 0) {
    0x000183a2 cbz r5, 0x183da                                   |         goto label_6;
                                                                 |     }
    0x000183a4 ldr r2, [r5]                                      |     r2 = *(r5);
    0x000183a6 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x000183a8 ble 0x183da                                       |         goto label_6;
                                                                 |     }
    0x000183aa mov.w sl, 0                                       |     sl = 0;
    0x000183ae str r6, [sp, 8]                                   |     var_8h = r6;
    0x000183b0 mov fp, sl                                        |     
    0x000183b2 mov r7, sl                                        |     r7 = sl;
    0x000183b4 mov r6, r2                                        |     r6 = r2;
                                                                 |     do {
    0x000183b6 ldr r1, [r5, 8]                                   |         r1 = *((r5 + 8));
    0x000183b8 mov r0, r4                                        |         r0 = r4;
    0x000183ba adds r7, 1                                        |         r7++;
    0x000183bc adds r5, 0x10                                     |         r5 += 0x10;
                                                                 |         if (r1 != 0) {
    0x000183be cbz r1, 0x183cc                                   |             
    0x000183c0 bl 0x182e4                                        |             r0 = fcn_000182e4 (r0, r1);
    0x000183c4 orr.w sl, r0, sl                                  |             sl = r0 | sl;
    0x000183c8 orr.w fp, r1, fp                                  |             
                                                                 |         }
    0x000183cc cmp r7, r6                                        |         
    0x000183ce bne 0x183b6                                       |         
                                                                 |     } while (r7 != r6);
    0x000183d0 ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x000183d2 orr.w r8, sl, r8                                  |     r8 = sl | r8;
    0x000183d6 orr.w sb, fp, sb                                  |     sb = fp | sb;
                                                                 | label_6:
    0x000183da ldr r5, [r6, 0x30]                                |     r5 = *((r6 + 0x30));
                                                                 |     if (r5 == 0) {
    0x000183dc cbz r5, 0x18414                                   |         goto label_7;
                                                                 |     }
    0x000183de ldr r2, [r5]                                      |     r2 = *(r5);
    0x000183e0 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x000183e2 ble 0x18414                                       |         goto label_7;
                                                                 |     }
    0x000183e4 mov.w sl, 0                                       |     sl = 0;
    0x000183e8 str r6, [sp, 8]                                   |     var_8h = r6;
    0x000183ea mov fp, sl                                        |     
    0x000183ec mov r7, sl                                        |     r7 = sl;
    0x000183ee mov r6, r2                                        |     r6 = r2;
                                                                 |     do {
    0x000183f0 ldr r1, [r5, 8]                                   |         r1 = *((r5 + 8));
    0x000183f2 mov r0, r4                                        |         r0 = r4;
    0x000183f4 adds r7, 1                                        |         r7++;
    0x000183f6 adds r5, 0x10                                     |         r5 += 0x10;
                                                                 |         if (r1 != 0) {
    0x000183f8 cbz r1, 0x18406                                   |             
    0x000183fa bl 0x182e4                                        |             r0 = fcn_000182e4 (r0, r1);
    0x000183fe orr.w sl, r0, sl                                  |             sl = r0 | sl;
    0x00018402 orr.w fp, r1, fp                                  |             
                                                                 |         }
    0x00018406 cmp r7, r6                                        |         
    0x00018408 bne 0x183f0                                       |         
                                                                 |     } while (r7 != r6);
    0x0001840a ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x0001840c orr.w r8, sl, r8                                  |     r8 = sl | r8;
    0x00018410 orr.w sb, fp, sb                                  |     sb = fp | sb;
                                                                 | label_7:
    0x00018414 ldr r1, [r6, 0x24]                                |     r1 = *((r6 + 0x24));
                                                                 |     if (r1 != 0) {
    0x00018416 cbz r1, 0x18426                                   |         
    0x00018418 mov r0, r4                                        |         r0 = r4;
    0x0001841a bl 0x182e4                                        |         r0 = fcn_000182e4 (r0, r1);
    0x0001841e orr.w r8, r8, r0                                  |         r8 |= r0;
    0x00018422 orr.w sb, sb, r1                                  |         sb |= r1;
                                                                 |     }
    0x00018426 ldr r1, [r6, 0x2c]                                |     r1 = *((r6 + 0x2c));
                                                                 |     if (r1 != 0) {
    0x00018428 cbz r1, 0x18438                                   |         
    0x0001842a mov r0, r4                                        |         r0 = r4;
    0x0001842c bl 0x182e4                                        |         r0 = fcn_000182e4 (r0, r1);
    0x00018430 orr.w r8, r0, r8                                  |         r8 = r0 | r8;
    0x00018434 orr.w sb, r1, sb                                  |         sb = r1 | sb;
                                                                 |     }
    0x00018438 ldr r3, [sp, 4]                                   |     r3 = var_4h;
                                                                 |     if (r3 != 0) {
    0x0001843a cbnz r3, 0x1844e                                  |         goto label_8;
                                                                 |     }
                                                                 | label_1:
    0x0001843c ldr r6, [r6, 0x34]                                |     r6 = *((r6 + 0x34));
    0x0001843e cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00018440 bne 0x18362                                       |         goto label_0;
                                                                 |     }
    0x00018442 mov r3, sb                                        |     r3 = sb;
    0x00018444 mov r0, r8                                        |     r0 = r8;
    0x00018446 mov r1, r3                                        |     r1 = r3;
    0x00018448 add sp, 0x1c                                      |     
    0x0001844a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_8:
    0x0001844e mov r2, r3                                        |     r2 = r3;
    0x00018450 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00018452 cmp r3, 0                                         |     
    0x00018454 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     if (r3 <= 0) {
    0x00018456 ble 0x1843c                                       |         goto label_1;
                                                                 |     }
    0x00018458 mov.w fp, 0                                       |     
    0x0001845c mov r1, sb                                        |     r1 = sb;
    0x0001845e mov r3, r8                                        |     r3 = r8;
    0x00018460 mov sb, r2                                        |     sb = r2;
    0x00018462 mov r8, fp                                        |     r8 = fp;
    0x00018464 mov r2, r1                                        |     r2 = r1;
    0x00018466 mov fp, r4                                        |     
    0x00018468 str r6, [sp, 0x14]                                |     var_14h = r6;
                                                                 | label_2:
    0x0001846a ldr.w r1, [sb, 0x1c]                              |     r1 = *((sb + 0x1c));
    0x0001846e mov r0, fp                                        |     r0 = fp;
    0x00018470 strd r3, r2, [sp, 0xc]                            |     __asm ("strd r3, r2, [var_10h]");
    0x00018474 lsl.w r4, r8, 6                                   |     r4 = r8 << 6;
    0x00018478 bl 0x1834c                                        |     fcn_0001834c (r0, r1, r2);
    0x0001847c ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0001847e ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00018480 orrs r2, r1                                       |     r2 |= r1;
    0x00018482 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x00018484 orrs r3, r0                                       |     r3 |= r0;
    0x00018486 add r1, r4                                        |     r1 += r4;
    0x00018488 ldrb.w r1, [r1, 0x2e]                             |     r1 = *((r1 + 0x2e));
    0x0001848c lsls r0, r1, 0x1d                                 |     r0 = r1 << 0x1d;
                                                                 |     if (r0 >= r1) {
    0x0001848e bpl 0x184f6                                       |         goto label_9;
                                                                 |     }
                                                                 | label_3:
    0x00018490 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x00018492 add r1, r4                                        |     r1 += r4;
    0x00018494 ldrb.w r1, [r1, 0x2d]                             |     r1 = *((r1 + 0x2d));
    0x00018498 lsls r1, r1, 0x1d                                 |     r1 <<= 0x1d;
                                                                 |     if (r1 >= r1) {
    0x0001849a bpl 0x184de                                       |         goto label_10;
                                                                 |     }
    0x0001849c ldr.w r5, [sb, 0x40]                              |     r5 = *((sb + 0x40));
                                                                 |     if (r5 == 0) {
    0x000184a0 cbz r5, 0x184de                                   |         goto label_10;
                                                                 |     }
    0x000184a2 ldr r4, [r5]                                      |     r4 = *(r5);
    0x000184a4 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x000184a6 ble 0x184de                                       |         goto label_10;
                                                                 |     }
    0x000184a8 movs r7, 0                                        |     r7 = 0;
    0x000184aa str.w r8, [sp, 0xc]                               |     __asm ("str.w r8, [var_ch]");
    0x000184ae mov r6, r7                                        |     r6 = r7;
    0x000184b0 mov r8, r7                                        |     r8 = r7;
    0x000184b2 mov sl, r2                                        |     sl = r2;
    0x000184b4 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 |     do {
    0x000184b6 ldr r1, [r5, 8]                                   |         r1 = *((r5 + 8));
    0x000184b8 mov r0, fp                                        |         r0 = fp;
    0x000184ba adds r6, 1                                        |         r6++;
    0x000184bc adds r5, 0x10                                     |         r5 += 0x10;
                                                                 |         if (r1 != 0) {
    0x000184be cbz r1, 0x184ca                                   |             
    0x000184c0 bl 0x182e4                                        |             r0 = fcn_000182e4 (r0, r1);
    0x000184c4 orrs r7, r0                                       |             r7 |= r0;
    0x000184c6 orr.w r8, r1, r8                                  |             r8 = r1 | r8;
                                                                 |         }
    0x000184ca cmp r4, r6                                        |         
    0x000184cc bne 0x184b6                                       |         
                                                                 |     } while (r4 != r6);
    0x000184ce ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000184d0 mov r2, sl                                        |     r2 = sl;
    0x000184d2 mov sl, r8                                        |     sl = r8;
    0x000184d4 ldr.w r8, [sp, 0xc]                               |     r8 = var_ch;
    0x000184d8 orr.w r2, r2, sl                                  |     r2 |= sl;
    0x000184dc orrs r3, r7                                       |     r3 |= r7;
                                                                 | label_10:
    0x000184de ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x000184e0 add.w r8, r8, 1                                   |     r8++;
    0x000184e4 add.w sb, sb, 0x40                                |     sb += 0x40;
    0x000184e8 cmp r8, r1                                        |     
                                                                 |     if (r8 != r1) {
    0x000184ea bne 0x1846a                                       |         goto label_2;
                                                                 |     }
    0x000184ec ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x000184ee mov r4, fp                                        |     r4 = fp;
    0x000184f0 mov r8, r3                                        |     r8 = r3;
    0x000184f2 mov sb, r2                                        |     sb = r2;
    0x000184f4 b 0x1843c                                         |     goto label_1;
                                                                 | label_9:
    0x000184f6 ldr.w r1, [sb, 0x34]                              |     r1 = *((sb + 0x34));
    0x000184fa cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000184fc beq 0x18490                                       |         goto label_3;
                                                                 |     }
    0x000184fe mov r0, fp                                        |     r0 = fp;
    0x00018500 strd r3, r2, [sp, 0xc]                            |     __asm ("strd r3, r2, [var_10h]");
    0x00018504 bl 0x182e4                                        |     fcn_000182e4 (r0, r1);
    0x00018508 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001850a ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0001850c orrs r3, r0                                       |     r3 |= r0;
    0x0001850e orrs r2, r1                                       |     r2 |= r1;
    0x00018510 b 0x18490                                         |     goto label_3;
                                                                 | label_4:
    0x00018512 mov r8, r1                                        |     r8 = r1;
    0x00018514 mov r3, r1                                        |     r3 = r1;
    0x00018516 mov r0, r8                                        |     r0 = r8;
    0x00018518 mov r1, r3                                        |     r1 = r3;
    0x0001851a add sp, 0x1c                                      |     
    0x0001851c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x18520 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00018520 ()                                      | void fcn_00018520 (int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
    0x00018520 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00018524 mov sb, r0                                        |     sb = r0;
    0x00018526 ldr r4, [r0, 0xc]                                 |     r4 = *((r0 + 0xc));
    0x00018528 sub sp, 0xc                                       |     
    0x0001852a add.w r6, r0, 0x1f8                               |     r6 = r0 + 0x1f8;
    0x0001852e cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00018530 beq.w 0x186c0                                     |         goto label_6;
                                                                 |     }
    0x00018534 ldr.w r8, [r4]                                    |     r8 = *(r4);
    0x00018538 movs r7, 0                                        |     r7 = 0;
    0x0001853a mov sl, r7                                        |     sl = r7;
    0x0001853c cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x00018540 ble 0x1855c                                       |         goto label_4;
                                                                 |     }
    0x00018542 mov r5, r7                                        |     r5 = r7;
                                                                 |     do {
    0x00018544 ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x00018546 mov r0, r6                                        |         r0 = r6;
    0x00018548 adds r5, 1                                        |         r5++;
    0x0001854a adds r4, 0x10                                     |         r4 += 0x10;
                                                                 |         if (r1 != 0) {
    0x0001854c cbz r1, 0x18558                                   |             
    0x0001854e bl 0x182e4                                        |             r0 = fcn_000182e4 (r0, r1);
    0x00018552 orrs r7, r0                                       |             r7 |= r0;
    0x00018554 orr.w sl, r1, sl                                  |             sl = r1 | sl;
                                                                 |         }
    0x00018558 cmp r5, r8                                        |         
    0x0001855a bne 0x18544                                       |         
                                                                 |     } while (r5 != r8);
                                                                 | label_4:
    0x0001855c ldr.w r4, [sb, 8]                                 |     r4 = *((sb + 8));
                                                                 |     if (r4 == 0) {
    0x00018560 cbz r4, 0x18598                                   |         goto label_7;
                                                                 |     }
    0x00018562 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00018564 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00018566 ble 0x18598                                       |         goto label_7;
                                                                 |     }
    0x00018568 mov.w r8, 0                                       |     r8 = 0;
    0x0001856c str r7, [sp]                                      |     *(sp) = r7;
    0x0001856e mov fp, r8                                        |     
    0x00018570 mov r5, r8                                        |     r5 = r8;
    0x00018572 mov r7, r3                                        |     r7 = r3;
                                                                 |     do {
    0x00018574 ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x00018576 mov r0, r6                                        |         r0 = r6;
    0x00018578 adds r5, 1                                        |         r5++;
    0x0001857a adds r4, 0x10                                     |         r4 += 0x10;
                                                                 |         if (r1 != 0) {
    0x0001857c cbz r1, 0x1858a                                   |             
    0x0001857e bl 0x182e4                                        |             r0 = fcn_000182e4 (r0, r1);
    0x00018582 orr.w r8, r0, r8                                  |             r8 = r0 | r8;
    0x00018586 orr.w fp, r1, fp                                  |             
                                                                 |         }
    0x0001858a cmp r5, r7                                        |         
    0x0001858c bne 0x18574                                       |         
                                                                 |     } while (r5 != r7);
    0x0001858e ldr r7, [sp]                                      |     r7 = *(sp);
    0x00018590 orr.w sl, sl, fp                                  |     sl |= fp;
    0x00018594 orr.w r7, r7, r8                                  |     r7 |= r8;
                                                                 | label_7:
    0x00018598 ldrb.w r1, [sb, 0x30]                             |     r1 = *((sb + 0x30));
    0x0001859c add.w r8, r1, -1                                  |     r8 = r1 + -1;
    0x000185a0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x000185a4 ble.w 0x186c6                                     |         goto label_8;
                                                                 |     }
    0x000185a8 movs r3, 0x60                                     |     r3 = 0x60;
    0x000185aa mov.w fp, -1                                      |     
    0x000185ae mla r1, r3, r1, sb                                |     __asm ("mla r1, r3, r1, sb");
    0x000185b2 strd fp, fp, [sp]                                 |     __asm ("strd fp, fp, [sp]");
    0x000185b6 mov fp, r7                                        |     
    0x000185b8 add.w r1, r1, 0x300                               |     r1 += 0x300;
    0x000185bc b 0x185ca                                         |     
                                                                 |     while (r2 != 8) {
                                                                 | label_0:
    0x000185be subs.w r8, r8, 1                                  |         r8--;
    0x000185c2 sub.w r3, r1, 0x60                                |         r3 = r1 - 0x60;
    0x000185c6 mov r1, r3                                        |         r1 = r3;
                                                                 |         if (r8 == r8) {
    0x000185c8 beq 0x1868a                                       |             goto label_9;
                                                                 |         }
                                                                 | label_1:
    0x000185ca ldr r0, [r1, -0x10]                               |         r0 = *((r1 - 0x10));
    0x000185ce ldr.w r7, [sb, 4]                                 |         r7 = *((sb + 4));
    0x000185d2 ldrb r3, [r0, 0x10]                               |         r3 = *((r0 + 0x10));
    0x000185d4 lsls r3, r3, 6                                    |         r3 <<= 6;
    0x000185d6 adds r2, r7, r3                                   |         r2 = r7 + r3;
    0x000185d8 ldrb.w r2, [r2, 0x2c]                             |         r2 = *((r2 + 0x2c));
    0x000185dc and r2, r2, 0x18                                  |         r2 &= 0x18;
    0x000185e0 cmp r2, 8                                         |         
    0x000185e2 bne 0x185be                                       |         
                                                                 |     }
    0x000185e4 ldrh.w r2, [sb, 0x2c]                             |     r2 = *((sb + 0x2c));
    0x000185e8 lsls r4, r2, 0x17                                 |     r4 = r2 << 0x17;
                                                                 |     if (r4 < r2) {
    0x000185ea bmi 0x185f2                                       |         goto label_10;
                                                                 |     }
    0x000185ec ldr r2, [r0, 0x28]                                |     r2 = *((r0 + 0x28));
    0x000185ee lsls r2, r2, 0x13                                 |     r2 <<= 0x13;
                                                                 |     if (r2 >= r2) {
    0x000185f0 bpl 0x185be                                       |         goto label_0;
                                                                 |     }
                                                                 | label_10:
    0x000185f2 ldrd r6, r5, [r0, 8]                              |     __asm ("ldrd r6, r5, [r0, 8]");
    0x000185f6 and.w r2, r6, fp                                  |     r2 = r6 & fp;
    0x000185fa and.w r0, r5, sl                                  |     r0 = r5 & sl;
    0x000185fe orrs r2, r0                                       |     r2 |= r0;
                                                                 |     if (r2 != r0) {
    0x00018600 bne 0x185be                                       |         goto label_0;
                                                                 |     }
    0x00018602 ldr.w r4, [sb, 0x64]                              |     r4 = *((sb + 0x64));
    0x00018606 ldr.w r0, [sb, 0x70]                              |     r0 = *((sb + 0x70));
    0x0001860a add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x0001860e add.w r4, r0, r4, lsl 4                           |     r4 = r0 + (r4 << 4);
    0x00018612 cmp r0, r4                                        |     
                                                                 |     if (r0 >= r4) {
    0x00018614 bhs 0x186d8                                       |         goto label_11;
                                                                 |     }
    0x00018616 add.w ip, r7, r3                                  |     
    0x0001861a mov r7, r0                                        |     r7 = r0;
                                                                 |     do {
    0x0001861c ldrd r3, r2, [r7, 0x28]                           |         __asm ("ldrd r3, r2, [r7, 0x28]");
    0x00018620 ands r3, r6                                       |         r3 &= r6;
    0x00018622 ands r2, r5                                       |         r2 &= r5;
    0x00018624 orrs r3, r2                                       |         r3 |= r2;
                                                                 |         if (r3 != r2) {
    0x00018626 beq 0x1863a                                       |             
    0x00018628 ldr r2, [r7]                                      |             r2 = *(r7);
    0x0001862a ldr r3, [r2, 4]                                   |             r3 = *((r2 + 4));
    0x0001862c lsls r3, r3, 0x1f                                 |             r3 <<= 0x1f;
                                                                 |             if (r3 >= r3) {
    0x0001862e bpl 0x18698                                       |                 goto label_12;
                                                                 |             }
    0x00018630 ldr r2, [r2, 0x24]                                |             r2 = *((r2 + 0x24));
    0x00018632 ldr.w r3, [ip, 0x30]                              |             r3 = *((ip + 0x30));
    0x00018636 cmp r2, r3                                        |             
                                                                 |             if (r2 != r3) {
    0x00018638 bne 0x18698                                       |                 goto label_12;
                                                                 |             }
                                                                 |         }
    0x0001863a adds r7, 0x30                                     |         r7 += 0x30;
    0x0001863c cmp r4, r7                                        |         
    0x0001863e bhi 0x1861c                                       |         
                                                                 |     } while (r4 > r7);
                                                                 | label_2:
    0x00018640 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00018642 bic.w r3, r3, r6                                  |     r3 = BIT_MASK (r3, r6);
    0x00018646 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00018648 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001864a bic.w r3, r3, r5                                  |     r3 = BIT_MASK (r3, r5);
    0x0001864e str r3, [sp]                                      |     *(sp) = r3;
                                                                 |     do {
    0x00018650 ldrd r3, r2, [r0, 0x28]                           |         __asm ("ldrd r3, r2, [r0, 0x28]");
    0x00018654 adds r0, 0x30                                     |         r0 += 0x30;
    0x00018656 ands r3, r6                                       |         r3 &= r6;
    0x00018658 ands r2, r5                                       |         r2 &= r5;
    0x0001865a orrs r3, r2                                       |         r3 |= r2;
    0x0001865c ittt ne                                           |         
                                                                 |         if (r3 != r2) {
    0x0001865e ldrhne r3, [r0, -0x26]                            |             __asm ("ldrhne r3, [r0, -0x26]");
                                                                 |         }
                                                                 |         if (r3 == r2) {
    0x00018662 orrne r3, r3, 4                                   |             r3 |= 4;
                                                                 |         }
                                                                 |         if (r3 != r2) {
    0x00018666 strh r3, [r0, -0x26]                              |             *((r0 - 0x26)) = r3;
                                                                 |         }
    0x0001866a cmp r4, r0                                        |         
    0x0001866c bhi 0x18650                                       |         
                                                                 |     } while (r4 > r0);
                                                                 | label_5:
    0x0001866e ldrb.w r2, [sb, 0x30]                             |     r2 = *((sb + 0x30));
    0x00018672 subs r2, 1                                        |     r2--;
    0x00018674 cmp r2, r8                                        |     
    0x00018676 it eq                                             |     
                                                                 |     if (r2 != r8) {
    0x00018678 subeq r3, r1, 0x60                                |         r3 = r1 - 0x60;
                                                                 |     }
                                                                 |     if (r2 != r8) {
    0x0001867c bne 0x1869e                                       |         goto label_13;
                                                                 |     }
    0x0001867e strb.w r2, [sb, 0x30]                             |     *((sb + 0x30)) = r2;
                                                                 | label_3:
    0x00018682 subs.w r8, r8, 1                                  |     r8--;
    0x00018686 mov r1, r3                                        |     r1 = r3;
                                                                 |     if (r8 != r8) {
    0x00018688 bne 0x185ca                                       |         goto label_1;
                                                                 |     }
                                                                 | label_9:
    0x0001868a ldr.w fp, [sp, 4]                                 |     fp = var_4h;
    0x0001868e ldr r1, [sp]                                      |     r1 = *(sp);
    0x00018690 mov r0, fp                                        |     r0 = fp;
    0x00018692 add sp, 0xc                                       |     
    0x00018694 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_12:
    0x00018698 cmp r4, r7                                        |     
                                                                 |     if (r4 > r7) {
    0x0001869a bhi 0x185be                                       |         goto label_0;
                                                                 |     }
    0x0001869c b 0x18640                                         |     goto label_2;
                                                                 | label_13:
    0x0001869e sub.w r2, r2, r8                                  |     r2 -= r8;
    0x000186a2 sub.w r3, r1, 0x60                                |     r3 = r1 - 0x60;
    0x000186a6 add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x000186aa mov r0, r3                                        |     r0 = r3;
    0x000186ac lsls r2, r2, 5                                    |     r2 <<= 5;
    0x000186ae blx 0x9928                                        |     fcn_00009928 ();
    0x000186b2 ldrb.w r2, [sb, 0x30]                             |     r2 = *((sb + 0x30));
    0x000186b6 mov r3, r0                                        |     r3 = r0;
    0x000186b8 subs r2, 1                                        |     r2--;
    0x000186ba strb.w r2, [sb, 0x30]                             |     *((sb + 0x30)) = r2;
    0x000186bc movs r0, 0x30                                     |     r0 = 0x30;
    0x000186be b 0x18682                                         |     goto label_3;
                                                                 | label_6:
    0x000186c0 mov r7, r4                                        |     r7 = r4;
    0x000186c2 mov sl, r4                                        |     sl = r4;
    0x000186c4 b 0x1855c                                         |     goto label_4;
                                                                 | label_8:
    0x000186c6 mov.w fp, -1                                      |     
    0x000186ca str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x000186ce mov r0, fp                                        |     r0 = fp;
    0x000186d0 ldr r1, [sp]                                      |     r1 = *(sp);
    0x000186d2 add sp, 0xc                                       |     
    0x000186d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_11:
    0x000186d8 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000186da bic.w r3, r3, r6                                  |     r3 = BIT_MASK (r3, r6);
    0x000186de str r3, [sp, 4]                                   |     var_4h = r3;
    0x000186e0 ldr r3, [sp]                                      |     r3 = *(sp);
    0x000186e2 bic.w r3, r3, r5                                  |     r3 = BIT_MASK (r3, r5);
    0x000186e6 str r3, [sp]                                      |     *(sp) = r3;
    0x000186e8 b 0x1866e                                         |     goto label_5;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x18828 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00018828 ()                  | void fcn_00018828 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
                                             |     if (r1 == 0) {
    0x00018828 cbz r1, 0x18860               |         goto label_1;
                                             |     }
    0x0001882a add.w r2, r2, r2, lsl 2       |     r2 += (r2 << 2);
    0x0001882e push {r4, r5, r6, lr}         |     
    0x00018830 mov r6, r0                    |     r6 = r0;
    0x00018832 add.w r4, r1, r2, lsl 2       |     r4 = r1 + (r2 << 2);
    0x00018836 mov r5, r1                    |     r5 = r1;
    0x00018838 b 0x1883e                     |     
                                             |     while (r3 >= r1) {
    0x0001883a cmp r4, r5                    |         
                                             |         if (r4 == r5) {
    0x0001883c beq 0x18854                   |             goto label_2;
                                             |         }
                                             | label_0:
    0x0001883e ldrsb r1, [r4, -0x13]         |         r1 = *((r4 - 0x13));
    0x00018842 subs r4, 0x14                 |         r4 -= 0x14;
    0x00018844 adds r3, r1, 5                |         r3 = r1 + 5;
    0x00018846 bge 0x1883a                   |         
                                             |     }
    0x00018848 ldr r2, [r4, 0x10]            |     r2 = *((r4 + 0x10));
    0x0001884a mov r0, r6                    |     r0 = r6;
    0x0001884c bl 0x187b8                    |     fcn_000187b8 (r0);
    0x00018850 cmp r4, r5                    |     
                                             |     if (r4 != r5) {
    0x00018852 bne 0x1883e                   |         goto label_0;
                                             |     }
                                             | label_2:
    0x00018854 mov r1, r4                    |     r1 = r4;
    0x00018856 mov r0, r6                    |     r0 = r6;
    0x00018858 pop.w {r4, r5, r6, lr}        |     
    0x0001885c b.w 0x137d0                   |     void (*0x137d0)() ();
                                             | label_1:
    0x00018860 bx lr                         |     return;
                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x18864 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.00018864 ()                          | void fcn_00018864 (int16_t arg1) {
                                                     |     r0 = arg1;
    0x00018864 ldr r1, [r0, 0x74]                    |     r1 = *((r0 + 0x74));
    0x00018866 push {r3, r4, r5, r6, r7, lr}         |     
    0x00018868 mov r7, r0                            |     r7 = r0;
    0x0001886a ldr r5, [r0]                          |     r5 = *(r0);
                                                     |     if (r1 != 0) {
    0x0001886c cbz r1, 0x1887c                       |         
    0x0001886e ldrh.w r3, [r0, 0x90]                 |         r3 = *((r0 + 0x90));
    0x00018872 cmp r3, 0                             |         
                                                     |         if (r3 != 0) {
    0x00018874 bne 0x188fe                           |             goto label_5;
                                                     |         }
                                                     | label_1:
    0x00018876 mov r0, r5                            |         r0 = r5;
    0x00018878 bl 0x137d0                            |         fcn_000137d0 (r0, r1);
                                                     |     }
    0x0001887c ldr.w r6, [r7, 0xdc]                  |     r6 = *((r7 + 0xdc));
                                                     |     if (r6 == 0) {
                                                     | label_0:
    0x00018880 cbz r6, 0x188ba                       |         goto label_6;
                                                     |     }
                                                     |     do {
    0x00018882 ldrd r1, r2, [r6]                     |         __asm ("ldrd r1, r2, [r6]");
    0x00018886 mov r4, r6                            |         r4 = r6;
    0x00018888 mov r0, r5                            |         r0 = r5;
    0x0001888a ldr r6, [r6, 0x18]                    |         r6 = *((r6 + 0x18));
    0x0001888c bl 0x18828                            |         fcn_00018828 (r0, r1, r2);
    0x00018890 mov r0, r4                            |         r0 = r4;
                                                     |         if (r5 != 0) {
    0x00018892 cbz r5, 0x188b2                       |             
    0x00018894 ldr.w r3, [r5, 0x210]                 |             r3 = *((r5 + 0x210));
                                                     |             if (r3 != 0) {
    0x00018898 cbnz r3, 0x188e8                      |                 goto label_7;
                                                     |             }
    0x0001889a ldr.w r3, [r5, 0x164]                 |             r3 = *((r5 + 0x164));
    0x0001889e cmp r3, r4                            |             
                                                     |             if (r3 < r4) {
    0x000188a0 bls 0x188b2                           |                 goto label_8;
                                                     |             }
    0x000188a2 ldr.w r3, [r5, 0x15c]                 |             r3 = *((r5 + 0x15c));
    0x000188a6 cmp r3, r4                            |             
                                                     |             if (r3 < r4) {
    0x000188a8 bls 0x188f2                           |                 goto label_9;
                                                     |             }
    0x000188aa ldr.w r3, [r5, 0x160]                 |             r3 = *((r5 + 0x160));
    0x000188ae cmp r3, r4                            |             
                                                     |             if (r3 < r4) {
    0x000188b0 bls 0x1890c                           |                 goto label_10;
                                                     |             }
                                                     |         }
                                                     | label_8:
    0x000188b2 blx 0x9c24                            |         fcn_00009c24 ();
    0x000188b6 cmp r6, 0                             |         
    0x000188b8 bne 0x18882                           |         
                                                     |     } while (r6 != 0);
                                                     | label_6:
    0x000188ba ldrb.w r3, [r7, 0x95]                 |     r3 = *((r7 + 0x95));
    0x000188be cbnz r3, 0x18918                      |     
                                                     |     while (r1 == 0) {
                                                     | label_2:
    0x000188c0 ldrd r1, r2, [r7, 0x68]               |         __asm ("ldrd r1, r2, [r7, 0x68]");
    0x000188c4 mov r0, r5                            |         r0 = r5;
    0x000188c6 bl 0x18828                            |         fcn_00018828 (r0, r1, r2);
    0x000188ca ldr.w r1, [r7, 0xc4]                  |         r1 = *((r7 + 0xc4));
                                                     |         if (r1 != 0) {
    0x000188ce cbz r1, 0x188d6                       |             
    0x000188d0 mov r0, r5                            |             r0 = r5;
    0x000188d2 bl 0x137d0                            |             fcn_000137d0 (r0, r1);
                                                     |         }
    0x000188d6 ldr.w r3, [r5, 0x210]                 |         r3 = *((r5 + 0x210));
                                                     |         if (r3 == 0) {
    0x000188da cbz r3, 0x18946                       |             goto label_11;
                                                     |         }
                                                     | label_3:
    0x000188dc mov r1, r7                            |         r1 = r7;
    0x000188de mov r0, r5                            |         r0 = r5;
    0x000188e0 pop.w {r3, r4, r5, r6, r7, lr}        |         
    0x000188e4 b.w 0x137d0                           |         void (*0x137d0)() ();
                                                     | label_7:
    0x000188e8 mov r1, r4                            |         r1 = r4;
    0x000188ea mov r0, r5                            |         r0 = r5;
    0x000188ec bl 0x1378c                            |         fcn_0001378c (r0, r1, r2, r3, r4, r5, r6);
    0x000188f0 b 0x18880                             |         goto label_0;
                                                     | label_9:
    0x000188f2 ldr.w r3, [r5, 0x158]                 |         r3 = *((r5 + 0x158));
    0x000188f6 str r3, [r4]                          |         *(r4) = r3;
    0x000188f8 str.w r4, [r5, 0x158]                 |         __asm ("str.w r4, aav.0x000000ff");
    0x000188fc b 0x18880                             |         goto label_0;
                                                     | label_5:
    0x000188fe mov r0, r1                            |         r0 = r1;
    0x00018900 add.w r1, r3, r3, lsl 2               |         r1 = r3 + (r3 << 2);
    0x00018904 bl 0x14448                            |         fcn_00014448 (r0, r1);
    0x00018908 ldr r1, [r7, 0x74]                    |         r1 = *((r7 + 0x74));
    0x0001890a b 0x18876                             |         goto label_1;
                                                     | label_10:
    0x0001890c ldr.w r3, [r5, 0x150]                 |         r3 = *((r5 + 0x150));
    0x00018910 str r3, [r4]                          |         *(r4) = r3;
    0x00018912 str.w r4, [r5, 0x150]                 |         __asm ("str.w r4, aav.0x000000ff");
    0x00018916 b 0x18880                             |         goto label_0;
    0x00018918 ldr r0, [r7, 0x64]                    |         r0 = *((r7 + 0x64));
    0x0001891a ldrsh.w r1, [r7, 0x10]                |         r1 = *((r7 + 0x10));
    0x0001891e cmp r0, 0                             |         
    0x00018920 it ne                                 |         
                                                     |         if (r0 != 0) {
    0x00018922 cmpne r1, 0                           |             __asm ("cmpne r1, 0");
                                                     |         }
                                                     |         if (r0 != 0) {
    0x00018924 beq 0x1892a                           |             
    0x00018926 bl 0x14448                            |             fcn_00014448 (r0, r1);
                                                     |         }
    0x0001892a ldr.w r1, [r7, 0x80]                  |         r1 = *((r7 + 0x80));
                                                     |         if (r1 != 0) {
    0x0001892e cbz r1, 0x18936                       |             
    0x00018930 mov r0, r5                            |             r0 = r5;
    0x00018932 bl 0x137d0                            |             fcn_000137d0 (r0, r1);
                                                     |         }
    0x00018936 ldr.w r1, [r7, 0xc8]                  |         r1 = *((r7 + 0xc8));
    0x0001893a cmp r1, 0                             |         
    0x0001893c beq 0x188c0                           |         
                                                     |     }
    0x0001893e mov r0, r5                            |     r0 = r5;
    0x00018940 bl 0x137d0                            |     fcn_000137d0 (r0, r1);
    0x00018944 b 0x188c0                             |     goto label_2;
                                                     | label_11:
    0x00018946 ldrd r2, r3, [r7, 4]                  |     __asm ("ldrd r2, r3, [r7, 4]");
                                                     |     if (r2 == 0) {
    0x0001894a cbz r2, 0x18960                       |         goto label_12;
                                                     |     }
    0x0001894c str r3, [r2, 8]                       |     *((r2 + 8)) = r3;
                                                     | label_4:
    0x0001894e cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x00018950 beq 0x188dc                           |         goto label_3;
                                                     |     }
    0x00018952 mov r1, r7                            |     r1 = r7;
    0x00018954 mov r0, r5                            |     r0 = r5;
    0x00018956 str r2, [r3, 4]                       |     *((r3 + 4)) = r2;
    0x00018958 pop.w {r3, r4, r5, r6, r7, lr}        |     
    0x0001895c b.w 0x137d0                           |     void (*0x137d0)() ();
                                                     | label_12:
    0x00018960 str r3, [r5, 4]                       |     *((r5 + 4)) = r3;
    0x00018962 b 0x1894e                             |     goto label_4;
                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1906c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0001906c ()                                  | void fcn_0001906c (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                             |     int16_t var_4h;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_ch;
                                                             |     int16_t var_14h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
    0x0001906c push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x00019070 mov r5, r2                                    |     r5 = r2;
    0x00019072 ldr r2, [pc, 0x150]                           |     
    0x00019074 sub sp, 0x18                                  |     
    0x00019076 mov r4, r0                                    |     r4 = r0;
    0x00019078 mov r6, r1                                    |     r6 = r1;
    0x0001907a ldr r3, [pc, 0x14c]                           |     r3 = *(0x191ca);
    0x0001907c add r2, pc                                    |     r2 = 0x32246;
    0x0001907e ldr.w sb, [r1]                                |     sb = *(r1);
    0x00019082 ldr.w r7, [r0, 0xa8]                          |     r7 = *((r0 + 0xa8));
    0x00019086 ldr r3, [r2, r3]                              |     
    0x00019088 ldr r3, [r3]                                  |     r3 = *(0x32246);
    0x0001908a str r3, [sp, 0x14]                            |     var_14h = r3;
    0x0001908c mov.w r3, 0                                   |     r3 = 0;
    0x00019090 ldrb r3, [r0, 0xf]                            |     r3 = *((r0 + 0xf));
                                                             |     if (r3 == 0) {
    0x00019092 cbz r3, 0x190e2                               |         goto label_5;
                                                             |     }
    0x00019094 ldr r3, [r0, 0x1c]                            |     r3 = *((r0 + 0x1c));
    0x00019096 cbz r3, 0x190e2                               |     
                                                             |     while (r2 != 0) {
                                                             | label_0:
    0x00019098 str r7, [r6]                                  |         *(r6) = r7;
                                                             | label_1:
    0x0001909a cmp r5, 0                                     |         
    0x0001909c ldr.w r3, [r4, 0xe4]                          |         r3 = *((r4 + 0xe4));
    0x000190a0 ite lt                                        |         
                                                             |         if (r5 < 0) {
    0x000190a2 ldrshlt r2, [r4, 0x96]                        |             __asm ("ldrshlt r2, [r4, 0x96]");
                                                             |         }
                                                             |         if (r5 >= 0) {
    0x000190a6 sxth r2, r5                                   |             __asm ("sxth r2, r5");
                                                             |         }
    0x000190a8 strh.w r2, [r4, 0x96]                         |         *((r4 + 0x96)) = r2;
                                                             |         if (r3 != 0) {
    0x000190ac cbz r3, 0x190b6                               |             
    0x000190ae ldr.w r0, [r4, 0xec]                          |             r0 = *((r4 + 0xec));
    0x000190b2 mov r1, r7                                    |             r1 = r7;
    0x000190b4 blx r3                                        |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
                                                             |         }
    0x000190b6 ldr r3, [r4, 0x40]                            |         r3 = *((r4 + 0x40));
    0x000190b8 ldr r3, [r3]                                  |         r3 = *(r3);
                                                             |         if (r3 != 0) {
    0x000190ba cbz r3, 0x190c2                               |             
    0x000190bc ldr r3, [r3]                                  |             r3 = *(r3);
    0x000190be cmp r3, 2                                     |             
                                                             |             if (r3 > 2) {
    0x000190c0 bgt 0x19168                                   |                 goto label_6;
                                                             |             }
                                                             |         }
                                                             | label_3:
    0x000190c2 mov.w sl, 0                                   |         sl = 0;
                                                             | label_2:
    0x000190c6 ldr r2, [pc, 0x104]                           |         
    0x000190c8 ldr r3, [pc, 0xfc]                            |         r3 = *(0x191c8);
    0x000190ca add r2, pc                                    |         r2 = 0x3229c;
    0x000190cc ldr r3, [r2, r3]                              |         r3 = *(0x3229c);
    0x000190ce ldr r2, [r3]                                  |         r2 = *(0x3229c);
    0x000190d0 ldr r3, [sp, 0x14]                            |         r3 = var_14h;
    0x000190d2 eors r2, r3                                   |         r2 ^= r3;
    0x000190d4 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x000190d8 bne 0x191be                                   |             goto label_7;
                                                             |         }
    0x000190da mov r0, sl                                    |         r0 = sl;
    0x000190dc add sp, 0x18                                  |         
    0x000190de pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_5:
    0x000190e2 ldr.w r3, [r4, 0xf4]                          |         r3 = *((r4 + 0xf4));
    0x000190e6 ldr r2, [r3, 0xc]                             |         r2 = *((r3 + 0xc));
    0x000190e8 cmp r2, 0                                     |         
    0x000190ea bne 0x19098                                   |         
                                                             |     }
    0x000190ec cmp.w sb, 0                                   |     
                                                             |     if (sb == 0) {
    0x000190f0 beq 0x19098                                   |         goto label_0;
                                                             |     }
    0x000190f2 cmp sb, r7                                    |     
                                                             |     if (sb == r7) {
    0x000190f4 beq 0x1909a                                   |         goto label_1;
                                                             |     }
    0x000190f6 ldrb r3, [r4, 0x11]                           |     r3 = *((r4 + 0x11));
    0x000190f8 vmov.i32 d16, 0                               |     __asm ("vmov.i32 d16, 0");
    0x000190fc vstr d16, [sp, 8]                             |     __asm ("vstr d16, [sp, 8]");
                                                             |     if (r3 != 0) {
    0x00019100 cbz r3, 0x19114                               |         
    0x00019102 ldr r0, [r4, 0x40]                            |         r0 = *((r4 + 0x40));
    0x00019104 str r2, [sp, 4]                               |         var_4h = r2;
    0x00019106 ldr r3, [r0]                                  |         r3 = *(r0);
                                                             |         if (r3 == 0) {
    0x00019108 cbz r3, 0x19114                               |             goto label_8;
                                                             |         }
    0x0001910a ldr r3, [r3, 0x18]                            |         r3 = *((r3 + 0x18));
    0x0001910c add r1, sp, 8                                 |         r1 += var_8h;
    0x0001910e blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x00019110 mov sl, r0                                    |         sl = r0;
                                                             |         if (r0 != 0) {
    0x00019112 cbnz r0, 0x19170                              |             goto label_9;
                                                             |         }
                                                             |     }
                                                             | label_8:
    0x00019114 add.w r0, sb, 8                               |     r0 = sb + 8;
    0x00019118 bl 0x11cd0                                    |     r0 = fcn_00011cd0 (r0);
    0x0001911c mov r8, r0                                    |     r8 = r0;
    0x0001911e cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00019120 beq 0x191b8                                   |         goto label_10;
                                                             |     }
    0x00019122 movs r3, 0                                    |     r3 = 0;
    0x00019124 add.w r2, r0, sb                              |     r2 = r0 + sb;
    0x00019128 str.w r3, [r0, sb]                            |     __asm ("str.w r3, [r0, sb]");
    0x0001912c str r3, [r2, 4]                               |     *((r2 + 4)) = r3;
    0x0001912e ldr r3, [r4, 0x6c]                            |     r3 = *((r4 + 0x6c));
    0x00019130 adds r3, 1                                    |     r3++;
    0x00019132 str r3, [r4, 0x6c]                            |     *((r4 + 0x6c)) = r3;
    0x00019134 ldr r3, [r4, 0x60]                            |     r3 = *((r4 + 0x60));
                                                             |     if (r3 == 0) {
    0x00019136 cbz r3, 0x19142                               |         goto label_11;
                                                             |     }
    0x00019138 movs r2, 1                                    |     r2 = 1;
                                                             |     do {
    0x0001913a str r2, [r3, 0x10]                            |         *((r3 + 0x10)) = r2;
    0x0001913c ldr r3, [r3, 0x2c]                            |         r3 = *((r3 + 0x2c));
    0x0001913e cmp r3, 0                                     |         
    0x00019140 bne 0x1913a                                   |         
                                                             |     } while (r3 != 0);
                                                             | label_11:
    0x00019142 ldr.w r0, [r4, 0xf4]                          |     r0 = *((r4 + 0xf4));
    0x00019146 movs r1, 0                                    |     r1 = 0;
    0x00019148 bl 0x136cc                                    |     fcn_000136cc (r0);
    0x0001914c ldr.w r0, [r4, 0xf4]                          |     r0 = *((r4 + 0xf4));
    0x00019150 mov r1, sb                                    |     r1 = sb;
    0x00019152 bl 0xb3f0                                     |     r0 = fcn_0000b3f0 (r0, r1);
    0x00019156 mov sl, r0                                    |     sl = r0;
                                                             |     if (r0 == 0) {
    0x00019158 cbz r0, 0x19176                               |         goto label_12;
                                                             |     }
                                                             |     do {
                                                             | label_4:
    0x0001915a mov r0, r8                                    |         r0 = r8;
    0x0001915c bl 0xec68                                     |         fcn_0000ec68 (r0);
    0x00019160 ldr.w r3, [r4, 0xa8]                          |         r3 = *((r4 + 0xa8));
    0x00019164 str r3, [r6]                                  |         *(r6) = r3;
    0x00019166 b 0x190c6                                     |         goto label_2;
                                                             | label_6:
    0x00019168 mov r0, r4                                    |         r0 = r4;
    0x0001916a bl 0x127e4                                    |         fcn_000127e4 (r0);
    0x0001916e b 0x190c2                                     |         goto label_3;
                                                             | label_9:
    0x00019170 ldr r2, [sp, 4]                               |         r2 = var_4h;
    0x00019172 mov r8, r2                                    |         r8 = r2;
    0x00019174 b 0x1915a                                     |         
                                                             |     } while (1);
                                                             | label_12:
    0x00019176 ldr.w r0, [r4, 0xf0]                          |     r0 = *((r4 + 0xf0));
    0x0001917a mov r7, sb                                    |     r7 = sb;
    0x0001917c bl 0xec68                                     |     fcn_0000ec68 (r0);
    0x00019180 ldr r0, [sp, 8]                               |     r0 = var_8h;
    0x00019182 mov r2, sb                                    |     r2 = sb;
    0x00019184 ldr r1, [sp, 0xc]                             |     r1 = var_ch;
    0x00019186 mov r3, sl                                    |     r3 = sl;
    0x00019188 str.w r8, [r4, 0xf0]                          |     __asm ("str.w r8, [r4, 0xf0]");
    0x0001918c adds r0, r7, r0                               |     r0 = r7 + r0;
    0x0001918e adc r1, r1, 0                                 |     __asm ("adc r1, r1, 0");
    0x00019192 subs r0, 1                                    |     r0--;
    0x00019194 sbc r1, r1, 0                                 |     __asm ("sbc r1, r1, 0");
    0x00019198 bl 0x8ca4c                                    |     fcn_0008ca4c (r0, r1, r2, r3);
    0x0001919c ldr r3, [pc, 0x30]                            |     
    0x0001919e mov r1, sb                                    |     r1 = sb;
    0x000191a0 str r0, [r4, 0x1c]                            |     *((r4 + 0x1c)) = r0;
    0x000191a2 strd sb, sl, [r4, 0xa8]                       |     __asm ("strd sb, sl, [r4, 0xa8]");
    0x000191a6 add r3, pc                                    |     r3 = 0x3237a;
    0x000191a8 ldr.w r0, [r3, 0x118]                         |     r0 = *(0x32492);
    0x000191ac bl 0x8bf90                                    |     fcn_0008bf90 (r0, r1, r2);
    0x000191b0 adds r0, 1                                    |     r0++;
    0x000191b2 str.w r0, [r4, 0xa4]                          |     __asm ("str.w r0, [r4, 0xa4]");
    0x000191b6 b 0x19098                                     |     goto label_0;
                                                             | label_10:
    0x000191b8 mov.w sl, 7                                   |     sl = 7;
    0x000191bc b 0x1915a                                     |     goto label_4;
                                                             | label_7:
    0x000191be blx 0x9b44                                    |     fcn_00009b44 ();
    0x000191c2 nop                                           |     
    0x000191c4 ldrb r4, [r0, 0xa]                            |     r4 = *((r0 + 0xa));
    0x000191c6 movs r0, r1                                   |     r0 = r1;
    0x000191c8 lsls r0, r1, 0x13                             |     r0 = r1 << 0x13;
    0x000191ca movs r0, r0                                   |     
    0x000191cc ldrb r6, [r6, 8]                              |     r6 = *((r6 + 8));
    0x000191ce movs r0, r1                                   |     r0 = r1;
    0x000191d0 ldrb r6, [r3, 0x19]                           |     r6 = *((r3 + 0x19));
    0x000191d2 movs r0, r1                                   |     r0 = r1;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x198c4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.000198c4 ()                                      | uint32_t fcn_000198c4 (int16_t arg1) {
                                                                 |     int16_t var_1h;
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
    0x000198c4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000198c8 sub sp, 0x14                                      |     
    0x000198ca ldrd r6, sl, [r0, 0x14]                           |     __asm ("ldrd r6, sl, [r0, 0x14]");
    0x000198ce ldr r2, [pc, 0x188]                               |     
    0x000198d0 ldr r3, [pc, 0x188]                               |     r3 = *(0x19a5c);
    0x000198d2 ldr.w fp, [r6, 0x68]                              |     fp = *((r6 + 0x68));
    0x000198d6 add r2, pc                                        |     r2 = 0x33334;
    0x000198d8 ldr r3, [r2, r3]                                  |     
    0x000198da cmp.w fp, 0                                       |     
    0x000198de ldr r3, [r3]                                      |     r3 = *(0x33334);
    0x000198e0 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000198e2 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (fp <= 0) {
    0x000198e6 ble 0x199c8                                       |         goto label_6;
                                                                 |     }
    0x000198e8 ldr.w r8, [r6, 0x64]                              |     r8 = *((r6 + 0x64));
    0x000198ec mov r7, r0                                        |     r7 = r0;
    0x000198ee movs r4, 0                                        |     r4 = 0;
    0x000198f0 mov r5, r8                                        |     r5 = r8;
    0x000198f2 b 0x198fc                                         |     
                                                                 |     while (sl > r3) {
                                                                 | label_0:
    0x000198f4 adds r4, 1                                        |         r4++;
    0x000198f6 adds r5, 0x30                                     |         r5 += 0x30;
    0x000198f8 cmp r4, fp                                        |         
                                                                 |         if (r4 == fp) {
    0x000198fa beq 0x199c8                                       |             goto label_6;
                                                                 |         }
    0x000198fc ldr r3, [r5, 0x14]                                |         r3 = *((r5 + 0x14));
    0x000198fe cmp sl, r3                                        |         
    0x00019900 bhi 0x198f4                                       |         
                                                                 |     }
    0x00019902 ldr r0, [r5, 0x10]                                |     r0 = *((r5 + 0x10));
    0x00019904 mov r1, sl                                        |     r1 = sl;
    0x00019906 bl 0xb2f4                                         |     r0 = fcn_0000b2f4 (r0, r1, r2);
    0x0001990a mov sb, r0                                        |     sb = r0;
    0x0001990c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001990e bne 0x198f4                                       |         goto label_0;
                                                                 |     }
    0x00019910 adds r3, r4, 1                                    |     r3 = r4 + 1;
    0x00019912 cmp r3, fp                                        |     
                                                                 |     if (r3 >= fp) {
    0x00019914 bge 0x19934                                       |         goto label_7;
                                                                 |     }
    0x00019916 add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x0001991a add.w fp, fp, fp, lsl 1                           |     
    0x0001991e sub.w r2, r8, 0x30                                |     r2 = r8 - 0x30;
    0x00019922 add.w r3, r8, r4, lsl 4                           |     r3 = r8 + (r4 << 4);
    0x00019926 add.w r2, r2, fp, lsl 4                           |     r2 += (fp << 4);
    0x0001992a mov r1, r0                                        |     r1 = r0;
                                                                 |     do {
    0x0001992c str r1, [r3, 0x4c]                                |         *((r3 + 0x4c)) = r1;
    0x0001992e adds r3, 0x30                                     |         r3 += 0x30;
    0x00019930 cmp r2, r3                                        |         
    0x00019932 bne 0x1992c                                       |         
                                                                 |     } while (r2 != r3);
                                                                 | label_7:
    0x00019934 ldrb r2, [r6, 5]                                  |     r2 = *((r6 + 5));
    0x00019936 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00019938 beq 0x19a16                                       |         goto label_8;
                                                                 |     }
    0x0001993a ldr r2, [r6, 0x48]                                |     r2 = *((r6 + 0x48));
    0x0001993c ldr r1, [r2]                                      |     r1 = *(r2);
    0x0001993e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00019940 beq 0x199e8                                       |         goto label_9;
                                                                 |     }
                                                                 | label_3:
    0x00019942 ldr r1, [r6, 0x38]                                |     r1 = *((r6 + 0x38));
    0x00019944 ldr.w r3, [r6, 0xa8]                              |     r3 = *((r6 + 0xa8));
    0x00019948 ldr.w r2, [r6, 0xac]                              |     r2 = *((r6 + 0xac));
    0x0001994c ldr r5, [r7, 4]                                   |     r5 = *((r7 + 4));
    0x0001994e adds r3, 4                                        |     r3 += 4;
    0x00019950 umull r8, r4, r3, r1                              |     r8:r4 = r3 * r1;
    0x00019954 ldrb r3, [r6, 0x16]                               |     r3 = *((r6 + 0x16));
    0x00019956 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x0001995a mla r4, r1, r2, r4                                |     __asm ("mla r4, r1, r2, r4");
                                                                 |     if (r3 == 0) {
    0x0001995e cbnz r3, 0x19980                                  |         
    0x00019960 ldr.w fp, [r6, 0xe0]                              |         fp = *((r6 + 0xe0));
    0x00019964 cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x00019968 beq 0x19980                                       |             goto label_10;
                                                                 |         }
    0x0001996a mov r1, r5                                        |         r1 = r5;
    0x0001996c ldr.w r0, [r6, 0xec]                              |         r0 = *((r6 + 0xec));
    0x00019970 mov r2, sl                                        |         r2 = sl;
    0x00019972 movs r3, 7                                        |         r3 = 7;
    0x00019974 blx fp                                            |         r0 = fp (r0, r1, r2, r3);
    0x00019976 mov r5, r0                                        |         r5 = r0;
    0x00019978 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0001997a beq 0x19a4c                                       |             goto label_11;
                                                                 |         }
    0x0001997c ldr.w sl, [r7, 0x18]                              |         sl = *((r7 + 0x18));
                                                                 |     }
                                                                 | label_10:
    0x00019980 ldr r0, [r6, 0x48]                                |     r0 = *((r6 + 0x48));
    0x00019982 rev.w r3, sl                                      |     sl = SWAP32 (r3);
    0x00019986 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00019988 movs r2, 4                                        |     r2 = 4;
    0x0001998a add r1, sp, 8                                     |     r1 += var_8h;
    0x0001998c ldr r3, [r0]                                      |     r3 = *(r0);
    0x0001998e strd r8, r4, [sp]                                 |     __asm ("strd r8, r4, [sp]");
    0x00019992 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00019994 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00019996 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00019998 bne 0x19a12                                       |         goto label_12;
                                                                 |     }
    0x0001999a ldr r0, [r6, 0x48]                                |     r0 = *((r6 + 0x48));
    0x0001999c mov r1, r5                                        |     r1 = r5;
    0x0001999e adds.w r3, r8, 4                                  |     r3 = r8 + 4;
    0x000199a2 ldr.w r2, [r6, 0xa8]                              |     r2 = *((r6 + 0xa8));
    0x000199a6 adc r4, r4, 0                                     |     __asm ("adc r4, r4, 0");
    0x000199aa ldr r5, [r0]                                      |     r5 = *(r0);
    0x000199ac strd r3, r4, [sp]                                 |     __asm ("strd r3, r4, [sp]");
    0x000199b0 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000199b2 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     if (r0 != 0) {
    0x000199b4 cbnz r0, 0x19a12                                  |         goto label_12;
                                                                 |     }
    0x000199b6 ldr r2, [r6, 0x68]                                |     r2 = *((r6 + 0x68));
    0x000199b8 ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x000199ba ldr.w sl, [r7, 0x18]                              |     sl = *((r7 + 0x18));
    0x000199be cmp r2, 0                                         |     
    0x000199c0 add.w r3, r3, 1                                   |     r3++;
    0x000199c4 str r3, [r6, 0x38]                                |     *((r6 + 0x38)) = r3;
                                                                 |     if (r2 > 0) {
    0x000199c6 bgt 0x19a1c                                       |         goto label_13;
                                                                 |     }
                                                                 | label_6:
    0x000199c8 mov.w sb, 0                                       |     sb = 0;
                                                                 |     do {
                                                                 | label_1:
    0x000199cc ldr r2, [pc, 0x90]                                |         
    0x000199ce ldr r3, [pc, 0x8c]                                |         r3 = *(0x19a5e);
    0x000199d0 add r2, pc                                        |         r2 = 0x33434;
    0x000199d2 ldr r3, [r2, r3]                                  |         r3 = *(0x33434);
    0x000199d4 ldr r2, [r3]                                      |         r2 = *(0x33434);
    0x000199d6 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x000199d8 eors r2, r3                                       |         r2 ^= r3;
    0x000199da mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000199de bne 0x19a52                                       |             goto label_14;
                                                                 |         }
    0x000199e0 mov r0, sb                                        |         r0 = sb;
    0x000199e2 add sp, 0x14                                      |         
    0x000199e4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_9:
    0x000199e8 ldr r1, [pc, 0x78]                                |         
    0x000199ea cmp r3, 4                                         |         
    0x000199ec add r1, pc                                        |         
    0x000199ee ldr r1, [r1, 0x1c]                                |         r1 = *(0x33470);
    0x000199f0 it eq                                             |         
                                                                 |         if (r3 != 4) {
    0x000199f2 moveq r1, -1                                      |             r1 = -1;
                                                                 |         }
                                                                 |         if (r3 != 4) {
    0x000199f6 beq 0x19a02                                       |             
    0x000199f8 ldrb r3, [r6, 0x16]                               |             r3 = *((r6 + 0x16));
    0x000199fa cmp r3, 0                                         |             
    0x000199fc it ne                                             |             
                                                                 |             if (r3 != 0) {
    0x000199fe movne r1, -1                                      |                 r1 = -1;
                                                                 |                 goto label_15;
                                                                 |             }
                                                                 |         }
                                                                 | label_15:
    0x00019a02 ldr r0, [r6]                                      |         r0 = *(r6);
    0x00019a04 movw r3, 0x201e                                   |         r3 = 0x201e;
    0x00019a08 str r1, [sp]                                      |         *(sp) = r1;
    0x00019a0a movs r1, 0                                        |         r1 = 0;
    0x00019a0c bl 0xf548                                         |         r0 = fcn_0000f548 (r0, r1, r2, r3, r4);
                                                                 |         if (r0 == 0) {
    0x00019a10 cbz r0, 0x19a46                                   |             goto label_16;
                                                                 |         }
                                                                 | label_12:
    0x00019a12 mov sb, r0                                        |         sb = r0;
    0x00019a14 b 0x199cc                                         |         
                                                                 |     } while (1);
                                                                 | label_8:
    0x00019a16 ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x00019a18 adds r3, 1                                        |     r3++;
    0x00019a1a str r3, [r6, 0x38]                                |     *((r6 + 0x38)) = r3;
                                                                 | label_13:
    0x00019a1c movs r4, 0                                        |     r4 = 0;
    0x00019a1e b 0x19a28                                         |     goto label_17;
                                                                 | label_2:
    0x00019a20 ldr r3, [r6, 0x68]                                |     r3 = *((r6 + 0x68));
    0x00019a22 adds r4, 1                                        |     r4++;
    0x00019a24 cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x00019a26 bge 0x199cc                                       |         goto label_1;
                                                                 |     }
                                                                 | label_17:
    0x00019a28 ldr r3, [r6, 0x64]                                |     r3 = *((r6 + 0x64));
    0x00019a2a add.w r2, r4, r4, lsl 1                           |     r2 = r4 + (r4 << 1);
    0x00019a2e add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x00019a32 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x00019a34 cmp sl, r2                                        |     
                                                                 |     if (sl > r2) {
    0x00019a36 bhi 0x19a20                                       |         goto label_2;
                                                                 |     }
    0x00019a38 ldr r0, [r3, 0x10]                                |     r0 = *((r3 + 0x10));
    0x00019a3a mov r1, sl                                        |     r1 = sl;
    0x00019a3c bl 0x154c4                                        |     r0 = fcn_000154c4 (r0, r1, r2);
    0x00019a40 orr.w sb, sb, r0                                  |     sb |= r0;
    0x00019a44 b 0x19a20                                         |     goto label_2;
                                                                 | label_16:
    0x00019a46 ldr.w sl, [r7, 0x18]                              |     sl = *((r7 + 0x18));
    0x00019a4a b 0x19942                                         |     goto label_3;
                                                                 | label_11:
    0x00019a4c mov.w sb, 7                                       |     sb = 7;
    0x00019a50 b 0x199cc                                         |     goto label_1;
                                                                 | label_14:
    0x00019a52 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00019a56 nop                                               |     
    0x00019a58 strb r2, [r5, 8]                                  |     *((r5 + 8)) = r2;
    0x00019a5a movs r0, r1                                       |     r0 = r1;
    0x00019a5c lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00019a5e movs r0, r0                                       |     
    0x00019a60 strb r0, [r6, 4]                                  |     *((r6 + 4)) = r0;
    0x00019a62 movs r0, r1                                       |     r0 = r1;
    0x00019a64 strb r0, [r3, 0x18]                               |     *((r3 + 0x18)) = r0;
    0x00019a66 movs r0, r1                                       |     r0 = r1;
    0x00019a68 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00019a6a cmp r3, 0x75                                      |     
    0x00019a6c beq 0x19a72                                       |     
                                                                 |     while (r3 >= r3) {
                                                                 | label_4:
    0x00019a6e movs r0, 0                                        |         r0 = 0;
    0x00019a70 bx lr                                             |         return r0;
    0x00019a72 ldr r3, [r1, 4]                                   |         r3 = *((r1 + 4));
    0x00019a74 lsls r3, r3, 0x18                                 |         r3 <<= 0x18;
    0x00019a76 bpl 0x19a6e                                       |         
                                                                 |     }
    0x00019a78 ldr r2, [r0]                                      |     r2 = *(r0);
    0x00019a7a ldr.w r3, [r2, 0x10c]                             |     r3 = *((r2 + 0x10c));
    0x00019a7e add.w ip, r2, 0x10c                               |     
                                                                 |     if (r3 != 0) {
    0x00019a82 cbnz r3, 0x19a90                                  |         goto label_18;
                                                                 |     }
    0x00019a84 b 0x19a6e                                         |     goto label_4;
                                                                 | label_5:
    0x00019a86 add.w ip, r3, 0xc                                 |     
    0x00019a8a ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00019a8c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00019a8e beq 0x19a6e                                       |         goto label_4;
                                                                 |     }
                                                                 | label_18:
    0x00019a90 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00019a92 cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00019a94 bne 0x19a86                                       |         goto label_5;
                                                                 |     }
    0x00019a96 ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
    0x00019a98 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00019a9a beq 0x19a6e                                       |         goto label_4;
                                                                 |     }
    0x00019a9c ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00019a9e ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00019aa0 str.w r0, [ip]                                    |     __asm ("str.w r0, [ip]");
    0x00019aa4 ldr r0, [r2]                                      |     r0 = *(r2);
    0x00019aa6 adds r1, 1                                        |     r1++;
    0x00019aa8 str r0, [r3, 0xc]                                 |     *((r3 + 0xc)) = r0;
    0x00019aaa strd r3, r1, [r2]                                 |     __asm ("strd r3, r1, [r2]");
    0x00019aae b 0x19a6e                                         |     goto label_4;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1a82c */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                     |                                ((n & 0x0000ff00) <<  8) | \
                                                                     |                                ((n & 0x00ff0000) >>  8) | \
                                                                     |                                ((n & 0xff000000) >> 24)))
                                                                     |  
    ; (fcn) fcn.0001a82c ()                                          | void fcn_0001a82c (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_0h_2;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_ch;
                                                                     |     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;
    0x0001a82c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001a830 mov r5, r0                                            |     r5 = r0;
    0x0001a832 ldr r4, [pc, 0x1d0]                                   |     
    0x0001a834 mov fp, r1                                            |     
    0x0001a836 sub sp, 0x2c                                          |     
    0x0001a838 mov r8, r2                                            |     r8 = r2;
    0x0001a83a ldr r0, [pc, 0x1cc]                                   |     r0 = *(0x1aa0a);
    0x0001a83c mov r7, r3                                            |     r7 = r3;
    0x0001a83e add r4, pc                                            |     r4 = 0x35248;
    0x0001a840 ldr.w sb, [sp, 0x50]                                  |     sb = *(arg_50h);
    0x0001a844 ldr.w sl, [sp, 0x54]                                  |     sl = *(arg_54h);
    0x0001a848 movs r3, 0                                            |     r3 = 0;
    0x0001a84a ldr r0, [r4, r0]                                      |     
    0x0001a84c ldrd r4, r6, [r5, 0x50]                               |     __asm ("ldrd r4, r6, [r5, 0x50]");
    0x0001a850 ldr.w r2, [r5, 0x9c]                                  |     r2 = *((r5 + 0x9c));
    0x0001a854 ldr r0, [r0]                                          |     r0 = *(0x35248);
    0x0001a856 str r0, [sp, 0x24]                                    |     var_24h = r0;
    0x0001a858 mov.w r0, 0                                           |     r0 = 0;
    0x0001a85c orrs.w r1, r4, r6                                     |     r1 = r4 | r6;
                                                                     |     if (r1 != r4) {
    0x0001a860 beq 0x1a884                                           |         
    0x0001a862 subs r0, r4, 1                                        |         r0 = r4 - 1;
    0x0001a864 str r2, [sp, 0xc]                                     |         var_ch = r2;
    0x0001a866 sbc r1, r6, 0                                         |         __asm ("sbc r1, r6, 0");
    0x0001a86a bl 0x8ca4c                                            |         fcn_0008ca4c (r0, r1, r2, r3);
    0x0001a86e ldr r2, [sp, 0xc]                                     |         r2 = var_ch;
    0x0001a870 adds r0, 1                                            |         r0++;
    0x0001a872 adc r1, r1, 0                                         |         __asm ("adc r1, r1, 0");
    0x0001a876 umull r4, r6, r0, r2                                  |         r4:r6 = r0 * r2;
    0x0001a87a mla r6, r2, r1, r6                                    |         __asm ("mla r6, r2, r1, r6");
    0x0001a87e adds r2, r2, r4                                       |         r2 += r4;
    0x0001a880 adc r3, r6, 0                                         |         __asm ("adc r3, r6, 0");
                                                                     |     }
    0x0001a884 cmp r8, r2                                            |     
    0x0001a886 strd r4, r6, [r5, 0x50]                               |     __asm ("strd r4, r6, [r5, 0x50]");
    0x0001a88a sbcs.w r3, r7, r3                                     |     __asm ("sbcs.w r3, r7, r3");
                                                                     |     if (r8 < r2) {
    0x0001a88e blt 0x1a8b8                                           |         goto label_1;
                                                                     |     }
    0x0001a890 cmp.w fp, 0                                           |     
    0x0001a894 beq 0x1a8d6                                           |     
                                                                     |     while (r3 != r6) {
    0x0001a896 ldr r0, [r5, 0x44]                                    |         r0 = *((r5 + 0x44));
    0x0001a898 add r7, sp, 0x1c                                      |         r7 += var_1ch;
    0x0001a89a movs r2, 8                                            |         r2 = 8;
    0x0001a89c mov r1, r7                                            |         r1 = r7;
    0x0001a89e ldr r3, [r0]                                          |         r3 = *(r0);
    0x0001a8a0 strd r4, r6, [sp]                                     |         __asm ("strd r4, r6, [sp]");
    0x0001a8a4 ldr r3, [r3, 8]                                       |         r3 = *((r3 + 8));
    0x0001a8a6 blx r3                                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                     |         if (r0 == 0) {
    0x0001a8a8 cbnz r0, 0x1a8ba                                      |             
    0x0001a8aa ldr r2, [sp, 0x1c]                                    |             r2 = var_1ch;
    0x0001a8ac movw r3, 0xd5d9                                       |             
    0x0001a8b0 movt r3, 0xf905                                       |             r3 = 0xf905d5d9;
    0x0001a8b4 cmp r2, r3                                            |             
                                                                     |             if (r2 == r3) {
    0x0001a8b6 beq 0x1a968                                           |                 goto label_6;
                                                                     |             }
                                                                     | label_1:
    0x0001a8b8 movs r0, 0x65                                         |             r0 = 0x65;
                                                                     |         }
                                                                     | label_0:
    0x0001a8ba ldr r2, [pc, 0x150]                                   |         
    0x0001a8bc ldr r3, [pc, 0x148]                                   |         r3 = *(0x1aa08);
    0x0001a8be add r2, pc                                            |         r2 = 0x352d0;
    0x0001a8c0 ldr r3, [r2, r3]                                      |         r3 = *(0x352d0);
    0x0001a8c2 ldr r2, [r3]                                          |         r2 = *(0x352d0);
    0x0001a8c4 ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0001a8c6 eors r2, r3                                           |         r2 ^= r3;
    0x0001a8c8 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0001a8cc bne.w 0x1a9fe                                         |             goto label_7;
                                                                     |         }
    0x0001a8d0 add sp, 0x2c                                          |         
    0x0001a8d2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
    0x0001a8d6 ldrd r2, r3, [r5, 0x58]                               |         __asm ("ldrd r2, r3, [r5, 0x58]");
    0x0001a8da cmp r3, r6                                            |         
    0x0001a8dc it eq                                                 |         
                                                                     |         if (r3 == r6) {
    0x0001a8de cmpeq r2, r4                                          |             __asm ("cmpeq r2, r4");
                                                                     |         }
    0x0001a8e0 bne 0x1a896                                           |         
                                                                     |     }
                                                                     | label_2:
    0x0001a8e2 ldr r0, [r5, 0x44]                                    |     r0 = *((r5 + 0x44));
    0x0001a8e4 adds.w lr, r4, 8                                      |     lr = r4 + 8;
    0x0001a8e8 adc ip, r6, 0                                         |     __asm ("adc ip, r6, 0");
    0x0001a8ec add r7, sp, 0x18                                      |     r7 += var_18h;
    0x0001a8ee movs r2, 4                                            |     r2 = 4;
    0x0001a8f0 mov r1, r7                                            |     r1 = r7;
    0x0001a8f2 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0001a8f4 strd lr, ip, [sp]                                     |     __asm ("strd lr, ip, [sp]");
    0x0001a8f8 ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0001a8fa blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001a8fc cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001a8fe bne 0x1a8ba                                           |         goto label_0;
                                                                     |     }
    0x0001a900 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001a902 adds.w r2, r4, 0xc                                    |     r2 = r4 + 0xc;
    0x0001a906 ldr r0, [r5, 0x44]                                    |     r0 = *((r5 + 0x44));
    0x0001a908 mov r1, r7                                            |     r1 = r7;
    0x0001a90a rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0001a90c str.w r3, [sb]                                        |     __asm ("str.w r3, [sb]");
    0x0001a910 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0001a912 str r2, [sp]                                          |     *(sp) = r2;
    0x0001a914 adc r2, r6, 0                                         |     __asm ("adc r2, r6, 0");
    0x0001a918 str r2, [sp, 4]                                       |     var_4h = r2;
    0x0001a91a movs r2, 4                                            |     r2 = 4;
    0x0001a91c ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0001a91e blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001a920 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001a922 bne 0x1a8ba                                           |         goto label_0;
                                                                     |     }
    0x0001a924 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001a926 adds.w r2, r4, 0x10                                   |     r2 = r4 + 0x10;
    0x0001a92a ldr r0, [r5, 0x44]                                    |     r0 = *((r5 + 0x44));
    0x0001a92c mov r1, r7                                            |     r1 = r7;
    0x0001a92e rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0001a930 str r3, [r5, 0x34]                                    |     *((r5 + 0x34)) = r3;
    0x0001a932 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0001a934 str r2, [sp]                                          |     *(sp) = r2;
    0x0001a936 adc r2, r6, 0                                         |     __asm ("adc r2, r6, 0");
    0x0001a93a str r2, [sp, 4]                                       |     var_4h = r2;
    0x0001a93c movs r2, 4                                            |     r2 = 4;
    0x0001a93e ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0001a940 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001a942 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001a944 bne 0x1a8ba                                           |         goto label_0;
                                                                     |     }
    0x0001a946 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001a948 ldrd r1, r2, [r5, 0x50]                               |     __asm ("ldrd r1, r2, [r5, 0x50]");
    0x0001a94c rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0001a94e str.w r3, [sl]                                        |     __asm ("str.w r3, [sl]");
    0x0001a952 orrs.w r3, r1, r2                                     |     r3 = r1 | r2;
                                                                     |     if (r3 == r1) {
    0x0001a956 beq 0x1a978                                           |         goto label_8;
                                                                     |     }
                                                                     | label_3:
    0x0001a958 ldr.w r3, [r5, 0x9c]                                  |     r3 = *((r5 + 0x9c));
    0x0001a95c adds r3, r3, r1                                       |     r3 += r1;
    0x0001a95e adc r2, r2, 0                                         |     __asm ("adc r2, r2, 0");
    0x0001a962 strd r3, r2, [r5, 0x50]                               |     __asm ("strd r3, r2, [r5, 0x50]");
    0x0001a966 b 0x1a8ba                                             |     goto label_0;
                                                                     | label_6:
    0x0001a968 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0001a96a movw r3, 0xa120                                       |     
    0x0001a96e movt r3, 0xd763                                       |     r3 = 0xNaN;
    0x0001a972 cmp r2, r3                                            |     
                                                                     |     if (r2 != r3) {
    0x0001a974 bne 0x1a8b8                                           |         goto label_1;
                                                                     |     }
    0x0001a976 b 0x1a8e2                                             |     goto label_2;
                                                                     | label_8:
    0x0001a978 ldr r0, [r5, 0x44]                                    |     r0 = *((r5 + 0x44));
    0x0001a97a adds.w lr, r4, 0x14                                   |     lr = r4 + 0x14;
    0x0001a97e adc ip, r6, 0                                         |     __asm ("adc ip, r6, 0");
    0x0001a982 movs r2, 4                                            |     r2 = 4;
    0x0001a984 mov r1, r7                                            |     r1 = r7;
    0x0001a986 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0001a988 strd lr, ip, [sp]                                     |     __asm ("strd lr, ip, [sp]");
    0x0001a98c ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0001a98e blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001a990 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001a992 bne 0x1a8ba                                           |         goto label_0;
                                                                     |     }
    0x0001a994 ldr r0, [r5, 0x44]                                    |     r0 = *((r5 + 0x44));
    0x0001a996 adds r4, 0x18                                         |     r4 += 0x18;
    0x0001a998 adc r6, r6, 0                                         |     __asm ("adc r6, r6, 0");
    0x0001a99c mov r1, r7                                            |     r1 = r7;
    0x0001a99e movs r2, 4                                            |     r2 = 4;
    0x0001a9a0 ldr r7, [sp, 0x18]                                    |     r7 = var_18h;
    0x0001a9a2 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0001a9a4 strd r4, r6, [sp]                                     |     __asm ("strd r4, r6, [sp]");
    0x0001a9a8 ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0001a9aa blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0001a9ac cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001a9ae bne 0x1a8ba                                           |         goto label_0;
                                                                     |     }
    0x0001a9b0 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0001a9b2 rev r3, r2                                            |     r2 = SWAP32 (r3);
    0x0001a9b4 str r3, [sp, 0x14]                                    |     var_14h = r3;
                                                                     |     if (r2 == 0) {
    0x0001a9b6 cbnz r2, 0x1a9be                                      |         
    0x0001a9b8 ldr.w r3, [r5, 0xa8]                                  |         r3 = *((r5 + 0xa8));
    0x0001a9bc str r3, [sp, 0x14]                                    |         var_14h = r3;
                                                                     |     }
    0x0001a9be rev r7, r7                                            |     r7 = SWAP32 (r7);
    0x0001a9c0 movw r1, 0xffe0                                       |     r1 = 0xffe0;
    0x0001a9c4 sub.w r0, r7, 0x20                                    |     r0 = r7 - 0x20;
    0x0001a9c8 sub.w r2, r3, 0x200                                   |     r2 = r3 - 0x200;
    0x0001a9cc cmp.w r2, 0xfe00                                      |     
    0x0001a9d0 it ls                                                 |     
                                                                     |     if (r2 > 0xfe00) {
    0x0001a9d2 cmpls r0, r1                                          |         __asm ("cmpls r0, r1");
                                                                     |         goto label_9;
                                                                     |     }
                                                                     |     if (r2 > 0xfe00) {
                                                                     | label_9:
    0x0001a9d4 bhi.w 0x1a8b8                                         |         goto label_1;
                                                                     |     }
    0x0001a9d8 subs r1, r3, 1                                        |     r1 = r3 - 1;
    0x0001a9da subs r2, r7, 1                                        |     r2 = r7 - 1;
    0x0001a9dc ands r1, r3                                           |     r1 &= r3;
    0x0001a9de mov r3, r2                                            |     r3 = r2;
    0x0001a9e0 ands r3, r7                                           |     r3 &= r7;
    0x0001a9e2 orrs r1, r3                                           |     r1 |= r3;
                                                                     |     if (r1 != r3) {
    0x0001a9e4 bne.w 0x1a8b8                                         |         goto label_1;
                                                                     |     }
    0x0001a9e8 mov.w r2, -1                                          |     r2 = -1;
    0x0001a9ec add r1, sp, 0x14                                      |     r1 += var_14h;
    0x0001a9ee mov r0, r5                                            |     r0 = r5;
    0x0001a9f0 bl 0x1906c                                            |     fcn_0001906c (r0, r1, r2);
    0x0001a9f4 ldrd r1, r2, [r5, 0x50]                               |     __asm ("ldrd r1, r2, [r5, 0x50]");
    0x0001a9f8 str.w r7, [r5, 0x9c]                                  |     __asm ("str.w r7, [r5, 0x9c]");
    0x0001a9fc b 0x1a958                                             |     goto label_3;
                                                                     | label_7:
    0x0001a9fe blx 0x9b44                                            |     fcn_00009b44 ();
    0x0001aa02 nop                                                   |     
    0x0001aa04 str r2, [r0, 0x2c]                                    |     *((r0 + 0x2c)) = r2;
    0x0001aa06 movs r0, r1                                           |     r0 = r1;
    0x0001aa08 lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0001aa0a movs r0, r0                                           |     
    0x0001aa0c str r2, [r0, 0x24]                                    |     *((r0 + 0x24)) = r2;
    0x0001aa0e movs r0, r1                                           |     r0 = r1;
    0x0001aa10 ldrb r3, [r1]                                         |     r3 = *(r1);
    0x0001aa12 cmp r3, 0xa7                                          |     
    0x0001aa14 beq 0x1aa1a                                           |     
                                                                     |     while ((r3 & 0x3000000) != 0) {
    0x0001aa16 movs r0, 0                                            |         r0 = 0;
    0x0001aa18 bx lr                                                 |         return r0;
    0x0001aa1a ldr r3, [r1, 4]                                       |         r3 = *((r1 + 4));
    0x0001aa1c tst.w r3, 0x3000000                                   |         
    0x0001aa20 bne 0x1aa16                                           |         
                                                                     |     }
    0x0001aa22 push {r4}                                             |     
    0x0001aa24 ldr r4, [r0, 0x18]                                    |     r4 = *((r0 + 0x18));
    0x0001aa26 ldr r3, [r1, 0x2c]                                    |     r3 = *((r1 + 0x2c));
    0x0001aa28 ldr r2, [r4, 0xc]                                     |     r2 = *((r4 + 0xc));
    0x0001aa2a cmp r2, r3                                            |     
    0x0001aa2c beq 0x1aa36                                           |     
                                                                     |     while (1) {
                                                                     | label_4:
    0x0001aa2e movs r0, 0                                            |         r0 = 0;
    0x0001aa30 ldr r4, [sp], 4                                       |         r4 = *(sp);
                                                                     |         sp += 4;
    0x0001aa34 bx lr                                                 |         return;
    0x0001aa36 ldr r2, [r0]                                          |         r2 = *(r0);
    0x0001aa38 adds r1, 0x2c                                         |         r1 += 0x2c;
    0x0001aa3a ldr.w r3, [r2, 0x10c]                                 |         r3 = *((r2 + 0x10c));
    0x0001aa3e add.w ip, r2, 0x10c                                   |         
                                                                     |         if (r3 != 0) {
    0x0001aa42 cbnz r3, 0x1aa4e                                      |             goto label_10;
                                                                     |         }
    0x0001aa44 b 0x1aa2e                                             |         
                                                                     |     }
                                                                     | label_5:
    0x0001aa46 add.w ip, r2, 0xc                                     |     
    0x0001aa4a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001aa4c beq 0x1aa2e                                           |         goto label_4;
                                                                     |     }
                                                                     | label_10:
    0x0001aa4e ldr r0, [r3]                                          |     r0 = *(r3);
    0x0001aa50 mov r2, r3                                            |     r2 = r3;
    0x0001aa52 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0001aa54 cmp r0, r1                                            |     
                                                                     |     if (r0 != r1) {
    0x0001aa56 bne 0x1aa46                                           |         goto label_5;
                                                                     |     }
    0x0001aa58 ldr r1, [r4, 4]                                       |     r1 = *((r4 + 4));
    0x0001aa5a str.w r3, [ip]                                        |     __asm ("str.w r3, [ip]");
    0x0001aa5e ldr r0, [r4]                                          |     r0 = *(r4);
    0x0001aa60 adds r1, 1                                            |     r1++;
    0x0001aa62 str r0, [r2, 0xc]                                     |     *((r2 + 0xc)) = r0;
    0x0001aa64 strd r2, r1, [r4]                                     |     __asm ("strd r2, r1, [r4]");
    0x0001aa68 b 0x1aa2e                                             |     goto label_4;
                                                                     | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1ace8 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0001ace8 ()                  | uint32_t fcn_0001ace8 (int16_t arg2, arithmetic x) {
                                             |     r1 = arg2;
                                             |     r0 = x;
    0x0001ace8 ldrb r3, [r0, 0x14]           |     r3 = *((r0 + 0x14));
    0x0001acea cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x0001acec bne.w 0x1ae1e                 |         goto label_3;
                                             |     }
    0x0001acf0 push {r4, r5, r6, lr}         |     
    0x0001acf2 mov r4, r0                    |     r4 = r0;
    0x0001acf4 ldr r0, [r0, 0xc]             |     r0 = *((r0 + 0xc));
    0x0001acf6 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0001acf8 beq 0x1adde                   |         goto label_4;
                                             |     }
    0x0001acfa mov r5, r1                    |     r5 = r1;
    0x0001acfc ldrb r1, [r4, 0x15]           |     r1 = *((r4 + 0x15));
    0x0001acfe ldr r2, [r4, 0x10]            |     r2 = *((r4 + 0x10));
    0x0001ad00 asrs r3, r5, 0x1f             |     r3 = r5 >> 0x1f;
    0x0001ad02 mov.w lr, 0                   |     lr = 0;
    0x0001ad06 ands r1, r1, 4                |     r1 &= 4;
    0x0001ad0a it ne                         |     
                                             |     if (r1 == r1) {
    0x0001ad0c ldrne r1, [r4, 4]             |         r1 = *((r4 + 4));
                                             |     }
    0x0001ad0e adds.w ip, r5, 1              |     
    0x0001ad12 adc r3, r3, 0                 |     __asm ("adc r3, r3, 0");
    0x0001ad16 adds.w ip, ip, r2             |     
    0x0001ad1a adc r3, r3, 0                 |     __asm ("adc r3, r3, 0");
    0x0001ad1e adds.w r2, r2, ip             |     r2 += ip;
    0x0001ad22 adc r6, r3, 0                 |     __asm ("adc r6, r3, 0");
    0x0001ad26 cmp r0, r2                    |     
    0x0001ad28 sbcs.w r6, lr, r6             |     __asm ("sbcs.w r6, lr, r6");
                                             |     if (r0 < r2) {
    0x0001ad2c blt 0x1ad98                   |         goto label_5;
                                             |     }
    0x0001ad2e ldr r0, [r4]                  |     r0 = *(r4);
    0x0001ad30 str r2, [r4, 8]               |     *((r4 + 8)) = r2;
    0x0001ad32 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0001ad34 beq 0x1add2                   |         goto label_6;
                                             |     }
                                             |     do {
    0x0001ad36 movs r3, 0                    |         r3 = 0;
    0x0001ad38 bl 0x1ac9c                    |         r0 = fcn_0001ac9c (r0, r1, r2);
    0x0001ad3c mov r3, r0                    |         r3 = r0;
                                             | label_0:
    0x0001ad3e cmp r3, 0                     |         
                                             |         if (r3 == 0) {
    0x0001ad40 beq 0x1adfe                   |             goto label_7;
                                             |         }
    0x0001ad42 ldrb r2, [r4, 0x15]           |         r2 = *((r4 + 0x15));
    0x0001ad44 lsls r2, r2, 0x1d             |         r2 <<= 0x1d;
                                             |         if (r2 >= r2) {
    0x0001ad46 bmi 0x1ad56                   |             
    0x0001ad48 ldr r2, [r4, 0x10]            |             r2 = *((r4 + 0x10));
                                             |             if (r2 == 0) {
    0x0001ad4a cbz r2, 0x1ad56               |                 goto label_8;
                                             |             }
    0x0001ad4c mov r0, r3                    |             r0 = r3;
    0x0001ad4e ldr r1, [r4, 4]               |             r1 = *((r4 + 4));
    0x0001ad50 blx 0x9e2c                    |             r0 = fcn_00009e2c ();
    0x0001ad54 mov r3, r0                    |             r3 = r0;
                                             |         }
                                             | label_8:
    0x0001ad56 ldr r2, [r4]                  |         r2 = *(r4);
    0x0001ad58 str r3, [r4, 4]               |         *((r4 + 4)) = r3;
                                             |         if (r2 != 0) {
    0x0001ad5a cbz r2, 0x1ad7e               |             
    0x0001ad5c ldr.w r1, [r2, 0x164]         |             r1 = *((r2 + 0x164));
    0x0001ad60 cmp r1, r3                    |             
                                             |             if (r1 < r3) {
    0x0001ad62 bls 0x1ad7e                   |                 goto label_9;
                                             |             }
    0x0001ad64 ldr.w r1, [r2, 0x15c]         |             r1 = *((r2 + 0x15c));
    0x0001ad68 cmp r1, r3                    |             
    0x0001ad6a it ls                         |             
                                             |             if (r1 > r3) {
    0x0001ad6c movls r2, 0x80                |                 r2 = 0x80;
                                             |             }
                                             |             if (r1 < r3) {
    0x0001ad6e bls 0x1ad8a                   |                 goto label_10;
                                             |             }
    0x0001ad70 ldr.w r1, [r2, 0x160]         |             r1 = *((r2 + 0x160));
    0x0001ad74 cmp r1, r3                    |             
    0x0001ad76 it ls                         |             
                                             |             if (r1 <= r3) {
    0x0001ad78 ldrhls r2, [r2, 0x136]        |                 __asm ("ldrhls r2, aav.0x000000ff");
                                             |             }
                                             |             if (r1 < r3) {
    0x0001ad7c bls 0x1ad8a                   |                 goto label_10;
                                             |             }
                                             |         }
                                             | label_9:
    0x0001ad7e ldr r2, [pc, 0xa4]            |         
    0x0001ad80 mov r0, r3                    |         r0 = r3;
    0x0001ad82 add r2, pc                    |         r2 = 0x35bac;
    0x0001ad84 ldr r3, [r2, 0x2c]            |         r3 = *(0x35bd8);
    0x0001ad86 blx r3                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0001ad88 mov r2, r0                    |         r2 = r0;
                                             | label_10:
    0x0001ad8a ldrb r3, [r4, 0x15]           |         r3 = *((r4 + 0x15));
    0x0001ad8c mov r0, r5                    |         r0 = r5;
    0x0001ad8e str r2, [r4, 8]               |         *((r4 + 8)) = r2;
    0x0001ad90 orr r3, r3, 4                 |         r3 |= 4;
    0x0001ad94 strb r3, [r4, 0x15]           |         *((r4 + 0x15)) = r3;
    0x0001ad96 pop {r4, r5, r6, pc}          |         
                                             | label_5:
    0x0001ad98 cmp r0, ip                    |         
    0x0001ad9a sbcs.w lr, lr, r3             |         __asm ("sbcs.w lr, lr, r3");
                                             |         if (r0 < ip) {
    0x0001ad9e bge 0x1adc8                   |             
    0x0001ada0 mov r0, r4                    |             r0 = r4;
    0x0001ada2 blx 0x9dec                    |             usleep (r0);
    0x0001ada6 ldr r3, [r4, 0xc]             |             r3 = *((r4 + 0xc));
    0x0001ada8 movs r2, 0x12                 |             r2 = 0x12;
    0x0001adaa strb r2, [r4, 0x14]           |             *((r4 + 0x14)) = r2;
    0x0001adac cmp r3, 0                     |             
                                             |             if (r3 != 0) {
    0x0001adae bne 0x1ae16                   |                 goto label_11;
                                             |             }
                                             | label_2:
    0x0001adb0 ldr r3, [r4]                  |             r3 = *(r4);
                                             |             if (r3 != 0) {
    0x0001adb2 cbz r3, 0x1adc4               |                 
    0x0001adb4 ldr.w r3, [r3, 0x108]         |                 r3 = *((r3 + 0x108));
                                             |                 if (r3 == 0) {
    0x0001adb8 cbz r3, 0x1adc4               |                     goto label_1;
                                             |                 }
    0x0001adba ldr r2, [r3, 0x24]            |                 r2 = *((r3 + 0x24));
    0x0001adbc movs r1, 0x12                 |                 r1 = 0x12;
    0x0001adbe str r1, [r3, 0xc]             |                 *((r3 + 0xc)) = r1;
    0x0001adc0 adds r2, 1                    |                 r2++;
    0x0001adc2 str r2, [r3, 0x24]            |                 *((r3 + 0x24)) = r2;
                                             |             }
                                             | label_1:
    0x0001adc4 movs r0, 0                    |             r0 = 0;
    0x0001adc6 pop {r4, r5, r6, pc}          |             
                                             |         }
    0x0001adc8 ldr r0, [r4]                  |         r0 = *(r4);
    0x0001adca mov r2, ip                    |         r2 = ip;
    0x0001adcc str r2, [r4, 8]               |         *((r4 + 8)) = r2;
    0x0001adce cmp r0, 0                     |         
    0x0001add0 bne 0x1ad36                   |         
                                             |     } while (r0 != 0);
                                             | label_6:
    0x0001add2 mov r3, r0                    |     r3 = r0;
    0x0001add4 mov r0, r1                    |     r0 = r1;
    0x0001add6 bl 0x1187c                    |     r0 = fcn_0001187c (r0, r1, r2);
    0x0001adda mov r3, r0                    |     r3 = r0;
    0x0001addc b 0x1ad3e                     |     goto label_0;
                                             | label_4:
    0x0001adde ldr r3, [r4]                  |     r3 = *(r4);
    0x0001ade0 movs r1, 0x12                 |     r1 = 0x12;
    0x0001ade2 strb r1, [r4, 0x14]           |     *((r4 + 0x14)) = r1;
                                             |     if (r3 != 0) {
    0x0001ade4 cbz r3, 0x1adf4               |         
    0x0001ade6 ldr.w r3, [r3, 0x108]         |         r3 = *((r3 + 0x108));
                                             |         if (r3 == 0) {
    0x0001adea cbz r3, 0x1adf4               |             goto label_12;
                                             |         }
    0x0001adec ldr r2, [r3, 0x24]            |         r2 = *((r3 + 0x24));
    0x0001adee str r1, [r3, 0xc]             |         *((r3 + 0xc)) = r1;
    0x0001adf0 adds r2, 1                    |         r2++;
    0x0001adf2 str r2, [r3, 0x24]            |         *((r3 + 0x24)) = r2;
                                             |     }
                                             | label_12:
    0x0001adf4 ldr r0, [r4, 8]               |     r0 = *((r4 + 8));
    0x0001adf6 ldr r3, [r4, 0x10]            |     r3 = *((r4 + 0x10));
    0x0001adf8 subs r0, 1                    |     r0--;
    0x0001adfa subs r0, r0, r3               |     r0 -= r3;
    0x0001adfc pop {r4, r5, r6, pc}          |     
                                             | label_7:
    0x0001adfe mov r0, r4                    |     r0 = r4;
    0x0001ae00 blx 0x9dec                    |     usleep (r0);
    0x0001ae04 ldr r3, [r4, 0xc]             |     r3 = *((r4 + 0xc));
    0x0001ae06 movs r2, 7                    |     r2 = 7;
    0x0001ae08 strb r2, [r4, 0x14]           |     *((r4 + 0x14)) = r2;
    0x0001ae0a cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x0001ae0c beq 0x1adc4                   |         goto label_1;
                                             |     }
    0x0001ae0e mov r0, r4                    |     r0 = r4;
    0x0001ae10 blx 0x9dec                    |     usleep (r0);
    0x0001ae14 b 0x1adc4                     |     goto label_1;
                                             | label_11:
    0x0001ae16 mov r0, r4                    |     r0 = r4;
    0x0001ae18 blx 0x9dec                    |     usleep (r0);
    0x0001ae1c b 0x1adb0                     |     goto label_2;
                                             | label_3:
    0x0001ae1e movs r0, 0                    |     r0 = 0;
    0x0001ae20 bx lr                         |     return r0;
                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1b144 */
                                             | #include <stdint.h>
                                             |  
                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                             |  
    ; (fcn) fcn.0001b144 ()                  | void fcn_0001b144 (int16_t arg1) {
                                             |     r0 = arg1;
    0x0001b144 ldr r1, [r0, 0xc]             |     r1 = *((r0 + 0xc));
    0x0001b146 ldr r3, [r0]                  |     r3 = *(r0);
    0x0001b148 push {r4, lr}                 |     
    0x0001b14a mov r4, r0                    |     r4 = r0;
    0x0001b14c add r1, r3                    |     r1 += r3;
    0x0001b14e cmp r1, 0                     |     
                                             |     if (r1 <= 0) {
    0x0001b150 bgt 0x1b15a                   |         
    0x0001b152 ldrh r3, [r0, 0x10]           |         r3 = *((r0 + 0x10));
    0x0001b154 lsls r3, r3, 0x1b             |         r3 <<= 0x1b;
                                             |         if (r3 >= r3) {
    0x0001b156 bpl 0x1b184                   |             goto label_0;
                                             |         }
    0x0001b158 movs r1, 1                    |         r1 = 1;
                                             |     }
    0x0001b15a movs r2, 1                    |     r2 = 1;
    0x0001b15c mov r0, r4                    |     r0 = r4;
    0x0001b15e bl 0x1b028                    |     r0 = fcn_0001b028 (r0, r1, r2);
    0x0001b162 mov r1, r0                    |     r1 = r0;
    0x0001b164 movs r0, 7                    |     r0 = 7;
                                             |     if (r1 == 0) {
    0x0001b166 cbnz r1, 0x1b186              |         
    0x0001b168 ldrd r0, r3, [r4, 8]          |         __asm ("ldrd r0, r3, [r4, 8]");
    0x0001b16c ldr r2, [r4]                  |         r2 = *(r4);
    0x0001b16e add r0, r3                    |         r0 += r3;
    0x0001b170 blx 0x97d4                    |         fcn_000097d4 ();
    0x0001b174 ldr r2, [r4, 0xc]             |         r2 = *((r4 + 0xc));
    0x0001b176 ldrh r3, [r4, 0x10]           |         r3 = *((r4 + 0x10));
    0x0001b178 ldr r1, [r4]                  |         r1 = *(r4);
    0x0001b17a bic r3, r3, 0x600             |         r3 = BIT_MASK (r3, 0x600);
    0x0001b17e add r2, r1                    |         r2 += r1;
    0x0001b180 strh r3, [r4, 0x10]           |         *((r4 + 0x10)) = r3;
    0x0001b182 str r2, [r4, 0xc]             |         *((r4 + 0xc)) = r2;
                                             | label_0:
    0x0001b184 movs r0, 0                    |         r0 = 0;
                                             |     }
    0x0001b186 pop {r4, pc}                  |     
                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1b224 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0001b224 ()                  | void fcn_0001b224 (int16_t arg1) {
                                             |     r0 = arg1;
                                             |     if (? < ?) {
    0x0001b224 andhs r6, r1, 0xc10000        |         r6 = r1 & 0xc10000;
                                             |     }
    0x0001b228 push {r4, lr}                 |     
    0x0001b22a mov r4, r0                    |     r4 = r0;
    0x0001b22c adds r1, 3                    |     r1 += 3;
    0x0001b22e bl 0x1b028                    |     r0 = fcn_0001b028 (r0, r1, r2);
                                             |     if (r0 == 0) {
    0x0001b232 cbnz r0, 0x1b254              |         
    0x0001b234 ldrd r2, r3, [r4, 8]          |         __asm ("ldrd r2, r3, [r4, 8]");
    0x0001b238 strb r0, [r2, r3]             |         *((r2 + r3)) = r0;
    0x0001b23a ldrd r3, r2, [r4, 8]          |         __asm ("ldrd r3, r2, [r4, 8]");
    0x0001b23e add r3, r2                    |         r3 += r2;
    0x0001b240 strb r0, [r3, 1]              |         *((r3 + 1)) = r0;
    0x0001b242 ldrd r3, r2, [r4, 8]          |         __asm ("ldrd r3, r2, [r4, 8]");
    0x0001b246 add r3, r2                    |         r3 += r2;
    0x0001b248 strb r0, [r3, 2]              |         *((r3 + 2)) = r0;
    0x0001b24a ldrh r3, [r4, 0x10]           |         r3 = *((r4 + 0x10));
    0x0001b24c orr r3, r3, 0x200             |         r3 |= 0x200;
    0x0001b250 strh r3, [r4, 0x10]           |         *((r4 + 0x10)) = r3;
    0x0001b252 pop {r4, pc}                  |         
                                             |     }
    0x0001b254 movs r0, 7                    |     r0 = 7;
    0x0001b256 pop {r4, pc}                  |     
                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1b8c4 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0001b8c4 ()                                          | void fcn_0001b8c4 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     int16_t var_4h;
                                                                     |     int32_t var_4h_2;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int32_t var_10h_2;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_2ch;
                                                                     |     int8_t var_1ch;
                                                                     |     int8_t var_1h;
                                                                     |     int16_t var_41h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_0h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0001b8c4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001b8c8 sub sp, 0x4c                                          |     
    0x0001b8ca ldr r6, [pc, 0x1bc]                                   |     
    0x0001b8cc mov r5, r0                                            |     r5 = r0;
    0x0001b8ce mov sb, r2                                            |     sb = r2;
    0x0001b8d0 ldr r4, [pc, 0x1b8]                                   |     r4 = *(0x1ba8c);
    0x0001b8d2 ldr r3, [r0, 0x18]                                    |     r3 = *((r0 + 0x18));
    0x0001b8d4 add r6, pc                                            |     r6 = 0x37362;
    0x0001b8d6 ldr r4, [r6, r4]                                      |     
    0x0001b8d8 cmp r3, 0x1f                                          |     
    0x0001b8da ldr r4, [r4]                                          |     r4 = *(0x37362);
    0x0001b8dc str r4, [sp, 0x44]                                    |     var_44h = r4;
    0x0001b8de mov.w r4, 0                                           |     r4 = 0;
    0x0001b8e2 mov r4, r1                                            |     r4 = r1;
                                                                     |     if (r3 <= 0x1f) {
    0x0001b8e4 ble.w 0x1ba30                                         |         goto label_5;
                                                                     |     }
    0x0001b8e8 ldrh r3, [r0, 0x10]                                   |     r3 = *((r0 + 0x10));
    0x0001b8ea ldr r6, [r0, 0x20]                                    |     r6 = *((r0 + 0x20));
    0x0001b8ec and r3, r3, 0x2d                                      |     r3 &= 0x2d;
    0x0001b8f0 str r6, [r0, 8]                                       |     *((r0 + 8)) = r6;
    0x0001b8f2 strh r3, [r0, 0x10]                                   |     *((r0 + 0x10)) = r3;
                                                                     | label_4:
    0x0001b8f4 ands r2, r3, 4                                        |     r2 = r3 & 4;
                                                                     |     if (r2 == r3) {
    0x0001b8f8 bne 0x1b97c                                           |         
    0x0001b8fa vldr d16, [pc, 0x184]                                 |         __asm ("vldr d16, aav.0x000000ff");
    0x0001b8fe lsls r3, r3, 0x1a                                     |         r3 <<= 0x1a;
    0x0001b900 strd r2, r6, [sp, 0x10]                               |         __asm ("strd r2, r6, [var_10h]");
    0x0001b904 str r2, [sp, 0x20]                                    |         var_20h = r2;
    0x0001b906 strh.w r2, [sp, 0x24]                                 |         var_24h = r2;
    0x0001b90a vstr d16, [sp, 0x18]                                  |         __asm ("vstr d16, [sp, 0x18]");
                                                                     |         if (r3 >= r3) {
    0x0001b90e bpl.w 0x1ba2a                                         |             goto label_6;
                                                                     |         }
    0x0001b912 ldrd r0, r1, [r5]                                     |         __asm ("ldrd r0, r1, [r5]");
    0x0001b916 bl 0x8c7d4                                            |         r0 = fcn_0008c7d4 (r0, r1, r2);
    0x0001b91a mov r2, r0                                            |         r2 = r0;
    0x0001b91c mov r3, r1                                            |         r3 = r1;
                                                                     | label_1:
    0x0001b91e ldr r1, [pc, 0x170]                                   |         
    0x0001b920 add r0, sp, 0x10                                      |         r0 += var_10h;
    0x0001b922 add r1, pc                                            |         r1 = 0x373b8;
    0x0001b924 blx 0x982c                                            |         fcn_0000982c ();
    0x0001b928 ldr r3, [sp, 0x20]                                    |         r3 = var_20h;
    0x0001b92a movs r2, 0                                            |         r2 = 0;
    0x0001b92c strb r2, [r6, r3]                                     |         *((r6 + r3)) = r2;
                                                                     | label_0:
    0x0001b92e ldr r0, [r5, 8]                                       |         r0 = *((r5 + 8));
    0x0001b930 blx 0x9e8c                                            |         fcn_00009e8c ();
    0x0001b934 movs r3, 1                                            |         r3 = 1;
    0x0001b936 bic r0, r0, 0xc0000000                                |         r0 = BIT_MASK (r0, 0xc0000000);
    0x0001b93a strb r3, [r5, 0x12]                                   |         *((r5 + 0x12)) = r3;
    0x0001b93c str r0, [r5, 0xc]                                     |         *((r5 + 0xc)) = r0;
    0x0001b93e ldrh r3, [r5, 0x10]                                   |         r3 = *((r5 + 0x10));
    0x0001b940 cmp.w sb, 0                                           |         
                                                                     |         if (sb != 0) {
    0x0001b944 beq 0x1b94a                                           |             
    0x0001b946 bic r3, r3, 0x2c                                      |             r3 = BIT_MASK (r3, 0x2c);
                                                                     |         }
    0x0001b94a orr r3, r3, 0x200                                     |         r3 |= 0x200;
    0x0001b94e cmp r4, 1                                             |         
    0x0001b950 orr r3, r3, 2                                         |         r3 |= 2;
    0x0001b954 strh r3, [r5, 0x10]                                   |         *((r5 + 0x10)) = r3;
                                                                     |         if (r4 != 1) {
    0x0001b956 beq 0x1b960                                           |             
    0x0001b958 mov r1, r4                                            |             r1 = r4;
    0x0001b95a mov r0, r5                                            |             r0 = r5;
    0x0001b95c bl 0x1f1ec                                            |             fcn_0001f1ec (r0, r1);
                                                                     |         }
    0x0001b960 movs r0, 0                                            |         r0 = 0;
                                                                     | label_2:
    0x0001b962 ldr r2, [pc, 0x130]                                   |         
    0x0001b964 ldr r3, [pc, 0x124]                                   |         r3 = *(0x1ba8c);
    0x0001b966 add r2, pc                                            |         r2 = 0x37400;
    0x0001b968 ldr r3, [r2, r3]                                      |         r3 = *(0x37400);
    0x0001b96a ldr r2, [r3]                                          |         r2 = *(0x37400);
    0x0001b96c ldr r3, [sp, 0x44]                                    |         r3 = var_44h;
    0x0001b96e eors r2, r3                                           |         r2 ^= r3;
    0x0001b970 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0001b974 bne 0x1ba76                                           |             goto label_7;
                                                                     |         }
    0x0001b976 add sp, 0x4c                                          |         
    0x0001b978 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     |     }
    0x0001b97c lsls r2, r2, 1                                        |     r2 <<= 1;
    0x0001b97e mov r1, r5                                            |     r1 = r5;
    0x0001b980 add r0, sp, 0x10                                      |     r0 += var_10h;
    0x0001b982 blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0001b986 ldrd r3, fp, [sp, 0x10]                               |     __asm ("ldrd r3, fp, [var_10h]");
    0x0001b98a cmp.w fp, 0                                           |     
    0x0001b98e it ge                                                 |     
                                                                     |     if (fp < 0) {
    0x0001b990 movge lr, fp                                          |         lr = fp;
                                                                     |     }
                                                                     |     if (fp < 0) {
    0x0001b992 blt 0x1ba56                                           |         goto label_8;
                                                                     |     }
                                                                     | label_3:
    0x0001b994 movw r0, 0xcccd                                       |     
    0x0001b998 add.w r8, sp, 0x41                                    |     r8 += var_41h;
    0x0001b99c movt r0, 0xcccc                                       |     r0 = 0xcccccccd;
    0x0001b9a0 movs r2, 0x14                                         |     r2 = 0x14;
    0x0001b9a2 mov.w sl, -0x33333334                                 |     sl = -0x33333334;
    0x0001b9a6 movs r1, 0                                            |     r1 = 0;
    0x0001b9a8 strb.w r1, [sp, 0x41]                                 |     var_41h = r1;
    0x0001b9ac strd r6, r5, [sp, 4]                                  |     __asm ("strd r6, r5, [var_4h]");
    0x0001b9b0 str r4, [sp, 0xc]                                     |     var_ch = r4;
                                                                     |     do {
    0x0001b9b2 adds.w r4, r3, lr                                     |         r4 = r3 + lr;
    0x0001b9b6 mov ip, r3                                            |         
    0x0001b9b8 adc r4, r4, 0                                         |         __asm ("adc r4, r4, 0");
    0x0001b9bc mov r7, lr                                            |         r7 = lr;
    0x0001b9be umull r1, r6, r0, r4                                  |         r1:r6 = r0 * r4;
    0x0001b9c2 mov r1, r2                                            |         r1 = r2;
    0x0001b9c4 subs r2, 1                                            |         r2--;
    0x0001b9c6 bic r5, r6, 3                                         |         r5 = BIT_MASK (r6, 3);
    0x0001b9ca add.w r5, r5, r6, lsr 2                               |         r5 += (r6 >> 2);
    0x0001b9ce subs r4, r4, r5                                       |         r4 -= r5;
    0x0001b9d0 movs r5, 5                                            |         r5 = 5;
    0x0001b9d2 subs r3, r3, r4                                       |         r3 -= r4;
    0x0001b9d4 mul r6, sl, r3                                        |         r6 = sl * r3;
    0x0001b9d8 sbc lr, lr, 0                                         |         __asm ("sbc lr, lr, 0");
    0x0001b9dc mla r6, r0, lr, r6                                    |         __asm ("mla r6, r0, lr, r6");
    0x0001b9e0 umull lr, r3, r3, r0                                  |         lr:r3 = r3 * r0;
    0x0001b9e4 add r6, r3                                            |         r6 += r3;
    0x0001b9e6 and r3, lr, 1                                         |         r3 = lr & 1;
    0x0001b9ea umull r5, r3, r3, r5                                  |         r5:r3 = r3 * r5;
    0x0001b9ee lsr.w lr, lr, 1                                       |         lr >>= 1;
    0x0001b9f2 orr.w r3, lr, r6, lsl 31                              |         r3 = lr | (r6 << 31);
    0x0001b9f6 lsr.w lr, r6, 1                                       |         lr = r6 >> 1;
    0x0001b9fa adds r5, r5, r4                                       |         r5 += r4;
    0x0001b9fc cmp.w ip, 0xa                                         |         
    0x0001ba00 sbcs r7, r7, 0                                        |         __asm ("sbcs r7, r7, 0");
    0x0001ba04 add.w r5, r5, 0x30                                    |         r5 += 0x30;
    0x0001ba08 strb r5, [r8, -0x1]!                                  |         *((r8 -= 0x1)) = r5;
    0x0001ba0c bhs 0x1b9b2                                           |         
                                                                     |     } while (ip >= 0xa);
    0x0001ba0e cmp.w fp, 0                                           |     
    0x0001ba12 ldrd r6, r5, [sp, 4]                                  |     __asm ("ldrd r6, r5, [var_4h]");
    0x0001ba16 ldr r4, [sp, 0xc]                                     |     r4 = var_ch;
    0x0001ba18 blt 0x1ba42                                           |     
                                                                     |     while (1) {
    0x0001ba1a add r3, sp, 0x2c                                      |         r3 += var_2ch;
    0x0001ba1c rsb.w r2, r2, 0x15                                    |         r2 = 0x15 - r2;
    0x0001ba20 mov r0, r6                                            |         r0 = r6;
    0x0001ba22 add r1, r3                                            |         r1 += r3;
    0x0001ba24 blx 0x9e2c                                            |         fcn_00009e2c ();
    0x0001ba28 b 0x1b92e                                             |         goto label_0;
                                                                     | label_6:
    0x0001ba2a ldrd r2, r3, [r5]                                     |         __asm ("ldrd r2, r3, [r5]");
    0x0001ba2e b 0x1b91e                                             |         goto label_1;
                                                                     | label_5:
    0x0001ba30 movs r2, 0                                            |         r2 = 0;
    0x0001ba32 movs r1, 0x20                                         |         r1 = 0x20;
    0x0001ba34 bl 0x1b028                                            |         r0 = fcn_0001b028 (r0, r1, r2);
                                                                     |         if (r0 == 0) {
    0x0001ba38 cbz r0, 0x1ba70                                       |             goto label_9;
                                                                     |         }
    0x0001ba3a movs r3, 0                                            |         r3 = 0;
    0x0001ba3c movs r0, 7                                            |         r0 = 7;
    0x0001ba3e strb r3, [r5, 0x12]                                   |         *((r5 + 0x12)) = r3;
    0x0001ba40 b 0x1b962                                             |         goto label_2;
    0x0001ba42 subs r0, r1, 2                                        |         r0 = r1 - 2;
    0x0001ba44 add.w r3, r2, 0x48                                    |         r3 = r2 + 0x48;
    0x0001ba48 add r3, sp, r3                                        |         r3 = sp + r3;
    0x0001ba4a mov r1, r2                                            |         r1 = r2;
    0x0001ba4c mov r2, r0                                            |         r2 = r0;
    0x0001ba4e movs r0, 0x2d                                         |         r0 = 0x2d;
    0x0001ba50 strb r0, [r3, -0x1c]                                  |         var_1ch = r0;
    0x0001ba54 b 0x1ba1a                                             |         
                                                                     |     }
                                                                     | label_8:
    0x0001ba56 movs r2, 0                                            |     r2 = 0;
    0x0001ba58 mov.w lr, -0x80000000                                 |     lr = -0x80000000;
    0x0001ba5c cmp fp, lr                                            |     
    0x0001ba5e it eq                                                 |     
                                                                     |     if (fp == lr) {
    0x0001ba60 cmpeq r3, r2                                          |         __asm ("cmpeq r3, r2");
                                                                     |     }
    0x0001ba62 it eq                                                 |     
                                                                     |     if (fp == lr) {
    0x0001ba64 moveq r3, r2                                          |         r3 = r2;
                                                                     |         goto label_10;
                                                                     |     }
                                                                     |     if (fp == lr) {
                                                                     | label_10:
    0x0001ba66 beq 0x1b994                                           |         goto label_3;
                                                                     |     }
    0x0001ba68 rsbs r3, r3, 0                                        |     r3 -= ;
    0x0001ba6a sbc.w lr, r2, fp                                      |     __asm ("sbc.w lr, r2, fp");
    0x0001ba6e b 0x1b994                                             |     goto label_3;
                                                                     | label_9:
    0x0001ba70 ldr r6, [r5, 8]                                       |     r6 = *((r5 + 8));
    0x0001ba72 ldrh r3, [r5, 0x10]                                   |     r3 = *((r5 + 0x10));
    0x0001ba74 b 0x1b8f4                                             |     goto label_4;
                                                                     | label_7:
    0x0001ba76 blx 0x9b44                                            |     fcn_00009b44 ();
    0x0001ba7a nop                                                   |     
    0x0001ba7c nop.w                                                 |     
    0x0001ba80 movs r0, r4                                           |     r0 = r4;
    0x0001ba82 movs r0, r0                                           |     
    0x0001ba84 movs r0, r0                                           |     
    0x0001ba86 movs r0, r0                                           |     
    0x0001ba88 strh r4, [r5, r0]                                     |     *((r5 + r0)) = r4;
    0x0001ba8a movs r0, r1                                           |     r0 = r1;
    0x0001ba8c lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0001ba8e movs r0, r0                                           |     
    0x0001ba90 asrs r6, r6, 0x17                                     |     r6 >>= 0x17;
    0x0001ba92 movs r7, r0                                           |     r7 = r0;
    0x0001ba94 str r2, [r3, r6]                                      |     *((r3 + r6)) = r2;
    0x0001ba96 movs r0, r1                                           |     r0 = r1;
                                                                     | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1d740 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0001d740 ()                  | void fcn_0001d740 (arithmetic arg1, uint32_t arg3) {
                                             |     int16_t var_0h_3;
                                             |     int16_t var_0h_2;
                                             |     int16_t var_4h;
                                             |     int16_t var_0h;
                                             |     r0 = arg1;
                                             |     r2 = arg3;
                                             | label_1:
    0x0001d694 invalid                       |     
    0x0001d698 subs r4, 0xff                 |     r4 -= 0xff;
    0x0001d69a ldr r5, [pc, 0x90]            |     
    0x0001d69c mov r4, r2                    |     r4 = r2;
    0x0001d69e movw r1, 0xfefe               |     
    0x0001d6a2 sub sp, 8                     |     
    0x0001d6a4 ldr r2, [pc, 0x88]            |     r2 = *(0x1d730);
    0x0001d6a6 movt r1, 0x7fff               |     r1 = 0x7ffffefe;
    0x0001d6aa add r5, pc                    |     r5 = 0x3addc;
    0x0001d6ac sbc r3, r3, 0                 |     __asm ("sbc r3, r3, 0");
    0x0001d6b0 cmp r1, ip                    |     
    0x0001d6b2 ldr r2, [r5, r2]              |     
    0x0001d6b4 mov r5, r0                    |     r5 = r0;
    0x0001d6b6 ldr r2, [r2]                  |     r2 = *(0x3addc);
    0x0001d6b8 str r2, [sp, 4]               |     var_4h = r2;
    0x0001d6ba mov.w r2, 0                   |     r2 = 0;
    0x0001d6be mov.w r2, 0                   |     r2 = 0;
    0x0001d6c2 sbcs r2, r3                   |     __asm ("sbcs r2, r3");
    0x0001d6c4 bhs 0x1d6dc                   |     
                                             |     while (r0 == 0) {
    0x0001d6c6 ldrb.w r3, [r5, 0x57]         |         r3 = *((r5 + 0x57));
                                             |         if (r3 == 0) {
    0x0001d6ca cbnz r3, 0x1d6d8              |             
    0x0001d6cc ldrb.w r3, [r5, 0x58]         |             r3 = *((r5 + 0x58));
                                             |             if (r3 != 0) {
    0x0001d6d0 cbnz r3, 0x1d6d8              |                 goto label_4;
                                             |             }
    0x0001d6d2 mov r0, r5                    |             r0 = r5;
    0x0001d6d4 bl 0x1d600                    |             fcn_0001d600 (r0);
                                             |         }
                                             | label_4:
    0x0001d6d8 movs r0, 0                    |         r0 = 0;
    0x0001d6da b 0x1d6ee                     |         goto label_5;
    0x0001d6dc ldr r3, [pc, 0x54]            |         
    0x0001d6de add r3, pc                    |         r3 = 0x3ae16;
    0x0001d6e0 ldr r2, [r3]                  |         r2 = *(0x3ae16);
                                             |         if (r2 != 0) {
    0x0001d6e2 cbnz r2, 0x1d706              |             goto label_6;
                                             |         }
    0x0001d6e4 ldr r3, [r3, 0x20]            |         r3 = *((r3 + 0x20));
    0x0001d6e6 mov r0, r4                    |         r0 = r4;
    0x0001d6e8 blx r3                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                             | label_0:
    0x0001d6ea cmp r0, 0                     |         
    0x0001d6ec beq 0x1d6c6                   |         
                                             |     }
                                             | label_5:
    0x0001d6ee ldr r2, [pc, 0x48]            |     
    0x0001d6f0 ldr r3, [pc, 0x3c]            |     r3 = *(0x1d730);
    0x0001d6f2 add r2, pc                    |     r2 = 0x3ae30;
    0x0001d6f4 ldr r3, [r2, r3]              |     r3 = *(0x3ae30);
    0x0001d6f6 ldr r2, [r3]                  |     r2 = *(0x3ae30);
    0x0001d6f8 ldr r3, [sp, 4]               |     r3 = var_4h;
    0x0001d6fa eors r2, r3                   |     r2 ^= r3;
    0x0001d6fc mov.w r3, 0                   |     r3 = 0;
                                             |     if (r2 == r3) {
    0x0001d700 bne 0x1d726                   |         
    0x0001d702 add sp, 8                     |         
    0x0001d704 pop {r4, r5, r6, pc}          |         
                                             | label_6:
    0x0001d706 ldr r6, [pc, 0x34]            |         
    0x0001d708 add r6, pc                    |         r6 = 0x3ae4a;
    0x0001d70a ldr.w r0, [r6, 0xa8]          |         r0 = *(0x3aef2);
    0x0001d70e blx 0xa12c                    |         fcn_0000a12c ();
    0x0001d712 mov r1, sp                    |         r1 = sp;
    0x0001d714 mov r0, r4                    |         r0 = r4;
    0x0001d716 bl 0x116c4                    |         fcn_000116c4 (r0, r1);
    0x0001d71a ldr.w r0, [r6, 0xa8]          |         r0 = *(0x3aef2);
    0x0001d71e blx 0x9d10                    |         fcn_00009d10 ();
    0x0001d722 ldr r0, [sp]                  |         r0 = *(sp);
    0x0001d724 b 0x1d6ea                     |         goto label_0;
                                             |     }
    0x0001d726 blx 0x9b44                    |     fcn_00009b44 ();
    0x0001d72a nop                           |     
    0x0001d72c adds r4, 0x56                 |     r4 += 0x56;
    0x0001d72e movs r0, r1                   |     r0 = r1;
    0x0001d730 lsls r0, r1, 0x13             |     r0 = r1 << 0x13;
    0x0001d732 movs r0, r0                   |     
    0x0001d734 subs r1, 0x26                 |     r1 -= 0x26;
    0x0001d736 movs r0, r1                   |     r0 = r1;
    0x0001d738 adds r4, 0xe                  |     r4 += 0xe;
    0x0001d73a movs r0, r1                   |     r0 = r1;
    0x0001d73c ldrsb r4, [r3, r1]            |     r4 = *((r3 + r1));
    0x0001d73e movs r0, r1                   |     r0 = r1;
    0x0001d740 ldrh.w ip, [r0, 0x134]        |     ip = *((r0 + 0x134));
    0x0001d744 mov r1, r0                    |     r1 = r0;
    0x0001d746 movs r0, 0                    |     r0 = 0;
    0x0001d748 push {r4}                     |     
    0x0001d74a cmp ip, r2                    |     
    0x0001d74c sbcs.w ip, r0, r3             |     __asm ("sbcs.w ip, r0, r3");
                                             |     if (ip >= r2) {
    0x0001d750 bhs 0x1d782                   |         goto label_7;
                                             |     }
    0x0001d752 ldr.w r4, [r1, 0x130]         |     r4 = *((r1 + 0x130));
                                             |     if (r4 == 0) {
    0x0001d756 cbz r4, 0x1d7a6               |         goto label_8;
                                             |     }
    0x0001d758 ldrb.w r4, [r1, 0x57]         |     r4 = *((r1 + 0x57));
                                             |     if (r4 != 0) {
    0x0001d75c cbnz r4, 0x1d77c              |         goto label_2;
                                             |     }
    0x0001d75e ldr r4, [sp], 4               |     r4 = *(sp);
                                             |     sp += 4;
    0x0001d762 mov r0, r1                    |     r0 = r1;
    0x0001d764 b 0x1d694                     |     goto label_1;
                                             |     do {
                                             | label_3:
    0x0001d766 ldr.w r0, [r1, 0x150]         |         r0 = *((r1 + 0x150));
                                             |         if (r0 == 0) {
    0x0001d76a cbz r0, 0x1d7b8               |             goto label_9;
                                             |         }
    0x0001d76c ldr.w r3, [r1, 0x140]         |         r3 = *((r1 + 0x140));
    0x0001d770 ldr r2, [r0]                  |         r2 = *(r0);
    0x0001d772 adds r3, 1                    |         r3++;
    0x0001d774 str.w r2, [r1, 0x150]         |         __asm ("str.w r2, aav.0x000000ff");
    0x0001d778 str.w r3, [r1, 0x140]         |         __asm ("str.w r3, aav.0x000000ff");
                                             | label_2:
    0x0001d77c ldr r4, [sp], 4               |         r4 = *(sp);
                                             |         sp += 4;
    0x0001d780 bx lr                         |         return;
                                             | label_7:
    0x0001d782 cmp r2, 0x81                  |         
    0x0001d784 sbcs r0, r3, 0                |         __asm ("sbcs r0, r3, 0");
    0x0001d788 bhs 0x1d766                   |         
                                             |     } while (r2 >= 0x81);
    0x0001d78a ldr.w r0, [r1, 0x158]         |     r0 = *((r1 + 0x158));
                                             |     if (r0 != 0) {
    0x0001d78e cbz r0, 0x1d7d0               |         
    0x0001d790 ldr.w r3, [r1, 0x140]         |         r3 = *((r1 + 0x140));
    0x0001d794 ldr r2, [r0]                  |         r2 = *(r0);
    0x0001d796 ldr r4, [sp], 4               |         r4 = *(sp);
                                             |         sp += 4;
    0x0001d79a adds r3, 1                    |         r3++;
    0x0001d79c str.w r2, [r1, 0x158]         |         __asm ("str.w r2, aav.0x000000ff");
    0x0001d7a0 str.w r3, [r1, 0x140]         |         __asm ("str.w r3, aav.0x000000ff");
    0x0001d7a4 bx lr                         |         return;
                                             | label_8:
    0x0001d7a6 ldr.w r0, [r1, 0x144]         |         r0 = *((r1 + 0x144));
    0x0001d7aa ldr r4, [sp], 4               |         r4 = *(sp);
                                             |         sp += 4;
    0x0001d7ae adds r0, 1                    |         r0++;
    0x0001d7b0 str.w r0, [r1, 0x144]         |         __asm ("str.w r0, aav.0x000000ff");
    0x0001d7b4 mov r0, r1                    |         r0 = r1;
    0x0001d7b6 b 0x1d694                     |         goto label_1;
                                             | label_9:
    0x0001d7b8 ldr.w r0, [r1, 0x14c]         |         r0 = *((r1 + 0x14c));
                                             |         if (r0 == 0) {
    0x0001d7bc cbz r0, 0x1d7ea               |             goto label_10;
                                             |         }
    0x0001d7be ldr.w r3, [r1, 0x140]         |         r3 = *((r1 + 0x140));
    0x0001d7c2 ldr r2, [r0]                  |         r2 = *(r0);
    0x0001d7c4 adds r3, 1                    |         r3++;
    0x0001d7c6 str.w r2, [r1, 0x14c]         |         __asm ("str.w r2, aav.0x000000ff");
    0x0001d7ca str.w r3, [r1, 0x140]         |         __asm ("str.w r3, aav.0x000000ff");
    0x0001d7ce b 0x1d77c                     |         goto label_2;
                                             |     }
    0x0001d7d0 ldr.w r0, [r1, 0x154]         |     r0 = *((r1 + 0x154));
    0x0001d7d4 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0001d7d6 beq 0x1d766                   |         goto label_3;
                                             |     }
    0x0001d7d8 ldr.w r3, [r1, 0x140]         |     r3 = *((r1 + 0x140));
    0x0001d7dc ldr r2, [r0]                  |     r2 = *(r0);
    0x0001d7de adds r3, 1                    |     r3++;
    0x0001d7e0 str.w r2, [r1, 0x154]         |     __asm ("str.w r2, aav.0x000000ff");
    0x0001d7e4 str.w r3, [r1, 0x140]         |     __asm ("str.w r3, aav.0x000000ff");
    0x0001d7e8 b 0x1d77c                     |     goto label_2;
                                             | label_10:
    0x0001d7ea ldr.w r4, [r1, 0x148]         |     r4 = *((r1 + 0x148));
    0x0001d7ee mov r0, r1                    |     r0 = r1;
    0x0001d7f0 adds r4, 1                    |     r4++;
    0x0001d7f2 str.w r4, [r1, 0x148]         |     __asm ("str.w r4, aav.0x000000ff");
    0x0001d7f6 ldr r4, [sp], 4               |     r4 = *(sp);
                                             |     sp += 4;
    0x0001d7fa b 0x1d694                     |     goto label_1;
                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/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 arg2, int16_t arg3) {
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x0001d7fc push.w {r4, r5, r6, r7, r8, lr}           |     
    0x0001d800 mov r4, r2                                |     r4 = r2;
    0x0001d802 add.w r2, r2, r2, lsr 31                  |     r2 += (r2 >> 31);
    0x0001d806 mov r5, r1                                |     r5 = r1;
    0x0001d808 asrs r2, r2, 1                            |     r2 >>= 1;
    0x0001d80a adds r2, 1                                |     r2++;
    0x0001d80c asrs r3, r2, 0x1f                         |     r3 = r2 >> 0x1f;
    0x0001d80e bl 0x1d740                                |     r0 = fcn_0001d740 (r0, r1);
                                                         |     if (r0 == 0) {
    0x0001d812 cbz r0, 0x1d862                           |         goto label_0;
                                                         |     }
    0x0001d814 add.w lr, r4, -1                          |     lr = r4 + -1;
    0x0001d818 cmp.w lr, 0                               |     
                                                         |     if (lr <= 0) {
    0x0001d81c ble 0x1d866                               |         goto label_1;
                                                         |     }
    0x0001d81e movs r2, 0                                |     r2 = 0;
    0x0001d820 adds r6, r5, 1                            |     r6 = r5 + 1;
                                                         |     do {
    0x0001d822 ldrb.w r8, [r5, r2]                       |         r8 = *((r5 + r2));
    0x0001d826 asrs r1, r2, 1                            |         r1 = r2 >> 1;
    0x0001d828 ldrb r7, [r6, r2]                         |         r7 = *((r6 + r2));
    0x0001d82a adds r2, 2                                |         r2 += 2;
    0x0001d82c cmp lr, r2                                |         
    0x0001d82e ubfx ip, r8, 6, 1                         |         ip = (r8 >> 6) & ((1 << 1) - 1);
    0x0001d832 ubfx r3, r7, 6, 1                         |         r3 = (r7 >> 6) & ((1 << 1) - 1);
    0x0001d836 add.w ip, ip, ip, lsl 3                   |         
    0x0001d83a add.w r3, r3, r3, lsl 3                   |         r3 += (r3 << 3);
    0x0001d83e add ip, r8                                |         
    0x0001d840 add r3, r7                                |         r3 += r7;
    0x0001d842 and ip, ip, 0xf                           |         
    0x0001d846 and r3, r3, 0xf                           |         r3 &= 0xf;
    0x0001d84a orr.w r3, r3, ip, lsl 4                   |         r3 |= (ip << 4);
    0x0001d84e strb r3, [r0, r1]                         |         *((r0 + r1)) = r3;
    0x0001d850 bgt 0x1d822                               |         
                                                         |     } while (lr > r2);
    0x0001d852 subs r3, r4, 2                            |     r3 = r4 - 2;
    0x0001d854 bic r3, r3, 1                             |     r3 = BIT_MASK (r3, 1);
    0x0001d858 adds r3, 2                                |     r3 += 2;
    0x0001d85a add.w r3, r0, r3, asr 1                   |     r3 = r0 + (r3 >> 1);
                                                         |     do {
    0x0001d85e movs r2, 0                                |         r2 = 0;
    0x0001d860 strb r2, [r3]                             |         *(r3) = r2;
                                                         | label_0:
    0x0001d862 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_1:
    0x0001d866 mov r3, r0                                |         r3 = r0;
    0x0001d868 b 0x1d85e                                 |         
                                                         |     } while (1);
                                                         | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1d86c */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0001d86c ()                          | void fcn_0001d86c (int16_t arg2, arithmetic x) {
                                                     |     r1 = arg2;
                                                     |     r0 = x;
    0x0001d86c push {r3, r4, r5, r6, r7, lr}         |     
    0x0001d86e mov r7, r1                            |     r7 = r1;
    0x0001d870 ldrh.w r1, [r0, 0x90]                 |     r1 = *((r0 + 0x90));
    0x0001d874 mov r5, r0                            |     r5 = r0;
    0x0001d876 ldr r6, [r0]                          |     r6 = *(r0);
                                                     |     if (r1 != 0) {
    0x0001d878 cbnz r1, 0x1d8b0                      |         goto label_1;
                                                     |     }
                                                     | label_0:
    0x0001d87a add.w r4, r7, r7, lsl 2               |     r4 = r7 + (r7 << 2);
    0x0001d87e movs r3, 0                            |     r3 = 0;
    0x0001d880 mov r0, r6                            |     r0 = r6;
    0x0001d882 strh.w r7, [r5, 0x90]                 |     *((r5 + 0x90)) = r7;
    0x0001d886 add.w r2, r4, r4, lsl 2               |     r2 = r4 + (r4 << 2);
    0x0001d88a lsls r2, r2, 3                        |     r2 <<= 3;
    0x0001d88c bl 0x1d740                            |     r0 = fcn_0001d740 (r0, r1);
    0x0001d890 cmp r0, 0                             |     
    0x0001d892 it ne                                 |     
                                                     |     if (r0 != 0) {
    0x0001d894 cmpne r4, 0                           |         __asm ("cmpne r4, 0");
                                                     |     }
    0x0001d896 str r0, [r5, 0x74]                    |     *((r5 + 0x74)) = r0;
                                                     |     if (r0 <= 0) {
    0x0001d898 bgt 0x1d89c                           |         
    0x0001d89a pop {r3, r4, r5, r6, r7, pc}          |         
                                                     |     }
    0x0001d89c movs r2, 1                            |     r2 = 1;
    0x0001d89e movs r3, 0                            |     r3 = 0;
                                                     |     do {
    0x0001d8a0 subs r4, 1                            |         r4--;
    0x0001d8a2 strh r2, [r0, 0x10]                   |         *((r0 + 0x10)) = r2;
    0x0001d8a4 strd r6, r3, [r0, 0x14]               |         __asm ("strd r6, r3, [r0, 0x14]");
    0x0001d8a8 add.w r0, r0, 0x28                    |         r0 += 0x28;
    0x0001d8ac bne 0x1d8a0                           |         
                                                     |     } while (r4 != 1);
    0x0001d8ae pop {r3, r4, r5, r6, r7, pc}          |     
                                                     | label_1:
    0x0001d8b0 ldr r0, [r0, 0x74]                    |     r0 = *((r0 + 0x74));
    0x0001d8b2 cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x0001d8b4 beq 0x1d87a                           |         goto label_0;
                                                     |     }
    0x0001d8b6 add.w r1, r1, r1, lsl 2               |     r1 += (r1 << 2);
    0x0001d8ba bl 0x14448                            |     fcn_00014448 (r0, r1);
    0x0001d8be ldr r1, [r5, 0x74]                    |     r1 = *((r5 + 0x74));
    0x0001d8c0 cmp r1, 0                             |     
                                                     |     if (r1 == 0) {
    0x0001d8c2 beq 0x1d87a                           |         goto label_0;
                                                     |     }
    0x0001d8c4 mov r0, r6                            |     r0 = r6;
    0x0001d8c6 bl 0x137d0                            |     fcn_000137d0 (r0, r1);
    0x0001d8ca b 0x1d87a                             |     goto label_0;
                                                     | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1db90 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0001db90 ()                              | void fcn_0001db90 (int16_t arg_3e0h, arithmetic arg1, int16_t arg2, arithmetic arg3, int16_t arg4) {
                                                         |     int16_t var_0h;
                                                         |     int16_t var_4h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x0001db90 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x0001db94 mov r7, r1                                |     r7 = r1;
    0x0001db96 ldr r1, [pc, 0x134]                       |     
    0x0001db98 mov r8, r3                                |     r8 = r3;
    0x0001db9a sub sp, 8                                 |     
    0x0001db9c movs r6, 0                                |     r6 = 0;
    0x0001db9e ldr r3, [pc, 0x130]                       |     r3 = *(0x1dcd2);
    0x0001dba0 mov r5, r2                                |     r5 = r2;
    0x0001dba2 add r1, pc                                |     r1 = 0x3b874;
    0x0001dba4 ldr r3, [r1, r3]                          |     
    0x0001dba6 ldr r3, [r3]                              |     r3 = *(0x3b874);
    0x0001dba8 str r3, [sp, 4]                           |     var_4h = r3;
    0x0001dbaa mov.w r3, 0                               |     r3 = 0;
    0x0001dbae str r6, [sp]                              |     *(sp) = r6;
    0x0001dbb0 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x0001dbb2 beq 0x1dc7c                               |         goto label_4;
                                                         |     }
    0x0001dbb4 cmp r7, 0x9b                              |     
    0x0001dbb6 mov r4, r0                                |     r4 = r0;
                                                         |     if (r7 == 0x9b) {
    0x0001dbb8 beq 0x1dc2e                               |         goto label_5;
                                                         |     }
                                                         | label_0:
    0x0001dbba ldr r6, [r5, 4]                           |     r6 = *((r5 + 4));
    0x0001dbbc mov r0, r4                                |     r0 = r4;
    0x0001dbbe movs r3, 0                                |     r3 = 0;
    0x0001dbc0 add.w r2, r6, 0x35                        |     r2 = r6 + 0x35;
    0x0001dbc4 bl 0x1d740                                |     r0 = fcn_0001d740 (r0, r1);
    0x0001dbc8 mov r4, r0                                |     r4 = r0;
                                                         |     if (r0 != 0) {
    0x0001dbca cbnz r0, 0x1dbea                          |         goto label_6;
                                                         |     }
                                                         | label_1:
    0x0001dbcc movs r4, 0                                |     r4 = 0;
                                                         |     do {
    0x0001dbce ldr r2, [pc, 0x104]                       |         
    0x0001dbd0 ldr r3, [pc, 0xfc]                        |         r3 = *(0x1dcd0);
    0x0001dbd2 add r2, pc                                |         r2 = 0x3b8ac;
    0x0001dbd4 ldr r3, [r2, r3]                          |         r3 = *(0x3b8ac);
    0x0001dbd6 ldr r2, [r3]                              |         r2 = *(0x3b8ac);
    0x0001dbd8 ldr r3, [sp, 4]                           |         r3 = var_4h;
    0x0001dbda eors r2, r3                               |         r2 ^= r3;
    0x0001dbdc mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x0001dbe0 bne 0x1dcc8                               |             goto label_7;
                                                         |         }
    0x0001dbe2 mov r0, r4                                |         r0 = r4;
    0x0001dbe4 add sp, 8                                 |         
    0x0001dbe6 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_6:
    0x0001dbea movs r2, 0x33                             |         r2 = 0x33;
    0x0001dbec movs r1, 0                                |         r1 = 0;
    0x0001dbee adds r0, 1                                |         r0++;
    0x0001dbf0 blx 0x97d4                                |         fcn_000097d4 ();
    0x0001dbf4 adds r6, 1                                |         r6++;
    0x0001dbf6 movw r3, 0xffff                           |         r3 = 0xffff;
    0x0001dbfa strb r7, [r4]                             |         *(r4) = r7;
    0x0001dbfc strh r3, [r4, 0x22]                       |         *((r4 + 0x22)) = r3;
                                                         |         if (r6 == 1) {
    0x0001dbfe beq 0x1dc60                               |             goto label_8;
                                                         |         }
    0x0001dc00 ldr r2, [r5, 4]                           |         r2 = *((r5 + 4));
    0x0001dc02 add.w r3, r4, 0x34                        |         r3 = r4 + 0x34;
    0x0001dc06 str r3, [r4, 8]                           |         *((r4 + 8)) = r3;
    0x0001dc08 cmp r2, 0                                 |         
                                                         |         if (r2 != 0) {
    0x0001dc0a bne 0x1dc9e                               |             goto label_9;
                                                         |         }
                                                         | label_3:
    0x0001dc0c movs r1, 0                                |         r1 = 0;
    0x0001dc0e strb r1, [r3, r2]                         |         *((r3 + r2)) = r1;
    0x0001dc10 cmp.w r8, 0                               |         
                                                         |         if (r8 != 0) {
    0x0001dc14 beq 0x1dc28                               |             
    0x0001dc16 ldr r0, [r4, 8]                           |             r0 = *((r4 + 8));
    0x0001dc18 ldr r3, [pc, 0xbc]                        |             
    0x0001dc1a ldrb r2, [r0]                             |             r2 = *(r0);
    0x0001dc1c add r3, pc                                |             r3 = 0x3b8f8;
    0x0001dc1e add r3, r2                                |             r3 += r2;
    0x0001dc20 ldrsb.w r3, [r3, 0x40]                    |             r3 = *((r3 + 0x40));
    0x0001dc24 cmp r3, r1                                |             
                                                         |             if (r3 < r1) {
    0x0001dc26 blt 0x1dcac                               |                 goto label_10;
                                                         |             }
                                                         |         }
                                                         | label_2:
    0x0001dc28 movs r3, 1                                |         r3 = 1;
    0x0001dc2a str r3, [r4, 0x18]                        |         *((r4 + 0x18)) = r3;
    0x0001dc2c b 0x1dbce                                 |         
                                                         |     } while (1);
                                                         | label_5:
    0x0001dc2e ldr r0, [r2]                              |     r0 = *(r2);
    0x0001dc30 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x0001dc32 beq 0x1dbba                               |         goto label_0;
                                                         |     }
    0x0001dc34 mov r1, sp                                |     r1 = sp;
    0x0001dc36 bl 0xd180                                 |     r0 = fcn_0000d180 (r0, r1);
    0x0001dc3a cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x0001dc3c beq 0x1dbba                               |         goto label_0;
                                                         |     }
    0x0001dc3e mov r0, r4                                |     r0 = r4;
    0x0001dc40 movs r2, 0x34                             |     r2 = 0x34;
    0x0001dc42 movs r3, 0                                |     r3 = 0;
    0x0001dc44 bl 0x1d740                                |     r0 = fcn_0001d740 (r0, r1);
    0x0001dc48 mov r4, r0                                |     r4 = r0;
    0x0001dc4a cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x0001dc4c beq 0x1dbcc                               |         goto label_1;
                                                         |     }
    0x0001dc4e movs r2, 0x33                             |     r2 = 0x33;
    0x0001dc50 mov r1, r6                                |     r1 = r6;
    0x0001dc52 adds r0, r4, 1                            |     r0 = r4 + 1;
    0x0001dc54 blx 0x97d4                                |     fcn_000097d4 ();
    0x0001dc58 movw r3, 0xffff                           |     r3 = 0xffff;
    0x0001dc5c strb r7, [r4]                             |     *(r4) = r7;
    0x0001dc5e strh r3, [r4, 0x22]                       |     *((r4 + 0x22)) = r3;
                                                         | label_8:
    0x0001dc60 ldr r2, [sp]                              |     r2 = *(sp);
    0x0001dc62 mov.w r3, 0x800                           |     r3 = 0x800;
    0x0001dc66 mov r1, r3                                |     r1 = r3;
    0x0001dc68 movt r3, 0x1080                           |     r3 = (r3 & 0xFFFF) | 0x10800000;
    0x0001dc6c movt r1, 0x2080                           |     r1 = (r1 & 0xFFFF) | 0x20800000;
    0x0001dc70 cmp r2, 0                                 |     
    0x0001dc72 it eq                                     |     
                                                         |     if (r2 != 0) {
    0x0001dc74 moveq r3, r1                              |         r3 = r1;
                                                         |     }
    0x0001dc76 strd r3, r2, [r4, 4]                      |     __asm ("strd r3, r2, [r4, 4]");
    0x0001dc7a b 0x1dc28                                 |     goto label_2;
                                                         | label_4:
    0x0001dc7c movs r2, 0x34                             |     r2 = 0x34;
    0x0001dc7e movs r3, 0                                |     r3 = 0;
    0x0001dc80 bl 0x1d740                                |     r0 = fcn_0001d740 (r0, r1);
    0x0001dc84 mov r4, r0                                |     r4 = r0;
    0x0001dc86 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x0001dc88 beq 0x1dbcc                               |         goto label_1;
                                                         |     }
    0x0001dc8a movs r2, 0x33                             |     r2 = 0x33;
    0x0001dc8c mov r1, r5                                |     r1 = r5;
    0x0001dc8e adds r0, r4, 1                            |     r0 = r4 + 1;
    0x0001dc90 blx 0x97d4                                |     fcn_000097d4 ();
    0x0001dc94 movw r3, 0xffff                           |     r3 = 0xffff;
    0x0001dc98 strb r7, [r4]                             |     *(r4) = r7;
    0x0001dc9a strh r3, [r4, 0x22]                       |     *((r4 + 0x22)) = r3;
    0x0001dc9c b 0x1dc28                                 |     goto label_2;
                                                         | label_9:
    0x0001dc9e mov r0, r3                                |     r0 = r3;
    0x0001dca0 ldr r1, [r5]                              |     r1 = *(r5);
    0x0001dca2 blx 0x9e2c                                |     fcn_00009e2c ();
    0x0001dca6 ldr r2, [r5, 4]                           |     r2 = *((r5 + 4));
    0x0001dca8 mov r3, r0                                |     r3 = r0;
    0x0001dcaa b 0x1dc0c                                 |     goto label_3;
                                                         | label_10:
    0x0001dcac ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x0001dcae cmp r2, 0x22                              |     
    0x0001dcb0 mov.w r3, 0x80                            |     
    0x0001dcb4 movt r3, 0x400                            |     r3 = 0x4000080;
    0x0001dcb8 it ne                                     |     
                                                         |     if (r2 == 0x22) {
    0x0001dcba movne r3, 0x4000000                       |         r3 = 0x4000000;
                                                         |     }
    0x0001dcbe orrs r1, r3                               |     r1 |= r3;
    0x0001dcc0 str r1, [r4, 4]                           |     *((r4 + 4)) = r1;
    0x0001dcc2 bl 0xa4e0                                 |     fcn_0000a4e0 (r0);
    0x0001dcc6 b 0x1dc28                                 |     goto label_2;
                                                         | label_7:
    0x0001dcc8 blx 0x9b44                                |     fcn_00009b44 ();
    0x0001dccc cmp r7, 0x5e                              |     
    0x0001dcce movs r0, r1                               |     r0 = r1;
    0x0001dcd0 lsls r0, r1, 0x13                         |     r0 = r1 << 0x13;
    0x0001dcd2 movs r0, r0                               |     
    0x0001dcd4 cmp r7, 0x2e                              |     
    0x0001dcd6 movs r0, r1                               |     r0 = r1;
    0x0001dcd8 str r0, [sp, 0x3e0]                       |     *(arg_3e0h) = r0;
    0x0001dcda movs r7, r0                               |     r7 = r0;
                                                         | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1e178 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0001e178 ()                                  | void fcn_0001e178 (arithmetic arg1, int16_t arg2, int16_t arg3) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
    0x0001e178 invalid                                       |     
    0x0001e17c adds r6, r1, r2                               |     r6 = r1 + r2;
    0x0001e17e add.w r8, r6, r6, lsl 2                       |     r8 = r6 + (r6 << 2);
    0x0001e182 mov r7, r2                                    |     r7 = r2;
    0x0001e184 movs r3, 0                                    |     r3 = 0;
    0x0001e186 add.w r2, r8, 0x14                            |     r2 = r8 + 0x14;
    0x0001e18a mov r5, r1                                    |     r5 = r1;
    0x0001e18c mov sb, r0                                    |     sb = r0;
    0x0001e18e bl 0x1d740                                    |     r0 = fcn_0001d740 (r0, r1);
    0x0001e192 mov r4, r0                                    |     r4 = r0;
                                                             |     if (r0 == 0) {
    0x0001e194 cbz r0, 0x1e1c8                               |         goto label_1;
                                                             |     }
    0x0001e196 uxth r5, r5                                   |     r5 = (int16_t) r5;
    0x0001e198 adds r3, r6, 5                                |     r3 = r6 + 5;
    0x0001e19a add.w r3, r0, r3, lsl 2                       |     r3 = r0 + (r3 << 2);
    0x0001e19e sub.w r8, r8, 4                               |     r8 -= 4;
    0x0001e1a2 add r7, r5                                    |     r7 += r5;
    0x0001e1a4 strh r5, [r0, 6]                              |     *((r0 + 6)) = r5;
    0x0001e1a6 str r3, [r0, 0x10]                            |     *((r0 + 0x10)) = r3;
    0x0001e1a8 movs r3, 1                                    |     r3 = 1;
    0x0001e1aa strh r7, [r0, 8]                              |     *((r0 + 8)) = r7;
    0x0001e1ac mov r2, r8                                    |     r2 = r8;
    0x0001e1ae ldrb.w r1, [sb, 0x54]                         |     r1 = *((sb + 0x54));
    0x0001e1b2 str.w sb, [r0, 0xc]                           |     __asm ("str.w sb, [r0, 0xc]");
    0x0001e1b6 strb r1, [r0, 4]                              |     *((r0 + 4)) = r1;
    0x0001e1b8 movs r1, 0                                    |     r1 = 0;
    0x0001e1ba str r3, [r0], 0x18                            |     *(r0) = r3;
                                                             |     r0 += 0x18;
    0x0001e1be blx 0x97d4                                    |     fcn_000097d4 ();
                                                             |     do {
                                                             | label_0:
    0x0001e1c2 mov r0, r4                                    |         r0 = r4;
    0x0001e1c4 pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |         
                                                             | label_1:
    0x0001e1c8 ldrb.w r3, [sb, 0x57]                         |         r3 = *((sb + 0x57));
    0x0001e1cc cmp r3, 0                                     |         
    0x0001e1ce bne 0x1e1c2                                   |         
                                                             |     } while (r3 != 0);
    0x0001e1d0 ldrb.w r3, [sb, 0x58]                         |     r3 = *((sb + 0x58));
    0x0001e1d4 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0001e1d6 bne 0x1e1c2                                   |         goto label_0;
                                                             |     }
    0x0001e1d8 mov r0, sb                                    |     r0 = sb;
    0x0001e1da bl 0x1d600                                    |     fcn_0001d600 (r0);
    0x0001e1de b 0x1e1c2                                     |     goto label_0;
                                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1e248 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0001e248 ()                                          | void fcn_0001e248 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0001e248 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0001e24c mov r5, r0                                            |     r5 = r0;
    0x0001e24e ldrd r6, r3, [r0, 0xc]                                |     __asm ("ldrd r6, r3, [r0, 0xc]");
    0x0001e252 mov r4, r1                                            |     r4 = r1;
    0x0001e254 mov r7, r2                                            |     r7 = r2;
    0x0001e256 ldr.w r8, [r0, 0x18]                                  |     r8 = *((r0 + 0x18));
    0x0001e25a cmp r6, r3                                            |     
                                                                     |     if (r6 >= r3) {
    0x0001e25c bge 0x1e322                                           |         goto label_3;
                                                                     |     }
                                                                     | label_1:
    0x0001e25e add.w r2, r6, r6, lsl 1                               |     r2 = r6 + (r6 << 1);
    0x0001e262 adds r3, r6, 1                                        |     r3 = r6 + 1;
    0x0001e264 lsls r1, r7, 0x1e                                     |     r1 = r7 << 0x1e;
    0x0001e266 str r3, [r5, 0xc]                                     |     *((r5 + 0xc)) = r3;
    0x0001e268 lsl.w r2, r2, 4                                       |     r2 <<= 4;
    0x0001e26c it pl                                                 |     
                                                                     |     if (r1 < r7) {
    0x0001e26e strpl r3, [r5, 0x14]                                  |         *((r5 + 0x14)) = r3;
                                                                     |     }
    0x0001e270 add.w r0, r8, r2                                      |     r0 = r8 + r2;
    0x0001e274 cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0001e276 beq 0x1e31a                                           |         goto label_4;
                                                                     |     }
    0x0001e278 ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0001e27a lsls r1, r3, 0xc                                      |     r1 = r3 << 0xc;
    0x0001e27c it pl                                                 |     
                                                                     |     if (r1 < r3) {
    0x0001e27e movpl r1, 1                                           |         r1 = 1;
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0001e280 bmi 0x1e2b4                                           |         goto label_5;
                                                                     |     }
                                                                     | label_0:
    0x0001e282 strh r1, [r0, 8]                                      |     *((r0 + 8)) = r1;
    0x0001e284 b 0x1e296                                             |     
                                                                     |     while ((r3 & 0x82000) != 0) {
    0x0001e286 lsls r3, r3, 0xc                                      |         r3 <<= 0xc;
    0x0001e288 itet mi                                               |         
                                                                     |         if (r3 >= r3) {
    0x0001e28a ldrmi r3, [r4, 0x14]                                  |             r3 = *((r4 + 0x14));
                                                                     |         }
                                                                     |         if (r3 < r3) {
    0x0001e28c ldrpl r4, [r4, 0xc]                                   |             r4 = *((r4 + 0xc));
                                                                     |         }
                                                                     |         if (r3 >= r3) {
    0x0001e28e ldrmi r4, [r3, 8]                                     |             r4 = *((r3 + 8));
                                                                     |         }
    0x0001e290 cmp r4, 0                                             |         
                                                                     |         if (r4 == 0) {
    0x0001e292 beq 0x1e31e                                           |             goto label_6;
                                                                     |         }
    0x0001e294 ldr r3, [r4, 4]                                       |         r3 = *((r4 + 4));
    0x0001e296 tst.w r3, 0x82000                                     |         
    0x0001e29a bne 0x1e286                                           |         
                                                                     |     }
                                                                     |     do {
    0x0001e29c str.w r4, [r8, r2]                                    |         __asm ("str.w r4, [r8, r2]");
    0x0001e2a0 movs r1, 0                                            |         r1 = 0;
    0x0001e2a2 strh r7, [r0, 0xa]                                    |         *((r0 + 0xa)) = r7;
    0x0001e2a4 movs r2, 0x24                                         |         r2 = 0x24;
    0x0001e2a6 str r5, [r0, 4]                                       |         *((r0 + 4)) = r5;
    0x0001e2a8 adds r0, 0xc                                          |         r0 += 0xc;
    0x0001e2aa blx 0x97d4                                            |         fcn_000097d4 ();
    0x0001e2ae mov r0, r6                                            |         r0 = r6;
    0x0001e2b0 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                     | label_5:
    0x0001e2b4 ldr r1, [r4, 0x1c]                                    |         r1 = *((r4 + 0x1c));
    0x0001e2b6 cmp r1, 8                                             |         
    0x0001e2b8 asr.w sb, r1, 0x1f                                    |         sb = r1 >> 0x1f;
    0x0001e2bc sbcs ip, sb, 0                                        |         __asm ("sbcs ip, sb, 0");
                                                                     |         if (r1 <= 8) {
    0x0001e2c0 blo 0x1e376                                           |             goto label_7;
                                                                     |         }
    0x0001e2c2 clz lr, sb                                            |         lr &= sb;
    0x0001e2c6 cmp.w sb, 0                                           |         
                                                                     |         if (sb == 0) {
    0x0001e2ca bne 0x1e2d4                                           |             
    0x0001e2cc clz lr, r1                                            |             lr &= r1;
    0x0001e2d0 add.w lr, lr, 0x20                                    |             lr += 0x20;
                                                                     |         }
    0x0001e2d4 rsb.w lr, lr, 0x3c                                    |         lr = 0x3c - lr;
    0x0001e2d8 lsr.w ip, r1, lr                                      |         
    0x0001e2dc add.w r1, lr, lr, lsl 2                               |         r1 = lr + (lr << 2);
    0x0001e2e0 rsb.w sl, lr, 0x20                                    |         sl = 0x20 - lr;
    0x0001e2e4 lsls r1, r1, 1                                        |         r1 <<= 1;
    0x0001e2e6 lsl.w sl, sb, sl                                      |         sl = sb << sl;
    0x0001e2ea sub.w lr, lr, 0x20                                    |         lr -= 0x20;
    0x0001e2ee lsr.w lr, sb, lr                                      |         lr = sb >> lr;
    0x0001e2f2 adds r1, 0x28                                         |         r1 += 0x28;
    0x0001e2f4 orr.w ip, ip, sl                                      |         
    0x0001e2f8 uxth r1, r1                                           |         r1 = (int16_t) r1;
    0x0001e2fa orr.w ip, ip, lr                                      |         
                                                                     | label_2:
    0x0001e2fe ldr.w lr, [pc, 0xcc]                                  |         
    0x0001e302 and ip, ip, 7                                         |         
    0x0001e306 sub.w r1, r1, 0x118                                   |         r1 -= 0x118;
    0x0001e30a add lr, pc                                            |         lr += pc;
    0x0001e30c add.w ip, lr, ip, lsl 1                               |         
    0x0001e310 ldrh.w ip, [ip, 0xd58]                                |         ip = *((ip + 0xd58));
    0x0001e314 add r1, ip                                            |         r1 += ip;
    0x0001e316 sxth r1, r1                                           |         __asm ("sxth r1, r1");
    0x0001e318 b 0x1e282                                             |         goto label_0;
                                                                     | label_4:
    0x0001e31a movs r3, 1                                            |         r3 = 1;
    0x0001e31c strh r3, [r0, 8]                                      |         *((r0 + 8)) = r3;
                                                                     | label_6:
    0x0001e31e movs r4, 0                                            |         r4 = 0;
    0x0001e320 b 0x1e29c                                             |         
                                                                     |     } while (1);
                                                                     | label_3:
    0x0001e322 ldr.w sb, [r0]                                        |     sb = *(r0);
    0x0001e326 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0001e32a mov.w sl, 0                                           |     sl = 0;
    0x0001e32e lsls r6, r3, 5                                        |     r6 = r3 << 5;
    0x0001e330 ldr.w r3, [sb]                                        |     r3 = *(sb);
    0x0001e334 adds.w r2, r6, 0x10                                   |     r2 = r6 + 0x10;
    0x0001e338 ldr.w fp, [r3]                                        |     fp = *(r3);
    0x0001e33c adc r3, sl, 0                                         |     __asm ("adc r3, sl, 0");
    0x0001e340 mov r0, fp                                            |     r0 = fp;
    0x0001e342 bl 0x1d740                                            |     r0 = fcn_0001d740 (r0, r1);
                                                                     |     if (r0 != 0) {
    0x0001e346 cbz r0, 0x1e398                                       |         
    0x0001e348 ldr r2, [r5, 0xc]                                     |         r2 = *((r5 + 0xc));
    0x0001e34a mov r1, r8                                            |         r1 = r8;
    0x0001e34c ldr.w r3, [sb, 0x48]                                  |         r3 = *((sb + 0x48));
    0x0001e350 strd r6, sl, [r0, 8]                                  |         __asm ("strd r6, sl, [r0, 8]");
    0x0001e354 add.w r2, r2, r2, lsl 1                               |         r2 += (r2 << 1);
    0x0001e358 str r3, [r0]                                          |         *(r0) = r3;
    0x0001e35a str.w r0, [sb, 0x48]                                  |         __asm ("str.w r0, [sb, 0x48]");
    0x0001e35e adds r0, 0x10                                         |         r0 += 0x10;
    0x0001e360 lsls r2, r2, 4                                        |         r2 <<= 4;
    0x0001e362 str r0, [r5, 0x18]                                    |         *((r5 + 0x18)) = r0;
    0x0001e364 blx 0x9e2c                                            |         fcn_00009e2c ();
    0x0001e368 ldrd r6, r3, [r5, 0xc]                                |         __asm ("ldrd r6, r3, [r5, 0xc]");
    0x0001e36c ldr.w r8, [r5, 0x18]                                  |         r8 = *((r5 + 0x18));
    0x0001e370 lsls r3, r3, 1                                        |         r3 <<= 1;
    0x0001e372 str r3, [r5, 0x10]                                    |         *((r5 + 0x10)) = r3;
    0x0001e374 b 0x1e25e                                             |         goto label_1;
                                                                     | label_7:
    0x0001e376 cmp r1, 2                                             |         
    0x0001e378 sbcs ip, sb, 0                                        |         __asm ("sbcs ip, sb, 0");
                                                                     |         if (r1 <= 2) {
    0x0001e37c blo 0x1e3b2                                           |             goto label_8;
                                                                     |         }
    0x0001e37e adds.w ip, r1, r1                                     |         
    0x0001e382 adc.w sb, sb, sb                                      |         __asm ("adc.w sb, sb, sb");
    0x0001e386 cmp.w ip, 8                                           |         
    0x0001e38a sbcs sb, sb, 0                                        |         __asm ("sbcs sb, sb, 0");
                                                                     |         if (ip >= 8) {
    0x0001e38e bhs 0x1e3c6                                           |             goto label_9;
                                                                     |         }
    0x0001e390 lsl.w ip, r1, 2                                       |         
    0x0001e394 movs r1, 0x14                                         |         r1 = 0x14;
    0x0001e396 b 0x1e2fe                                             |         goto label_2;
                                                                     |     }
    0x0001e398 cmp r4, sl                                            |     
    0x0001e39a ite eq                                                |     
                                                                     |     if (r4 != sl) {
    0x0001e39c moveq r7, 0                                           |         r7 = 0;
                                                                     |     }
                                                                     |     if (r4 == sl) {
    0x0001e39e andne r7, r7, 1                                       |         r7 &= 1;
                                                                     |     }
    0x0001e3a2 str r0, [r5, 0x18]                                    |     *((r5 + 0x18)) = r0;
    0x0001e3a4 cbnz r7, 0x1e3bc                                      |     
                                                                     |     while (1) {
    0x0001e3a6 movs r6, 0                                            |         r6 = 0;
    0x0001e3a8 str.w r8, [r5, 0x18]                                  |         __asm ("str.w r8, [r5, 0x18]");
    0x0001e3ac mov r0, r6                                            |         r0 = r6;
    0x0001e3ae pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                     | label_8:
    0x0001e3b2 movw r1, 0xfef2                                       |         
    0x0001e3b6 movt r1, 0xffff                                       |         r1 = 0xfffffef2;
    0x0001e3ba b 0x1e282                                             |         goto label_0;
    0x0001e3bc mov r1, r4                                            |         r1 = r4;
    0x0001e3be mov r0, fp                                            |         r0 = fp;
    0x0001e3c0 bl 0x16c0c                                            |         fcn_00016c0c (r0, r1);
    0x0001e3c4 b 0x1e3a6                                             |         
                                                                     |     }
                                                                     | label_9:
    0x0001e3c6 movs r1, 0x1e                                         |     r1 = 0x1e;
    0x0001e3c8 b 0x1e2fe                                             |     goto label_2;
                                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1e644 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0001e644 ()                                  | void fcn_0001e644 (int16_t arg1) {
                                                             |     r0 = arg1;
    0x0001e644 push.w {r3, r4, r5, r6, r7, r8, sb, lr}       |     
    0x0001e648 movs r3, 1                                    |     r3 = 1;
    0x0001e64a ldrb.w r6, [r0, 0x3b]                         |     r6 = *((r0 + 0x3b));
    0x0001e64e mov r5, r0                                    |     r5 = r0;
    0x0001e650 movs r7, 0                                    |     r7 = 0;
    0x0001e652 strb.w r3, [r0, 0x38]                         |     *((r0 + 0x38)) = r3;
    0x0001e656 subs r6, 1                                    |     r6--;
    0x0001e658 cmp r6, 0                                     |     
                                                             |     if (r6 > 0) {
    0x0001e65a bgt 0x1e66e                                   |         goto label_3;
                                                             |     }
    0x0001e65c b 0x1e6a4                                     |     goto label_4;
                                                             |     do {
                                                             | label_0:
    0x0001e65e add r4, sb                                    |         r4 += sb;
    0x0001e660 add.w r4, r5, r4, lsl 3                       |         r4 = r5 + (r4 << 3);
    0x0001e664 ldr r3, [r4, 0x40]                            |         r3 = *((r4 + 0x40));
                                                             |         if (r3 == 0) {
    0x0001e666 cbz r3, 0x1e6a6                               |             goto label_5;
                                                             |         }
    0x0001e668 adds r7, 1                                    |         r7++;
    0x0001e66a cmp r7, r6                                    |         
                                                             |         if (r7 == r6) {
    0x0001e66c beq 0x1e714                                   |             goto label_6;
                                                             |         }
                                                             | label_3:
    0x0001e66e ldrb.w r0, [r5, 0x3a]                         |         r0 = *((r5 + 0x3a));
    0x0001e672 mov r1, r6                                    |         r1 = r6;
    0x0001e674 add r0, r7                                    |         r0 += r7;
    0x0001e676 adds r0, 1                                    |         r0++;
    0x0001e678 bl 0x8c49c                                    |         fcn_0008c49c (r0, r1);
    0x0001e67c lsl.w sb, r1, 3                               |         sb = r1 << 3;
    0x0001e680 mov r4, r1                                    |         r4 = r1;
    0x0001e682 add.w r3, sb, r1                              |         r3 = sb + r1;
    0x0001e686 lsls r3, r3, 3                                |         r3 <<= 3;
    0x0001e688 adds r2, r5, r3                               |         r2 = r5 + r3;
    0x0001e68a adds r3, 0x40                                 |         r3 += 0x40;
    0x0001e68c ldr r2, [r2, 0x44]                            |         r2 = *((r2 + 0x44));
    0x0001e68e add.w r8, r5, r3                              |         r8 = r5 + r3;
    0x0001e692 cmp r2, 0                                     |         
    0x0001e694 beq 0x1e65e                                   |         
                                                             |     } while (r2 == 0);
    0x0001e696 mov r0, r8                                    |     r0 = r8;
    0x0001e698 bl 0x106d4                                    |     r0 = fcn_000106d4 (r0);
    0x0001e69c cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001e69e beq 0x1e65e                                   |         goto label_0;
                                                             |     }
                                                             | label_2:
    0x0001e6a0 pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |     
                                                             | label_4:
    0x0001e6a4 mov r8, r7                                    |     r8 = r7;
                                                             | label_5:
    0x0001e6a6 cmp r7, r6                                    |     
                                                             |     if (r7 == r6) {
    0x0001e6a8 beq 0x1e714                                   |         goto label_6;
                                                             |     }
    0x0001e6aa add.w r3, r5, 0x40                            |     r3 = r5 + 0x40;
    0x0001e6ae movw r1, 0x8e39                               |     
    0x0001e6b2 sub.w r3, r8, r3                              |     r3 = r8 - r3;
    0x0001e6b4 lsls r3, r0, 0xc                              |     r3 = r0 << 0xc;
                                                             |     /* if there is a right shift of 1, then it's a division by 1/9 */
    0x0001e6b6 movt r1, 0x38e3                               |     r1 = 0x38e38e39;
    0x0001e6ba asrs r3, r3, 3                                |     r3 >>= 3;
    0x0001e6bc add.w r2, r5, 0x24                            |     r2 = r5 + 0x24;
    0x0001e6c0 ldr.w r4, [r8, 0x14]                          |     r4 = *((r8 + 0x14));
    0x0001e6c4 movs r6, 0                                    |     r6 = 0;
    0x0001e6c6 mul r3, r1, r3                                |     r3 = r1 * r3;
    0x0001e6ca strb.w r3, [r5, 0x3a]                         |     *((r5 + 0x3a)) = r3;
    0x0001e6ce add.w r3, r8, 0x10                            |     r3 = r8 + 0x10;
    0x0001e6d2 ldm r2, {r0, r1, r2}                          |     r0 = *(r2);
                                                             |     r1 = *((r2 + 4));
                                                             |     r2 = *((r2 + 8));
    0x0001e6d4 stm.w r3, {r0, r1, r2}                        |     *(r3) = r0;
                                                             |     *((r3 + 4)) = r1;
                                                             |     *((r3 + 8)) = r2;
    0x0001e6d8 str r6, [r5, 0x24]                            |     *((r5 + 0x24)) = r6;
    0x0001e6da str r6, [r5, 0x2c]                            |     *((r5 + 0x2c)) = r6;
                                                             |     if (r4 == 0) {
    0x0001e6dc cbz r4, 0x1e6fc                               |         goto label_7;
                                                             |     }
    0x0001e6de ldr r3, [pc, 0x48]                            |     
    0x0001e6e0 mov r0, r4                                    |     r0 = r4;
    0x0001e6e2 str r4, [r5, 0x28]                            |     *((r5 + 0x28)) = r4;
    0x0001e6e4 add r3, pc                                    |     
    0x0001e6e6 ldr r3, [r3, 0x2c]                            |     r3 = *(0x3ce3e);
    0x0001e6e8 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0001e6ea str r0, [r5, 0x34]                            |     *((r5 + 0x34)) = r0;
                                                             |     do {
                                                             | label_1:
    0x0001e6ec ldr r1, [pc, 0x3c]                            |         
    0x0001e6ee mov r2, r8                                    |         r2 = r8;
    0x0001e6f0 mov r0, r8                                    |         r0 = r8;
    0x0001e6f2 pop.w {r3, r4, r5, r6, r7, r8, sb, lr}        |         
    0x0001e6f6 add r1, pc                                    |         r1 = 0x3ce26;
    0x0001e6f8 b.w 0x1223c                                   |         void (*0x1223c)() ();
                                                             | label_7:
    0x0001e6fc ldr r3, [r5, 0x28]                            |         r3 = *((r5 + 0x28));
    0x0001e6fe cmp r3, 0                                     |         
    0x0001e700 beq 0x1e6ec                                   |         
                                                             |     } while (r3 == 0);
    0x0001e702 ldr r0, [r5, 0x34]                            |     r0 = *((r5 + 0x34));
    0x0001e704 asrs r1, r0, 0x1f                             |     r1 = r0 >> 0x1f;
    0x0001e706 bl 0x117c8                                    |     fcn_000117c8 (r0);
    0x0001e70a str r0, [r5, 0x28]                            |     *((r5 + 0x28)) = r0;
    0x0001e70c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0001e70e bne 0x1e6ec                                   |         goto label_1;
                                                             |     }
    0x0001e710 movs r0, 7                                    |     r0 = 7;
    0x0001e712 b 0x1e6a0                                     |     goto label_2;
                                                             | label_6:
    0x0001e714 add.w r0, r7, r7, lsl 3                       |     r0 = r7 + (r7 << 3);
    0x0001e718 add.w r1, r5, 0x24                            |     r1 = r5 + 0x24;
    0x0001e71c add.w r0, r5, r0, lsl 3                       |     r0 = r5 + (r0 << 3);
    0x0001e720 pop.w {r3, r4, r5, r6, r7, r8, sb, lr}        |     
    0x0001e724 adds r0, 0x40                                 |     r0 += 0x40;
    0x0001e726 b 0x1e44c                                     |     return void (*0x1e44c)() ();
                                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1e730 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.0001e730 ()                                  | void fcn_0001e730 (int16_t arg1, int16_t arg2) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0001e730 ldr r2, [pc, 0x204]                           |     
    0x0001e732 ldr r3, [pc, 0x208]                           |     r3 = *(0x1e93e);
    0x0001e734 push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x0001e738 sub sp, 8                                     |     
    0x0001e73a add r2, pc                                    |     r2 = 0x3d076;
    0x0001e73c mov r6, r1                                    |     r6 = r1;
    0x0001e73e mov r5, r0                                    |     r5 = r0;
    0x0001e740 ldr r3, [r2, r3]                              |     
    0x0001e742 ldr r3, [r3]                                  |     r3 = *(0x3d076);
    0x0001e744 str r3, [sp, 4]                               |     var_4h = r3;
    0x0001e746 mov.w r3, 0                                   |     r3 = 0;
    0x0001e74a ldr r3, [r1, 8]                               |     r3 = *((r1 + 8));
    0x0001e74c ldrb r2, [r3, 1]                              |     r2 = *((r3 + 1));
    0x0001e74e cmp r2, 0x7f                                  |     
    0x0001e750 str r2, [sp]                                  |     *(sp) = r2;
                                                             |     if (r2 > 0x7f) {
    0x0001e752 bgt.w 0x1e8da                                 |         goto label_9;
                                                             |     }
                                                             | label_3:
    0x0001e756 subs r3, r2, 1                                |     r3 = r2 - 1;
    0x0001e758 cmp r3, 8                                     |     
    0x0001e75a ite hi                                        |     
                                                             |     if (r3 <= 8) {
    0x0001e75c movhi r3, 0                                   |         r3 = 0;
                                                             |     }
                                                             |     if (r3 > 8) {
    0x0001e75e movls r3, 1                                   |         r3 = 1;
                                                             |     }
    0x0001e760 cmp r2, 7                                     |     
    0x0001e762 it eq                                         |     
                                                             |     if (r2 != 7) {
    0x0001e764 moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x0001e766 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0001e768 beq 0x1e840                                   |         goto label_10;
                                                             |     }
    0x0001e76a ldrb.w r3, [r5, 0x3c]                         |     r3 = *((r5 + 0x3c));
    0x0001e76e and r3, r3, 1                                 |     r3 &= 1;
                                                             | label_0:
    0x0001e772 strb.w r3, [r5, 0x3c]                         |     *((r5 + 0x3c)) = r3;
    0x0001e776 mov.w ip, 1                                   |     
    0x0001e77a ldr r7, [r6, 0xc]                             |     r7 = *((r6 + 0xc));
    0x0001e77c add.w sb, r7, 8                               |     sb = r7 + 8;
    0x0001e780 asrs r1, r7, 0x1f                             |     r1 = r7 >> 0x1f;
    0x0001e782 lsrs r3, r7, 7                                |     r3 = r7 >> 7;
    0x0001e784 orr.w r3, r3, r1, lsl 25                      |     r3 |= (r1 << 25);
    0x0001e788 lsrs r2, r1, 7                                |     r2 = r1 >> 7;
    0x0001e78a orrs.w r1, r3, r1, lsr 7                      |     r1 = r3 | (r1 >> 7);
                                                             |     if (r1 == r3) {
    0x0001e78e beq 0x1e7a2                                   |         goto label_11;
                                                             |     }
                                                             |     do {
    0x0001e790 lsrs r3, r3, 7                                |         r3 >>= 7;
    0x0001e792 add.w ip, ip, 1                               |         
    0x0001e796 orr.w r3, r3, r2, lsl 25                      |         r3 |= (r2 << 25);
    0x0001e79a lsrs r2, r2, 7                                |         r2 >>= 7;
    0x0001e79c orrs.w r1, r3, r2                             |         r1 = r3 | r2;
    0x0001e7a0 bne 0x1e790                                   |         
                                                             |     } while (r1 != r3);
                                                             | label_11:
    0x0001e7a2 ldr.w r8, [r5, 4]                             |     r8 = *((r5 + 4));
    0x0001e7a6 add.w r4, r7, ip                              |     r4 = r7 + ip;
    0x0001e7aa ldr r0, [r5, 0x28]                            |     r0 = *((r5 + 0x28));
    0x0001e7ac cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x0001e7b0 bne 0x1e81c                                   |         goto label_12;
                                                             |     }
    0x0001e7b2 ldr r3, [r5, 0x2c]                            |     r3 = *((r5 + 0x2c));
    0x0001e7b4 add r3, r4                                    |     r3 += r4;
                                                             |     do {
                                                             | label_8:
    0x0001e7b6 str r3, [r5, 0x2c]                            |         *((r5 + 0x2c)) = r3;
    0x0001e7b8 ldr r3, [r5, 8]                               |         r3 = *((r5 + 8));
    0x0001e7ba cmp r4, r3                                    |         
    0x0001e7bc it gt                                         |         
                                                             |         if (r4 <= r3) {
    0x0001e7be strgt r4, [r5, 8]                             |             *((r5 + 8)) = r4;
                                                             |         }
    0x0001e7c0 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x0001e7c2 beq.w 0x1e902                                 |             goto label_13;
                                                             |         }
    0x0001e7c6 ldr r3, [r5, 0x30]                            |         r3 = *((r5 + 0x30));
                                                             | label_2:
    0x0001e7c8 ldr r2, [r5, 0x34]                            |         r2 = *((r5 + 0x34));
    0x0001e7ca add sb, r3                                    |         sb += r3;
    0x0001e7cc ldr.w lr, [r5, 0x24]                          |         
    0x0001e7d0 cmp sb, r2                                    |         
                                                             |         if (sb > r2) {
    0x0001e7d2 bgt 0x1e854                                   |             goto label_14;
                                                             |         }
                                                             | label_1:
    0x0001e7d4 adds r7, 0xf                                  |         r7 += 0xf;
    0x0001e7d6 adds r4, r0, r3                               |         r4 = r0 + r3;
    0x0001e7d8 bic r7, r7, 7                                 |         r7 = BIT_MASK (r7, 7);
    0x0001e7dc add r7, r3                                    |         r7 += r3;
    0x0001e7de str r7, [r5, 0x30]                            |         *((r5 + 0x30)) = r7;
    0x0001e7e0 cmp.w lr, 0                                   |         
                                                             |         if (lr != 0) {
    0x0001e7e4 beq 0x1e7ec                                   |             
    0x0001e7e6 sub.w r0, lr, r0                              |             r0 = lr - r0;
    0x0001e7ea str r0, [r4, 4]                               |             *((r4 + 4)) = r0;
                                                             |         }
                                                             | label_5:
    0x0001e7ec ldrd r1, r2, [r6, 8]                          |         __asm ("ldrd r1, r2, [r6, 8]");
    0x0001e7f0 add.w r0, r4, 8                               |         r0 = r4 + 8;
    0x0001e7f4 blx 0x9e2c                                    |         fcn_00009e2c ();
    0x0001e7f8 ldr r3, [r6, 0xc]                             |         r3 = *((r6 + 0xc));
    0x0001e7fa str r3, [r4]                                  |         *(r4) = r3;
    0x0001e7fc str r4, [r5, 0x24]                            |         *((r5 + 0x24)) = r4;
                                                             | label_7:
    0x0001e7fe ldr r2, [pc, 0x140]                           |         
    0x0001e800 ldr r3, [pc, 0x138]                           |         r3 = *(0x1e93c);
    0x0001e802 add r2, pc                                    |         r2 = 0x3d148;
    0x0001e804 ldr r3, [r2, r3]                              |         r3 = *(0x3d148);
    0x0001e806 ldr r2, [r3]                                  |         r2 = *(0x3d148);
    0x0001e808 ldr r3, [sp, 4]                               |         r3 = var_4h;
    0x0001e80a eors r2, r3                                   |         r2 ^= r3;
    0x0001e80c mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x0001e810 bne.w 0x1e934                                 |             goto label_15;
                                                             |         }
    0x0001e814 mov r0, r8                                    |         r0 = r8;
    0x0001e816 add sp, 8                                     |         
    0x0001e818 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_12:
    0x0001e81c cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x0001e81e beq 0x1e8e6                                   |             goto label_16;
                                                             |         }
    0x0001e820 ldr r3, [r5, 0x30]                            |         r3 = *((r5 + 0x30));
    0x0001e822 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x0001e824 beq 0x1e8c6                                   |             goto label_17;
                                                             |         }
    0x0001e826 add.w r2, sb, r3                              |         r2 = sb + r3;
    0x0001e82a cmp r8, r2                                    |         
                                                             |         if (r8 >= r2) {
    0x0001e82c bge 0x1e8c6                                   |             goto label_17;
                                                             |         }
                                                             | label_4:
    0x0001e82e mov r0, r5                                    |         r0 = r5;
    0x0001e830 bl 0x1e644                                    |         fcn_0001e644 (r0);
    0x0001e834 movs r2, 0                                    |         r2 = 0;
    0x0001e836 mov r8, r0                                    |         r8 = r0;
    0x0001e838 mov r3, r4                                    |         r3 = r4;
    0x0001e83a ldr r0, [r5, 0x28]                            |         r0 = *((r5 + 0x28));
    0x0001e83c str r2, [r5, 0x30]                            |         *((r5 + 0x30)) = r2;
    0x0001e83e b 0x1e7b6                                     |         
                                                             |     } while (1);
                                                             | label_10:
    0x0001e840 cmp r2, 0xa                                   |     
                                                             |     if (r2 <= 0xa) {
    0x0001e842 ble 0x1e772                                   |         goto label_0;
                                                             |     }
    0x0001e844 ands r3, r2, 1                                |     r3 = r2 & 1;
    0x0001e848 itt ne                                        |     
                                                             |     if (r3 == r2) {
    0x0001e84a ldrbne r3, [r5, 0x3c]                         |         r3 = *((r5 + 0x3c));
                                                             |     }
                                                             |     if (r3 != r2) {
    0x0001e84e and r3, r3, 2                                 |         r3 &= 2;
                                                             |     }
    0x0001e852 b 0x1e772                                     |     goto label_0;
                                                             | label_14:
    0x0001e854 asrs r3, r2, 0x1f                             |     r3 = r2 >> 0x1f;
    0x0001e856 adds r2, r2, r2                               |     r2 += r2;
    0x0001e858 mov ip, r2                                    |     
    0x0001e85a adcs r3, r3                                   |     __asm ("adcs r3, r3");
    0x0001e85c sub.w r4, lr, r0                              |     r4 = lr - r0;
    0x0001e860 mov r1, r3                                    |     r1 = r3;
    0x0001e862 cmp.w lr, 0                                   |     
                                                             |     if (lr == 0) {
    0x0001e866 beq 0x1e914                                   |         goto label_18;
                                                             |     }
                                                             | label_6:
    0x0001e868 asr.w lr, sb, 0x1f                            |     lr = sb >> 0x1f;
    0x0001e86c cmp r2, sb                                    |     
    0x0001e86e sbcs.w r3, r3, lr                             |     __asm ("sbcs.w r3, r3, lr");
    0x0001e870 lsls r6, r1, 0xc                              |     r6 = r1 << 0xc;
                                                             |     if (r6 >= r1) {
    0x0001e872 bge 0x1e882                                   |         goto label_19;
                                                             |     }
                                                             |     do {
    0x0001e874 adds.w ip, ip, ip                             |         
    0x0001e878 adcs r1, r1                                   |         __asm ("adcs r1, r1");
    0x0001e87a cmp ip, sb                                    |         
    0x0001e87c sbcs.w r3, r1, lr                             |         __asm ("sbcs.w r3, r1, lr");
    0x0001e880 blt 0x1e874                                   |         
                                                             |     } while (ip < sb);
                                                             | label_19:
    0x0001e882 ldr r2, [r5, 4]                               |     r2 = *((r5 + 4));
    0x0001e884 cmp ip, r2                                    |     
    0x0001e886 asr.w r3, r2, 0x1f                            |     r3 = r2 >> 0x1f;
    0x0001e88a sbcs.w sl, r1, r3                             |     __asm ("sbcs.w sl, r1, r3");
    0x0001e88e itt lt                                        |     
                                                             |     if (ip >= r2) {
    0x0001e890 movlt r2, ip                                  |         r2 = ip;
                                                             |     }
                                                             |     if (ip >= r2) {
    0x0001e892 movlt r3, r1                                  |         r3 = r1;
                                                             |     }
    0x0001e894 cmp r2, sb                                    |     
    0x0001e896 mov sl, r2                                    |     sl = r2;
    0x0001e898 sbcs.w r2, r3, lr                             |     __asm ("sbcs.w r2, r3, lr");
    0x0001e89c itt lt                                        |     
                                                             |     if (r2 >= sb) {
    0x0001e89e movlt sl, sb                                  |         sl = sb;
                                                             |     }
                                                             |     if (r2 >= sb) {
    0x0001e8a0 movlt r3, lr                                  |         r3 = lr;
                                                             |     }
    0x0001e8a2 mov r2, sl                                    |     r2 = sl;
    0x0001e8a4 bl 0x1187c                                    |     r0 = fcn_0001187c (r0, r1, r2);
    0x0001e8a8 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0001e8aa beq 0x1e91a                                   |         goto label_20;
                                                             |     }
    0x0001e8ac cmp r4, 0                                     |     
    0x0001e8ae ldr r3, [r5, 0x30]                            |     r3 = *((r5 + 0x30));
    0x0001e8b0 itet ge                                       |     
                                                             |     if (r4 < 0) {
    0x0001e8b2 addge lr, r0, r4                              |         lr = r0 + r4;
                                                             |     }
                                                             |     if (r4 < 0) {
    0x0001e8b6 ldrge lr, [r5, 0x24]                          |         
                                                             |     }
                                                             |     if (r4 >= 0) {
    0x0001e8ba str.w lr, [r5, 0x24]                          |         __asm ("str.w lr, [r5, 0x24]");
                                                             |     }
    0x0001e8be str.w sl, [r5, 0x34]                          |     __asm ("str.w sl, [r5, 0x34]");
    0x0001e8c2 str r0, [r5, 0x28]                            |     *((r5 + 0x28)) = r0;
    0x0001e8c4 b 0x1e7d4                                     |     goto label_1;
                                                             | label_17:
    0x0001e8c6 ldr r2, [r5, 0x2c]                            |     r2 = *((r5 + 0x2c));
    0x0001e8c8 mov.w r8, 0                                   |     r8 = 0;
    0x0001e8cc add r2, r4                                    |     r2 += r4;
    0x0001e8ce str r2, [r5, 0x2c]                            |     *((r5 + 0x2c)) = r2;
    0x0001e8d0 ldr r2, [r5, 8]                               |     r2 = *((r5 + 8));
    0x0001e8d2 cmp r4, r2                                    |     
    0x0001e8d4 it gt                                         |     
                                                             |     if (r4 <= r2) {
    0x0001e8d6 strgt r4, [r5, 8]                             |         *((r5 + 8)) = r4;
                                                             |     }
    0x0001e8d8 b 0x1e7c8                                     |     goto label_2;
                                                             | label_9:
    0x0001e8da mov r1, sp                                    |     r1 = sp;
    0x0001e8dc adds r0, r3, 1                                |     r0 = r3 + 1;
    0x0001e8de bl 0xf2a0                                     |     fcn_0000f2a0 (r0, r1);
    0x0001e8e2 ldr r2, [sp]                                  |     r2 = *(sp);
    0x0001e8e4 b 0x1e756                                     |     goto label_3;
                                                             | label_16:
    0x0001e8e6 ldr r3, [r5, 0x2c]                            |     r3 = *((r5 + 0x2c));
    0x0001e8e8 cmp r8, r3                                    |     
                                                             |     if (r8 < r3) {
    0x0001e8ea blt 0x1e82e                                   |         goto label_4;
                                                             |     }
    0x0001e8ec ldr r2, [r5]                                  |     r2 = *(r5);
    0x0001e8ee cmp r3, r2                                    |     
                                                             |     if (r3 <= r2) {
    0x0001e8f0 bgt 0x1e920                                   |         
    0x0001e8f2 add r3, r4                                    |         r3 += r4;
    0x0001e8f4 mov.w r8, 0                                   |         r8 = 0;
    0x0001e8f8 str r3, [r5, 0x2c]                            |         *((r5 + 0x2c)) = r3;
    0x0001e8fa ldr r3, [r5, 8]                               |         r3 = *((r5 + 8));
    0x0001e8fc cmp r4, r3                                    |         
    0x0001e8fe it gt                                         |         
                                                             |         if (r4 <= r3) {
    0x0001e900 strgt r4, [r5, 8]                             |             *((r5 + 8)) = r4;
                                                             |         }
                                                             | label_13:
    0x0001e902 mov r0, sb                                    |         r0 = sb;
    0x0001e904 asrs r1, r0, 0x1f                             |         r1 = r0 >> 0x1f;
    0x0001e906 bl 0x117c8                                    |         r0 = fcn_000117c8 (r0);
    0x0001e90a mov r4, r0                                    |         r4 = r0;
                                                             |         if (r0 != 0) {
    0x0001e90c cbz r0, 0x1e91a                               |             
    0x0001e90e ldr r3, [r5, 0x24]                            |             r3 = *((r5 + 0x24));
    0x0001e910 str r3, [r0, 4]                               |             *((r0 + 4)) = r3;
    0x0001e912 b 0x1e7ec                                     |             goto label_5;
                                                             | label_18:
    0x0001e914 mov.w r4, -1                                  |             r4 = -1;
    0x0001e918 b 0x1e868                                     |             goto label_6;
                                                             |         }
                                                             | label_20:
    0x0001e91a mov.w r8, 7                                   |         r8 = 7;
    0x0001e91e b 0x1e7fe                                     |         goto label_7;
                                                             |     }
    0x0001e920 ldr r2, [pc, 0x20]                            |     
    0x0001e922 add r3, r4                                    |     r3 += r4;
    0x0001e924 mov r8, r0                                    |     r8 = r0;
    0x0001e926 add r2, pc                                    |     
    0x0001e928 ldr.w r2, [r2, 0xc0]                          |     r2 = *(0x3d32e);
    0x0001e92c cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x0001e92e beq.w 0x1e7b6                                 |         goto label_8;
                                                             |     }
    0x0001e932 b 0x1e82e                                     |     goto label_4;
                                                             | label_15:
    0x0001e934 blx 0x9b44                                    |     fcn_00009b44 ();
    0x0001e938 movs r3, 0xc6                                 |     r3 = 0xc6;
    0x0001e93a movs r0, r1                                   |     r0 = r1;
    0x0001e93c lsls r0, r1, 0x13                             |     r0 = r1 << 0x13;
    0x0001e93e movs r0, r0                                   |     
    0x0001e940 movs r2, 0xfe                                 |     r2 = 0xfe;
    0x0001e942 movs r0, r1                                   |     r0 = r1;
    0x0001e944 add r6, r7                                    |     r6 += r7;
    0x0001e946 movs r0, r1                                   |     r0 = r1;
                                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1ea68 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0001ea68 ()                  | void fcn_0001ea68 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
    0x0001ea68 invalid                       |     
    0x0001ea6c ldr r4, [pc, 0x58]            |     
    0x0001ea6e ldrb r3, [r1]                 |     r3 = *(r1);
    0x0001ea70 add r4, pc                    |     r4 = 0x3d53c;
    0x0001ea72 add r3, r4                    |     r3 += r4;
    0x0001ea74 ldrb.w r3, [r3, 0x40]         |     r3 = *((r3 + 0x40));
    0x0001ea78 lsls r6, r3, 0x1f             |     r6 = r3 << 0x1f;
                                             |     if (r6 >= r3) {
    0x0001ea7a bpl 0x1ea8a                   |         goto label_0;
                                             |     }
                                             |     do {
    0x0001ea7c ldrb r3, [r5, 1]!             |         r3 = *((r5 += 1));
    0x0001ea80 add r3, r4                    |         r3 += r4;
    0x0001ea82 ldrb.w r3, [r3, 0x40]         |         r3 = *((r3 + 0x40));
    0x0001ea86 lsls r1, r3, 0x1f             |         r1 = r3 << 0x1f;
    0x0001ea88 bmi 0x1ea7c                   |         
                                             |     } while (r1 < r3);
                                             | label_0:
    0x0001ea8a subs r4, r2, r5               |     r4 = r2 - r5;
    0x0001ea8c cmp r4, 0                     |     
                                             |     if (r4 <= 0) {
    0x0001ea8e ble 0x1eaa8                   |         goto label_1;
                                             |     }
    0x0001ea90 ldr r1, [pc, 0x38]            |     
    0x0001ea92 add r1, pc                    |     r1 = 0x3d562;
    0x0001ea94 b 0x1ea9a                     |     
                                             |     while (r3 < r3) {
    0x0001ea96 subs r4, 1                    |         r4--;
                                             |         if (r4 == 1) {
    0x0001ea98 beq 0x1eaa8                   |             goto label_1;
                                             |         }
    0x0001ea9a ldrb r3, [r2, -0x1]!          |         r3 = *((r2 -= 0x1));
    0x0001ea9e add r3, r1                    |         r3 += r1;
    0x0001eaa0 ldrb.w r3, [r3, 0x40]         |         r3 = *((r3 + 0x40));
    0x0001eaa4 lsls r3, r3, 0x1f             |         r3 <<= 0x1f;
    0x0001eaa6 bmi 0x1ea96                   |         
                                             |     }
                                             | label_1:
    0x0001eaa8 asrs r3, r4, 0x1f             |     r3 = r4 >> 0x1f;
    0x0001eaaa adds r2, r4, 1                |     r2 = r4 + 1;
    0x0001eaac adc r3, r3, 0                 |     __asm ("adc r3, r3, 0");
    0x0001eab0 bl 0x1d740                    |     r0 = fcn_0001d740 (r0, r1);
    0x0001eab4 mov r6, r0                    |     r6 = r0;
                                             |     if (r0 != 0) {
    0x0001eab6 cbz r0, 0x1eac4               |         
    0x0001eab8 mov r2, r4                    |         r2 = r4;
    0x0001eaba mov r1, r5                    |         r1 = r5;
    0x0001eabc blx 0x9e2c                    |         fcn_00009e2c ();
    0x0001eac0 movs r3, 0                    |         r3 = 0;
    0x0001eac2 strb r3, [r6, r4]             |         *((r6 + r4)) = r3;
                                             |     }
    0x0001eac4 mov r0, r6                    |     r0 = r6;
    0x0001eac6 pop {r4, r5, r6, pc}          |     
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1ecd8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0001ecd8 ()                                      | void fcn_0001ecd8 (uint32_t arg1, int16_t arg2) {
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0001ecd8 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0001ecdc mov r4, r1                                        |     r4 = r1;
    0x0001ecde ldr r6, [r1, 0xc]                                 |     r6 = *((r1 + 0xc));
    0x0001ece0 sub sp, 0xc                                       |     
    0x0001ece2 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0001ece4 cmp r3, 0xb0                                      |     
    0x0001ece6 it eq                                             |     
                                                                 |     if (r3 != 0xb0) {
    0x0001ece8 ldrbeq r3, [r6, 2]                                |         r3 = *((r6 + 2));
                                                                 |     }
    0x0001ecea cmp r3, 0xb1                                      |     
                                                                 |     if (r3 == 0xb1) {
    0x0001ecec beq 0x1eddc                                       |         goto label_6;
                                                                 |     }
    0x0001ecee cmp r3, 0x8a                                      |     
                                                                 |     if (r3 == 0x8a) {
    0x0001ecf0 beq 0x1edce                                       |         goto label_7;
                                                                 |     }
    0x0001ecf2 movs r2, 2                                        |     r2 = 2;
    0x0001ecf4 movs r3, 0                                        |     r3 = 0;
    0x0001ecf6 movs r1, 1                                        |     r1 = 1;
    0x0001ecf8 str r1, [sp, 4]                                   |     var_4h = r1;
                                                                 | label_5:
    0x0001ecfa ldr r7, [r4, 4]                                   |     r7 = *((r4 + 4));
    0x0001ecfc ands r7, r7, 0x1000                               |     r7 &= 0x1000;
    0x0001ed00 it ne                                             |     
                                                                 |     if (r7 == r7) {
    0x0001ed02 ldrne r7, [r4, 0x14]                              |         r7 = *((r4 + 0x14));
                                                                 |     }
    0x0001ed04 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001ed06 beq 0x1edc2                                       |         goto label_8;
                                                                 |     }
    0x0001ed08 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0001ed0c mov r8, r0                                        |     r8 = r0;
                                                                 | label_4:
    0x0001ed0e cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0001ed12 beq 0x1ed7a                                       |         goto label_9;
                                                                 |     }
    0x0001ed14 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0001ed16 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0001ed18 ble 0x1ed72                                       |         goto label_10;
                                                                 |     }
    0x0001ed1a ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0001ed1c add.w r5, r8, -1                                  |     r5 = r8 + -1;
    0x0001ed20 rsb.w sl, r8, 1                                   |     sl = 1 - r8;
    0x0001ed24 add.w sb, r3, -1                                  |     sb = r3 + -1;
    0x0001ed28 add sb, r8                                        |     sb += r8;
                                                                 |     do {
    0x0001ed2a ldrb r3, [r6]                                     |         r3 = *(r6);
    0x0001ed2c add.w fp, sl, r5                                  |         
    0x0001ed30 cmp r3, 0xb0                                      |         
    0x0001ed32 ite eq                                            |         
                                                                 |         if (r3 != 0xb0) {
    0x0001ed34 ldrbeq r2, [r6, 2]                                |             r2 = *((r6 + 2));
                                                                 |         }
                                                                 |         if (r3 == 0xb0) {
    0x0001ed36 movne r2, r3                                      |             r2 = r3;
                                                                 |         }
    0x0001ed38 cmp r2, 0xb1                                      |         
                                                                 |         if (r2 == 0xb1) {
    0x0001ed3a beq 0x1edaa                                       |             goto label_11;
                                                                 |         }
    0x0001ed3c cmp r2, 0x8a                                      |         
                                                                 |         if (r2 == 0x8a) {
    0x0001ed3e beq 0x1ed82                                       |             goto label_12;
                                                                 |         }
                                                                 | label_0:
    0x0001ed40 mov r0, r6                                        |         r0 = r6;
                                                                 | label_1:
    0x0001ed42 bl 0xd480                                         |         r0 = fcn_0000d480 (r0);
    0x0001ed46 mov r4, r0                                        |         r4 = r0;
                                                                 |         if (r7 != 0) {
    0x0001ed48 cbz r7, 0x1ed6a                                   |             
    0x0001ed4a ldr r3, [r7, 0x1c]                                |             r3 = *((r7 + 0x1c));
    0x0001ed4c add.w r3, r3, fp, lsl 4                           |             r3 += (fp << 4);
    0x0001ed50 ldr r0, [r3, 8]                                   |             r0 = *((r3 + 8));
    0x0001ed52 bl 0xd480                                         |             r0 = fcn_0000d480 (r0);
    0x0001ed56 cmp r0, 0x40                                      |             
    0x0001ed58 it hi                                             |             
                                                                 |             if (r0 > 0x40) {
    0x0001ed5a cmphi r4, 0x40                                    |                 __asm ("cmphi r4, 0x40");
                                                                 |             }
                                                                 |             if (r0 < 0x40) {
    0x0001ed5c bls 0x1edb0                                       |                 goto label_13;
                                                                 |             }
    0x0001ed5e cmp r4, 0x42                                      |             
    0x0001ed60 it ls                                             |             
                                                                 |             if (r4 <= 0x42) {
    0x0001ed62 cmpls r0, 0x42                                    |                 __asm ("cmpls r0, 0x42");
                                                                 |             }
    0x0001ed64 ite hi                                            |             
                                                                 |             if (r4 <= 0x42) {
    0x0001ed66 movhi r4, 0x43                                    |                 r4 = 0x43;
                                                                 |             }
                                                                 |             if (r4 <= 0x42) {
    0x0001ed68 movls r4, 0x41                                    |                 r4 = 0x41;
                                                                 |                 goto label_3;
                                                                 |             }
                                                                 |         }
                                                                 | label_3:
    0x0001ed6a strb r4, [r5, 1]!                                 |         *((r5 += 1)) = r4;
    0x0001ed6e cmp sb, r5                                        |         
    0x0001ed70 bne 0x1ed2a                                       |         
                                                                 |     } while (sb != r5);
                                                                 | label_10:
    0x0001ed72 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x0001ed74 movs r3, 0                                        |     r3 = 0;
    0x0001ed76 strb.w r3, [r8, r2]                               |     *((r8 + r2)) = r3;
                                                                 | label_9:
    0x0001ed7a mov r0, r8                                        |     r0 = r8;
    0x0001ed7c add sp, 0xc                                       |     
    0x0001ed7e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_12:
    0x0001ed82 ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x0001ed84 ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x0001ed86 ldr r2, [r2]                                      |     r2 = *(r2);
                                                                 | label_2:
    0x0001ed88 cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x0001ed8a ble 0x1ed40                                       |         goto label_0;
                                                                 |     }
    0x0001ed8c ldrb r0, [r6, 2]                                  |     r0 = *((r6 + 2));
    0x0001ed8e ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x0001ed90 cmp r3, 0x8a                                      |     
    0x0001ed92 it ne                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x0001ed94 cmpne r0, 0x8a                                    |         __asm ("cmpne r0, 0x8a");
                                                                 |     }
    0x0001ed96 iteet eq                                          |     
                                                                 |     if (r3 != 0x8a) {
    0x0001ed98 ldreq r3, [r2, 0x1c]                              |         r3 = *((r2 + 0x1c));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x0001ed9a addne r2, r2, fp, lsl 4                           |         r2 += (fp << 4);
                                                                 |     }
                                                                 |     if (r3 != 0x8a) {
    0x0001ed9e ldreq r0, [r2, 8]                                 |         r0 = *((r2 + 8));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x0001eda0 add.w r3, r3, fp, lsl 4                           |         r3 += (fp << 4);
                                                                 |     }
    0x0001eda4 it eq                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x0001eda6 ldreq r0, [r3, 8]                                 |         r0 = *((r3 + 8));
                                                                 |     }
    0x0001eda8 b 0x1ed42                                         |     goto label_1;
                                                                 | label_11:
    0x0001edaa ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x0001edac ldr r2, [r2]                                      |     r2 = *(r2);
    0x0001edae b 0x1ed88                                         |     goto label_2;
                                                                 | label_13:
    0x0001edb0 cmp r0, 0x40                                      |     
    0x0001edb2 itete ls                                          |     
                                                                 |     if (r0 > 0x40) {
    0x0001edb4 orrls r4, r4, 0x40                                |         r4 |= 0x40;
                                                                 |     }
                                                                 |     if (r0 > 0x40) {
    0x0001edb8 orrls r0, r0, 0x40                                |         r0 |= 0x40;
                                                                 |     }
                                                                 |     if (r0 <= 0x40) {
    0x0001edbc uxtb r4, r4                                       |         r4 = (int8_t) r4;
                                                                 |     }
                                                                 |     if (r0 > 0x40) {
    0x0001edbe uxtb r4, r0                                       |         r4 = (int8_t) r0;
                                                                 |     }
    0x0001edc0 b 0x1ed6a                                         |     goto label_3;
                                                                 | label_8:
    0x0001edc2 mov r0, r2                                        |     r0 = r2;
    0x0001edc4 mov r1, r3                                        |     r1 = r3;
    0x0001edc6 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x0001edca mov r8, r0                                        |     r8 = r0;
    0x0001edcc b 0x1ed0e                                         |     goto label_4;
                                                                 | label_7:
    0x0001edce ldr r3, [r6, 0x14]                                |     r3 = *((r6 + 0x14));
    0x0001edd0 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0001edd2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001edd4 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0001edd6 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0001edd8 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0001edda b 0x1ecfa                                         |     goto label_5;
                                                                 | label_6:
    0x0001eddc ldr r3, [r6, 0x14]                                |     r3 = *((r6 + 0x14));
    0x0001edde ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001ede0 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0001ede2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0001ede4 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0001ede6 b 0x1ecfa                                         |     goto label_5;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1f1ec */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0001f1ec ()                                      | void fcn_0001f1ec (int16_t arg1, uint32_t arg2) {
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0001f1ec push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x0001f1f0 mov r6, r0                                        |     r6 = r0;
    0x0001f1f2 ldrb r3, [r0, 0x12]                               |     r3 = *((r0 + 0x12));
    0x0001f1f4 mov r7, r1                                        |     r7 = r1;
    0x0001f1f6 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0001f1f8 beq.w 0x1f386                                     |         goto label_17;
                                                                 |     }
    0x0001f1fc cmp r1, 1                                         |     
                                                                 |     if (r1 != 1) {
    0x0001f1fe bne.w 0x1f30e                                     |         goto label_18;
                                                                 |     }
                                                                 | label_2:
    0x0001f202 ldr r5, [r6, 0xc]                                 |     r5 = *((r6 + 0xc));
    0x0001f204 movs r1, 2                                        |     r1 = 2;
    0x0001f206 ldr r0, [r6, 0x14]                                |     r0 = *((r6 + 0x14));
    0x0001f208 movs r2, 1                                        |     r2 = 1;
    0x0001f20a ldr r4, [r6, 8]                                   |     r4 = *((r6 + 8));
    0x0001f20c movs r3, 0                                        |     r3 = 0;
    0x0001f20e bic r5, r5, 1                                     |     r5 = BIT_MASK (r5, 1);
    0x0001f212 smlal r2, r3, r5, r1                              |     __asm ("smlal r2, r3, r5, r1");
    0x0001f216 str r5, [r6, 0xc]                                 |     *((r6 + 0xc)) = r5;
    0x0001f218 add r5, r4                                        |     r5 += r4;
    0x0001f21a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001f21c beq.w 0x1f3a8                                     |         goto label_19;
                                                                 |     }
                                                                 | label_3:
    0x0001f220 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0001f224 mov r8, r0                                        |     r8 = r0;
                                                                 | label_4:
    0x0001f226 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0001f22a beq.w 0x1f57c                                     |         goto label_20;
                                                                 |     }
    0x0001f22e ldrb r3, [r6, 0x12]                               |     r3 = *((r6 + 0x12));
    0x0001f230 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0001f232 beq.w 0x1f3dc                                     |         goto label_21;
                                                                 |     }
    0x0001f236 cmp r3, 2                                         |     
    0x0001f238 mov r2, r8                                        |     r2 = r8;
                                                                 |     if (r3 == 2) {
    0x0001f23a beq.w 0x1f590                                     |         goto label_22;
                                                                 |     }
    0x0001f23e cmp r4, r5                                        |     
                                                                 |     if (r4 <= r5) {
    0x0001f240 blo 0x1f27a                                       |         goto label_0;
                                                                 |     }
    0x0001f242 b 0x1f650                                         |     goto label_23;
                                                                 |     do {
    0x0001f244 lsls r0, r3, 0xa                                  |         r0 = r3 << 0xa;
    0x0001f246 cmp r5, r1                                        |         
    0x0001f248 and ip, r3, 0x3c0                                 |         
    0x0001f24c lsr.w lr, r3, 6                                   |         lr = r3 >> 6;
    0x0001f250 uxth r0, r0                                       |         r0 = (int16_t) r0;
    0x0001f252 add.w ip, ip, 0x40                                |         
                                                                 |         if (r5 > r1) {
    0x0001f256 bhi 0x1f34c                                       |             goto label_24;
                                                                 |         }
                                                                 | label_5:
    0x0001f258 lsrs r0, r3, 0xc                                  |         r0 = r3 >> 0xc;
    0x0001f25a and lr, lr, 0x3f                                  |         lr &= 0x3f;
    0x0001f25e and r3, r3, 0x3f                                  |         r3 &= 0x3f;
    0x0001f262 sub.w lr, lr, 0x80                                |         lr -= 0x80;
    0x0001f266 subs r0, 0x20                                     |         r0 -= 0x20;
    0x0001f268 subs r3, 0x80                                     |         r3 -= 0x80;
    0x0001f26a strb r0, [r2]                                     |         *(r2) = r0;
    0x0001f26c strb.w lr, [r2, 1]                                |         
    0x0001f270 mov r4, r1                                        |         r4 = r1;
    0x0001f272 strb r3, [r2, 2]                                  |         *((r2 + 2)) = r3;
    0x0001f274 adds r2, 3                                        |         r2 += 3;
                                                                 | label_1:
    0x0001f276 cmp r5, r4                                        |         
                                                                 |         if (r5 < r4) {
    0x0001f278 bls 0x1f2a4                                       |             goto label_11;
                                                                 |         }
                                                                 | label_0:
    0x0001f27a mov r1, r4                                        |         r1 = r4;
    0x0001f27c mov ip, r2                                        |         
    0x0001f27e ldrh r3, [r1], 2                                  |         r3 = *(r1);
                                                                 |         r1 += 2;
    0x0001f282 rev16 r3, r3                                      |         __asm ("rev16 r3, r3");
    0x0001f284 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x0001f286 sub.w lr, r3, 0xd800                              |         lr = r3 - 0xd800;
    0x0001f28a uxtb r0, r3                                       |         r0 = (int8_t) r3;
    0x0001f28c cmp.w lr, 0x800                                   |         
    0x0001f290 blo 0x1f244                                       |         
                                                                 |     } while (lr <= 0x800);
    0x0001f292 cmp r3, 0x7f                                      |     
    0x0001f294 mov r4, r1                                        |     r4 = r1;
                                                                 |     if (r3 > 0x7f) {
    0x0001f296 bhi.w 0x1f3b4                                     |         goto label_25;
                                                                 |     }
    0x0001f29a cmp r5, r4                                        |     
    0x0001f29c strb r0, [ip], 1                                  |     *(ip) = r0;
                                                                 |     ip++;
    0x0001f2a0 mov r2, ip                                        |     r2 = ip;
                                                                 |     if (r5 > r4) {
    0x0001f2a2 bhi 0x1f27a                                       |         goto label_0;
                                                                 |     }
                                                                 | label_11:
    0x0001f2a4 sub.w r3, r2, r8                                  |     r3 = r2 - r8;
                                                                 | label_15:
    0x0001f2a8 str r3, [r6, 0xc]                                 |     *((r6 + 0xc)) = r3;
                                                                 | label_10:
    0x0001f2aa movs r3, 0                                        |     r3 = 0;
    0x0001f2ac movw r4, 0x83d                                    |     r4 = 0x83d;
    0x0001f2b0 strb r3, [r2]                                     |     *(r2) = r3;
    0x0001f2b2 ldrh r3, [r6, 0x10]                               |     r3 = *((r6 + 0x10));
    0x0001f2b4 ands r4, r3                                       |     r4 &= r3;
    0x0001f2b6 tst.w r3, 0x9000                                  |     
    0x0001f2ba orr r4, r4, 0x200                                 |     r4 |= 0x200;
    0x0001f2be orr r4, r4, 2                                     |     r4 |= 2;
                                                                 |     if ((r3 & 0x9000) == 0) {
    0x0001f2c2 bne 0x1f2c8                                       |         
    0x0001f2c4 ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
                                                                 |         if (r3 == 0) {
    0x0001f2c6 cbz r3, 0x1f2ce                                   |             goto label_26;
                                                                 |         }
                                                                 |     }
    0x0001f2c8 mov r0, r6                                        |     r0 = r6;
    0x0001f2ca bl 0x13c18                                        |     fcn_00013c18 (r0);
                                                                 | label_26:
    0x0001f2ce ldr r3, [r6, 0x14]                                |     r3 = *((r6 + 0x14));
    0x0001f2d0 strh r4, [r6, 0x10]                               |     *((r6 + 0x10)) = r4;
    0x0001f2d2 strb r7, [r6, 0x12]                               |     *((r6 + 0x12)) = r7;
    0x0001f2d4 str.w r8, [r6, 8]                                 |     __asm ("str.w r8, [r6, 8]");
    0x0001f2d8 str.w r8, [r6, 0x20]                              |     __asm ("str.w r8, [r6, 0x20]");
                                                                 |     if (r3 != 0) {
    0x0001f2dc cbz r3, 0x1f300                                   |         
    0x0001f2de ldr.w r2, [r3, 0x164]                             |         r2 = *((r3 + 0x164));
    0x0001f2e2 cmp r2, r8                                        |         
                                                                 |         if (r2 < r8) {
    0x0001f2e4 bls 0x1f300                                       |             goto label_27;
                                                                 |         }
    0x0001f2e6 ldr.w r2, [r3, 0x15c]                             |         r2 = *((r3 + 0x15c));
    0x0001f2ea cmp r2, r8                                        |         
    0x0001f2ec it ls                                             |         
                                                                 |         if (r2 > r8) {
    0x0001f2ee movls r0, 0x80                                    |             r0 = 0x80;
                                                                 |         }
                                                                 |         if (r2 < r8) {
    0x0001f2f0 bls 0x1f30a                                       |             goto label_28;
                                                                 |         }
    0x0001f2f2 ldr.w r2, [r3, 0x160]                             |         r2 = *((r3 + 0x160));
    0x0001f2f6 cmp r2, r8                                        |         
    0x0001f2f8 it ls                                             |         
                                                                 |         if (r2 <= r8) {
    0x0001f2fa ldrhls r0, [r3, 0x136]                            |             __asm ("ldrhls r0, aav.0x000000ff");
                                                                 |         }
                                                                 |         if (r2 < r8) {
    0x0001f2fe bls 0x1f30a                                       |             goto label_28;
                                                                 |         }
                                                                 |     }
                                                                 | label_27:
    0x0001f300 ldr r3, [pc, 0x378]                               |     
    0x0001f302 mov r0, r8                                        |     r0 = r8;
    0x0001f304 add r3, pc                                        |     
    0x0001f306 ldr r3, [r3, 0x2c]                                |     r3 = *(0x3e9b0);
    0x0001f308 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 | label_28:
    0x0001f30a str r0, [r6, 0x18]                                |     *((r6 + 0x18)) = r0;
    0x0001f30c b 0x1f346                                         |     goto label_29;
                                                                 | label_18:
    0x0001f30e bl 0x1b258                                        |     r0 = fcn_0001b258 (r0);
    0x0001f312 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001f314 bne.w 0x1f57c                                     |         goto label_20;
                                                                 |     }
    0x0001f318 ldrd r3, r0, [r6, 8]                              |     __asm ("ldrd r3, r0, [r6, 8]");
    0x0001f31c bic r0, r0, 1                                     |     r0 = BIT_MASK (r0, 1);
    0x0001f320 adds r2, r3, r0                                   |     r2 = r3 + r0;
    0x0001f322 cmp r3, r2                                        |     
    0x0001f324 ittt lo                                           |     
                                                                 |     if (r3 >= r2) {
    0x0001f326 addlo r0, r0, r3                                  |         r0 += r3;
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x0001f328 addlo r3, 2                                       |         r3 += 2;
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x0001f32a addlo r0, 2                                       |         r0 += 2;
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x0001f32c bhs 0x1f344                                       |         goto label_30;
                                                                 |     }
                                                                 |     do {
    0x0001f32e ldrb r2, [r3, -0x2]                               |         r2 = *((r3 - 0x2));
    0x0001f332 adds r3, 2                                        |         r3 += 2;
    0x0001f334 ldrb r1, [r3, -0x3]                               |         r1 = *((r3 - 0x3));
    0x0001f338 cmp r0, r3                                        |         
    0x0001f33a strb r1, [r3, -0x4]                               |         *((r3 - 0x4)) = r1;
    0x0001f33e strb r2, [r3, -0x3]                               |         *((r3 - 0x3)) = r2;
    0x0001f342 bne 0x1f32e                                       |         
                                                                 |     } while (r0 != r3);
                                                                 | label_30:
    0x0001f344 strb r7, [r6, 0x12]                               |     *((r6 + 0x12)) = r7;
                                                                 | label_29:
    0x0001f346 movs r0, 0                                        |     r0 = 0;
    0x0001f348 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |     
                                                                 | label_24:
    0x0001f34c ldrh r3, [r4, 2]                                  |     r3 = *((r4 + 2));
    0x0001f34e adds r2, 4                                        |     r2 += 4;
    0x0001f350 adds r4, 4                                        |     r4 += 4;
    0x0001f352 rev16 r3, r3                                      |     __asm ("rev16 r3, r3");
    0x0001f354 ubfx r3, r3, 0, 0xa                               |     r3 = (r3 >> 0) & ((1 << 0xa) - 1);
    0x0001f358 add r3, r0                                        |     r3 += r0;
    0x0001f35a add.w r3, r3, ip, lsl 10                          |     r3 += (ip << 10);
    0x0001f35e lsrs r1, r3, 0x12                                 |     r1 = r3 >> 0x12;
    0x0001f360 subs r1, 0x10                                     |     r1 -= 0x10;
    0x0001f362 strb r1, [r2, -0x4]                               |     *((r2 - 0x4)) = r1;
    0x0001f366 ubfx r1, r3, 0xc, 6                               |     r1 = (r3 >> 0xc) & ((1 << 6) - 1);
    0x0001f36a subs r1, 0x80                                     |     r1 -= 0x80;
    0x0001f36c strb r1, [r2, -0x3]                               |     *((r2 - 0x3)) = r1;
    0x0001f370 ubfx r1, r3, 6, 6                                 |     r1 = (r3 >> 6) & ((1 << 6) - 1);
    0x0001f374 and r3, r3, 0x3f                                  |     r3 &= 0x3f;
    0x0001f378 subs r1, 0x80                                     |     r1 -= 0x80;
    0x0001f37a subs r3, 0x80                                     |     r3 -= 0x80;
    0x0001f37c strb r1, [r2, -0x2]                               |     *((r2 - 0x2)) = r1;
    0x0001f380 strb r3, [r2, -0x1]                               |     *((r2 - 0x1)) = r3;
    0x0001f384 b 0x1f276                                         |     goto label_1;
                                                                 | label_17:
    0x0001f386 cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x0001f388 beq.w 0x1f202                                     |         goto label_2;
                                                                 |     }
    0x0001f38c ldr r5, [r0, 0xc]                                 |     r5 = *((r0 + 0xc));
    0x0001f38e ldr r0, [r6, 0x14]                                |     r0 = *((r6 + 0x14));
    0x0001f390 ldr r4, [r6, 8]                                   |     r4 = *((r6 + 8));
    0x0001f392 adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x0001f394 asr.w r3, r5, 0x1f                                |     r3 = r5 >> 0x1f;
    0x0001f398 add r5, r4                                        |     r5 += r4;
    0x0001f39a adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x0001f39e adds r2, r2, r2                                   |     r2 += r2;
    0x0001f3a0 adcs r3, r3                                       |     __asm ("adcs r3, r3");
    0x0001f3a2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001f3a4 bne.w 0x1f220                                     |         goto label_3;
                                                                 |     }
                                                                 | label_19:
    0x0001f3a8 mov r0, r2                                        |     r0 = r2;
    0x0001f3aa mov r1, r3                                        |     r1 = r3;
    0x0001f3ac bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x0001f3b0 mov r8, r0                                        |     r8 = r0;
    0x0001f3b2 b 0x1f226                                         |     goto label_4;
                                                                 | label_25:
    0x0001f3b4 lsr.w lr, r3, 6                                   |     lr = r3 >> 6;
    0x0001f3b8 cmp.w r3, 0x800                                   |     
    0x0001f3bc and r0, r0, 0x3f                                  |     r0 &= 0x3f;
    0x0001f3c0 uxtb.w r4, lr                                     |     r4 = (int8_t) lr;
    0x0001f3c4 orr r0, r0, 0x80                                  |     r0 |= 0x80;
                                                                 |     if (r3 >= 0x800) {
    0x0001f3c8 bhs.w 0x1f258                                     |         goto label_5;
                                                                 |     }
    0x0001f3cc mov r3, r2                                        |     r3 = r2;
    0x0001f3ce subs r4, 0x40                                     |     r4 -= 0x40;
    0x0001f3d0 strb r4, [r3], 2                                  |     *(r3) = r4;
                                                                 |     r3 += 2;
    0x0001f3d4 mov r4, r1                                        |     r4 = r1;
    0x0001f3d6 strb r0, [r2, 1]                                  |     *((r2 + 1)) = r0;
    0x0001f3d8 mov r2, r3                                        |     r2 = r3;
    0x0001f3da b 0x1f276                                         |     goto label_1;
                                                                 | label_21:
    0x0001f3dc cmp r7, 2                                         |     
                                                                 |     if (r7 == 2) {
    0x0001f3de beq 0x1f4aa                                       |         goto label_31;
                                                                 |     }
    0x0001f3e0 cmp r4, r5                                        |     
                                                                 |     if (r4 >= r5) {
    0x0001f3e2 bhs.w 0x1f654                                     |         goto label_32;
                                                                 |     }
    0x0001f3e6 ldr.w lr, [pc, 0x298]                             |     
    0x0001f3ea mov.w sb, 0xf800                                  |     sb = 0xf800;
    0x0001f3ec ldr r1, [pc, 0x1e0]                               |     r1 = *(0x1f5d0);
    0x0001f3ee movt sb, 0xffff                                   |     sb = (sb & 0xFFFF) | 0xffff0000;
    0x0001f3f2 mov ip, r8                                        |     
    0x0001f3f4 add lr, pc                                        |     lr = 0x3ea7a;
    0x0001f3f6 b 0x1f40e                                         |     
                                                                 |     while (r3 < 0xbf) {
                                                                 | label_6:
    0x0001f3f8 add.w r2, ip, 2                                   |         r2 = ip + 2;
    0x0001f3fc mov r4, r1                                        |         r4 = r1;
                                                                 | label_7:
    0x0001f3fe cmp r1, r5                                        |         
    0x0001f400 strb.w r3, [ip, 1]                                |         *((ip + 1)) = r3;
    0x0001f404 strb.w sl, [ip]                                   |         *(ip) = sl;
                                                                 |         if (r1 >= r5) {
    0x0001f408 bhs.w 0x1f582                                     |             goto label_33;
                                                                 |         }
    0x0001f40c mov ip, r2                                        |         
    0x0001f40e mov r1, r4                                        |         r1 = r4;
    0x0001f410 ldrb r3, [r1], 1                                  |         r3 = *(r1);
                                                                 |         r1++;
    0x0001f414 cmp r3, 0xbf                                      |         
    0x0001f416 it ls                                             |         
                                                                 |         if (r3 > 0xbf) {
    0x0001f418 movls sl, 0                                       |             sl = 0;
                                                                 |         }
    0x0001f41c bls 0x1f3f8                                       |         
                                                                 |     }
    0x0001f41e add r3, lr                                        |     r3 += lr;
    0x0001f420 cmp r5, r1                                        |     
    0x0001f422 ldrb r0, [r3, -0xc0]                              |     r0 = *((r3 - 0xc0));
    0x0001f426 mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r5 == r1) {
    0x0001f428 beq.w 0x1f65a                                     |         goto label_34;
                                                                 |     }
    0x0001f42c mov r3, r1                                        |     r3 = r1;
    0x0001f42e b 0x1f43a                                         |     
                                                                 |     while (r4 == 0x80) {
    0x0001f430 cmp r5, r3                                        |         
    0x0001f432 add.w r0, r2, r0, lsl 6                           |         r0 = r2 + (r0 << 6);
    0x0001f436 mov r1, r3                                        |         r1 = r3;
                                                                 |         if (r5 == r3) {
    0x0001f438 beq 0x1f44c                                       |             goto label_35;
                                                                 |         }
    0x0001f43a mov r1, r3                                        |         r1 = r3;
    0x0001f43c ldrb r2, [r3], 1                                  |         r2 = *(r3);
                                                                 |         r3++;
    0x0001f440 and r4, r2, 0xc0                                  |         r4 = r2 & 0xc0;
    0x0001f444 and r2, r2, 0x3f                                  |         r2 &= 0x3f;
    0x0001f448 cmp r4, 0x80                                      |         
    0x0001f44a beq 0x1f430                                       |         
                                                                 |     }
                                                                 | label_35:
    0x0001f44c cmp r0, 0x7f                                      |     
                                                                 |     if (r0 < 0x7f) {
    0x0001f44e bls.w 0x1f574                                     |         goto label_36;
                                                                 |     }
    0x0001f452 and.w r3, r0, sb                                  |     r3 = r0 & sb;
    0x0001f456 cmp.w r3, 0xd800                                  |     
                                                                 |     if (r3 == 0xd800) {
    0x0001f45a beq.w 0x1f574                                     |         goto label_36;
                                                                 |     }
    0x0001f45e bic r2, r0, 1                                     |     r2 = BIT_MASK (r0, 1);
    0x0001f462 movw r3, 0xfffe                                   |     r3 = 0xfffe;
    0x0001f466 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0001f468 beq.w 0x1f574                                     |         goto label_36;
                                                                 |     }
    0x0001f46c cmp.w r0, 0x10000                                 |     
    0x0001f470 uxtb r3, r0                                       |     r3 = (int8_t) r0;
    0x0001f472 ubfx sl, r0, 8, 8                                 |     sl = (r0 >> 8) & ((1 << 8) - 1);
                                                                 |     if (r0 <= 0x10000) {
    0x0001f476 blo 0x1f3f8                                       |         goto label_6;
                                                                 |     }
    0x0001f478 strb.w r3, [ip, 3]                                |     *((ip + 3)) = r3;
    0x0001f47c and r3, sl, 3                                     |     r3 = sl & 3;
    0x0001f480 sub.w r2, r0, 0x10000                             |     r2 = r0 - 0x10000;
    0x0001f484 subs r3, 0x24                                     |     r3 -= 0x24;
    0x0001f486 strb.w r3, [ip, 2]                                |     *((ip + 2)) = r3;
    0x0001f48a lsrs r3, r2, 0xa                                  |     r3 = r2 >> 0xa;
    0x0001f48c ubfx sl, r2, 0x12, 2                              |     sl = (r2 >> 0x12) & ((1 << 2) - 1);
    0x0001f490 ubfx r0, r0, 0xa, 6                               |     r0 = (r0 >> 0xa) & ((1 << 6) - 1);
    0x0001f494 sub.w sl, sl, 0x28                                |     sl -= 0x28;
    0x0001f498 and r3, r3, 0xc0                                  |     r3 &= 0xc0;
    0x0001f49c uxtb.w sl, sl                                     |     sl = (int8_t) sl;
    0x0001f4a0 orrs r3, r0                                       |     r3 |= r0;
    0x0001f4a2 add.w r2, ip, 4                                   |     r2 = ip + 4;
    0x0001f4a6 mov r4, r1                                        |     r4 = r1;
    0x0001f4a8 b 0x1f3fe                                         |     goto label_7;
                                                                 | label_31:
    0x0001f4aa cmp r4, r5                                        |     
                                                                 |     if (r4 >= r5) {
    0x0001f4ac bhs.w 0x1f654                                     |         goto label_32;
                                                                 |     }
    0x0001f4b0 ldr.w lr, [pc, 0x1d0]                             |     
    0x0001f4b4 mov.w sb, 0xf800                                  |     
    0x0001f4b8 movt sb, 0xffff                                   |     sb = 0x-800;
    0x0001f4bc mov ip, r8                                        |     
    0x0001f4be add lr, pc                                        |     lr += pc;
    0x0001f4c0 b 0x1f4d6                                         |     
                                                                 |     while (r3 < 0xbf) {
                                                                 | label_8:
    0x0001f4c2 add.w r2, ip, 2                                   |         r2 = ip + 2;
    0x0001f4c6 mov r4, r1                                        |         r4 = r1;
                                                                 | label_9:
    0x0001f4c8 cmp r5, r1                                        |         
    0x0001f4ca strb.w sl, [ip, 1]                                |         *((ip + 1)) = sl;
    0x0001f4ce strb.w r3, [ip]                                   |         *(ip) = r3;
                                                                 |         if (r5 < r1) {
    0x0001f4d2 bls 0x1f582                                       |             goto label_33;
                                                                 |         }
    0x0001f4d4 mov ip, r2                                        |         
    0x0001f4d6 mov r1, r4                                        |         r1 = r4;
    0x0001f4d8 ldrb r3, [r1], 1                                  |         r3 = *(r1);
                                                                 |         r1++;
    0x0001f4dc cmp r3, 0xbf                                      |         
    0x0001f4de it ls                                             |         
                                                                 |         if (r3 > 0xbf) {
    0x0001f4e0 movls sl, 0                                       |             sl = 0;
                                                                 |         }
    0x0001f4e4 bls 0x1f4c2                                       |         
                                                                 |     }
    0x0001f4e6 add r3, lr                                        |     r3 += lr;
    0x0001f4e8 cmp r5, r1                                        |     
    0x0001f4ea ldrb r0, [r3, -0xc0]                              |     r0 = *((r3 - 0xc0));
    0x0001f4ee mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r5 == r1) {
    0x0001f4f0 beq.w 0x1f66a                                     |         goto label_37;
                                                                 |     }
    0x0001f4f4 mov r3, r1                                        |     r3 = r1;
    0x0001f4f6 b 0x1f502                                         |     
                                                                 |     while (r4 == 0x80) {
    0x0001f4f8 cmp r5, r3                                        |         
    0x0001f4fa add.w r0, r2, r0, lsl 6                           |         r0 = r2 + (r0 << 6);
    0x0001f4fe mov r1, r3                                        |         r1 = r3;
                                                                 |         if (r5 == r3) {
    0x0001f500 beq 0x1f514                                       |             goto label_38;
                                                                 |         }
    0x0001f502 mov r1, r3                                        |         r1 = r3;
    0x0001f504 ldrb r2, [r3], 1                                  |         r2 = *(r3);
                                                                 |         r3++;
    0x0001f508 and r4, r2, 0xc0                                  |         r4 = r2 & 0xc0;
    0x0001f50c and r2, r2, 0x3f                                  |         r2 &= 0x3f;
    0x0001f510 cmp r4, 0x80                                      |         
    0x0001f512 beq 0x1f4f8                                       |         
                                                                 |     }
                                                                 | label_38:
    0x0001f514 cmp r0, 0x7f                                      |     
                                                                 |     if (r0 < 0x7f) {
    0x0001f516 bls 0x1f56c                                       |         goto label_39;
                                                                 |     }
    0x0001f518 and.w r3, r0, sb                                  |     r3 = r0 & sb;
    0x0001f51c cmp.w r3, 0xd800                                  |     
                                                                 |     if (r3 == 0xd800) {
    0x0001f520 beq 0x1f56c                                       |         goto label_39;
                                                                 |     }
    0x0001f522 bic r2, r0, 1                                     |     r2 = BIT_MASK (r0, 1);
    0x0001f526 movw r3, 0xfffe                                   |     r3 = 0xfffe;
    0x0001f52a cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0001f52c beq 0x1f56c                                       |         goto label_39;
                                                                 |     }
    0x0001f52e cmp.w r0, 0x10000                                 |     
    0x0001f532 uxtb r3, r0                                       |     r3 = (int8_t) r0;
    0x0001f534 ubfx sl, r0, 8, 8                                 |     sl = (r0 >> 8) & ((1 << 8) - 1);
                                                                 |     if (r0 <= 0x10000) {
    0x0001f538 blo 0x1f4c2                                       |         goto label_8;
                                                                 |     }
    0x0001f53a strb.w r3, [ip, 2]                                |     *((ip + 2)) = r3;
    0x0001f53e and r3, sl, 3                                     |     r3 = sl & 3;
    0x0001f542 sub.w r2, r0, 0x10000                             |     r2 = r0 - 0x10000;
    0x0001f546 subs r3, 0x24                                     |     r3 -= 0x24;
    0x0001f548 strb.w r3, [ip, 3]                                |     *((ip + 3)) = r3;
    0x0001f54c lsrs r3, r2, 0xa                                  |     r3 = r2 >> 0xa;
    0x0001f54e ubfx sl, r2, 0x12, 2                              |     sl = (r2 >> 0x12) & ((1 << 2) - 1);
    0x0001f552 ubfx r0, r0, 0xa, 6                               |     r0 = (r0 >> 0xa) & ((1 << 6) - 1);
    0x0001f556 sub.w sl, sl, 0x28                                |     sl -= 0x28;
    0x0001f55a and r3, r3, 0xc0                                  |     r3 &= 0xc0;
    0x0001f55e uxtb.w sl, sl                                     |     sl = (int8_t) sl;
    0x0001f562 orrs r3, r0                                       |     r3 |= r0;
    0x0001f564 add.w r2, ip, 4                                   |     r2 = ip + 4;
    0x0001f568 mov r4, r1                                        |     r4 = r1;
    0x0001f56a b 0x1f4c8                                         |     goto label_9;
                                                                 | label_39:
    0x0001f56c mov.w sl, 0xff                                    |     sl = 0xff;
    0x0001f570 movs r3, 0xfd                                     |     r3 = 0xfd;
    0x0001f572 b 0x1f4c2                                         |     goto label_8;
                                                                 | label_36:
    0x0001f574 movs r3, 0xfd                                     |     r3 = 0xfd;
    0x0001f576 mov.w sl, 0xff                                    |     sl = 0xff;
    0x0001f57a b 0x1f3f8                                         |     goto label_6;
                                                                 | label_20:
    0x0001f57c movs r0, 7                                        |     r0 = 7;
    0x0001f57e pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |     
                                                                 | label_33:
    0x0001f582 sub.w r3, r2, r8                                  |     r3 = r2 - r8;
                                                                 | label_16:
    0x0001f586 str r3, [r6, 0xc]                                 |     *((r6 + 0xc)) = r3;
    0x0001f588 movs r3, 0                                        |     r3 = 0;
    0x0001f58a strb r3, [r2], 1                                  |     *(r2) = r3;
                                                                 |     r2++;
    0x0001f58e b 0x1f2aa                                         |     goto label_10;
                                                                 | label_22:
    0x0001f590 cmp r4, r5                                        |     
                                                                 |     if (r4 <= r5) {
    0x0001f592 blo 0x1f5ce                                       |         goto label_40;
                                                                 |     }
    0x0001f594 b 0x1f650                                         |     goto label_23;
                                                                 | label_12:
    0x0001f596 lsls r1, r3, 0xa                                  |     r1 = r3 << 0xa;
    0x0001f598 cmp r5, r0                                        |     
    0x0001f59a and ip, r3, 0x3c0                                 |     
    0x0001f59e lsr.w lr, r3, 6                                   |     lr = r3 >> 6;
    0x0001f5a2 uxth r1, r1                                       |     r1 = (int16_t) r1;
    0x0001f5a4 add.w ip, ip, 0x40                                |     
                                                                 |     if (r5 > r0) {
    0x0001f5a8 bhi 0x1f5f2                                       |         goto label_41;
                                                                 |     }
                                                                 | label_14:
    0x0001f5aa lsrs r1, r3, 0xc                                  |     r1 = r3 >> 0xc;
    0x0001f5ac and lr, lr, 0x3f                                  |     lr &= 0x3f;
    0x0001f5b0 and r3, r3, 0x3f                                  |     r3 &= 0x3f;
    0x0001f5b4 sub.w lr, lr, 0x80                                |     lr -= 0x80;
    0x0001f5b8 subs r1, 0x20                                     |     r1 -= 0x20;
    0x0001f5ba subs r3, 0x80                                     |     r3 -= 0x80;
    0x0001f5bc strb r1, [r2]                                     |     *(r2) = r1;
    0x0001f5be strb.w lr, [r2, 1]                                |     
    0x0001f5c2 mov r4, r0                                        |     r4 = r0;
    0x0001f5c4 strb r3, [r2, 2]                                  |     *((r2 + 2)) = r3;
    0x0001f5c6 adds r2, 3                                        |     r2 += 3;
                                                                 | label_13:
    0x0001f5c8 cmp r4, r5                                        |     
                                                                 |     if (r4 >= r5) {
    0x0001f5ca bhs.w 0x1f2a4                                     |         goto label_11;
                                                                 |     }
                                                                 | label_40:
    0x0001f5ce mov r0, r4                                        |     r0 = r4;
    0x0001f5d0 mov r1, r2                                        |     r1 = r2;
    0x0001f5d2 ldrh r3, [r0], 2                                  |     r3 = *(r0);
                                                                 |     r0 += 2;
    0x0001f5d6 sub.w ip, r3, 0xd800                              |     
    0x0001f5da cmp.w ip, 0x800                                   |     
    0x0001f5de uxtb.w ip, r3                                     |     ip = (int8_t) r3;
                                                                 |     if (ip <= 0x800) {
    0x0001f5e2 blo 0x1f596                                       |         goto label_12;
                                                                 |     }
    0x0001f5e4 cmp r3, 0x7f                                      |     
    0x0001f5e6 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r3 <= 0x7f) {
    0x0001f5e8 bhi 0x1f62a                                       |         
    0x0001f5ea strb ip, [r1], 1                                  |         *(r1) = ip;
                                                                 |         r1++;
    0x0001f5ee mov r2, r1                                        |         r2 = r1;
    0x0001f5f0 b 0x1f5c8                                         |         goto label_13;
                                                                 | label_41:
    0x0001f5f2 ldrh r3, [r4, 2]                                  |         r3 = *((r4 + 2));
    0x0001f5f4 adds r2, 4                                        |         r2 += 4;
    0x0001f5f6 adds r4, 4                                        |         r4 += 4;
    0x0001f5f8 ubfx r3, r3, 0, 0xa                               |         r3 = (r3 >> 0) & ((1 << 0xa) - 1);
    0x0001f5fc add r1, r3                                        |         r1 += r3;
    0x0001f5fe add.w r3, r1, ip, lsl 10                          |         r3 = r1 + (ip << 10);
    0x0001f602 lsrs r1, r3, 0x12                                 |         r1 = r3 >> 0x12;
    0x0001f604 subs r1, 0x10                                     |         r1 -= 0x10;
    0x0001f606 strb r1, [r2, -0x4]                               |         *((r2 - 0x4)) = r1;
    0x0001f60a ubfx r1, r3, 0xc, 6                               |         r1 = (r3 >> 0xc) & ((1 << 6) - 1);
    0x0001f60e subs r1, 0x80                                     |         r1 -= 0x80;
    0x0001f610 strb r1, [r2, -0x3]                               |         *((r2 - 0x3)) = r1;
    0x0001f614 ubfx r1, r3, 6, 6                                 |         r1 = (r3 >> 6) & ((1 << 6) - 1);
    0x0001f618 and r3, r3, 0x3f                                  |         r3 &= 0x3f;
    0x0001f61c subs r1, 0x80                                     |         r1 -= 0x80;
    0x0001f61e subs r3, 0x80                                     |         r3 -= 0x80;
    0x0001f620 strb r1, [r2, -0x2]                               |         *((r2 - 0x2)) = r1;
    0x0001f624 strb r3, [r2, -0x1]                               |         *((r2 - 0x1)) = r3;
    0x0001f628 b 0x1f5c8                                         |         goto label_13;
                                                                 |     }
    0x0001f62a lsr.w lr, r3, 6                                   |     lr = r3 >> 6;
    0x0001f62e cmp.w r3, 0x800                                   |     
    0x0001f632 and ip, ip, 0x3f                                  |     
    0x0001f636 uxtb.w sb, lr                                     |     sb = (int8_t) lr;
    0x0001f63a orr ip, ip, 0x80                                  |     
    0x0001f63e sub.w sb, sb, 0x40                                |     sb -= 0x40;
                                                                 |     if (r3 >= 0x800) {
    0x0001f642 bhs 0x1f5aa                                       |         goto label_14;
                                                                 |     }
    0x0001f644 strb sb, [r1], 2                                  |     *(r1) = sb;
                                                                 |     r1 += 2;
    0x0001f648 strb.w ip, [r2, 1]                                |     *((r2 + 1)) = ip;
    0x0001f64c mov r2, r1                                        |     r2 = r1;
    0x0001f64e b 0x1f5c8                                         |     goto label_13;
                                                                 | label_23:
    0x0001f650 movs r3, 0                                        |     r3 = 0;
    0x0001f652 b 0x1f2a8                                         |     goto label_15;
                                                                 | label_32:
    0x0001f654 mov r2, r8                                        |     r2 = r8;
    0x0001f656 movs r3, 0                                        |     r3 = 0;
    0x0001f658 b 0x1f586                                         |     goto label_16;
                                                                 | label_34:
    0x0001f65a cmp r0, 0x80                                      |     
    0x0001f65c itte lo                                           |     
                                                                 |     if (r0 >= 0x80) {
    0x0001f65e movlo r3, 0xfd                                    |         r3 = 0xfd;
                                                                 |     }
                                                                 |     if (r0 >= 0x80) {
    0x0001f660 movlo sl, 0xff                                    |         sl = 0xff;
                                                                 |     }
                                                                 |     if (r0 >= 0x80) {
    0x0001f664 mov.w sl, 0                                       |         sl = 0;
                                                                 |     }
    0x0001f668 b 0x1f3f8                                         |     goto label_6;
                                                                 | label_37:
    0x0001f66a cmp r0, 0x80                                      |     
    0x0001f66c itte lo                                           |     
                                                                 |     if (r0 >= 0x80) {
    0x0001f66e movlo r3, 0xfd                                    |         r3 = 0xfd;
                                                                 |     }
                                                                 |     if (r0 >= 0x80) {
    0x0001f670 movlo sl, 0xff                                    |         sl = 0xff;
                                                                 |     }
                                                                 |     if (r0 >= 0x80) {
    0x0001f674 mov.w sl, 0                                       |         sl = 0;
                                                                 |     }
    0x0001f678 b 0x1f4c2                                         |     goto label_8;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1f73c */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0001f73c ()                      | void fcn_0001f73c (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x0001f73c push {r4, r5, r6, lr}             |     
                                                 |     if (r0 == 0) {
    0x0001f73e cbz r0, 0x1f752                   |         goto label_1;
                                                 |     }
    0x0001f740 add.w r1, r1, r1, lsl 2           |     r1 += (r1 << 2);
    0x0001f744 ldr r5, [r0, 0x64]                |     r5 = *((r0 + 0x64));
    0x0001f746 lsls r1, r1, 3                    |     r1 <<= 3;
    0x0001f748 subs r1, 0x28                     |     r1 -= 0x28;
    0x0001f74a add r5, r1                        |     r5 += r1;
    0x0001f74c ldrh r3, [r5, 0x10]               |     r3 = *((r5 + 0x10));
    0x0001f74e lsls r3, r3, 0x1f                 |     r3 <<= 0x1f;
    0x0001f750 bpl 0x1f758                       |     
                                                 |     while (r4 == 0) {
                                                 | label_1:
    0x0001f752 movs r4, 0                        |         r4 = 0;
    0x0001f754 mov r0, r4                        |         r0 = r4;
    0x0001f756 pop {r4, r5, r6, pc}              |         
    0x0001f758 ldr r6, [r0]                      |         r6 = *(r0);
                                                 |         if (r6 == 0) {
    0x0001f75a cbz r6, 0x1f788                   |             goto label_2;
                                                 |         }
    0x0001f75c movs r2, 0x28                     |         r2 = 0x28;
    0x0001f75e movs r3, 0                        |         r3 = 0;
    0x0001f760 mov r0, r6                        |         r0 = r6;
    0x0001f762 bl 0x1d740                        |         r0 = fcn_0001d740 (r0, r1);
    0x0001f766 mov r4, r0                        |         r4 = r0;
                                                 | label_0:
    0x0001f768 cmp r4, 0                         |         
    0x0001f76a beq 0x1f752                       |         
                                                 |     }
    0x0001f76c movs r2, 0x28                     |     r2 = 0x28;
    0x0001f76e movs r1, 0                        |     r1 = 0;
    0x0001f770 mov r0, r4                        |     r0 = r4;
    0x0001f772 blx 0x97d4                        |     fcn_000097d4 ();
    0x0001f776 movs r3, 1                        |     r3 = 1;
    0x0001f778 mov r1, r5                        |     r1 = r5;
    0x0001f77a mov r0, r4                        |     r0 = r4;
    0x0001f77c strh r3, [r4, 0x10]               |     *((r4 + 0x10)) = r3;
    0x0001f77e str r6, [r4, 0x14]                |     *((r4 + 0x14)) = r6;
    0x0001f780 bl 0x1b294                        |     fcn_0001b294 (r0, r1);
    0x0001f784 mov r0, r4                        |     r0 = r4;
    0x0001f786 pop {r4, r5, r6, pc}              |     
                                                 | label_2:
    0x0001f788 movs r0, 0x28                     |     r0 = 0x28;
    0x0001f78a movs r1, 0                        |     r1 = 0;
    0x0001f78c bl 0x117c8                        |     r0 = fcn_000117c8 (r0);
    0x0001f790 mov r4, r0                        |     r4 = r0;
    0x0001f792 b 0x1f768                         |     goto label_0;
                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1f970 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0001f970 ()                          | void fcn_0001f970 (uint32_t arg1, int16_t arg2, uint32_t arg3) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x0001f970 push {r3, r4, r5, r6, r7, lr}         |     
    0x0001f972 ldrh r3, [r1, 0x34]                   |     r3 = *((r1 + 0x34));
    0x0001f974 cmp r3, r2                            |     
                                                     |     if (r3 < r2) {
    0x0001f976 blt 0x1f97c                           |         goto label_2;
                                                     |     }
                                                     | label_0:
    0x0001f978 movs r0, 0                            |     r0 = 0;
                                                     |     do {
    0x0001f97a pop {r3, r4, r5, r6, r7, pc}          |         
                                                     | label_2:
    0x0001f97c add.w r7, r2, r2, lsl 3               |         r7 = r2 + (r2 << 3);
    0x0001f980 mov r4, r1                            |         r4 = r1;
    0x0001f982 mov r5, r2                            |         r5 = r2;
    0x0001f984 asrs r3, r7, 0x1f                     |         r3 = r7 >> 0x1f;
    0x0001f986 cmp r0, 0                             |         
                                                     |         if (r0 == 0) {
    0x0001f988 beq 0x1f9f2                           |             goto label_3;
                                                     |         }
    0x0001f98a mov r2, r7                            |         r2 = r7;
    0x0001f98c bl 0x1d740                            |         r0 = fcn_0001d740 (r0, r1);
    0x0001f990 mov r3, r0                            |         r3 = r0;
                                                     | label_1:
    0x0001f992 movs r0, 7                            |         r0 = 7;
    0x0001f994 cmp r3, 0                             |         
    0x0001f996 beq 0x1f97a                           |         
                                                     |     } while (r3 == 0);
    0x0001f998 mov r0, r3                            |     r0 = r3;
    0x0001f99a mov r2, r7                            |     r2 = r7;
    0x0001f99c movs r1, 0                            |     r1 = 0;
    0x0001f99e blx 0x97d4                            |     fcn_000097d4 ();
    0x0001f9a2 ldrh r2, [r4, 0x34]                   |     r2 = *((r4 + 0x34));
    0x0001f9a4 ldr r1, [r4, 0x20]                    |     r1 = *((r4 + 0x20));
    0x0001f9a6 lsls r2, r2, 2                        |     r2 <<= 2;
    0x0001f9a8 blx 0x9e2c                            |     fcn_00009e2c ();
    0x0001f9ac ldrh r2, [r4, 0x32]                   |     r2 = *((r4 + 0x32));
    0x0001f9ae add.w r6, r0, r5, lsl 2               |     r6 = r0 + (r5 << 2);
    0x0001f9b2 ldr r1, [r4, 8]                       |     r1 = *((r4 + 8));
    0x0001f9b4 str r0, [r4, 0x20]                    |     *((r4 + 0x20)) = r0;
    0x0001f9b6 mov r0, r6                            |     r0 = r6;
    0x0001f9b8 adds r2, 1                            |     r2++;
    0x0001f9ba lsls r2, r2, 1                        |     r2 <<= 1;
    0x0001f9bc blx 0x9e2c                            |     fcn_00009e2c ();
    0x0001f9c0 lsls r2, r5, 1                        |     r2 = r5 << 1;
    0x0001f9c2 str r6, [r4, 8]                       |     *((r4 + 8)) = r6;
    0x0001f9c4 ldr r1, [r4, 4]                       |     r1 = *((r4 + 4));
    0x0001f9c6 adds r3, r6, r2                       |     r3 = r6 + r2;
    0x0001f9c8 adds r6, r3, r2                       |     r6 = r3 + r2;
    0x0001f9ca ldrh r2, [r4, 0x34]                   |     r2 = *((r4 + 0x34));
    0x0001f9cc mov r0, r3                            |     r0 = r3;
    0x0001f9ce lsls r2, r2, 1                        |     r2 <<= 1;
    0x0001f9d0 blx 0x9e2c                            |     fcn_00009e2c ();
    0x0001f9d4 ldrh r2, [r4, 0x34]                   |     r2 = *((r4 + 0x34));
    0x0001f9d6 str r0, [r4, 4]                       |     *((r4 + 4)) = r0;
    0x0001f9d8 mov r0, r6                            |     r0 = r6;
    0x0001f9da ldr r1, [r4, 0x1c]                    |     r1 = *((r4 + 0x1c));
    0x0001f9dc blx 0x9e2c                            |     fcn_00009e2c ();
    0x0001f9e0 ldrb.w r3, [r4, 0x37]                 |     r3 = *((r4 + 0x37));
    0x0001f9e4 str r6, [r4, 0x1c]                    |     *((r4 + 0x1c)) = r6;
    0x0001f9e6 strh r5, [r4, 0x34]                   |     *((r4 + 0x34)) = r5;
    0x0001f9e8 orr r3, r3, 0x10                      |     r3 |= 0x10;
    0x0001f9ec strb.w r3, [r4, 0x37]                 |     *((r4 + 0x37)) = r3;
    0x0001f9f0 b 0x1f978                             |     goto label_0;
                                                     | label_3:
    0x0001f9f2 mov r1, r3                            |     r1 = r3;
    0x0001f9f4 mov r0, r7                            |     r0 = r7;
    0x0001f9f6 bl 0x117c8                            |     r0 = fcn_000117c8 (r0);
    0x0001f9fa mov r3, r0                            |     r3 = r0;
    0x0001f9fc b 0x1f992                             |     goto label_1;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x202d8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000202d8 ()                                      | void fcn_000202d8 (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;
                                                                 |     int32_t var_20h_2;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000202d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000202dc mov r5, r2                                        |     r5 = r2;
    0x000202de ldr r2, [pc, 0x124]                               |     
    0x000202e0 mov r7, r3                                        |     r7 = r3;
    0x000202e2 sub sp, 0x34                                      |     
    0x000202e4 mov r4, r1                                        |     r4 = r1;
    0x000202e6 ldr r3, [pc, 0x120]                               |     r3 = *(0x2040a);
    0x000202e8 add.w sl, sp, 0x20                                |     sl += var_20h;
    0x000202ec add r2, pc                                        |     r2 = 0x406f6;
    0x000202ee mov.w r8, 0                                       |     r8 = 0;
    0x000202f2 mov lr, r5                                        |     lr = r5;
    0x000202f4 mov sb, r0                                        |     sb = r0;
    0x000202f6 ldr r3, [r2, r3]                                  |     
    0x000202f8 mov ip, r8                                        |     
    0x000202fa ldr r3, [r3]                                      |     r3 = *(0x406f6);
    0x000202fc str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000202fe mov.w r3, 0                                       |     r3 = 0;
    0x00020302 strd r1, r5, [sp, 0x20]                           |     __asm ("strd r1, r5, [var_20h]");
    0x00020306 str r7, [sp, 0x28]                                |     var_28h = r7;
    0x00020308 mov r1, r7                                        |     r1 = r7;
    0x0002030a add r3, sp, 0x2c                                  |     r3 += var_2ch;
    0x0002030c mov r5, sl                                        |     r5 = sl;
    0x0002030e mov r7, r4                                        |     r7 = r4;
                                                                 | label_1:
    0x00020310 ldr r4, [r5]                                      |     r4 = *(r5);
                                                                 |     if (r4 == 0) {
    0x00020312 cbz r4, 0x20386                                   |         goto label_6;
                                                                 |     }
    0x00020314 ldr r6, [pc, 0xf4]                                |     
    0x00020316 mov.w fp, 0                                       |     
    0x0002031a ldr.w r8, [pc, 0xf4]                              |     r8 = *(0x00020410);
    0x0002031e strd r5, r3, [sp, 0x10]                           |     __asm ("strd r5, r3, [var_10h]");
    0x00020322 mov r5, lr                                        |     r5 = lr;
    0x00020324 add r6, pc                                        |     
    0x00020326 str.w ip, [sp, 0x18]                              |     __asm ("str.w ip, [var_18h]");
    0x0002032a add r8, pc                                        |     r8 += pc;
    0x0002032c add.w r6, r6, 0xeb0                               |     r6 = 0x415e4;
    0x00020330 addw sl, r8, 0xec8                                |     __asm ("addw sl, r8, aav.0x000000ff");
    0x00020334 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [var_1ch]");
    0x00020338 mov r8, r4                                        |     r8 = r4;
    0x0002033a mov r4, r1                                        |     r4 = r1;
    0x0002033c b 0x2034a                                         |     
                                                                 |     while (r2 != r1) {
                                                                 | label_0:
    0x0002033e add.w fp, fp, 1                                   |         
    0x00020342 adds r6, 3                                        |         r6 += 3;
    0x00020344 cmp.w fp, 7                                       |         
                                                                 |         if (fp == 7) {
    0x00020348 beq 0x203e2                                       |             goto label_7;
                                                                 |         }
    0x0002034a ldr.w r2, [r8, 4]                                 |         r2 = *((r8 + 4));
    0x0002034e ldrb r1, [r6, 1]                                  |         r1 = *((r6 + 1));
    0x00020350 cmp r2, r1                                        |         
    0x00020352 bne 0x2033e                                       |         
                                                                 |     }
    0x00020354 ldrb r1, [r6]                                     |     r1 = *(r6);
    0x00020356 ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x0002035a add r1, sl                                        |     r1 += sl;
    0x0002035c blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x00020360 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00020362 bne 0x2033e                                       |         goto label_0;
                                                                 |     }
    0x00020364 ldr.w r8, [sp, 0x1c]                              |     r8 = var_1ch;
    0x00020368 add.w fp, fp, fp, lsl 1                           |     
    0x0002036c mov lr, r5                                        |     lr = r5;
    0x0002036e ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x00020370 ldrd r3, ip, [sp, 0x14]                           |     __asm ("ldrd r3, ip, [var_18h]");
    0x00020374 mov r1, r4                                        |     r1 = r4;
    0x00020376 add r8, fp                                        |     r8 += fp;
    0x00020378 ldrb.w r2, [r8, 0xeb2]                            |     r2 = *((r8 + 0xeb2));
    0x0002037c adds r5, 4                                        |     r5 += 4;
    0x0002037e cmp r5, r3                                        |     
    0x00020380 orr.w ip, ip, r2                                  |     
                                                                 |     if (r5 != r3) {
    0x00020384 bne 0x20310                                       |         goto label_1;
                                                                 |     }
                                                                 | label_6:
    0x00020386 and r3, ip, 0x21                                  |     r3 = ip & 0x21;
    0x0002038a mov r4, r7                                        |     r4 = r7;
    0x0002038c cmp r3, 0x21                                      |     
    0x0002038e mov r8, ip                                        |     r8 = ip;
    0x00020390 mov r5, lr                                        |     r5 = lr;
    0x00020392 mov r7, r1                                        |     r7 = r1;
                                                                 |     if (r3 != 0x21) {
    0x00020394 beq 0x203a4                                       |         
    0x00020396 tst.w ip, 0x80                                    |         
                                                                 |         if ((ip & 0x80) != 0) {
    0x0002039a bne 0x203a4                                       |             goto label_8;
                                                                 |         }
    0x0002039c and r3, ip, 0x38                                  |         r3 = ip & 0x38;
    0x000203a0 cmp r3, 0x20                                      |         
                                                                 |         if (r3 != 0x20) {
    0x000203a2 bne 0x203c6                                       |             goto label_9;
                                                                 |         }
                                                                 |     }
                                                                 |     if (r5 == 0) {
                                                                 | label_8:
    0x000203a4 cbz r5, 0x203ec                                   |         goto label_10;
                                                                 |     }
                                                                 |     do {
    0x000203a6 ldr r3, [pc, 0x6c]                                |         
    0x000203a8 add r3, pc                                        |         r3 = 0x407c2;
                                                                 |         if (r7 == 0) {
    0x000203aa cbz r7, 0x203f6                                   |             goto label_11;
                                                                 |         }
                                                                 | label_2:
    0x000203ac ldr r1, [pc, 0x68]                                |         
    0x000203ae add r1, pc                                        |         r1 = 0x407ca;
                                                                 | label_3:
    0x000203b0 str r1, [sp, 4]                                   |         var_4h = r1;
    0x000203b2 mov r2, r4                                        |         r2 = r4;
    0x000203b4 ldr r1, [pc, 0x64]                                |         
    0x000203b6 mov r0, sb                                        |         r0 = sb;
    0x000203b8 str r7, [sp, 8]                                   |         var_8h = r7;
    0x000203ba mov.w r8, 1                                       |         r8 = 1;
    0x000203be str r5, [sp]                                      |         *(sp) = r5;
    0x000203c0 add r1, pc                                        |         r1 = 0x407e0;
    0x000203c2 bl 0x1d554                                        |         fcn_0001d554 (r0, r1);
                                                                 | label_9:
    0x000203c6 ldr r2, [pc, 0x58]                                |         
    0x000203c8 ldr r3, [pc, 0x3c]                                |         r3 = *(0x20408);
    0x000203ca add r2, pc                                        |         r2 = 0x407f0;
                                                                 | label_5:
    0x000203cc ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x000203ce ldr r2, [r3]                                      |         r2 = *(r3);
    0x000203d0 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000203d2 eors r2, r3                                       |         r2 ^= r3;
    0x000203d4 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000203d8 bne 0x203fe                                       |             goto label_12;
                                                                 |         }
    0x000203da mov r0, r8                                        |         r0 = r8;
                                                                 | label_4:
    0x000203dc add sp, 0x34                                      |         
    0x000203de pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_7:
    0x000203e2 mov r3, r4                                        |         r3 = r4;
    0x000203e4 mov r4, r7                                        |         r4 = r7;
    0x000203e6 mov r7, r3                                        |         r7 = r3;
    0x000203e8 cmp r5, 0                                         |         
    0x000203ea bne 0x203a6                                       |         
                                                                 |     } while (r5 != 0);
                                                                 | label_10:
    0x000203ec ldr r3, [pc, 0x34]                                |     
    0x000203ee add r3, pc                                        |     r3 = 0x40816;
    0x000203f0 adds r3, 1                                        |     r3++;
    0x000203f2 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000203f4 bne 0x203ac                                       |         goto label_2;
                                                                 |     }
                                                                 | label_11:
    0x000203f6 ldr r1, [pc, 0x30]                                |     
    0x000203f8 add r1, pc                                        |     r1 = 0x40826;
    0x000203fa adds r1, 1                                        |     r1++;
    0x000203fc b 0x203b0                                         |     goto label_3;
                                                                 | label_12:
    0x000203fe blx 0x9b44                                        |     fcn_00009b44 ();
    0x00020402 nop                                               |     
    0x00020404 lsrs r4, r2, 0x20                                 |     r4 = r2 >> 0x20;
    0x00020406 movs r0, r1                                       |     r0 = r1;
    0x00020408 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0002040a movs r0, r0                                       |     
    0x0002040c ldr r0, [r6, 0x1c]                                |     r0 = *((r6 + 0x1c));
    0x0002040e movs r7, r0                                       |     r7 = r0;
    0x00020410 ldr r2, [r5, 0x1c]                                |     r2 = *((r5 + 0x1c));
    0x00020412 movs r7, r0                                       |     r7 = r0;
    0x00020414 bvs 0x20458                                       |     __asm ("bvs aav.0x000000ff");
    0x00020416 movs r6, r0                                       |     r6 = r0;
    0x00020418 bvs 0x20450                                       |     __asm ("bvs aav.0x000000ff");
    0x0002041a movs r6, r0                                       |     r6 = r0;
    0x0002041c ldm r4!, {r2, r6}                                 |     r2 = *(r4!);
                                                                 |     r6 = *((r4! + 4));
    0x0002041e movs r6, r0                                       |     r6 = r0;
    0x00020420 lsls r6, r6, 0x1c                                 |     r6 <<= 0x1c;
    0x00020422 movs r0, r1                                       |     r0 = r1;
                                                                 |     if (r0 >= r1) {
    0x00020424 bpl 0x203dc                                       |         goto label_4;
                                                                 |     }
    0x00020426 movs r6, r0                                       |     r6 = r0;
                                                                 |     if (r6 >= r0) {
    0x00020428 bpl 0x203cc                                       |         goto label_5;
                                                                 |     }
                                                                 |     /* Beware that this jump is a conditional jump.
                                                                 |      * r2dec transformed it as a return, due being the
                                                                 |      * last instruction. Please, check 'pdda' output
                                                                 |      * for more hints. */
    0x0002042a bgt 0x2043a                                       |     return void (*0x2043a)() ();
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x20c10 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00020c10 ()                              | void fcn_00020c10 (arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x00020c10 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x00020c14 mov r7, r0                                |     r7 = r0;
    0x00020c16 mov r8, r2                                |     r8 = r2;
    0x00020c18 ldr r0, [r0]                              |     r0 = *(r0);
    0x00020c1a mov r5, r3                                |     r5 = r3;
    0x00020c1c movs r2, 0x34                             |     r2 = 0x34;
    0x00020c1e movs r3, 0                                |     r3 = 0;
    0x00020c20 mov r6, r1                                |     r6 = r1;
    0x00020c22 bl 0x1d740                                |     r0 = fcn_0001d740 (r0, r1);
    0x00020c26 mov r4, r0                                |     r4 = r0;
                                                         |     if (r0 == 0) {
    0x00020c28 cbz r0, 0x20c84                           |         goto label_0;
                                                         |     }
    0x00020c2a movs r2, 0x33                             |     r2 = 0x33;
    0x00020c2c movs r1, 0                                |     r1 = 0;
    0x00020c2e adds r0, 1                                |     r0++;
    0x00020c30 blx 0x97d4                                |     fcn_000097d4 ();
    0x00020c34 movw r3, 0xffff                           |     r3 = 0xffff;
    0x00020c38 strb r6, [r4]                             |     *(r4) = r6;
    0x00020c3a ldr r6, [r7]                              |     r6 = *(r7);
    0x00020c3c strh r3, [r4, 0x22]                       |     *((r4 + 0x22)) = r3;
                                                         |     if (r5 != 0) {
    0x00020c3e cbz r5, 0x20c50                           |         
    0x00020c40 ldr r3, [r5, 4]                           |         r3 = *((r5 + 4));
    0x00020c42 mov.w r2, 0x208                           |         
    0x00020c46 movt r2, 0x40                             |         r2 = 0x400208;
    0x00020c4a str r5, [r4, 0x10]                        |         *((r4 + 0x10)) = r5;
    0x00020c4c ands r3, r2                               |         r3 &= r2;
    0x00020c4e str r3, [r4, 4]                           |         *((r4 + 4)) = r3;
                                                         |     }
    0x00020c50 cmp.w r8, 0                               |     
                                                         |     if (r8 != 0) {
    0x00020c54 beq 0x20c6e                               |         
    0x00020c56 ldr.w r2, [r8, 4]                         |         r2 = *((r8 + 4));
    0x00020c5a mov.w r3, 0x208                           |         
    0x00020c5e movt r3, 0x40                             |         r3 = 0x400208;
    0x00020c62 str.w r8, [r4, 0xc]                       |         __asm ("str.w r8, [r4, 0xc]");
    0x00020c66 ands r3, r2                               |         r3 &= r2;
    0x00020c68 ldr r2, [r4, 4]                           |         r2 = *((r4 + 4));
    0x00020c6a orrs r2, r3                               |         r2 |= r3;
    0x00020c6c str r2, [r4, 4]                           |         *((r4 + 4)) = r2;
                                                         |     }
    0x00020c6e mov r0, r4                                |     r0 = r4;
    0x00020c70 bl 0x126d8                                |     fcn_000126d8 (r0);
    0x00020c74 ldr.w r2, [r6, 0x84]                      |     r2 = *((r6 + 0x84));
    0x00020c78 ldr r3, [r4, 0x18]                        |     r3 = *((r4 + 0x18));
    0x00020c7a cmp r3, r2                                |     
                                                         |     if (r3 > r2) {
    0x00020c7c bgt 0x20ca4                               |         goto label_1;
                                                         |     }
                                                         |     do {
    0x00020c7e mov r0, r4                                |         r0 = r4;
    0x00020c80 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_0:
    0x00020c84 ldr r0, [r7]                              |         r0 = *(r7);
    0x00020c86 cmp.w r8, 0                               |         
                                                         |         if (r8 != 0) {
    0x00020c8a beq 0x20c94                               |             
    0x00020c8c mov r1, r8                                |             r1 = r8;
    0x00020c8e bl 0x16c0c                                |             fcn_00016c0c (r0, r1);
    0x00020c92 ldr r0, [r7]                              |             r0 = *(r7);
                                                         |         }
    0x00020c94 cmp r5, 0                                 |         
    0x00020c96 beq 0x20c7e                               |         
                                                         |     } while (r5 == 0);
    0x00020c98 mov r1, r5                                |     r1 = r5;
    0x00020c9a bl 0x16c0c                                |     fcn_00016c0c (r0, r1);
    0x00020c9e mov r0, r4                                |     r0 = r4;
    0x00020ca0 pop.w {r4, r5, r6, r7, r8, pc}            |     
                                                         | label_1:
    0x00020ca4 ldr r1, [pc, 0xc]                         |     
    0x00020ca6 mov r0, r7                                |     r0 = r7;
    0x00020ca8 add r1, pc                                |     r1 = 0x41960;
    0x00020caa bl 0x1d554                                |     fcn_0001d554 (r0, r1);
    0x00020cae mov r0, r4                                |     r0 = r4;
    0x00020cb0 pop.w {r4, r5, r6, r7, r8, pc}            |     
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x20cb8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00020cb8 ()                                      | void fcn_00020cb8 (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00020cb8 push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x00020cbc mov r4, r0                                        |     r4 = r0;
    0x00020cbe ldr r6, [r0]                                      |     r6 = *(r0);
    0x00020cc0 mov r0, r2                                        |     r0 = r2;
    0x00020cc2 mov r7, r3                                        |     r7 = r3;
    0x00020cc4 sub sp, 0x10                                      |     
    0x00020cc6 ldr r2, [pc, 0xbc]                                |     
    0x00020cc8 mov r5, r1                                        |     r5 = r1;
    0x00020cca ldr r3, [pc, 0xbc]                                |     r3 = *(0x20d8a);
    0x00020ccc mov r1, sp                                        |     r1 = sp;
    0x00020cce ldr.w r8, [r6]                                    |     r8 = *(r6);
    0x00020cd2 movs r6, 0                                        |     r6 = 0;
    0x00020cd4 add r2, pc                                        |     r2 = 0x41a5e;
    0x00020cd6 ldr r3, [r2, r3]                                  |     
    0x00020cd8 ldr.w sb, [r8]                                    |     sb = *(r8);
    0x00020cdc ldr r3, [r3]                                      |     r3 = *(0x41a5e);
    0x00020cde str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00020ce0 mov.w r3, 0                                       |     r3 = 0;
    0x00020ce4 str r6, [sp]                                      |     *(sp) = r6;
    0x00020ce6 bl 0xc048                                         |     r0 = fcn_0000c048 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x00020cea cbz r0, 0x20cf4                                   |         
    0x00020cec ldr.w sl, [sp]                                    |         sl = *(sp);
    0x00020cf0 cmp sl, r6                                        |         
                                                                 |         if (sl >= r6) {
    0x00020cf2 bge 0x20d50                                       |             goto label_1;
                                                                 |         }
                                                                 |     }
    0x00020cf4 movs r6, 0                                        |     r6 = 0;
    0x00020cf6 mov r0, sb                                        |     r0 = sb;
    0x00020cf8 mov r3, r6                                        |     r3 = r6;
    0x00020cfa add r2, sp, 4                                     |     r2 += var_4h;
    0x00020cfc movs r1, 0xb0                                     |     r1 = 0xb0;
    0x00020cfe strd r6, r6, [sp, 4]                              |     __asm ("strd r6, r6, [var_4h]");
    0x00020d02 bl 0x1db90                                        |     r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00020d06 mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r0 == 0) {
    0x00020d08 cbz r0, 0x20d36                                   |         goto label_2;
                                                                 |     }
    0x00020d0a movs r1, 0x2e                                     |     r1 = 0x2e;
    0x00020d0c str r5, [r0, 0x1c]                                |     *((r0 + 0x1c)) = r5;
    0x00020d0e mov r2, r6                                        |     r2 = r6;
    0x00020d10 mov r0, r8                                        |     r0 = r8;
    0x00020d12 bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x00020d16 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r1 == 0) {
                                                                 | label_0:
    0x00020d18 cbz r1, 0x20d36                                   |         goto label_2;
                                                                 |     }
    0x00020d1a movs r2, 3                                        |     r2 = 3;
    0x00020d1c mov r0, r4                                        |     r0 = r4;
    0x00020d1e bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x00020d22 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00020d24 add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x00020d28 movs r2, 0x40                                     |     r2 = 0x40;
    0x00020d2a add.w r3, r3, r0, lsl 4                           |     r3 += (r0 << 4);
    0x00020d2e strh r2, [r3, 0xc]                                |     *((r3 + 0xc)) = r2;
    0x00020d30 ldr r2, [sp, 0x30]                                |     r2 = *(arg_30h);
    0x00020d32 str r7, [r3, 0x14]                                |     *((r3 + 0x14)) = r7;
    0x00020d34 strb r2, [r3, 0xf]                                |     *((r3 + 0xf)) = r2;
                                                                 |     do {
                                                                 | label_2:
    0x00020d36 ldr r2, [pc, 0x54]                                |         
    0x00020d38 ldr r3, [pc, 0x4c]                                |         r3 = *(0x20d88);
    0x00020d3a add r2, pc                                        |         r2 = 0x41acc;
    0x00020d3c ldr r3, [r2, r3]                                  |         r3 = *(0x41acc);
    0x00020d3e ldr r2, [r3]                                      |         r2 = *(0x41acc);
    0x00020d40 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00020d42 eors r2, r3                                       |         r2 ^= r3;
    0x00020d44 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00020d48 bne 0x20d80                                       |             goto label_3;
                                                                 |         }
    0x00020d4a add sp, 0x10                                      |         
    0x00020d4c pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_1:
    0x00020d50 mov r3, r6                                        |         r3 = r6;
    0x00020d52 mov r0, sb                                        |         r0 = sb;
    0x00020d54 add r2, sp, 4                                     |         r2 += var_4h;
    0x00020d56 movs r1, 0x9b                                     |         r1 = 0x9b;
    0x00020d58 strd r6, r6, [sp, 4]                              |         __asm ("strd r6, r6, [var_4h]");
    0x00020d5c bl 0x1db90                                        |         r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00020d60 mov r3, r0                                        |         r3 = r0;
    0x00020d62 cmp r0, 0                                         |         
    0x00020d64 beq 0x20d36                                       |         
                                                                 |     } while (r0 == 0);
    0x00020d66 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00020d68 mov r2, r6                                        |     r2 = r6;
    0x00020d6a str.w sl, [r0, 8]                                 |     __asm ("str.w sl, [r0, 8]");
    0x00020d6e mov r0, r8                                        |     r0 = r8;
    0x00020d70 orr r1, r1, 0x800                                 |     r1 |= 0x800;
    0x00020d74 str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
    0x00020d76 movs r1, 0x2e                                     |     r1 = 0x2e;
    0x00020d78 bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x00020d7c mov r1, r0                                        |     r1 = r0;
    0x00020d7e b 0x20d18                                         |     goto label_0;
                                                                 | label_3:
    0x00020d80 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00020d84 cdp2 p0, 2, c0, c12, c7, 0                        |     __asm ("cdp2 p0, 2, c0, c12, c7, 0");
    0x00020d88 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00020d8a movs r0, r0                                       |     
    0x00020d8c stc2l p0, c0, [r6, 0x1c]                          |     __asm ("stc2l p0, c0, [r6, 0x1c]");
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x21694 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.00021694 ()                          | void fcn_00021694 (uint32_t arg1) {
                                                     |     r0 = arg1;
    0x00021694 push {r0, r1, r7, fp, sp, lr}         |     
    0x00021698 rors r0, r6                           |     __asm ("rors r0, r6");
    0x0002169a ldr r4, [r3, 0x28]                    |     r4 = *((r3 + 0x28));
    0x0002169c cmp r4, 0                             |     
                                                     |     if (r4 == 0) {
    0x0002169e beq 0x21724                           |         goto label_1;
                                                     |     }
    0x000216a0 ldr r5, [r4, 0x1c]                    |     r5 = *((r4 + 0x1c));
    0x000216a2 cmp r5, 0                             |     
                                                     |     if (r5 != 0) {
    0x000216a4 bne 0x21724                           |         goto label_1;
                                                     |     }
    0x000216a6 ldr r3, [pc, 0x80]                    |     
    0x000216a8 mov r7, r0                            |     r7 = r0;
    0x000216aa add r3, pc                            |     
    0x000216ac ldr.w r3, [r3, 0x130]                 |     r3 = *(0x42f08);
    0x000216b0 blx r3                                |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x000216b2 cmp.w r0, 0x8000                      |     
    0x000216b6 it ge                                 |     
                                                     |     if (r0 >= 0x8000) {
    0x000216b8 asrge r6, r0, 0xf                     |         __asm ("asrge r6, r0, 0xf");
                                                     |     }
    0x000216ba ldr r0, [r4, 4]                       |     r0 = *((r4 + 4));
    0x000216bc it lt                                 |     
                                                     |     if (r0 >= 0x8000) {
    0x000216be movlt r6, 1                           |         r6 = 1;
                                                     |     }
    0x000216c0 blx 0x9af8                            |     EVP_CIPHER_nid ();
    0x000216c4 ldrh r3, [r4, 0x14]                   |     r3 = *((r4 + 0x14));
                                                     |     if (r3 == 0) {
    0x000216c6 cbz r3, 0x216f8                       |         goto label_2;
                                                     |     }
    0x000216c8 ldr.w r8, [pc, 0x60]                  |     
    0x000216cc add r8, pc                            |     r8 = 0x42dfc;
    0x000216ce b 0x216e0                             |     
                                                     |     while (r3 >= 0) {
    0x000216d0 ldr.w r3, [r8, 0x118]                 |         r3 = *((r8 + 0x118));
    0x000216d4 add r5, r6                            |         r5 += r6;
    0x000216d6 ldr r1, [r4, 0x10]                    |         r1 = *((r4 + 0x10));
    0x000216d8 blx r3                                |         uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x000216da ldrh r3, [r4, 0x14]                   |         r3 = *((r4 + 0x14));
    0x000216dc cmp r3, r5                            |         
                                                     |         if (r3 <= r5) {
    0x000216de ble 0x216f8                           |             goto label_2;
                                                     |         }
                                                     | label_0:
    0x000216e0 ldr r3, [r4, 0xc]                     |         r3 = *((r4 + 0xc));
    0x000216e2 ldr r2, [r4, 0x18]                    |         r2 = *((r4 + 0x18));
    0x000216e4 cmp r3, 0                             |         
    0x000216e6 ldr.w r0, [r2, r5, lsl 2]             |         offset_0 = r5 << 2;
                                                     |         r0 = *((r2 + offset_0));
    0x000216ea bge 0x216d0                           |         
                                                     |     }
    0x000216ec blx 0x9c24                            |     fcn_00009c24 ();
    0x000216f0 ldrh r3, [r4, 0x14]                   |     r3 = *((r4 + 0x14));
    0x000216f2 add r5, r6                            |     r5 += r6;
    0x000216f4 cmp r3, r5                            |     
                                                     |     if (r3 > r5) {
    0x000216f6 bgt 0x216e0                           |         goto label_0;
                                                     |     }
                                                     | label_2:
    0x000216f8 ldr r0, [r4, 0x18]                    |     r0 = *((r4 + 0x18));
    0x000216fa blx 0x9c24                            |     fcn_00009c24 ();
    0x000216fe ldr r1, [r4, 0xc]                     |     r1 = *((r4 + 0xc));
    0x00021700 cmp r1, 0                             |     
                                                     |     if (r1 >= 0) {
    0x00021702 blt 0x21714                           |         
    0x00021704 movw r2, 0x9c7e                       |         r2 = 0x9c7e;
    0x00021708 mov r0, r7                            |         r0 = r7;
    0x0002170a bl 0x2162c                            |         fcn_0002162c (r0, r1, r2);
    0x0002170e mov.w r3, -1                          |         r3 = -1;
    0x00021712 str r3, [r4, 0xc]                     |         *((r4 + 0xc)) = r3;
                                                     |     }
    0x00021714 ldr r3, [r4]                          |     r3 = *(r4);
    0x00021716 movs r2, 0                            |     r2 = 0;
    0x00021718 mov r0, r4                            |     r0 = r4;
    0x0002171a pop.w {r4, r5, r6, r7, r8, lr}        |     
    0x0002171e str r2, [r3, 0x28]                    |     *((r3 + 0x28)) = r2;
    0x00021720 b.w 0x9c20                            |     void (*0x9c20)() ();
                                                     | label_1:
    0x00021724 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x21fa0).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x22c20 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00022c20 ()                      | void fcn_00022c20 (int16_t arg1) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
    0x00022c20 strdlt fp, ip, [r3], r0           |     __asm ("strdlt fp, ip, [r3], r0");
    0x00022c24 ldrb r3, [r0, 9]                  |     r3 = *((r0 + 9));
    0x00022c26 mov r4, r0                        |     r4 = r0;
    0x00022c28 ldrd r6, r5, [r0, 0x34]           |     __asm ("ldrd r6, r5, [r0, 0x34]");
    0x00022c2c ldrb r1, [r5, r3]                 |     r1 = *((r5 + r3));
    0x00022c2e add r5, r3                        |     r5 += r3;
    0x00022c30 bl 0x22298                        |     r0 = fcn_00022298 (r0, r1);
                                                 |     if (r0 == 0) {
    0x00022c34 cbnz r0, 0x22c8e                  |         
    0x00022c36 ldrb r2, [r4, 0xa]                |         r2 = *((r4 + 0xa));
    0x00022c38 ldrb r1, [r4, 9]                  |         r1 = *((r4 + 9));
    0x00022c3a ldr r3, [r6, 0x24]                |         r3 = *((r6 + 0x24));
    0x00022c3c add.w r7, r2, 8                   |         r7 = r2 + 8;
    0x00022c40 strb r0, [r4, 0xc]                |         *((r4 + 0xc)) = r0;
    0x00022c42 add r1, r2                        |         r1 += r2;
    0x00022c44 add r7, r5                        |         r7 += r5;
    0x00022c46 adds r1, 8                        |         r1 += 8;
    0x00022c48 str r7, [r4, 0x40]                |         *((r4 + 0x40)) = r7;
    0x00022c4a strh r1, [r4, 0x12]               |         *((r4 + 0x12)) = r1;
    0x00022c4c ldr r1, [r4, 0x38]                |         r1 = *((r4 + 0x38));
    0x00022c4e add r2, r1                        |         r2 += r1;
    0x00022c50 add r1, r3                        |         r1 += r3;
    0x00022c52 str r2, [r4, 0x44]                |         *((r4 + 0x44)) = r2;
    0x00022c54 subs r2, r3, 1                    |         r2 = r3 - 1;
    0x00022c56 str r1, [r4, 0x3c]                |         *((r4 + 0x3c)) = r1;
    0x00022c58 movw r1, 0xaaab                   |         
    0x00022c5c subs r3, 8                        |         r3 -= 8;
                                                 |         /* if there is a right shift of 1, then it's a division by 1/3 */
    0x00022c5e movt r1, 0xaaaa                   |         r1 = 0xaaaaaaab;
    0x00022c62 strh r2, [r4, 0x1a]               |         *((r4 + 0x1a)) = r2;
    0x00022c64 umull r1, r3, r1, r3              |         r1:r3 = r1 * r3;
    0x00022c68 ldrh.w r2, [r5, 3]                |         r2 = *((r5 + 3));
    0x00022c6c rev16 r2, r2                      |         __asm ("rev16 r2, r2");
    0x00022c6e strh r2, [r4, 0x18]               |         *((r4 + 0x18)) = r2;
    0x00022c70 uxth r2, r2                       |         r2 = (int16_t) r2;
    0x00022c72 cmp.w r2, r3, lsr 2               |         
                                                 |         if (r2 > r3) {
    0x00022c76 bhi 0x22cb4                       |             goto label_0;
                                                 |         }
    0x00022c78 movs r3, 1                        |         r3 = 1;
    0x00022c7a mov.w r2, -1                      |         r2 = -1;
    0x00022c7e strb r3, [r4]                     |         *(r4) = r3;
    0x00022c80 ldr r3, [r6, 4]                   |         r3 = *((r6 + 4));
    0x00022c82 str r2, [r4, 0x14]                |         *((r4 + 0x14)) = r2;
    0x00022c84 ldr r3, [r3, 0x20]                |         r3 = *((r3 + 0x20));
    0x00022c86 lsls r3, r3, 0xa                  |         r3 <<= 0xa;
                                                 |         if (r3 < r3) {
    0x00022c88 bmi 0x22cd6                       |             goto label_1;
                                                 |         }
    0x00022c8a add sp, 0xc                       |         
    0x00022c8c pop {r4, r5, r6, r7, pc}          |         
                                                 |     }
    0x00022c8e blx 0xa230                        |     fcn_0000a230 ();
    0x00022c92 ldr r2, [pc, 0x50]                |     
    0x00022c94 add.w r4, r0, 0x14                |     r4 = r0 + 0x14;
    0x00022c98 ldr r1, [pc, 0x4c]                |     
    0x00022c9a movw r3, 0xe9c                    |     
    0x00022c9e movt r3, 1                        |     r3 = 0x10e9c;
    0x00022ca2 movs r0, 0xb                      |     r0 = 0xb;
    0x00022ca4 add r2, pc                        |     r2 = 0x4598e;
    0x00022ca6 str r4, [sp]                      |     *(sp) = r4;
    0x00022ca8 add r1, pc                        |     r1 = 0x45994;
    0x00022caa blx 0x9f00                        |     fcn_00009f00 ();
                                                 |     do {
    0x00022cae movs r0, 0xb                      |         r0 = 0xb;
    0x00022cb0 add sp, 0xc                       |         
    0x00022cb2 pop {r4, r5, r6, r7, pc}          |         
                                                 | label_0:
    0x00022cb4 blx 0xa230                        |         fcn_0000a230 ();
    0x00022cb8 ldr r2, [pc, 0x30]                |         
    0x00022cba add.w r4, r0, 0x14                |         r4 = r0 + 0x14;
    0x00022cbe ldr r1, [pc, 0x30]                |         
    0x00022cc0 movw r3, 0xeaa                    |         
    0x00022cc4 movt r3, 1                        |         r3 = 0x10eaa;
    0x00022cc8 movs r0, 0xb                      |         r0 = 0xb;
    0x00022cca add r2, pc                        |         r2 = 0x459ba;
    0x00022ccc str r4, [sp]                      |         *(sp) = r4;
    0x00022cce add r1, pc                        |         r1 = 0x459c4;
    0x00022cd0 blx 0x9f00                        |         fcn_00009f00 ();
    0x00022cd4 b 0x22cae                         |         
                                                 |     } while (1);
                                                 | label_1:
    0x00022cd6 mov r0, r4                        |     r0 = r4;
    0x00022cd8 add sp, 0xc                       |     
    0x00022cda pop.w {r4, r5, r6, r7, lr}        |     
    0x00022cde b.w 0x21e6c                       |     return void (*0x21e6c)() ();
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x23590 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00023590 ()                                      | void fcn_00023590 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_20h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00023590 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00023594 mov r7, r0                                        |     r7 = r0;
    0x00023596 ldrb r0, [r3, 9]                                  |     r0 = *((r3 + 9));
    0x00023598 sub sp, 0x34                                      |     
    0x0002359a mov r4, r1                                        |     r4 = r1;
    0x0002359c ldr.w fp, [r3, 0x38]                              |     fp = *((r3 + 0x38));
    0x000235a0 ldr r1, [r3, 0x34]                                |     r1 = *((r3 + 0x34));
    0x000235a2 ldr r5, [r3, 0x40]                                |     r5 = *((r3 + 0x40));
    0x000235a4 str r3, [sp, 0x24]                                |     x = r3;
    0x000235a6 adds r3, r4, r2                                   |     r3 = r4 + r2;
    0x000235a8 str r0, [sp, 0x1c]                                |     var_8h = r0;
    0x000235aa str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000235ac adds r3, r0, 5                                    |     r3 = r0 + 5;
    0x000235ae adds r0, 6                                        |     r0 += 6;
    0x000235b0 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x000235b2 str r3, [sp, 0x28]                                |     var_14h = r3;
    0x000235b4 ldrb.w r2, [fp, r3]                               |     r2 = *((fp + r3));
    0x000235b8 ldrb.w r3, [fp, r0]                               |     r3 = *((fp + r0));
    0x000235bc str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x000235be orr.w r3, r3, r2, lsl 8                           |     r3 |= (r2 << 8);
    0x000235c2 ldr r2, [r1, 0x28]                                |     r2 = *((r1 + 0x28));
    0x000235c4 ldr r1, [r1]                                      |     r1 = *(r1);
    0x000235c6 cmp r2, r3                                        |     
    0x000235c8 add.w r0, fp, r2                                  |     r0 = fp + r2;
    0x000235cc ldr.w r1, [r1, 0xf0]                              |     r1 = *((r1 + 0xf0));
    0x000235d0 it hs                                             |     
                                                                 |     if (r2 < r3) {
    0x000235d2 subhs r2, r2, r3                                  |         r2 -= r3;
                                                                 |     }
    0x000235d4 str r0, [sp, 0x14]                                |     var_0h = r0;
    0x000235d6 iteee lo                                          |     
                                                                 |     if (r2 >= r3) {
    0x000235d8 strlo fp, [sp, 0xc]                               |         var_ch = fp;
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x000235dc addhs r0, r1, r3                                  |         r0 = r1 + r3;
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x000235de addhs r3, fp                                      |         r3 += fp;
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x000235e0 str r3, [sp, 0xc]                                 |         var_ch = r3;
                                                                 |     }
    0x000235e2 str r1, [sp, 0x18]                                |     var_4h = r1;
    0x000235e4 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000235e6 it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x000235e8 ldrlo r0, [sp, 0x18]                              |         r0 = var_4h;
                                                                 |     }
    0x000235ea blx 0x9e2c                                        |     fcn_00009e2c ();
    0x000235ee ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x000235f0 cmp r4, r3                                        |     
                                                                 |     if (r4 < r3) {
    0x000235f2 blt.w 0x2372c                                     |         goto label_2;
                                                                 |     }
    0x000235f6 add.w r3, r7, 0x28                                |     r3 = r7 + 0x28;
    0x000235fa mov.w r8, 0                                       |     r8 = 0;
                                                                 |     do {
    0x000235fe ldr r2, [r3, 4]!                                  |         r2 = *((r3 += 4));
    0x00023602 add.w r8, r8, 1                                   |         r8++;
    0x00023606 cmp r2, r4                                        |         
                                                                 |         if (r2 > r4) {
    0x00023608 bgt 0x23610                                       |             goto label_1;
                                                                 |         }
    0x0002360a cmp.w r8, 6                                       |         
    0x0002360e bne 0x235fe                                       |         
                                                                 |     } while (r8 != 6);
                                                                 | label_1:
    0x00023610 add.w r3, r8, 4                                   |     r3 = r8 + 4;
    0x00023614 adds r5, 2                                        |     r5 += 2;
    0x00023616 ldr.w sb, [r7, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     sb = *((r7 + offset_0));
    0x0002361a ldr r3, [sp, 0x14]                                |     r3 = var_0h;
    0x0002361c b 0x23670                                         |     
                                                                 |     while (r1 >= r6) {
    0x0002361e ldr r6, [sp, 0x14]                                |         r6 = var_0h;
    0x00023620 cmp r1, r6                                        |         
    0x00023622 sub.w r6, r1, fp                                  |         r6 = r1 - fp;
                                                                 |         if (r1 >= r6) {
    0x00023626 bhs 0x23686                                       |             goto label_3;
                                                                 |         }
    0x00023628 ldr r1, [sp, 0x14]                                |         r1 = var_0h;
    0x0002362a cmp r1, r0                                        |         
    0x0002362c ldr r1, [sp, 0x18]                                |         r1 = var_4h;
    0x0002362e add r1, r6                                        |         r1 += r6;
                                                                 |         if (r1 <= r0) {
    0x00023630 blo 0x2370a                                       |             goto label_4;
                                                                 |         }
                                                                 | label_0:
    0x00023632 subs r3, r3, r2                                   |         r3 -= r2;
    0x00023634 adds r4, 1                                        |         r4++;
    0x00023636 sub.w r6, r3, fp                                  |         r6 = r3 - fp;
    0x0002363a cmp r3, r5                                        |         
    0x0002363c uxtb.w sl, r6                                     |         sl = (int8_t) r6;
    0x00023640 ubfx r6, r6, 8, 8                                 |         r6 = (r6 >> 8) & ((1 << 8) - 1);
    0x00023644 strb r6, [r5, -0x2]                               |         *((r5 - 0x2)) = r6;
    0x00023648 strb sl, [r5, -0x1]                               |         *((r5 - 0x1)) = sl;
                                                                 |         if (r3 <= r5) {
    0x0002364c blo 0x236b0                                       |             goto label_5;
                                                                 |         }
    0x0002364e mov r0, r3                                        |         r0 = r3;
    0x00023650 blx 0x9928                                        |         fcn_00009928 ();
    0x00023654 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x00023656 add.w r2, r7, r8, lsl 2                           |         r2 = r7 + (r8 << 2);
    0x0002365a mov r3, r0                                        |         r3 = r0;
    0x0002365c cmp r1, r4                                        |         
                                                                 |         if (r1 <= r4) {
    0x0002365e ble 0x236d8                                       |             goto label_6;
                                                                 |         }
    0x00023660 ldr r1, [r2, 0x28]                                |         r1 = *((r2 + 0x28));
    0x00023662 cmp r1, r4                                        |         
                                                                 |         if (r1 <= r4) {
    0x00023664 bgt 0x2366e                                       |             
    0x00023666 ldr.w sb, [r2, 0x14]                              |             sb = *((r2 + 0x14));
    0x0002366a add.w r8, r8, 1                                   |             r8++;
                                                                 |         }
    0x0002366e adds r5, 2                                        |         r5 += 2;
    0x00023670 ldrd r1, r2, [r7, 8]                              |         __asm ("ldrd r1, r2, [r7, 8]");
    0x00023674 ldr r6, [sp, 0xc]                                 |         r6 = var_ch;
    0x00023676 ldr.w r1, [r1, r4, lsl 2]                         |         offset_1 = r4 << 2;
                                                                 |         r1 = *((r1 + offset_1));
    0x0002367a ldrh.w r2, [r2, r4, lsl 1]                        |         offset_2 = r4 << 1;
                                                                 |         r2 = *((r2 + offset_2));
    0x0002367e cmp r1, r6                                        |         
    0x00023680 add.w r0, r1, r2                                  |         r0 = r1 + r2;
    0x00023684 bhs 0x2361e                                       |         
                                                                 |     }
                                                                 | label_3:
    0x00023686 cmp r1, sb                                        |     
    0x00023688 it lo                                             |     
                                                                 |     if (r1 >= sb) {
    0x0002368a cmplo sb, r0                                      |         __asm ("cmplo sb, r0");
                                                                 |         goto label_7;
                                                                 |     }
                                                                 |     if (r1 >= sb) {
                                                                 | label_7:
    0x0002368c bhs 0x23632                                       |         goto label_0;
                                                                 |     }
    0x0002368e blx 0xa230                                        |     fcn_0000a230 ();
    0x00023692 ldr r2, [pc, 0xa0]                                |     
    0x00023694 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00023698 ldr r1, [pc, 0x9c]                                |     
    0x0002369a movw r3, 0x2304                                   |     
    0x0002369e movt r3, 1                                        |     r3 = 0x12304;
    0x000236a2 movs r0, 0xb                                      |     r0 = 0xb;
    0x000236a4 add r2, pc                                        |     r2 = 0x46dde;
    0x000236a6 str r4, [sp]                                      |     *(sp) = r4;
    0x000236a8 add r1, pc                                        |     r1 = 0x46de4;
    0x000236aa blx 0x9f00                                        |     fcn_00009f00 ();
    0x000236ae b 0x236d0                                         |     goto label_8;
                                                                 | label_5:
    0x000236b0 blx 0xa230                                        |     fcn_0000a230 ();
    0x000236b4 ldr r2, [pc, 0x84]                                |     
    0x000236b6 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x000236ba ldr r1, [pc, 0x84]                                |     
    0x000236bc movw r3, 0x230a                                   |     
    0x000236c0 movt r3, 1                                        |     r3 = 0x1230a;
    0x000236c4 movs r0, 0xb                                      |     r0 = 0xb;
    0x000236c6 add r2, pc                                        |     r2 = 0x46e06;
    0x000236c8 str r4, [sp]                                      |     *(sp) = r4;
    0x000236ca add r1, pc                                        |     r1 = 0x46e10;
    0x000236cc blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 |     do {
                                                                 | label_8:
    0x000236d0 movs r0, 0xb                                      |         r0 = 0xb;
    0x000236d2 add sp, 0x34                                      |         
    0x000236d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_6:
    0x000236d8 ldr r0, [sp, 0x24]                                |         r0 = x;
    0x000236da movs r2, 0                                        |         r2 = 0;
    0x000236dc ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x000236de strb r2, [r0, 0xc]                                |         *((r0 + 0xc)) = r2;
    0x000236e0 strh r3, [r0, 0x18]                               |         *((r0 + 0x18)) = r3;
    0x000236e2 ldr r3, [sp, 0x1c]                                |         r3 = var_8h;
    0x000236e4 add r3, fp                                        |         r3 += fp;
    0x000236e6 strh.w r2, [r3, 1]                                |         *((r3 + 1)) = r2;
    0x000236ea ldrh r1, [r0, 0x18]                               |         r1 = *((r0 + 0x18));
    0x000236ec lsrs r1, r1, 8                                    |         r1 >>= 8;
    0x000236ee strb r1, [r3, 3]                                  |         *((r3 + 3)) = r1;
    0x000236f0 ldrh r1, [r0, 0x18]                               |         r1 = *((r0 + 0x18));
    0x000236f2 mov r0, r2                                        |         r0 = r2;
    0x000236f4 strb r1, [r3, 4]                                  |         *((r3 + 4)) = r1;
    0x000236f6 ldr r1, [sp, 0x28]                                |         r1 = var_14h;
    0x000236f8 strb.w r6, [fp, r1]                               |         *((fp + r1)) = r6;
    0x000236fc ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x000236fe strb.w sl, [fp, r1]                               |         *((fp + r1)) = sl;
    0x00023702 strb r2, [r3, 7]                                  |         *((r3 + 7)) = r2;
    0x00023704 add sp, 0x34                                      |         
    0x00023706 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_4:
    0x0002370a blx 0xa230                                        |         fcn_0000a230 ();
    0x0002370e ldr r2, [pc, 0x34]                                |         
    0x00023710 add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x00023714 ldr r1, [pc, 0x30]                                |         
    0x00023716 movw r3, 0x22ff                                   |         
    0x0002371a movt r3, 1                                        |         r3 = 0x122ff;
    0x0002371e movs r0, 0xb                                      |         r0 = 0xb;
    0x00023720 add r2, pc                                        |         r2 = 0x46e6a;
    0x00023722 str r4, [sp]                                      |         *(sp) = r4;
    0x00023724 add r1, pc                                        |         r1 = 0x46e70;
    0x00023726 blx 0x9f00                                        |         fcn_00009f00 ();
    0x0002372a b 0x236d0                                         |         
                                                                 |     } while (1);
                                                                 | label_2:
    0x0002372c mov.w r8, 0                                       |     r8 = 0;
    0x00023730 b 0x23610                                         |     goto label_1;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x239e0 */
                                                                     | #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.000239e0 ()                                          | void fcn_000239e0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x000239e0 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000239e4 mov r7, r0                                            |     r7 = r0;
    0x000239e6 mov r0, r1                                            |     r0 = r1;
    0x000239e8 mov r4, r1                                            |     r4 = r1;
    0x000239ea mov sb, r2                                            |     sb = r2;
    0x000239ec bl 0x23868                                            |     r0 = fcn_00023868 (r0);
    0x000239f0 cmp r0, 0x10                                          |     
                                                                     |     if (r0 == 0x10) {
    0x000239f2 beq 0x23abe                                           |         goto label_3;
                                                                     |     }
                                                                     |     if (r0 != 0) {
    0x000239f4 cbnz r0, 0x23a40                                      |         goto label_1;
                                                                     |     }
    0x000239f6 mov r5, r0                                            |     r5 = r0;
    0x000239f8 add.w r7, r7, 0x128                                   |     r7 += 0x128;
    0x000239fc mov r8, r0                                            |     r8 = r0;
    0x000239fe mov r6, r0                                            |     r6 = r0;
                                                                     |     do {
                                                                     | label_0:
    0x00023a00 ldr r3, [r7]                                          |         r3 = *(r7);
    0x00023a02 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x00023a04 bne 0x23ac6                                           |             goto label_4;
                                                                     |         }
    0x00023a06 ldr r3, [r4, 0x74]                                    |         r3 = *((r4 + 0x74));
    0x00023a08 ldrb r1, [r3, 8]                                      |         r1 = *((r3 + 8));
    0x00023a0a ldrh r2, [r3, 0x18]                                   |         r2 = *((r3 + 0x18));
                                                                     |         if (r1 != 0) {
    0x00023a0c cbnz r1, 0x23a44                                      |             goto label_5;
                                                                     |         }
    0x00023a0e ldrb r0, [r3, 1]                                      |         r0 = *((r3 + 1));
    0x00023a10 ldrh.w r1, [r4, 0x46]                                 |         r1 = *((r4 + 0x46));
                                                                     |         if (r0 == 0) {
    0x00023a14 cbnz r0, 0x23a1c                                      |             
    0x00023a16 adds r5, r2, r5                                       |             r5 = r2 + r5;
    0x00023a18 adc r8, r8, 0                                         |             __asm ("adc r8, r8, 0");
                                                                     |         }
                                                                     | label_2:
    0x00023a1c cmp r1, r2                                            |         
    0x00023a1e ldr.w ip, [r3, 0x38]                                  |         ip = *((r3 + 0x38));
                                                                     |         if (r1 == r2) {
    0x00023a22 beq 0x23aa0                                           |             goto label_6;
                                                                     |         }
    0x00023a24 ldr r2, [r3, 0x40]                                    |         r2 = *((r3 + 0x40));
    0x00023a26 mov r0, r4                                            |         r0 = r4;
    0x00023a28 ldrh r3, [r3, 0x1a]                                   |         r3 = *((r3 + 0x1a));
    0x00023a2a ldrh.w r2, [r2, r1, lsl 1]                            |         offset_0 = r1 << 1;
                                                                     |         r2 = *((r2 + offset_0));
    0x00023a2e rev16 r2, r2                                          |         __asm ("rev16 r2, r2");
    0x00023a30 ands r3, r2                                           |         r3 &= r2;
    0x00023a32 ldr.w r1, [ip, r3]                                    |         r1 = *((ip + r3));
    0x00023a36 rev r1, r1                                            |         r1 = SWAP32 (r1);
    0x00023a38 bl 0x22e40                                            |         r0 = fcn_00022e40 (r0, r1);
    0x00023a3c cmp r0, 0                                             |         
    0x00023a3e beq 0x23a00                                           |         
                                                                     |     } while (r0 == 0);
                                                                     | label_1:
    0x00023a40 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                     | label_5:
    0x00023a44 adds.w fp, r2, r5                                     |     
    0x00023a48 adc sl, r8, 0                                         |     __asm ("adc sl, r8, 0");
    0x00023a4c mov r5, fp                                            |     r5 = fp;
    0x00023a4e mov r8, sl                                            |     r8 = sl;
    0x00023a50 b 0x23a84                                             |     
                                                                     |     while (r1 != 0) {
    0x00023a52 ldrb r1, [r4, 1]                                      |         r1 = *((r4 + 1));
    0x00023a54 add.w ip, r2, 0x1e                                    |         
    0x00023a58 strh r6, [r4, 0x32]                                   |         *((r4 + 0x32)) = r6;
    0x00023a5a bic r1, r1, 6                                         |         r1 = BIT_MASK (r1, 6);
    0x00023a5e strb r1, [r4, 1]                                      |         *((r4 + 1)) = r1;
    0x00023a60 ldrh.w r1, [r4, r0, lsl 1]                            |         offset_1 = r0 << 1;
                                                                     |         r1 = *((r4 + offset_1));
    0x00023a64 strb.w r2, [r4, 0x44]                                 |         *((r4 + 0x44)) = r2;
    0x00023a68 ldr.w r2, [r4, ip, lsl 2]                             |         offset_2 = ip << 2;
                                                                     |         r2 = *((r4 + offset_2));
    0x00023a6c ldr r0, [r3, 0x48]                                    |         r0 = *((r3 + 0x48));
    0x00023a6e strh.w r1, [r4, 0x46]                                 |         *((r4 + 0x46)) = r1;
    0x00023a72 str r2, [r4, 0x74]                                    |         *((r4 + 0x74)) = r2;
    0x00023a74 bl 0x10f18                                            |         fcn_00010f18 (r0);
    0x00023a78 ldr r3, [r4, 0x74]                                    |         r3 = *((r4 + 0x74));
    0x00023a7a ldrh.w r1, [r4, 0x46]                                 |         r1 = *((r4 + 0x46));
    0x00023a7e ldrh r2, [r3, 0x18]                                   |         r2 = *((r3 + 0x18));
    0x00023a80 cmp r1, r2                                            |         
                                                                     |         if (r1 <= r2) {
    0x00023a82 blo 0x23ab4                                           |             goto label_7;
                                                                     |         }
    0x00023a84 ldrsb.w r1, [r4, 0x44]                                |         r1 = *((r4 + 0x44));
    0x00023a88 subs r2, r1, 1                                        |         r2 = r1 - 1;
    0x00023a8a add.w r0, r1, 0x23                                    |         r0 = r1 + 0x23;
    0x00023a8e sxtb r2, r2                                           |         r2 = (int32_t) r2;
    0x00023a90 cmp r1, 0                                             |         
    0x00023a92 bne 0x23a52                                           |         
                                                                     |     }
    0x00023a94 mov r0, r4                                            |     r0 = r4;
    0x00023a96 strd fp, sl, [sb]                                     |     __asm ("strd fp, sl, [sb]");
    0x00023a9a pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00023a9e b 0x23868                                             |     void (*0x23868)() ();
                                                                     | label_6:
    0x00023aa0 ldrb r3, [r3, 9]                                      |     r3 = *((r3 + 9));
    0x00023aa2 mov r0, r4                                            |     r0 = r4;
    0x00023aa4 add r3, ip                                            |     r3 += ip;
    0x00023aa6 ldr r1, [r3, 8]                                       |     r1 = *((r3 + 8));
    0x00023aa8 rev r1, r1                                            |     r1 = SWAP32 (r1);
    0x00023aaa bl 0x22e40                                            |     r0 = fcn_00022e40 (r0, r1);
    0x00023aae cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x00023ab0 beq 0x23a00                                           |         goto label_0;
                                                                     |     }
    0x00023ab2 b 0x23a40                                             |     goto label_1;
                                                                     | label_7:
    0x00023ab4 adds r1, 1                                            |     r1++;
    0x00023ab6 uxth r1, r1                                           |     r1 = (int16_t) r1;
    0x00023ab8 strh.w r1, [r4, 0x46]                                 |     *((r4 + 0x46)) = r1;
    0x00023abc b 0x23a1c                                             |     goto label_2;
                                                                     | label_3:
    0x00023abe vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x00023ac2 vstr d16, [sb]                                        |     __asm ("vstr d16, [sb]");
    0x00023ac4 lsrs r0, r0, 0xc                                      |     r0 >>= 0xc;
                                                                     | label_4:
    0x00023ac6 movs r0, 0                                            |     r0 = 0;
    0x00023ac8 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-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x23cb4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00023cb4 ()                                      | void fcn_00023cb4 (int16_t arg_50h, int16_t arg_54h, int16_t arg_58h, int16_t arg_2d8h, int16_t arg_318h, int16_t arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00023cb4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00023cb8 sub sp, 0x2c                                      |     
    0x00023cba ldr r6, [pc, 0x138]                               |     
    0x00023cbc mov ip, r1                                        |     
    0x00023cbe ldr r5, [pc, 0x138]                               |     r5 = *(0x23dfa);
    0x00023cc0 add r6, pc                                        |     r6 = 0x47aba;
    0x00023cc2 ldr r4, [sp, 0x50]                                |     r4 = *(arg_50h);
    0x00023cc4 ldr r1, [sp, 0x54]                                |     r1 = *(arg_54h);
    0x00023cc6 ldr r5, [r6, r5]                                  |     
    0x00023cc8 ldr r7, [sp, 0x58]                                |     r7 = *(arg_58h);
    0x00023cca ldr r5, [r5]                                      |     r5 = *(0x47aba);
    0x00023ccc str r5, [sp, 0x24]                                |     var_24h = r5;
    0x00023cce mov.w r5, 0                                       |     r5 = 0;
    0x00023cd2 mov r5, r2                                        |     r5 = r2;
    0x00023cd4 adds r2, r4, r1                                   |     r2 = r4 + r1;
    0x00023cd6 cmp r4, r2                                        |     
    0x00023cd8 str r2, [sp, 0xc]                                 |     var_ch = r2;
                                                                 |     if (r4 >= r2) {
    0x00023cda bge 0x23dc4                                       |         goto label_4;
                                                                 |     }
    0x00023cdc ldr r1, [r7, 0x28]                                |     r1 = *((r7 + 0x28));
    0x00023cde mov lr, r0                                        |     lr = r0;
    0x00023ce0 cmp r4, r1                                        |     
                                                                 |     if (r4 < r1) {
    0x00023ce2 blt.w 0x23dea                                     |         goto label_5;
                                                                 |     }
    0x00023ce6 add.w r1, r7, 0x28                                |     r1 = r7 + 0x28;
    0x00023cea mov.w r8, 0                                       |     r8 = 0;
                                                                 |     do {
    0x00023cee ldr r2, [r1, 4]!                                  |         r2 = *((r1 += 4));
    0x00023cf2 add.w r8, r8, 1                                   |         r8++;
    0x00023cf6 cmp r2, r4                                        |         
                                                                 |         if (r2 > r4) {
    0x00023cf8 bgt 0x23d00                                       |             goto label_3;
                                                                 |         }
    0x00023cfa cmp.w r8, 6                                       |         
    0x00023cfe bne 0x23cee                                       |         
                                                                 |     } while (r8 != 6);
                                                                 | label_3:
    0x00023d00 adds r6, r3, 2                                    |     r6 = r3 + 2;
    0x00023d02 add.w r3, r8, 4                                   |     r3 = r8 + 4;
    0x00023d06 ldr.w sl, [r7, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     sl = *((r7 + offset_0));
    0x00023d0a add r3, sp, 0x20                                  |     r3 += var_20h;
    0x00023d0c ldr.w fp, [r5]                                    |     fp = *(r5);
    0x00023d10 strd ip, r5, [sp, 0x18]                           |     __asm ("strd ip, r5, [var_1ch]");
    0x00023d14 ldr.w sb, [lr, 0x38]                              |     sb = *((lr + 0x38));
    0x00023d18 mov r5, sl                                        |     r5 = sl;
    0x00023d1a strd r3, lr, [sp, 0x10]                           |     __asm ("strd r3, lr, [var_10h]");
    0x00023d1e b 0x23d74                                         |     
                                                                 |     while (r3 == 0) {
    0x00023d20 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00023d22 sub.w r3, fp, r3                                  |         r3 = fp - r3;
    0x00023d26 cmp r3, sl                                        |         
                                                                 |         if (r3 < sl) {
    0x00023d28 blt 0x23da2                                       |             goto label_2;
                                                                 |         }
                                                                 | label_1:
    0x00023d2a sub.w fp, fp, sl                                  |         
    0x00023d2e mov r3, fp                                        |         r3 = fp;
                                                                 | label_0:
    0x00023d30 ldr r2, [r7, 8]                                   |         r2 = *((r7 + 8));
    0x00023d32 ldr.w r0, [r2, r4, lsl 2]                         |         offset_1 = r4 << 2;
                                                                 |         r0 = *((r2 + offset_1));
    0x00023d36 add.w r2, r0, sl                                  |         r2 = r0 + sl;
    0x00023d3a cmp r2, r5                                        |         
                                                                 |         if (r2 >= r5) {
    0x00023d3c bls 0x23d42                                       |             
    0x00023d3e cmp r0, r5                                        |             
                                                                 |             if (r0 <= r5) {
    0x00023d40 blo 0x23dc8                                       |                 goto label_6;
                                                                 |             }
                                                                 |         }
    0x00023d42 mov r1, r0                                        |         r1 = r0;
    0x00023d44 mov r2, sl                                        |         r2 = sl;
    0x00023d46 mov r0, r3                                        |         r0 = r3;
    0x00023d48 adds r4, 1                                        |         r4++;
    0x00023d4a blx 0x9928                                        |         r0 = fcn_00009928 ();
    0x00023d4e sub.w r3, r0, sb                                  |         r3 = r0 - sb;
    0x00023d52 strb r3, [r6, -0x1]                               |         *((r6 - 0x1)) = r3;
    0x00023d56 asrs r3, r3, 8                                    |         r3 >>= 8;
    0x00023d58 strb r3, [r6, -0x2]                               |         *((r6 - 0x2)) = r3;
    0x00023d5c ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00023d5e cmp r3, r4                                        |         
                                                                 |         if (r3 == r4) {
    0x00023d60 beq 0x23dbe                                       |             goto label_7;
                                                                 |         }
    0x00023d62 add.w r3, r7, r8, lsl 2                           |         r3 = r7 + (r8 << 2);
    0x00023d66 adds r6, 2                                        |         r6 += 2;
    0x00023d68 ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x00023d6a cmp r2, r4                                        |         
    0x00023d6c itt le                                            |         
                                                                 |         if (r2 > r4) {
    0x00023d6e ldrle r5, [r3, 0x14]                              |             r5 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r2 > r4) {
    0x00023d70 addle r8, r8, 1                                   |             r8++;
                                                                 |         }
    0x00023d74 ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00023d76 ldrh.w sl, [r3, r4, lsl 1]                        |         offset_2 = r4 << 1;
                                                                 |         sl = *((r3 + offset_2));
    0x00023d7a ldrb.w r3, [sb, 1]                                |         r3 = *((sb + 1));
                                                                 |         if (r3 != 0) {
    0x00023d7e cbnz r3, 0x23d88                                  |             goto label_8;
                                                                 |         }
    0x00023d80 ldrb.w r3, [sb, 2]                                |         r3 = *((sb + 2));
    0x00023d84 cmp r3, 0                                         |         
    0x00023d86 beq 0x23d20                                       |         
                                                                 |     }
                                                                 | label_8:
    0x00023d88 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00023d8a mov r1, sl                                        |     r1 = sl;
    0x00023d8c ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00023d8e bl 0x23bac                                        |     r0 = fcn_00023bac (r0, r1, r2);
    0x00023d92 mov r3, r0                                        |     r3 = r0;
    0x00023d94 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00023d96 bne 0x23d30                                       |         goto label_0;
                                                                 |     }
    0x00023d98 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00023d9a sub.w r3, fp, r3                                  |     r3 = fp - r3;
    0x00023d9e cmp r3, sl                                        |     
                                                                 |     if (r3 >= sl) {
    0x00023da0 bge 0x23d2a                                       |         goto label_1;
                                                                 |     }
                                                                 | label_2:
    0x00023da2 movs r0, 1                                        |     r0 = 1;
                                                                 |     do {
    0x00023da4 ldr r2, [pc, 0x54]                                |         
    0x00023da6 ldr r3, [pc, 0x50]                                |         r3 = *(0x23dfa);
    0x00023da8 add r2, pc                                        |         r2 = 0x47ba8;
    0x00023daa ldr r3, [r2, r3]                                  |         r3 = *(0x47ba8);
    0x00023dac ldr r2, [r3]                                      |         r2 = *(0x47ba8);
    0x00023dae ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00023db0 eors r2, r3                                       |         r2 ^= r3;
    0x00023db2 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00023db6 bne 0x23df0                                       |             goto label_9;
                                                                 |         }
    0x00023db8 add sp, 0x2c                                      |         
    0x00023dba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_7:
    0x00023dbe ldr r5, [sp, 0x1c]                                |         r5 = var_1ch;
    0x00023dc0 str.w fp, [r5]                                    |         __asm ("str.w fp, [r5]");
                                                                 | label_4:
    0x00023dc4 movs r0, 0                                        |         r0 = 0;
    0x00023dc6 b 0x23da4                                         |         
                                                                 |     } while (1);
                                                                 | label_6:
    0x00023dc8 blx 0xa230                                        |     fcn_0000a230 ();
    0x00023dcc ldr r2, [pc, 0x30]                                |     
    0x00023dce add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00023dd2 ldr r1, [pc, 0x30]                                |     
    0x00023dd4 movw r3, 0x235f                                   |     
    0x00023dd8 movt r3, 1                                        |     r3 = 0x1235f;
    0x00023ddc movs r0, 0xb                                      |     r0 = 0xb;
    0x00023dde add r2, pc                                        |     r2 = 0x47be2;
    0x00023de0 str r4, [sp]                                      |     *(sp) = r4;
    0x00023de2 add r1, pc                                        |     r1 = 0x47bec;
    0x00023de4 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00023de8 b 0x23da2                                         |     goto label_2;
                                                                 | label_5:
    0x00023dea mov.w r8, 0                                       |     r8 = 0;
    0x00023dee b 0x23d00                                         |     goto label_3;
                                                                 | label_9:
    0x00023df0 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00023df4 ldm r6, {r6}                                      |     r6 = *(r6);
    0x00023df6 movs r7, r0                                       |     r7 = r0;
    0x00023df8 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00023dfa movs r0, r0                                       |     
    0x00023dfc ldm r5!, {r3, r4, r6}                             |     r3 = *(r5!);
                                                                 |     r4 = *((r5! + 4));
                                                                 |     r6 = *((r5! + 8));
    0x00023dfe movs r7, r0                                       |     r7 = r0;
    0x00023e00 str r6, [sp, 0x2d8]                               |     *(arg_2d8h) = r6;
    0x00023e02 movs r6, r0                                       |     r6 = r0;
    0x00023e04 str r4, [sp, 0x318]                               |     *(arg_318h) = r4;
    0x00023e06 movs r6, r0                                       |     r6 = r0;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x242d4 */
                                             | #include <stdint.h>
                                             |  
                                             | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                             |                                ((n & 0x0000ff00) <<  8) | \
                                             |                                ((n & 0x00ff0000) >>  8) | \
                                             |                                ((n & 0xff000000) >> 24)))
                                             |  
    ; (fcn) fcn.000242d4 ()                  | void fcn_000242d4 (int16_t arg_0h, int16_t arg_1h, int16_t arg_8h, arithmetic x, int16_t arg_38h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg_b4h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     int16_t var_0h;
                                             |     int32_t var_0h_2;
                                             |     int16_t var_8h;
                                             |     int16_t var_ch;
                                             |     int16_t var_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;
                                             |     arithmetic var_44h;
                                             |     int16_t var_48h;
                                             |     int16_t var_4ch;
                                             |     int16_t var_50h;
                                             |     int16_t var_54h;
                                             |     int16_t var_58h;
                                             |     int16_t var_5ch;
                                             |     int16_t var_64h;
                                             |     int16_t var_68h;
                                             |     int32_t var_68h_2;
                                             |     int16_t var_74h;
                                             |     int16_t var_78h;
                                             |     int16_t var_7ah;
                                             |     int16_t var_84h;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
    0x000242d4 svcmi 0xf0e92d                |     __asm ("svcmi aav.0x000000ff");
    0x000242d8 mov sl, r2                    |     sl = r2;
    0x000242da ldr.w r2, [pc, 0x518]         |     
    0x000242de sub sp, 0x8c                  |     
    0x000242e0 ldr.w r3, [pc, 0x514]         |     r3 = *(0x247f8);
    0x000242e4 add r2, pc                    |     r2 = 0x48ade;
    0x000242e6 ldr.w r8, [r0]                |     r8 = *(r0);
    0x000242ea ldr r7, [r0, 0x24]            |     r7 = *(arg_0hx24);
    0x000242ec ldr r3, [r2, r3]              |     
    0x000242ee ldr r3, [r3]                  |     r3 = *(0x48ade);
    0x000242f0 str r3, [sp, 0x84]            |     var_84h = r3;
    0x000242f2 mov.w r3, 0                   |     r3 = 0;
    0x000242f6 movs r3, 0                    |     r3 = 0;
    0x000242f8 str r3, [sp, 0x64]            |     var_64h = r3;
    0x000242fa ldr r3, [r0, 0x1c]            |     r3 = *(arg_0hx1c);
    0x000242fc str r3, [sp, 0x10]            |     var_10h = r3;
    0x000242fe ldr r3, [r0, 0x20]            |     r3 = *(arg_0hx20);
    0x00024300 str r3, [sp, 0xc]             |     var_ch = r3;
    0x00024302 ldr.w r3, [r8, 0x28]          |     r3 = *((r8 + 0x28));
    0x00024306 str r3, [sp, 8]               |     var_8h = r3;
    0x00024308 cbnz r1, 0x24330              |     
                                             |     while (r0 != 0) {
    0x0002430a mov.w sb, 0                   |         sb = 0;
    0x00024330 mov r4, r0                    |         r4 = r0;
    0x00024332 mov r6, r1                    |         r6 = r1;
    0x00024334 bl 0x240d4                    |         r0 = fcn_000240d4 (r0, r1);
    0x00024338 mov sb, r0                    |         sb = r0;
    0x0002433a cmp r0, 0                     |         
    0x0002433c bne 0x2430a                   |         
                                             |     }
    0x0002433e ldr.w r3, [pc, 0x4c0]         |     
    0x00024342 add r2, sp, 0x64              |     r2 += var_64h;
    0x00024344 mov r1, r6                    |     r1 = r6;
    0x00024346 str r6, [r4, 0x20]            |     *((r4 + 0x20)) = r6;
    0x00024348 add r3, pc                    |     r3 = 0x48b4e;
    0x0002434a str r3, [r4, 0x1c]            |     *((r4 + 0x1c)) = r3;
    0x0002434c mov r3, r0                    |     r3 = r0;
    0x0002434e mov r0, r8                    |     r0 = r8;
    0x00024350 bl 0xba58                     |     r0 = fcn_0000ba58 (r0, r1, r2);
    0x00024354 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00024356 bne.w 0x24540                 |         goto label_10;
                                             |     }
    0x0002435a ldr.w fp, [sp, 0x64]          |     fp = var_64h;
    0x0002435e ldrb.w r3, [fp]               |     r3 = *(fp);
    0x00024362 strb.w r0, [fp]               |     *(fp) = r0;
    0x00024366 mov r0, fp                    |     r0 = fp;
    0x00024368 str r3, [sp, 0x2c]            |     var_2ch = r3;
    0x0002436a bl 0x22c20                    |     r0 = fcn_00022c20 (r0);
    0x0002436e cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00024370 bne.w 0x24562                 |         goto label_11;
                                             |     }
    0x00024374 mov r0, fp                    |     r0 = fp;
    0x00024376 bl 0x23e08                    |     fcn_00023e08 (r0);
    0x0002437a str r0, [sp, 0x30]            |     var_30h = r0;
    0x0002437c cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x0002437e bne.w 0x2479e                 |         goto label_12;
                                             |     }
    0x00024382 ldr.w r5, [fp, 0x38]          |     r5 = *(arg_38h);
    0x00024386 ldrb.w r3, [fp, 9]            |     r3 = *(x);
    0x0002438a ldr.w r2, [pc, 0x478]         |     
    0x0002438e str r5, [sp, 0x1c]            |     var_1ch = r5;
    0x00024390 adds r0, r5, r3               |     r0 = r5 + r3;
    0x00024392 adds r3, 0xc                  |     r3 += 0xc;
    0x00024394 add r2, pc                    |     r2 = 0x48b9e;
    0x00024396 str r0, [sp, 0x5c]            |     var_5ch = r0;
    0x00024398 str r2, [r4, 0x1c]            |     *((r4 + 0x1c)) = r2;
    0x0002439a ldrb r1, [r0, 5]              |     r1 = *((r0 + 5));
    0x0002439c ldrb r2, [r0, 6]              |     r2 = *((r0 + 6));
    0x0002439e orr.w r2, r2, r1, lsl 8       |     r2 |= (r1 << 8);
    0x000243a0 movs r2, 1                    |     r2 = 1;
    0x000243a2 ldrb r1, [r0, 3]              |     r1 = *((r0 + 3));
    0x000243a4 subs r2, 1                    |     r2--;
    0x000243a6 uxth r2, r2                   |     r2 = (int16_t) r2;
    0x000243a8 str r2, [sp, 0x44]            |     var_44h = r2;
    0x000243aa ldrb r2, [r0, 4]              |     r2 = *((r0 + 4));
    0x000243ac orr.w r2, r2, r1, lsl 8       |     r2 |= (r1 << 8);
    0x000243b0 subs r1, r2, 1                |     r1 = r2 - 1;
    0x000243b2 ldrb.w r2, [fp, 8]            |     r2 = *(arg_8h);
    0x000243b6 str r1, [sp, 0x34]            |     var_34h = r1;
    0x000243b8 sub.w r3, r3, r2, lsl 2       |     r3 -= (r2 << 2);
    0x000243bc add.w r3, r3, r1, lsl 1       |     r3 += (r1 << 1);
    0x000243c0 adds r1, r5, r3               |     r1 = r5 + r3;
    0x000243c2 ldr r3, [sp, 0x44]            |     r3 = var_44h;
    0x000243c4 str r1, [sp, 0x4c]            |     var_4ch = r1;
    0x000243c6 adds r3, 1                    |     r3++;
    0x000243c8 str r3, [sp, 0x50]            |     var_50h = r3;
    0x000243ca cmp r2, 0                     |     
                                             |     if (r2 == 0) {
    0x000243cc beq.w 0x24574                 |         goto label_13;
                                             |     }
    0x000243d0 ldr r3, [sp, 0x30]            |     r3 = var_30h;
    0x000243d2 mov.w ip, -1                  |     
    0x000243d6 ldr r5, [r4, 0x40]            |     r5 = *((r4 + 0x40));
    0x000243d8 str r3, [r5]                  |     *(r5) = r3;
    0x000243da movs r3, 1                    |     r3 = 1;
    0x000243dc str r3, [sp, 0x24]            |     var_24h = r3;
                                             | label_0:
    0x000243de ldr r3, [sp, 0xb0]            |     r3 = *(arg_0h);
    0x000243e0 ldr r2, [sp, 0xb4]            |     r2 = *(arg_b4h);
    0x000243e2 str r3, [sp, 0x18]            |     var_18h = r3;
    0x000243e4 ldr r3, [sp, 0x34]            |     r3 = var_34h;
    0x000243e6 adds r3, 1                    |     r3++;
                                             |     if (r3 == 1) {
    0x000243e8 beq.w 0x245e2                 |         goto label_14;
                                             |     }
    0x000243ec ldr.w r3, [pc, 0x418]         |     
    0x000243f0 movs r1, 1                    |     r1 = 1;
    0x000243f2 ldr.w sb, [sp, 0x34]          |     sb = var_34h;
    0x000243f6 str r1, [sp, 0x20]            |     var_20h = r1;
    0x000243f8 add r3, pc                    |     r3 = 0x48c04;
    0x000243fa ldr r1, [sp, 8]               |     r1 = var_8h;
    0x000243fc str r3, [sp, 0x3c]            |     var_3ch = r3;
    0x000243fe ldr r3, [sp, 0x4c]            |     r3 = var_4ch;
    0x00024400 str.w sl, [sp, 0x58]          |     __asm ("str.w sl, [var_58h]");
    0x00024404 subs r1, 4                    |     r1 -= 4;
    0x00024406 ldr.w sl, [sp, 0x50]          |     sl = var_50h;
    0x0002440a str r7, [sp, 0x54]            |     var_54h = r7;
    0x0002440c mov r7, r3                    |     r7 = r3;
    0x0002440e str r6, [sp, 0x40]            |     var_40h = r6;
    0x00024410 mov r6, sb                    |     r6 = sb;
    0x00024412 mov sb, r2                    |     sb = r2;
    0x00024414 str r1, [sp, 0x14]            |     var_14h = r1;
    0x00024416 str.w ip, [sp, 0x28]          |     __asm ("str.w ip, [var_28h]");
    0x0002441a str r5, [sp, 0x48]            |     var_48h = r5;
    0x0002441c str.w r8, [sp, 0x38]          |     __asm ("str.w r8, [var_38h]");
                                             |     do {
    0x00024420 ldr r3, [r4, 0x10]            |         r3 = *((r4 + 0x10));
    0x00024422 cmp r3, 0                     |         
                                             |         if (r3 == 0) {
    0x00024424 beq 0x2450c                   |             goto label_15;
                                             |         }
    0x00024426 ldrh r5, [r7], -2             |         r5 = *(r7);
                                             |         r7 += -2;
    0x0002442a str r6, [r4, 0x24]            |         *((r4 + 0x24)) = r6;
    0x0002442c rev16 r5, r5                  |         __asm ("rev16 r5, r5");
    0x0002442e uxth r5, r5                   |         r5 = (int16_t) r5;
    0x00024430 cmp sl, r5                    |         
                                             |         if (sl > r5) {
    0x00024432 bhi.w 0x2459e                 |             goto label_16;
                                             |         }
    0x00024436 ldr r3, [sp, 0x14]            |         r3 = var_14h;
    0x00024438 cmp r5, r3                    |         
                                             |         if (r5 > r3) {
    0x0002443a bhi.w 0x2459e                 |             goto label_16;
                                             |         }
    0x0002443e ldr r3, [sp, 0x1c]            |         r3 = var_1ch;
    0x00024440 add r2, sp, 0x68              |         r2 += var_68h;
    0x00024442 mov r0, fp                    |         r0 = fp;
    0x00024444 add.w r8, r3, r5              |         r8 = r3 + r5;
    0x00024448 ldr.w r3, [fp, 0x50]          |         r3 = *(arg_50h);
    0x0002444c mov r1, r8                    |         r1 = r8;
    0x0002444e blx r3                        |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00024450 ldrh.w r3, [sp, 0x7a]         |         r3 = var_7ah;
    0x00024454 ldr r2, [sp, 8]               |         r2 = var_8h;
    0x00024456 add r3, r5                    |         r3 += r5;
    0x00024458 cmp r3, r2                    |         
                                             |         if (r3 > r2) {
    0x0002445a bhi.w 0x24766                 |             goto label_17;
                                             |         }
    0x0002445e ldrb.w r3, [fp, 1]            |         r3 = *(arg_1h);
                                             |         if (r3 != 0) {
    0x00024462 cbz r3, 0x24490               |             
    0x00024464 ldr r1, [sp, 0x24]            |             r1 = var_24h;
    0x00024466 ldrd r2, r3, [sp, 0x68]       |             __asm ("ldrd r2, r3, [var_68h]");
    0x0002446a cmp r1, 0                     |             
                                             |             if (r1 == 0) {
    0x0002446c beq.w 0x24756                 |                 goto label_18;
                                             |             }
    0x00024470 ldr r1, [sp, 0x18]            |             r1 = var_18h;
    0x00024472 cmp r1, r2                    |             
    0x00024474 sbcs.w sb, sb, r3             |             __asm ("sbcs.w sb, sb, r3");
    0x00024478 ite lt                        |             
                                             |             if (r1 >= r2) {
    0x0002447a movlt r1, 1                   |                 r1 = 1;
                                             |             }
                                             |             if (r1 < r2) {
    0x0002447c movge r1, 0                   |                 r1 = 0;
                                             |             }
                                             | label_3:
    0x0002447e cmp r1, 0                     |             
                                             |             if (r1 != 0) {
    0x00024480 bne.w 0x24780                 |                 goto label_19;
                                             |             }
                                             | label_6:
    0x00024484 mov sb, r3                    |             sb = r3;
    0x00024486 str r3, [sp, 0xb4]            |             *(arg_b4h) = r3;
    0x00024488 movs r3, 0                    |             r3 = 0;
    0x0002448a str r2, [sp, 0xb0]            |             *(arg_0h) = r2;
    0x0002448c str r2, [sp, 0x18]            |             var_18h = r2;
    0x0002448e str r3, [sp, 0x24]            |             var_24h = r3;
                                             |         }
    0x00024490 ldr r3, [sp, 0x74]            |         r3 = var_74h;
    0x00024492 ldrh.w r2, [sp, 0x78]         |         r2 = var_78h;
    0x00024496 cmp r3, r2                    |         
                                             |         if (r3 >= r2) {
    0x00024498 bls 0x244ce                   |             
    0x0002449a subs r3, 5                    |             r3 -= 5;
    0x0002449c ldr r1, [sp, 0x14]            |             r1 = var_14h;
    0x0002449e subs r0, r3, r2               |             r0 = r3 - r2;
    0x000244a0 ldr r3, [sp, 8]               |             r3 = var_8h;
    0x000244a2 add r0, r3                    |             r0 += r3;
    0x000244a4 bl 0x8bf90                    |             fcn_0008bf90 (r0, r1, r2);
    0x000244a8 ldrh.w r3, [sp, 0x7a]         |             r3 = var_7ah;
    0x000244ac str r0, [sp, 0x50]            |             var_50h = r0;
    0x000244ae add r3, r8                    |             r3 += r8;
    0x000244b0 ldr r8, [r3, -0x4]            |             r8 = *((r3 - 0x4));
    0x000244b4 ldr r3, [sp, 0x38]            |             r3 = var_38h;
    0x000244b6 rev.w r8, r8                  |             r8 = SWAP32 (r8);
    0x000244ba ldrb r3, [r3, 0x11]           |             r3 = *((r3 + 0x11));
    0x000244bc cmp r3, 0                     |             
                                             |             if (r3 != 0) {
    0x000244be bne.w 0x24790                 |                 goto label_20;
                                             |             }
                                             | label_7:
    0x000244c2 ldr r3, [sp, 0x50]            |             r3 = var_50h;
    0x000244c4 mov r2, r8                    |             r2 = r8;
    0x000244c6 movs r1, 0                    |             r1 = 0;
    0x000244c8 mov r0, r4                    |             r0 = r4;
    0x000244ca bl 0x24130                    |             fcn_00024130 (r0, r1, r2, r3, r4, r5, r6);
                                             |         }
    0x000244ce ldrb.w r3, [fp, 8]            |         r3 = *(arg_8h);
    0x000244d2 cmp r3, 0                     |         
                                             |         if (r3 != 0) {
    0x000244d4 bne 0x245b4                   |             goto label_21;
                                             |         }
    0x000244d6 ldr r3, [sp, 0x1c]            |         r3 = var_1ch;
    0x000244d8 ldr r5, [r3, r5]              |         r5 = *((r3 + r5));
    0x000244da ldr r3, [sp, 0x38]            |         r3 = var_38h;
    0x000244dc rev r5, r5                    |         r5 = SWAP32 (r5);
    0x000244de ldrb r3, [r3, 0x11]           |         r3 = *((r3 + 0x11));
    0x000244e0 cmp r3, 0                     |         
                                             |         if (r3 != 0) {
    0x000244e2 bne.w 0x24772                 |             goto label_22;
                                             |         }
                                             | label_5:
    0x000244e6 ldr r3, [sp, 0x18]            |         r3 = var_18h;
    0x000244e8 mov r1, r5                    |         r1 = r5;
    0x000244ea add r2, sp, 0xb0              |         r2 += arg_0h;
    0x000244ec mov r0, r4                    |         r0 = r4;
    0x000244ee strd r3, sb, [sp]             |         __asm ("strd r3, sb, [sp]");
    0x000244f2 bl 0x242d4                    |         fcn_000242d4 (r0, r1, r2, r3, r4, r5, r6);
    0x000244f6 ldr r3, [sp, 0x28]            |         r3 = var_28h;
    0x000244f8 cmp r0, r3                    |         
                                             |         if (r0 != r3) {
    0x000244fa bne 0x245c8                   |             goto label_23;
                                             |         }
    0x000244fc ldr r3, [sp, 0xb0]            |         r3 = *(arg_0h);
    0x000244fe ldr.w sb, [sp, 0xb4]          |         sb = *(arg_b4h);
    0x00024502 str r3, [sp, 0x18]            |         var_18h = r3;
    0x00024504 movs r3, 0                    |         r3 = 0;
    0x00024506 str r3, [sp, 0x24]            |         var_24h = r3;
                                             | label_1:
    0x00024508 subs r6, 1                    |         r6--;
    0x0002450a bhs 0x24420                   |         
                                             |     } while (r6 >= 1);
                                             | label_15:
    0x0002450c ldr.w sl, [sp, 0x58]          |     sl = var_58h;
    0x00024510 ldr r3, [sp, 0x18]            |     r3 = var_18h;
    0x00024512 ldr.w ip, [sp, 0x28]          |     ip = var_28h;
    0x00024514 stm r0!, {r3, r5}             |     *(r0!) = r3;
                                             |     *((r0! + 4)) = r5;
    0x00024516 ldr r5, [sp, 0x48]            |     r5 = var_48h;
    0x00024518 strd r3, sb, [sl]             |     __asm ("strd r3, sb, [sl]");
    0x0002451c movs r3, 0                    |     r3 = 0;
    0x0002451e str r3, [r4, 0x1c]            |     *((r4 + 0x1c)) = r3;
    0x00024520 add.w sb, ip, 1               |     sb = ip + 1;
    0x00024524 ldr r3, [sp, 0x20]            |     r3 = var_20h;
    0x00024526 mov sl, sb                    |     sl = sb;
    0x00024528 ldr r7, [sp, 0x54]            |     r7 = var_54h;
    0x0002452a ldr r6, [sp, 0x40]            |     r6 = var_40h;
    0x0002452c cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x0002452e bne 0x245f0                   |         goto label_24;
                                             |     }
    0x00024530 ldr r3, [sp, 0x2c]            |     r3 = var_2ch;
    0x00024532 strb.w r3, [fp]               |     *(fp) = r3;
                                             | label_10:
    0x00024540 ldr r1, [pc, 0x2c8]           |     
    0x00024542 mov r2, r0                    |     r2 = r0;
    0x00024544 mov r0, r4                    |     r0 = r4;
    0x00024546 add r1, pc                    |     r1 = 0x48d56;
    0x00024548 bl 0x23f84                    |     fcn_00023f84 (r0, r1);
    0x0002454c ldr.w fp, [sp, 0x64]          |     fp = var_64h;
    0x00024550 cmp.w fp, 0                   |     
                                             |     if (fp != 0) {
    0x00024554 bne 0x24536                   |         void (*0x24536)() ();
                                             |     }
                                             | label_11:
    0x00024562 ldr r1, [pc, 0x2ac]           |     
    0x00024564 mov r2, r0                    |     r2 = r0;
    0x00024566 mov r0, r4                    |     r0 = r4;
    0x00024568 add r1, pc                    |     r1 = 0x48d7e;
    0x0002456a bl 0x23f84                    |     fcn_00023f84 (r0, r1);
                                             | label_8:
    0x0002456e mov.w sb, 0                   |     sb = 0;
    0x00024572 b 0x24536                     |     void (*0x24536)() ();
                                             | label_13:
    0x00024574 ldrb.w r3, [r8, 0x11]         |     r3 = *((r8 + 0x11));
    0x00024578 ldr r5, [r0, 8]               |     r5 = *((r0 + 8));
    0x0002457a rev r5, r5                    |     r5 = SWAP32 (r5);
    0x0002457c cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x0002457e bne.w 0x247ac                 |         goto label_25;
                                             |     }
                                             | label_9:
    0x00024582 vldr d16, [sp, 0xb0]          |     __asm ("vldr d16, [sp, 0xb0]");
    0x00024586 movs r3, 0                    |     r3 = 0;
    0x00024588 mov r1, r5                    |     r1 = r5;
    0x0002458a add r2, sp, 0xb0              |     r2 += arg_0h;
    0x0002458c mov r0, r4                    |     r0 = r4;
    0x0002458e mov r5, r3                    |     r5 = r3;
    0x00024590 vstr d16, [sp]                |     __asm ("vstr d16, [sp]");
    0x00024594 str r3, [sp, 0x24]            |     var_24h = r3;
    0x00024596 bl 0x242d4                    |     r0 = fcn_000242d4 (r0, r1, r2, r3, r4, r5, r6);
    0x0002459a mov ip, r0                    |     
    0x0002459c b 0x243de                     |     goto label_0;
                                             | label_16:
    0x0002459e ldr r3, [sp, 0x14]            |     r3 = var_14h;
    0x000245a0 mov r2, r5                    |     r2 = r5;
    0x000245a2 ldr r1, [sp, 0x3c]            |     r1 = var_3ch;
    0x000245a4 mov r0, r4                    |     r0 = r4;
    0x000245a6 str r3, [sp]                  |     *(sp) = r3;
    0x000245a8 mov r3, sl                    |     r3 = sl;
    0x000245aa bl 0x23f84                    |     fcn_00023f84 (r0, r1);
                                             | label_4:
    0x000245ae movs r3, 0                    |     r3 = 0;
    0x000245b0 str r3, [sp, 0x20]            |     var_20h = r3;
    0x000245b2 b 0x24508                     |     goto label_1;
                                             | label_21:
    0x000245b4 ldrh.w r1, [sp, 0x7a]         |     r1 = var_7ah;
    0x000245b8 ldr r0, [sp, 0x48]            |     r0 = var_48h;
    0x000245ba subs r1, 1                    |     r1--;
    0x000245bc add r1, r5                    |     r1 += r5;
    0x000245be orr.w r1, r1, r5, lsl 16      |     r1 |= (r5 << 16);
    0x000245c2 bl 0xbae8                     |     fcn_0000bae8 (r0, r1);
    0x000245c6 b 0x24508                     |     goto label_1;
                                             | label_23:
    0x000245c8 ldr r1, [pc, 0x248]           |     
    0x000245ca str r0, [sp, 0x28]            |     var_28h = r0;
    0x000245cc mov r0, r4                    |     r0 = r4;
    0x000245ce add r1, pc                    |     r1 = 0x48de6;
    0x000245d0 bl 0x23f84                    |     fcn_00023f84 (r0, r1);
    0x000245d4 movs r3, 0                    |     r3 = 0;
    0x000245d6 ldr.w sb, [sp, 0xb4]          |     sb = *(arg_b4h);
    0x000245da str r3, [sp, 0x24]            |     var_24h = r3;
    0x000245dc ldr r3, [sp, 0xb0]            |     r3 = *(arg_0h);
    0x000245de str r3, [sp, 0x18]            |     var_18h = r3;
    0x000245e0 b 0x24508                     |     goto label_1;
                                             | label_14:
    0x000245e2 ldr r3, [sp, 0x18]            |     r3 = var_18h;
    0x000245e4 strd r3, r2, [sl]             |     __asm ("strd r3, r2, [sl]");
    0x000245e8 add.w sl, ip, 1               |     sl = ip + 1;
    0x000245ec movs r3, 0                    |     r3 = 0;
    0x000245ee str r3, [r4, 0x1c]            |     *((r4 + 0x1c)) = r3;
                                             | label_24:
    0x000245f0 ldr r3, [r4, 0x10]            |     r3 = *((r4 + 0x10));
    0x000245f2 cmp r3, 0                     |     
                                             |     if (r3 <= 0) {
    0x000245f4 ble.w 0x24752                 |         void (*0x24752)() ();
                                             |     }
    0x000245f8 ldrb.w r3, [fp, 8]            |     r3 = *(arg_8h);
                                             |     if (r3 != 0) {
    0x000245fc cbnz r3, 0x24648              |         goto label_26;
                                             |     }
    0x000245fe ldr r5, [r4, 0x40]            |     r5 = *((r4 + 0x40));
    0x00024600 str r3, [r5]                  |     *(r5) = r3;
    0x00024602 ldr r3, [sp, 0x34]            |     r3 = var_34h;
    0x00024604 adds r2, r3, 1                |     r2 = r3 + 1;
                                             |     if (r2 == r3) {
    0x00024606 beq 0x24648                   |         goto label_26;
                                             |     }
    0x00024608 ldr.w sb, [sp, 0x4c]          |     sb = var_4ch;
    0x0002460c mov r8, r3                    |     r8 = r3;
    0x0002460e strd r7, r4, [sp, 0x14]       |     __asm ("strd r7, r4, [var_18h]");
    0x00024612 mov r4, sb                    |     r4 = sb;
    0x00024614 ldr.w sb, [sp, 0x1c]          |     sb = var_1ch;
                                             |     do {
    0x00024618 ldrh r7, [r4], -2             |         r7 = *(r4);
                                             |         r4 += -2;
    0x0002461c mov r0, fp                    |         r0 = fp;
    0x0002461e ldr.w r3, [fp, 0x4c]          |         r3 = *(arg_4ch);
    0x00024622 add.w r8, r8, -1              |         r8 += -1;
    0x00024626 rev16 r7, r7                  |         __asm ("rev16 r7, r7");
    0x00024628 uxth r7, r7                   |         r7 = (int16_t) r7;
    0x0002462a add.w r1, sb, r7              |         r1 = sb + r7;
    0x0002462e blx r3                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00024630 adds r1, r0, r7               |         r1 = r0 + r7;
    0x00024632 mov r0, r5                    |         r0 = r5;
    0x00024634 subs r1, 1                    |         r1--;
    0x00024636 orr.w r1, r1, r7, lsl 16      |         r1 |= (r7 << 16);
    0x0002463a bl 0xbae8                     |         fcn_0000bae8 (r0, r1);
    0x0002463e cmp.w r8, -1                  |         
    0x00024642 bne 0x24618                   |         
                                             |     } while (r8 != -1);
    0x00024644 ldrd r7, r4, [sp, 0x14]       |     __asm ("ldrd r7, r4, [var_18h]");
                                             | label_26:
    0x00024648 ldr r2, [sp, 0x5c]            |     r2 = var_5ch;
    0x0002464a ldrb r3, [r2, 1]              |     r3 = *((r2 + 1));
    0x0002464c ldrb.w r8, [r2, 2]            |     r8 = *((r2 + 2));
    0x00024650 orrs.w r8, r8, r3, lsl 8      |     r8 |= (r3 << 8);
    0x00024654 itt ne                        |     
                                             |     if (r8 == r8) {
    0x00024656 ldrne sb, [sp, 0x1c]          |         sb = var_1ch;
                                             |     }
                                             |     if (r8 != r8) {
    0x0002465a mov r0, r5                    |         r0 = r5;
                                             |     }
                                             |     if (r8 == r8) {
    0x0002465c beq 0x24686                   |         goto label_27;
                                             |     }
                                             |     do {
    0x0002465e add.w r5, sb, r8              |         r5 = sb + r8;
    0x00024662 ldrb r3, [r5, 2]              |         r3 = *((r5 + 2));
    0x00024664 ldrb r1, [r5, 3]              |         r1 = *((r5 + 3));
    0x00024666 orr.w r1, r1, r3, lsl 8       |         r1 |= (r3 << 8);
    0x0002466a add r1, r8                    |         r1 += r8;
    0x0002466c subs r1, 1                    |         r1--;
    0x0002466e orr.w r1, r1, r8, lsl 16      |         r1 |= (r8 << 16);
    0x00024670 asrs r0, r1                   |         r0 >>= r1;
    0x00024672 bl 0xbae8                     |         fcn_0000bae8 (r0, r1);
    0x00024676 ldrb.w r3, [sb, r8]           |         r3 = *((sb + r8));
    0x0002467a ldrb.w r8, [r5, 1]            |         r8 = *((r5 + 1));
    0x0002467e orrs.w r8, r8, r3, lsl 8      |         r8 |= (r3 << 8);
    0x00024682 bne 0x2465e                   |         
                                             |     } while (r8 != r8);
    0x00024684 mov r5, r0                    |     r5 = r0;
                                             | label_27:
    0x00024686 ldr r3, [sp, 8]               |     r3 = var_8h;
    0x00024688 ldr r1, [r5]                  |     r1 = *(r5);
    0x0002468a ldr r0, [sp, 0x44]            |     r0 = var_44h;
    0x0002468c subs r3, 1                    |     r3--;
    0x0002468e str r3, [sp, 0x24]            |     var_24h = r3;
    0x00024690 cmp r1, 0                     |     
                                             |     if (r1 == 0) {
    0x00024692 beq.w 0x247e8                 |         goto label_28;
                                             |     }
    0x00024696 ldr.w ip, [sp, 0x30]          |     ip = var_30h;
    0x0002469a mov.w sb, -1                  |     sb = -1;
    0x0002469e strd fp, r7, [sp, 0x1c]       |     __asm ("strd fp, r7, [var_1ch]");
    0x000246a2 mov lr, r6                    |     lr = r6;
    0x000246a4 mov fp, r4                    |     
    0x000246a6 mov r4, r0                    |     r4 = r0;
                                             | label_2:
    0x000246a8 ldr.w r3, [r5, r1, lsl 2]     |     offset_0 = r1 << 2;
                                             |     r3 = *((r5 + offset_0));
    0x000246ac mov r2, r4                    |     r2 = r4;
    0x000246ae ldr r4, [r5, 4]               |     r4 = *((r5 + 4));
    0x000246b0 str r3, [r5, 4]               |     *((r5 + 4)) = r3;
    0x000246b2 str.w sb, [r5, r1, lsl 2]     |     __asm ("str.w sb, [r5, r1, lsl 2]");
    0x000246b6 ldr r1, [r5]                  |     r1 = *(r5);
    0x000246b8 subs r1, 1                    |     r1--;
    0x000246ba cmp r1, 1                     |     
    0x000246bc str r1, [r5]                  |     *(r5) = r1;
                                             |     if (r1 < 1) {
    0x000246be bls 0x2470c                   |         goto label_29;
                                             |     }
    0x000246c0 ldr r0, [r5, 4]               |     r0 = *((r5 + 4));
    0x000246c2 movs r6, 2                    |     r6 = 2;
    0x000246c4 movs r7, 1                    |     r7 = 1;
    0x000246c6 mov r8, r2                    |     r8 = r2;
    0x000246c8 strd ip, r4, [sp, 0x14]       |     __asm ("strd ip, r4, [var_18h]");
    0x000246cc str r0, [sp, 8]               |     var_8h = r0;
    0x000246ce b 0x246e2                     |     
                                             |     while (r0 >= r2) {
    0x000246d0 str.w r2, [r5, r7, lsl 2]     |         __asm ("str.w r2, [r5, r7, lsl 2]");
    0x000246d4 lsls r6, r3, 1                |         r6 = r3 << 1;
    0x000246d6 str.w r0, [ip]                |         __asm ("str.w r0, [ip]");
    0x000246da ldr r1, [r5]                  |         r1 = *(r5);
    0x000246dc cmp r6, r1                    |         
                                             |         if (r6 > r1) {
    0x000246de bhi 0x24706                   |             goto label_30;
                                             |         }
    0x000246e0 mov r7, r3                    |         r7 = r3;
    0x000246e2 adds r3, r6, 1                |         r3 = r6 + 1;
    0x000246e4 ldr.w r0, [r5, r7, lsl 3]     |         offset_1 = r7 << 3;
                                             |         r0 = *((r5 + offset_1));
    0x000246e8 ldr.w r2, [r5, r3, lsl 2]     |         offset_2 = r3 << 2;
                                             |         r2 = *((r5 + offset_2));
    0x000246ec lsls r4, r3, 2                |         r4 = r3 << 2;
    0x000246ee add.w ip, r5, r4              |         
    0x000246f2 cmp r0, r2                    |         
    0x000246f4 ldr r0, [sp, 8]               |         r0 = var_8h;
    0x000246f6 itttt ls                      |         
                                             |         if (r0 > r2) {
    0x000246f8 subls r4, 4                   |             r4 -= 4;
                                             |         }
                                             |         if (r0 > r2) {
    0x000246fa movls r3, r6                  |             r3 = r6;
                                             |         }
                                             |         if (r0 > r2) {
    0x000246fc ldrls r2, [r5, r4]            |             r2 = *((r5 + r4));
                                             |         }
                                             |         if (r0 > r2) {
    0x000246fe addls ip, r5, r4              |             
                                             |         }
    0x00024702 cmp r0, r2                    |         
    0x00024704 bhs 0x246d0                   |         
                                             |     }
                                             | label_30:
    0x00024706 ldrd ip, r4, [sp, 0x14]       |     __asm ("ldrd ip, r4, [var_18h]");
    0x0002470a mov r2, r8                    |     r2 = r8;
                                             | label_29:
    0x0002470c uxth r2, r2                   |     r2 = (int16_t) r2;
    0x0002470e lsrs r3, r4, 0x10             |     r3 = r4 >> 0x10;
    0x00024710 cmp r2, r3                    |     
                                             |     if (r2 >= r3) {
    0x00024712 bhs 0x247c0                   |         goto label_31;
                                             |     }
    0x00024714 subs r3, 1                    |     r3--;
    0x00024716 add r3, ip                    |     r3 += ip;
    0x00024718 sub.w ip, r3, r2              |     
    0x0002471c cmp r1, 0                     |     
                                             |     if (r1 != 0) {
    0x0002471e bne 0x246a8                   |         goto label_2;
                                             |     }
    0x00024720 mov r0, r4                    |     r0 = r4;
    0x00024722 ldr r7, [sp, 0x20]            |     r7 = var_20h;
    0x00024724 mov r4, fp                    |     r4 = fp;
    0x00024726 ldr.w fp, [sp, 0x1c]          |     fp = var_1ch;
    0x0002472a uxth.w r8, r0                 |     r8 = (int16_t) r0;
    0x0002472e mov r6, lr                    |     r6 = lr;
    0x00024730 str.w ip, [sp, 0x30]          |     __asm ("str.w ip, [var_30h]");
                                             |     do {
    0x00024734 ldr r2, [sp, 0x24]            |         r2 = var_24h;
    0x00024736 ldr r3, [sp, 0x30]            |         r3 = var_30h;
    0x00024738 add r3, r2                    |         r3 += r2;
    0x0002473a sub.w r2, r3, r8              |         r2 = r3 - r8;
    0x0002473c lsls r0, r1, 8                |         r0 = r1 << 8;
                                             | label_18:
    0x00024756 ldr r1, [sp, 0x18]            |         r1 = var_18h;
    0x00024758 cmp r2, r1                    |         
    0x0002475a sbcs.w sb, r3, sb             |         __asm ("sbcs.w sb, r3, sb");
    0x0002475e ite ge                        |         
                                             |         if (r2 < r1) {
    0x00024760 movge r1, 1                   |             r1 = 1;
                                             |         }
                                             |         if (r2 >= r1) {
    0x00024762 movlt r1, 0                   |             r1 = 0;
                                             |         }
    0x00024764 b 0x2447e                     |         goto label_3;
                                             | label_17:
    0x00024766 ldr r1, [pc, 0xb4]            |         
    0x00024768 mov r0, r4                    |         r0 = r4;
    0x0002476a add r1, pc                    |         r1 = 0x48f8c;
    0x0002476c bl 0x23f84                    |         fcn_00023f84 (r0, r1);
    0x00024770 b 0x245ae                     |         goto label_4;
                                             | label_22:
    0x00024772 ldr r3, [sp, 0x40]            |         r3 = var_40h;
    0x00024774 movs r2, 5                    |         r2 = 5;
    0x00024776 mov r1, r5                    |         r1 = r5;
    0x00024778 mov r0, r4                    |         r0 = r4;
    0x0002477a bl 0x24020                    |         fcn_00024020 (r0, r1, r2, r3, r4);
    0x0002477e b 0x244e6                     |         goto label_5;
                                             | label_19:
    0x00024780 ldr r1, [pc, 0x9c]            |         
    0x00024782 mov r0, r4                    |         r0 = r4;
    0x00024784 add r1, pc                    |         r1 = 0x48fa8;
    0x00024786 bl 0x23f84                    |         fcn_00023f84 (r0, r1);
    0x0002478a ldrd r2, r3, [sp, 0x68]       |         __asm ("ldrd r2, r3, [var_68h]");
    0x0002478e b 0x24484                     |         goto label_6;
                                             | label_20:
    0x00024790 ldr r3, [sp, 0x40]            |         r3 = var_40h;
    0x00024792 movs r2, 3                    |         r2 = 3;
    0x00024794 mov r1, r8                    |         r1 = r8;
    0x00024796 mov r0, r4                    |         r0 = r4;
    0x00024798 bl 0x24020                    |         fcn_00024020 (r0, r1, r2, r3, r4);
    0x0002479c b 0x244c2                     |         goto label_7;
                                             | label_12:
    0x0002479e ldr r1, [pc, 0x84]            |         
    0x000247a0 mov r2, r0                    |         r2 = r0;
    0x000247a2 mov r0, r4                    |         r0 = r4;
    0x000247a4 add r1, pc                    |         r1 = 0x48fce;
    0x000247a6 bl 0x23f84                    |         fcn_00023f84 (r0, r1);
    0x000247aa b 0x2456e                     |         goto label_8;
                                             | label_25:
    0x000247ac ldr r3, [pc, 0x78]            |         
    0x000247ae movs r2, 5                    |         r2 = 5;
    0x000247b0 mov r1, r5                    |         r1 = r5;
    0x000247b2 mov r0, r4                    |         r0 = r4;
    0x000247b4 add r3, pc                    |         r3 = 0x48fe0;
    0x000247b6 str r3, [r4, 0x1c]            |         *((r4 + 0x1c)) = r3;
    0x000247b8 mov r3, r6                    |         r3 = r6;
    0x000247ba bl 0x24020                    |         fcn_00024020 (r0, r1, r2, r3, r4);
    0x000247be b 0x24582                     |         goto label_9;
                                             | label_31:
    0x000247c0 ldr r1, [pc, 0x68]            |         
    0x000247c2 mov r4, fp                    |         r4 = fp;
    0x000247c4 mov r8, r2                    |         r8 = r2;
    0x000247c6 mov r0, r4                    |         r0 = r4;
    0x000247c8 mov r2, r3                    |         r2 = r3;
    0x000247ca mov r3, lr                    |         r3 = lr;
    0x000247cc add r1, pc                    |         r1 = 0x48ffc;
    0x000247ce ldr r7, [sp, 0x20]            |         r7 = var_20h;
    0x000247d0 ldr.w fp, [sp, 0x1c]          |         fp = var_1ch;
    0x000247d4 mov r6, lr                    |         r6 = lr;
    0x000247d6 str.w ip, [sp, 0x30]          |         __asm ("str.w ip, [var_30h]");
    0x000247da bl 0x23f84                    |         fcn_00023f84 (r0, r1);
    0x000247de ldr r3, [r5]                  |         r3 = *(r5);
    0x000247e0 cmp r3, 0                     |         
    0x000247e2 beq 0x24734                   |         
                                             |     } while (r3 == 0);
    0x000247e4 mov sb, sl                    |     sb = sl;
    0x000247e6 b 0x24536                     |     void (*0x24536)() ();
                                             | label_28:
    0x000247e8 ldr r3, [sp, 0x24]            |     r3 = var_24h;
    0x000247ea ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x000247ec subs r2, r3, r2               |     r2 = r3 - r2;
    0x000247ee b 0x2473e                     |     return void (*0x2473e)() ();
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x24830 */
                                                                 | #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.00024830 ()                                      | void fcn_00024830 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t s;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_5dh;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_cch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_10ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00024830 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00024834 mov r5, r1                                        |     r5 = r1;
    0x00024836 ldr r1, [pc, 0x298]                               |     
    0x00024838 mov r8, r3                                        |     r8 = r3;
    0x0002483a mov r7, r2                                        |     r7 = r2;
    0x0002483c mov sl, r0                                        |     sl = r0;
    0x0002483e ldr r3, [pc, 0x294]                               |     r3 = *(0x24ad6);
    0x00024840 movs r6, 1                                        |     r6 = 1;
    0x00024842 add r1, pc                                        |     r1 = 0x49318;
    0x00024844 vpush {d8, d9}                                    |     __asm ("vpush {d8, d9}");
    0x00024848 ldr r4, [r5, 4]                                   |     r4 = *((r5 + 4));
    0x0002484a sub sp, 0xd4                                      |     
    0x0002484c ldr r3, [r1, r3]                                  |     
    0x0002484e mov.w fp, 0                                       |     
    0x00024852 ldr.w sb, [sp, 0x10c]                             |     sb = var_10ch;
    0x00024856 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x00024858 ldr r3, [r3]                                      |     r3 = *(0x49318);
    0x0002485a str r3, [sp, 0xcc]                                |     var_cch = r3;
    0x0002485c mov.w r3, 0                                       |     r3 = 0;
    0x00024860 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00024862 vldr d9, [r1, 0x20]                               |     __asm ("vldr d9, [r1, 0x20]");
                                                                 |     if (r3 == 0) {
    0x00024866 cbnz r3, 0x24878                                  |         
    0x00024868 ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x0002486a mov.w fp, 1                                       |         
    0x0002486e sub.w r6, r3, 1                                   |         r6 = r3 - 1;
    0x00024872 clz r6, r6                                        |         r6 &= r6;
    0x00024876 lsrs r6, r6, 5                                    |         r6 >>= 5;
                                                                 |     }
    0x00024878 ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
                                                                 |     if (r3 != 0) {
    0x0002487a cbz r3, 0x24888                                   |         
    0x0002487c ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x0002487e adds r3, 1                                        |         r3++;
    0x00024880 str r3, [r5, 0xc]                                 |         *((r5 + 0xc)) = r3;
    0x00024882 ldrb r3, [r5, 0xa]                                |         r3 = *((r5 + 0xa));
    0x00024884 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00024886 beq 0x24936                                       |             goto label_16;
                                                                 |         }
                                                                 |     }
                                                                 | label_1:
    0x00024888 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0002488a movs r1, 0                                        |     r1 = 0;
    0x0002488c ldr r0, [r4, 0x30]                                |     r0 = *((r4 + 0x30));
    0x0002488e ldr r2, [sp, 0x108]                               |     r2 = var_10h;
    0x00024890 vldr d16, [pc, 0x22c]                             |     __asm ("vldr d16, aav.0x000000ff");
    0x00024894 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00024896 add r3, sp, 0x68                                  |     r3 += var_68h;
    0x00024898 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x0002489a mov.w r3, 0x100                                   |     r3 = 0x100;
    0x0002489e str.w sl, [sp, 0x64]                              |     __asm ("str.w sl, [var_64h]");
    0x000248a2 str r4, [sp, 0x20]                                |     x = r4;
    0x000248a4 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x000248a6 vstr d16, [sp, 0x50]                              |     __asm ("vstr d16, [sp, 0x50]");
    0x000248aa str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x000248ac strd r1, r1, [sp, 0x34]                           |     __asm ("strd r1, r1, [sp, 0x34]");
    0x000248b0 strd r1, r1, [sp, 0x3c]                           |     __asm ("strd r1, r1, [sp, 0x3c]");
    0x000248b4 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x000248b6 str r1, [sp, 0x28]                                |     var_28h = r1;
    0x000248b8 str r1, [sp, 0x60]                                |     var_60h = r1;
    0x000248ba str r1, [sp, 0x48]                                |     s = r1;
    0x000248bc str r1, [sp, 0x58]                                |     var_58h = r1;
    0x000248be strh.w r3, [sp, 0x5c]                             |     var_5ch = r3;
    0x000248c2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000248c4 bne 0x2493e                                       |         goto label_17;
                                                                 |     }
                                                                 | label_14:
    0x000248c6 movs r0, 0                                        |     r0 = 0;
                                                                 | label_11:
    0x000248c8 bl 0xec68                                         |     fcn_0000ec68 (r0);
    0x000248cc ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000248ce blx 0x9c24                                        |     fcn_00009c24 ();
    0x000248d0 invalid                                           |     
    0x000248d4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000248d6 bne.w 0x249f2                                     |         goto label_18;
                                                                 |     }
    0x000248da ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000248dc str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x000248e0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000248e2 beq.w 0x24a08                                     |         goto label_19;
                                                                 |     }
                                                                 | label_3:
    0x000248e6 ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
                                                                 |     if (r3 != 0) {
    0x000248e8 cbz r3, 0x248f6                                   |         
    0x000248ea ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x000248ec subs r3, 1                                        |         r3--;
    0x000248ee str r3, [r5, 0xc]                                 |         *((r5 + 0xc)) = r3;
    0x000248f0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000248f2 beq.w 0x24a10                                     |             goto label_20;
                                                                 |         }
                                                                 |     }
                                                                 | label_4:
    0x000248f6 ldr r0, [sp, 0x4c]                                |     r0 = var_4ch;
                                                                 |     if (r0 == 0) {
    0x000248f8 cbz r0, 0x24906                                   |         goto label_0;
                                                                 |     }
    0x000248fa ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000248fc movs r2, 0                                        |     r2 = 0;
    0x000248fe strb r2, [r0, r3]                                 |     *((r0 + r3)) = r2;
    0x00024900 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00024902 cbnz r3, 0x24926                                  |     
                                                                 |     while (r3 < r3) {
    0x00024904 ldr r0, [sp, 0x4c]                                |         r0 = var_4ch;
                                                                 | label_0:
    0x00024906 ldr r2, [pc, 0x1d0]                               |         
    0x00024908 ldr r3, [pc, 0x1c8]                               |         r3 = *(0x24ad4);
    0x0002490a add r2, pc                                        |         r2 = 0x493e8;
    0x0002490c ldr r3, [r2, r3]                                  |         r3 = *(0x493e8);
    0x0002490e ldr r2, [r3]                                      |         r2 = *(0x493e8);
    0x00024910 ldr r3, [sp, 0xcc]                                |         r3 = var_cch;
    0x00024912 eors r2, r3                                       |         r2 ^= r3;
    0x00024914 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00024918 bne.w 0x24c22                                     |             goto label_21;
                                                                 |         }
    0x0002491c add sp, 0xd4                                      |         
    0x0002491e vpop {d8, d9}                                     |         __asm ("vpop {d8, d9}");
    0x00024922 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00024926 ldrb.w r3, [sp, 0x5d]                             |         r3 = var_5dh;
    0x0002492a lsls r3, r3, 0x1d                                 |         r3 <<= 0x1d;
    0x0002492c bmi 0x24904                                       |         
                                                                 |     }
    0x0002492e add r0, sp, 0x48                                  |     r0 += s;
    0x00024930 bl 0x1eb40                                        |     fcn_0001eb40 (r0);
    0x00024934 b 0x24906                                         |     goto label_0;
                                                                 | label_16:
    0x00024936 mov r0, r5                                        |     r0 = r5;
    0x00024938 bl 0x11258                                        |     fcn_00011258 (r0);
    0x0002493c b 0x24888                                         |     goto label_1;
                                                                 | label_17:
    0x0002493e lsrs r0, r0, 3                                    |     r0 >>= 3;
    0x00024940 adds r0, 1                                        |     r0++;
    0x00024942 bl 0x18ae0                                        |     fcn_00018ae0 (r0);
    0x00024946 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00024948 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002494a beq.w 0x24bc4                                     |         goto label_22;
                                                                 |     }
    0x0002494e ldr r0, [r4, 0x24]                                |     r0 = *((r4 + 0x24));
    0x00024950 bl 0x11cd0                                        |     fcn_00011cd0 (r0);
    0x00024954 str r0, [sp, 0x60]                                |     var_60h = r0;
    0x00024956 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00024958 beq.w 0x24be8                                     |         goto label_23;
                                                                 |     }
    0x0002495c ldr r3, [pc, 0x17c]                               |     
    0x0002495e ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x00024960 add r3, pc                                        |     r3 = 0x49440;
    0x00024962 ldr.w r0, [r3, 0x118]                             |     r0 = *(0x49558);
    0x00024966 bl 0x8bf90                                        |     fcn_0008bf90 (r0, r1, r2);
    0x0002496a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0002496c adds r0, 1                                        |     r0++;
    0x0002496e cmp r3, r0                                        |     
                                                                 |     if (r3 > r0) {
    0x00024970 blo 0x24984                                       |         
    0x00024972 ldr r1, [sp, 0x28]                                |         r1 = var_28h;
    0x00024974 lsrs r2, r0, 3                                    |         r2 = r0 >> 3;
    0x00024976 movs r3, 1                                        |         r3 = 1;
    0x00024978 and r0, r0, 7                                     |         r0 &= 7;
    0x0002497c lsls r3, r0                                       |         r3 <<= r0;
    0x0002497e ldrb r0, [r1, r2]                                 |         r0 = *((r1 + r2));
    0x00024980 orrs r3, r0                                       |         r3 |= r0;
    0x00024982 strb r3, [r1, r2]                                 |         *((r1 + r2)) = r3;
                                                                 |     }
    0x00024984 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00024986 bne 0x24a58                                       |         goto label_24;
                                                                 |     }
    0x00024988 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0002498c beq 0x24a18                                       |         goto label_7;
                                                                 |     }
                                                                 | label_6:
    0x0002498e ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00024990 cmp.w r8, 0                                       |     
    0x00024994 ldr r3, [r2, 0x20]                                |     r3 = *((r2 + 0x20));
    0x00024996 bic r3, r3, 0x200000                              |     r3 = BIT_MASK (r3, 0x200000);
    0x0002499a str r3, [r2, 0x20]                                |     *((r2 + 0x20)) = r3;
                                                                 |     if (r8 <= 0) {
    0x0002499c ble.w 0x24c0e                                     |         goto label_25;
                                                                 |     }
                                                                 | label_5:
    0x000249a0 vldr d8, [pc, 0x124]                              |     __asm ("vldr d8, aav.0x000000ff");
    0x000249a4 subs r7, 4                                        |     r7 -= 4;
    0x000249a6 movs r6, 0                                        |     r6 = 0;
    0x000249a8 eor sl, fp, 1                                     |     sl = fp ^ 1;
    0x000249ac b 0x249be                                         |     goto label_26;
                                                                 | label_2:
    0x000249ae add r2, sp, 0x18                                  |     r2 += var_18h;
    0x000249b0 vstr d8, [sp]                                     |     __asm ("vstr d8, [sp]");
    0x000249b4 bl 0x242d4                                        |     fcn_000242d4 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     do {
    0x000249b8 adds r6, 1                                        |         r6++;
    0x000249ba cmp r8, r6                                        |         
                                                                 |         if (r8 <= r6) {
    0x000249bc ble 0x24a7e                                       |             goto label_27;
                                                                 |         }
                                                                 | label_26:
    0x000249be ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x000249c0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000249c2 beq 0x24a7e                                       |             goto label_27;
                                                                 |         }
    0x000249c4 ldr r1, [r7, 4]!                                  |         r1 = *((r7 += 4));
    0x000249c8 cmp r1, 0                                         |         
    0x000249ca beq 0x249b8                                       |         
                                                                 |     } while (r1 == 0);
    0x000249cc ldrb r3, [r4, 0x11]                               |     r3 = *((r4 + 0x11));
    0x000249ce add r0, sp, 0x20                                  |     r0 += x;
    0x000249d0 cmp r3, 0                                         |     
    0x000249d2 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x000249d4 cmpne r1, 1                                       |         __asm ("cmpne r1, 1");
                                                                 |     }
    0x000249d6 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x000249d8 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000249da moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000249dc tst.w r3, sl                                      |     
                                                                 |     if ((r3 & sl) == 0) {
    0x000249e0 beq 0x249ae                                       |         goto label_2;
                                                                 |     }
    0x000249e2 movs r3, 0                                        |     r3 = 0;
    0x000249e4 movs r2, 1                                        |     r2 = 1;
    0x000249e6 str r0, [sp, 8]                                   |     var_8h_2 = r0;
    0x000249e8 bl 0x24020                                        |     fcn_00024020 (r0, r1, r2, r3, r4);
    0x000249ec ldr r1, [r7]                                      |     r1 = *(r7);
    0x000249ee ldr r0, [sp, 8]                                   |     r0 = var_8h_2;
    0x000249f0 b 0x249ae                                         |     goto label_2;
                                                                 | label_18:
    0x000249f2 add r0, sp, 0x48                                  |     r0 += s;
    0x000249f4 blx 0x9dec                                        |     usleep (r0);
    0x000249f8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000249fa adds r3, 1                                        |     r3++;
    0x000249fc str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000249fe str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x00024a02 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024a04 bne.w 0x248e6                                     |         goto label_3;
                                                                 |     }
                                                                 | label_19:
    0x00024a08 add r0, sp, 0x48                                  |     r0 += s;
    0x00024a0a blx 0x9dec                                        |     usleep (r0);
    0x00024a0e b 0x248e6                                         |     goto label_3;
                                                                 | label_20:
    0x00024a10 mov r0, r5                                        |     r0 = r5;
    0x00024a12 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00024a16 b 0x248f6                                         |     goto label_4;
                                                                 | label_7:
    0x00024a18 ldrb r3, [r4, 0x11]                               |     r3 = *((r4 + 0x11));
    0x00024a1a ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x00024a1c ldr r6, [r2, 0x38]                                |     r6 = *((r2 + 0x38));
    0x00024a1e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024a20 beq.w 0x24bcc                                     |         goto label_28;
                                                                 |     }
    0x00024a24 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x00024a28 ble.w 0x24bee                                     |         goto label_29;
                                                                 |     }
    0x00024a2c add.w r0, r7, r8, lsl 2                           |     r0 = r7 + (r8 << 2);
    0x00024a30 mov r3, r7                                        |     r3 = r7;
    0x00024a32 mov r2, fp                                        |     r2 = fp;
                                                                 |     do {
    0x00024a34 ldr r1, [r3], 4                                   |         r1 = *(r3);
                                                                 |         r3 += 4;
    0x00024a38 cmp r2, r1                                        |         
    0x00024a3a it lo                                             |         
                                                                 |         if (r2 >= r1) {
    0x00024a3c movlo r2, r1                                      |             r2 = r1;
                                                                 |         }
    0x00024a3e cmp r3, r0                                        |         
    0x00024a40 bne 0x24a34                                       |         
                                                                 |     } while (r3 != r0);
    0x00024a42 ldr r3, [r6, 0x34]                                |     r3 = *((r6 + 0x34));
    0x00024a44 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00024a46 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00024a48 bne.w 0x24bf6                                     |         goto label_30;
                                                                 |     }
    0x00024a4c ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00024a4e ldr r3, [r2, 0x20]                                |     r3 = *((r2 + 0x20));
    0x00024a50 bic r3, r3, 0x200000                              |     r3 = BIT_MASK (r3, 0x200000);
    0x00024a54 str r3, [r2, 0x20]                                |     *((r2 + 0x20)) = r3;
    0x00024a56 b 0x249a0                                         |     goto label_5;
                                                                 | label_24:
    0x00024a58 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00024a5a movs r1, 1                                        |     r1 = 1;
    0x00024a5c ldr r2, [pc, 0x80]                                |     
    0x00024a5e add r0, sp, 0x20                                  |     r0 += x;
    0x00024a60 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x00024a62 add r2, pc                                        |     r2 = 0x49546;
    0x00024a64 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x00024a66 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x00024a68 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x00024a6a rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x00024a6c rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00024a6e bl 0x24130                                        |     fcn_00024130 (r0, r1, r2, r3, r4, r5, r6);
    0x00024a72 movs r3, 0                                        |     r3 = 0;
    0x00024a74 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00024a76 cmp.w fp, 0                                       |     
    0x00024a78 lsrs r0, r0, 0x1c                                 |     r0 >>= 0x1c;
                                                                 |     if (r0 != r0) {
    0x00024a7a bne 0x2498e                                       |         goto label_6;
                                                                 |     }
    0x00024a7c b 0x24a18                                         |     goto label_7;
                                                                 | label_27:
    0x00024a7e ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00024a80 vstr d9, [r3, 0x20]                               |     __asm ("vstr d9, [r3, 0x20]");
    0x00024a84 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00024a88 bne.w 0x24ba6                                     |         goto label_31;
                                                                 |     }
                                                                 | label_13:
    0x00024a8c ldr.w fp, [sp, 0x2c]                              |     fp = var_2ch;
    0x00024a90 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00024a94 beq.w 0x24ba6                                     |         goto label_31;
                                                                 |     }
    0x00024a98 ldr r3, [pc, 0x48]                                |     
    0x00024a9a movw sl, 0xcccd                                   |     
    0x00024a9e movt sl, 0xcccc                                   |     sl = 0xcccccccd;
    0x00024aa2 strd r5, sb, [sp, 0x10]                           |     __asm ("strd r5, sb, [sp, 0x10]");
    0x00024aa6 mov.w r8, -1                                      |     r8 = -1;
    0x00024aaa mov r5, fp                                        |     r5 = fp;
    0x00024aac add r3, pc                                        |     r3 = 0x49594;
    0x00024aae mov fp, sl                                        |     
    0x00024ab0 str r3, [sp, 8]                                   |     var_8h_2 = r3;
    0x00024ab2 movs r6, 1                                        |     r6 = 1;
    0x00024ab4 ldr r3, [pc, 0x30]                                |     
    0x00024ab6 mov sl, r4                                        |     sl = r4;
    0x00024ab8 add r3, pc                                        |     r3 = 0x495a4;
    0x00024aba str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x00024abc b 0x24b30                                         |     
                                                                 |     while (r2 != r7) {
                                                                 | label_10:
    0x00024aec cmp r6, 1                                         |         
                                                                 |         if (r6 < 1) {
    0x00024aee bls 0x24bc0                                       |             goto label_32;
                                                                 |         }
    0x00024af0 ldr.w r1, [sl, 0x28]                              |         r1 = *((sl + 0x28));
    0x00024af4 mov r0, r8                                        |         r0 = r8;
    0x00024af6 umull r3, r1, fp, r1                              |         r3:r1 = fp * r1;
    0x00024afa lsrs r1, r1, 2                                    |         r1 >>= 2;
    0x00024afc adds r1, 1                                        |         r1++;
    0x00024afe bl 0x8c1ec                                        |         fcn_0008c1ec (r0, r1, r2);
    0x00024b02 ldr r3, [pc, 0x124]                               |         
    0x00024b04 sub.w r4, r8, r1                                  |         r4 = r8 - r1;
    0x00024b08 ldr.w r1, [sl, 0x24]                              |         r1 = *((sl + 0x24));
    0x00024b0c add r3, pc                                        |         r3 = 0x4973a;
    0x00024b0e ldr.w r0, [r3, 0x118]                             |         r0 = *(0x49852);
    0x00024b12 bl 0x8bf90                                        |         fcn_0008bf90 (r0, r1, r2);
    0x00024b16 adds r3, r4, 2                                    |         r3 = r4 + 2;
    0x00024b18 adds r0, 1                                        |         r0++;
    0x00024b1a cmp r3, r0                                        |         
    0x00024b1c it eq                                             |         
                                                                 |         if (r3 != r0) {
    0x00024b1e addeq r3, r4, 3                                   |             r3 = r4 + 3;
                                                                 |         }
                                                                 | label_12:
    0x00024b20 cmp r6, r3                                        |         
                                                                 |         if (r6 == r3) {
    0x00024b22 beq 0x24baa                                       |             goto label_33;
                                                                 |         }
                                                                 | label_9:
    0x00024b24 ldr r5, [sp, 0x2c]                                |         r5 = var_2ch;
                                                                 | label_8:
    0x00024b26 adds r6, 1                                        |         r6++;
    0x00024b28 add.w r8, r8, 1                                   |         r8++;
    0x00024b2c cmp r5, r6                                        |         
                                                                 |         if (r5 <= r6) {
    0x00024b2e blo 0x24ba2                                       |             goto label_34;
                                                                 |         }
    0x00024b30 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00024b32 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00024b34 beq 0x24ba2                                       |             goto label_34;
                                                                 |         }
    0x00024b36 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00024b38 lsrs r4, r6, 3                                    |         r4 = r6 >> 3;
    0x00024b3a and r1, r6, 7                                     |         r1 = r6 & 7;
    0x00024b3c lsls r7, r0, 4                                    |         r7 = r0 << 4;
    0x00024b3e movs r7, 1                                        |         r7 = 1;
    0x00024b40 ldrb r2, [r2, r4]                                 |         r2 = *((r2 + r4));
    0x00024b42 lsls r7, r1                                       |         r7 <<= r1;
    0x00024b44 ands r2, r7                                       |         r2 &= r7;
    0x00024b46 bne 0x24aec                                       |         
                                                                 |     }
    0x00024b48 cmp r6, 1                                         |     
    0x00024b4a it ls                                             |     
                                                                 |     if (r6 > 1) {
    0x00024b4c movls r1, r2                                      |         r1 = r2;
                                                                 |     }
                                                                 |     if (r6 >= 1) {
    0x00024b4e bls 0x24b82                                       |         
    0x00024b50 ldr.w r1, [sl, 0x28]                              |         r1 = *((sl + 0x28));
    0x00024b54 mov r0, r8                                        |         r0 = r8;
    0x00024b56 umull r2, r1, fp, r1                              |         r2:r1 = fp * r1;
    0x00024b5a lsrs r1, r1, 2                                    |         r1 >>= 2;
    0x00024b5c adds r1, 1                                        |         r1++;
    0x00024b5e bl 0x8c1ec                                        |         fcn_0008c1ec (r0, r1, r2);
    0x00024b62 ldr r3, [sp, 0xc]                                 |         r3 = var_ch_2;
    0x00024b64 sub.w sb, r8, r1                                  |         sb = r8 - r1;
    0x00024b68 ldr.w r1, [sl, 0x24]                              |         r1 = *((sl + 0x24));
    0x00024b6c ldr.w r0, [r3, 0x118]                             |         r0 = *((r3 + 0x118));
    0x00024b70 bl 0x8bf90                                        |         fcn_0008bf90 (r0, r1, r2);
    0x00024b74 add.w r1, sb, 2                                   |         r1 = sb + 2;
    0x00024b78 adds r0, 1                                        |         r0++;
    0x00024b7a cmp r1, r0                                        |         
    0x00024b7c it eq                                             |         
                                                                 |         if (r1 == r0) {
    0x00024b7e addeq r1, sb, 3                                   |             r1 = sb + 3;
                                                                 |             goto label_35;
                                                                 |         }
                                                                 |     }
                                                                 | label_35:
    0x00024b82 cmp r6, r1                                        |     
                                                                 |     if (r6 != r1) {
    0x00024b84 bne 0x24b8e                                       |         goto label_36;
                                                                 |     }
    0x00024b86 ldrb.w r2, [sl, 0x11]                             |     r2 = *((sl + 0x11));
    0x00024b8a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00024b8c bne 0x24b26                                       |         goto label_8;
                                                                 |     }
                                                                 | label_36:
    0x00024b8e ldr r1, [sp, 8]                                   |     r1 = var_8h_2;
    0x00024b90 mov r2, r6                                        |     r2 = r6;
    0x00024b92 add r0, sp, 0x20                                  |     r0 += x;
    0x00024b94 bl 0x23f84                                        |     fcn_00023f84 (r0, r1);
    0x00024b98 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00024b9a ldrb r3, [r3, r4]                                 |     r3 = *((r3 + r4));
    0x00024b9c tst r3, r7                                        |     
                                                                 |     if ((r3 & r7) == 0) {
    0x00024b9e beq 0x24b24                                       |         goto label_9;
                                                                 |     }
    0x00024ba0 b 0x24aec                                         |     goto label_10;
                                                                 | label_34:
    0x00024ba2 ldrd r5, sb, [sp, 0x10]                           |     __asm ("ldrd r5, sb, [var_10h_2]");
                                                                 | label_31:
    0x00024ba6 ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x00024ba8 b 0x248c8                                         |     goto label_11;
                                                                 | label_33:
    0x00024baa ldrb.w r3, [sl, 0x11]                             |     r3 = *((sl + 0x11));
    0x00024bae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024bb0 beq 0x24b24                                       |         goto label_9;
                                                                 |     }
    0x00024bb2 ldr r1, [pc, 0x78]                                |     
    0x00024bb4 mov r2, r6                                        |     r2 = r6;
    0x00024bb6 add r0, sp, 0x20                                  |     r0 += x;
    0x00024bb8 add r1, pc                                        |     r1 = 0x497ea;
    0x00024bba bl 0x23f84                                        |     fcn_00023f84 (r0, r1);
    0x00024bbe b 0x24b24                                         |     goto label_9;
                                                                 | label_32:
    0x00024bc0 movs r3, 0                                        |     r3 = 0;
    0x00024bc2 b 0x24b20                                         |     goto label_12;
                                                                 | label_22:
    0x00024bc4 movs r3, 1                                        |     r3 = 1;
    0x00024bc6 ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x00024bc8 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00024bca b 0x248c8                                         |     goto label_11;
                                                                 | label_28:
    0x00024bcc ldr r3, [r6, 0x40]                                |     r3 = *((r6 + 0x40));
                                                                 |     if (r3 != 0) {
    0x00024bce cbnz r3, 0x24c02                                  |         goto label_37;
                                                                 |     }
                                                                 | label_15:
    0x00024bd0 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00024bd2 cmp.w r8, 0                                       |     
    0x00024bd6 ldr r3, [r2, 0x20]                                |     r3 = *((r2 + 0x20));
    0x00024bd8 bic r3, r3, 0x200000                              |     r3 = BIT_MASK (r3, 0x200000);
    0x00024bdc str r3, [r2, 0x20]                                |     *((r2 + 0x20)) = r3;
                                                                 |     if (r8 > 0) {
    0x00024bde bgt.w 0x249a0                                     |         goto label_5;
                                                                 |     }
                                                                 |     do {
    0x00024be2 vstr d9, [r2, 0x20]                               |         __asm ("vstr d9, [r2, 0x20]");
    0x00024be6 b 0x24a8c                                         |         goto label_13;
                                                                 | label_23:
    0x00024be8 movs r3, 1                                        |         r3 = 1;
    0x00024bea str r3, [sp, 0x38]                                |         var_38h = r3;
    0x00024bec b 0x248c6                                         |         goto label_14;
                                                                 | label_29:
    0x00024bee ldr r3, [r6, 0x34]                                |         r3 = *((r6 + 0x34));
                                                                 |         if (r3 != 0) {
    0x00024bf0 cbz r3, 0x24c16                                   |             
    0x00024bf2 rev r3, r3                                        |             r3 = SWAP32 (r3);
    0x00024bf4 mov r2, fp                                        |             r2 = fp;
                                                                 | label_30:
    0x00024bf6 ldr r1, [pc, 0x38]                                |             
    0x00024bf8 add r0, sp, 0x20                                  |             r0 += x;
    0x00024bfa add r1, pc                                        |             r1 = 0x49830;
    0x00024bfc bl 0x23f84                                        |             fcn_00023f84 (r0, r1);
    0x00024c00 b 0x24bd0                                         |             goto label_15;
                                                                 | label_37:
    0x00024c02 ldr r1, [pc, 0x30]                                |             
    0x00024c04 add r0, sp, 0x20                                  |             r0 += x;
    0x00024c06 add r1, pc                                        |             r1 = 0x49840;
    0x00024c08 bl 0x23f84                                        |             fcn_00023f84 (r0, r1);
    0x00024c0c b 0x24bd0                                         |             goto label_15;
                                                                 | label_25:
    0x00024c0e ldr r0, [sp, 0x60]                                |             r0 = var_60h;
    0x00024c10 vstr d9, [r2, 0x20]                               |             __asm ("vstr d9, [r2, 0x20]");
    0x00024c14 b 0x248c8                                         |             goto label_11;
                                                                 |         }
    0x00024c16 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00024c18 ldr r3, [r2, 0x20]                                |         r3 = *((r2 + 0x20));
    0x00024c1a bic r3, r3, 0x200000                              |         r3 = BIT_MASK (r3, 0x200000);
    0x00024c1c asrs r0, r0, 0xc                                  |         r0 >>= 0xc;
    0x00024c1e str r3, [r2, 0x20]                                |         *((r2 + 0x20)) = r3;
    0x00024c20 b 0x24be2                                         |         
                                                                 |     } while (1);
                                                                 | label_21:
    0x00024c22 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00024c26 nop                                               |     
    0x00024c28 stm r4!, {r3, r4, r5, r6, r7}                     |     *(r4!) = r3;
                                                                 |     *((r4! + 4)) = r4;
                                                                 |     *((r4! + 8)) = r5;
                                                                 |     *((r4! + 12)) = r6;
                                                                 |     *((r4! + 16)) = r7;
    0x00024c2a movs r7, r0                                       |     r7 = r0;
    0x00024c2c ldrh r0, [r1, 0x28]                               |     r0 = *((r1 + 0x28));
    0x00024c2e movs r6, r0                                       |     r6 = r0;
    0x00024c30 ldrh r6, [r0, 0x22]                               |     r6 = *((r0 + 0x22));
    0x00024c32 movs r6, r0                                       |     r6 = r0;
    0x00024c34 ldrh r2, [r5, 0x22]                               |     r2 = *((r5 + 0x22));
    0x00024c36 movs r6, r0                                       |     r6 = r0;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x252e0 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.000252e0 ()                                          | void fcn_000252e0 (int16_t arg_78h, int16_t arg_28h, int16_t arg_2ch, int16_t arg1, uint32_t arg2, int16_t arg3, uint32_t arg4) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x000252e0 svcmi 0xf8e92d                                        |     __asm ("svcmi aav.0x000000ff");
    0x000252e4 mov r5, r0                                            |     r5 = r0;
    0x000252e6 ldrb.w r8, [sp, 0x28]                                 |     r8 = *(arg_28h);
    0x000252ea cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x000252ec beq.w 0x25492                                         |         goto label_13;
                                                                     |     }
    0x000252f0 mov r4, r2                                            |     r4 = r2;
    0x000252f2 mov r6, r1                                            |     r6 = r1;
    0x000252f4 ldr.w fp, [r0, 0x14]                                  |     fp = *(arg_28hx14);
    0x000252f8 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x000252fc beq 0x253ea                                           |         goto label_14;
                                                                     |     }
    0x000252fe ldr.w r7, [fp, 0x78]                                  |     r7 = *(arg_78h);
    0x00025302 cmp r3, 0                                             |     
    0x00025304 it ge                                                 |     
                                                                     |     if (r3 >= 0) {
    0x00025306 asrge sl, r7, 0x1f                                    |         __asm ("asrge sl, r7, 0x1f");
                                                                     |     }
                                                                     |     if (r3 < 0) {
    0x0002530a blt 0x253aa                                           |         goto label_15;
                                                                     |     }
                                                                     | label_2:
    0x0002530c mov.w sb, 2                                           |     sb = 2;
    0x00025310 cmp.w r8, 0                                           |     
    0x00025314 beq 0x253a0                                           |     
                                                                     |     while (1) {
                                                                     | label_0:
    0x00025316 cmp r7, r4                                            |         
    0x00025318 sbcs.w sl, sl, r3                                     |         __asm ("sbcs.w sl, sl, r3");
                                                                     |         if (r7 < r4) {
    0x0002531c blt.w 0x25454                                         |             goto label_16;
                                                                     |         }
    0x00025320 ldr r2, [sp, 0x2c]                                    |         r2 = *(arg_2ch);
    0x00025322 adds r2, 1                                            |         r2++;
                                                                     |         if (r2 != 1) {
    0x00025324 beq 0x25358                                           |             
    0x00025326 ldrh r3, [r5, 0x10]                                   |             r3 = *((r5 + 0x10));
    0x00025328 tst.w r3, 0x9000                                      |             
                                                                     |             if ((r3 & 0x9000) != 0) {
    0x0002532c bne 0x253e2                                           |                 goto label_17;
                                                                     |             }
    0x0002532e ldr r3, [r5, 0x18]                                    |             r3 = *((r5 + 0x18));
    0x00025330 cmp r3, 0                                             |             
                                                                     |             if (r3 != 0) {
    0x00025332 bne 0x253e2                                           |                 goto label_17;
                                                                     |             }
                                                                     | label_1:
    0x00025334 ldr r3, [pc, 0x1f4]                                   |             
    0x00025336 ldr r2, [sp, 0x2c]                                    |             r2 = *(arg_2ch);
    0x00025338 str r6, [r5, 8]                                       |             *((r5 + 8)) = r6;
    0x0002533a add r3, pc                                            |             r3 = 0x4a86a;
    0x0002533c cmp r2, r3                                            |             
                                                                     |             if (r2 == r3) {
    0x0002533e beq.w 0x254bc                                         |                 goto label_18;
                                                                     |             }
    0x00025342 ldr r3, [sp, 0x2c]                                    |             r3 = *(arg_2ch);
    0x00025344 cmp r3, 0                                             |             
    0x00025346 str r3, [r5, 0x24]                                    |             *((r5 + 0x24)) = r3;
    0x00025348 ite ne                                                |             
                                                                     |             if (r3 == 0) {
    0x0002534a movne r3, 0x1000                                      |                 r3 = 0x1000;
                                                                     |             }
                                                                     |             if (r3 == 0) {
    0x0002534e mov.w r3, 0x2000                                      |                 r3 = 0x2000;
                                                                     |             }
    0x00025352 orr.w sb, sb, r3                                      |             sb |= r3;
    0x00025356 b 0x2538a                                             |             
                                                                     |         } else {
    0x00025358 tst.w sb, 0x200                                       |             
    0x0002535c it eq                                                 |             
                                                                     |             if ((sb & 0x200) != 0) {
    0x0002535e moveq r7, r4                                          |                 r7 = r4;
                                                                     |             }
                                                                     |             if ((sb & 0x200) != 0) {
    0x00025360 bne 0x25442                                           |                 goto label_19;
                                                                     |             }
                                                                     | label_5:
    0x00025362 cmp r7, 0x20                                          |             
    0x00025364 mov r1, r7                                            |             r1 = r7;
    0x00025366 sbcs r3, r3, 0                                        |             __asm ("sbcs r3, r3, 0");
    0x0002536a ldr r3, [r5, 0x18]                                    |             r3 = *((r5 + 0x18));
    0x0002536c it lt                                                 |             
                                                                     |             if (r7 >= 0x20) {
    0x0002536e movlt r1, 0x20                                        |                 r1 = 0x20;
                                                                     |             }
    0x00025370 cmp r1, r3                                            |             
                                                                     |             if (r1 > r3) {
    0x00025372 bgt.w 0x254ac                                         |                 goto label_20;
                                                                     |             }
    0x00025376 ldrh r3, [r5, 0x10]                                   |             r3 = *((r5 + 0x10));
    0x00025378 ldr r0, [r5, 0x20]                                    |             r0 = *((r5 + 0x20));
    0x0002537a and r3, r3, 0x2d                                      |             r3 &= 0x2d;
    0x0002537e strh r3, [r5, 0x10]                                   |             *((r5 + 0x10)) = r3;
    0x00025380 str r0, [r5, 8]                                       |             *((r5 + 8)) = r0;
                                                                     | label_9:
    0x00025382 mov r2, r7                                            |             r2 = r7;
    0x00025384 mov r1, r6                                            |             r1 = r6;
    0x00025386 blx 0x9e2c                                            |             fcn_00009e2c ();
                                                                     |         }
                                                                     | label_10:
    0x0002538a cmp.w r8, 1                                           |         
    0x0002538e str r4, [r5, 0xc]                                     |         *((r5 + 0xc)) = r4;
    0x00025390 strh.w sb, [r5, 0x10]                                 |         *((r5 + 0x10)) = sb;
    0x00025394 strb.w r8, [r5, 0x12]                                 |         *((r5 + 0x12)) = r8;
                                                                     |         if (r8 > 1) {
    0x00025398 bhi 0x25412                                           |             goto label_21;
                                                                     |         }
                                                                     | label_4:
    0x0002539a movs r0, 0                                            |         r0 = 0;
                                                                     | label_6:
    0x0002539c pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x000253a0 mov.w sb, 0x10                                        |         sb = 0x10;
    0x000253a4 mov.w r8, 1                                           |         r8 = 1;
    0x000253a8 b 0x25316                                             |         
                                                                     |     }
                                                                     | label_15:
    0x000253aa cmp.w r8, 1                                           |     
    0x000253ae it eq                                                 |     
                                                                     |     if (r8 == 1) {
    0x000253b0 asreq sl, r7, 0x1f                                    |         __asm ("asreq sl, r7, 0x1f");
                                                                     |     }
                                                                     |     if (r8 == 1) {
    0x000253b4 beq 0x253fe                                           |         goto label_22;
                                                                     |     }
    0x000253b6 cmp r7, 0                                             |     
                                                                     |     if (r7 < 0) {
    0x000253b8 blt 0x25454                                           |         goto label_16;
                                                                     |     }
    0x000253ba asr.w sl, r7, 0x1f                                    |     sl = r7 >> 0x1f;
                                                                     | label_3:
    0x000253be movs r4, 0                                            |     r4 = 0;
    0x000253c0 adds r0, r6, 1                                        |     r0 = r6 + 1;
    0x000253c2 mov r3, r4                                            |     r3 = r4;
    0x000253c4 b 0x253d4                                             |     
                                                                     |     while (r2 != r1) {
    0x000253c6 adds r4, 2                                            |         r4 += 2;
    0x000253c8 adc r3, r3, 0                                         |         __asm ("adc r3, r3, 0");
    0x000253cc cmp r7, r4                                            |         
    0x000253ce sbcs.w r2, sl, r3                                     |         __asm ("sbcs.w r2, sl, r3");
    0x000253d0 lsls r3, r0, 8                                        |         r3 = r0 << 8;
                                                                     |         if (r3 < r0) {
    0x000253d2 blt 0x25454                                           |             goto label_16;
                                                                     |         }
    0x000253d4 ldrb r2, [r0, r4]                                     |         r2 = *((r0 + r4));
    0x000253d6 ldrb r1, [r6, r4]                                     |         r1 = *((r6 + r4));
    0x000253d8 orrs r2, r1                                           |         r2 |= r1;
    0x000253da bne 0x253c6                                           |         
                                                                     |     }
    0x000253dc movw sb, 0x202                                        |     sb = 0x202;
    0x000253e0 b 0x25316                                             |     goto label_0;
                                                                     | label_17:
    0x000253e2 mov r0, r5                                            |     r0 = r5;
    0x000253e4 bl 0x13c18                                            |     fcn_00013c18 (r0);
    0x000253e8 b 0x25334                                             |     goto label_1;
                                                                     | label_14:
    0x000253ea cmp r3, 0                                             |     
    0x000253ec mov.w r7, 0xca00                                      |     
    0x000253f0 movt r7, 0x3b9a                                       |     r7 = 0x3b9aca00;
    0x000253f4 mov sl, fp                                            |     sl = fp;
                                                                     |     if (r3 >= 0) {
    0x000253f6 bge 0x2530c                                           |         goto label_2;
                                                                     |     }
    0x000253f8 cmp.w r8, 1                                           |     
                                                                     |     if (r8 != 1) {
    0x000253fc bne 0x253be                                           |         goto label_3;
                                                                     |     }
                                                                     | label_22:
    0x000253fe mov r0, r6                                            |     r0 = r6;
    0x00025400 movw sb, 0x202                                        |     sb = 0x202;
    0x00025404 blx 0x9e8c                                            |     fcn_00009e8c ();
    0x00025408 mov.w r8, 1                                           |     r8 = 1;
    0x0002540c mov r4, r0                                            |     r4 = r0;
    0x0002540e movs r3, 0                                            |     r3 = 0;
    0x00025410 b 0x25316                                             |     goto label_0;
                                                                     | label_21:
    0x00025412 cmp r4, 1                                             |     
                                                                     |     if (r4 <= 1) {
    0x00025414 ble 0x2539a                                           |         goto label_4;
                                                                     |     }
    0x00025416 ldr r3, [r5, 8]                                       |     r3 = *((r5 + 8));
    0x00025418 ldrb r2, [r3]                                         |     r2 = *(r3);
    0x0002541a ldrb r3, [r3, 1]                                      |     r3 = *((r3 + 1));
    0x0002541c cmp r2, 0xfe                                          |     
    0x0002541e it eq                                                 |     
                                                                     |     if (r2 == 0xfe) {
    0x00025420 cmpeq r3, 0xff                                        |         __asm ("cmpeq r3, 0xff");
                                                                     |     }
                                                                     |     if (r2 == 0xfe) {
    0x00025422 beq 0x254a8                                           |         goto label_23;
                                                                     |     }
    0x00025424 cmp r2, 0xff                                          |     
    0x00025426 it eq                                                 |     
                                                                     |     if (r2 == 0xff) {
    0x00025428 cmpeq r3, 0xfe                                        |         __asm ("cmpeq r3, 0xfe");
                                                                     |     }
    0x0002542a it eq                                                 |     
                                                                     |     if (r2 == 0xff) {
    0x0002542c moveq r6, 2                                           |         r6 = 2;
                                                                     |         goto label_24;
                                                                     |     }
                                                                     |     if (r2 != 0xff) {
                                                                     | label_24:
    0x0002542e bne 0x2539a                                           |         goto label_4;
                                                                     |     }
                                                                     | label_7:
    0x00025430 mov r0, r5                                            |     r0 = r5;
    0x00025432 bl 0x1b258                                            |     r0 = fcn_0001b258 (r0);
    0x00025436 mov r4, r0                                            |     r4 = r0;
    0x00025438 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002543a beq 0x254fa                                           |         goto label_25;
                                                                     |     }
                                                                     | label_8:
    0x0002543c movs r0, 7                                            |     r0 = 7;
    0x0002543e pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                     | label_19:
    0x00025442 cmp.w r8, 1                                           |     
    0x00025446 ite eq                                                |     
                                                                     |     if (r8 != 1) {
    0x00025448 moveq r7, 1                                           |         r7 = 1;
                                                                     |     }
                                                                     |     if (r8 == 1) {
    0x0002544a movne r7, 2                                           |         r7 = 2;
                                                                     |     }
    0x0002544c adds r7, r4, r7                                       |     r7 = r4 + r7;
    0x0002544e adc r3, r3, 0                                         |     __asm ("adc r3, r3, 0");
    0x00025452 b 0x25362                                             |     goto label_5;
                                                                     | label_16:
    0x00025454 ldr r3, [sp, 0x2c]                                    |     r3 = *(arg_2ch);
    0x00025456 subs r3, 1                                            |     r3--;
    0x00025458 adds r3, 3                                            |     r3 += 3;
                                                                     |     if (r3 <= 3) {
    0x0002545a bhi 0x2546c                                           |         
    0x0002545c ldr r3, [pc, 0xd0]                                    |         
    0x0002545e ldr r2, [sp, 0x2c]                                    |         r2 = *(arg_2ch);
    0x00025460 add r3, pc                                            |         r3 = 0x4a994;
    0x00025462 cmp r2, r3                                            |         
                                                                     |         if (r2 == r3) {
    0x00025464 beq 0x25522                                           |             goto label_26;
                                                                     |         }
    0x00025466 ldr r3, [sp, 0x2c]                                    |         r3 = *(arg_2ch);
    0x00025468 mov r0, r6                                            |         r0 = r6;
    0x0002546a blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                     |     }
                                                                     | label_12:
    0x0002546c ldrh r3, [r5, 0x10]                                   |     r3 = *((r5 + 0x10));
    0x0002546e tst.w r3, 0x9000                                      |     
    0x00025472 itt eq                                                |     
                                                                     |     if ((r3 & 0x9000) != 0) {
    0x00025474 moveq r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if ((r3 & 0x9000) == 0) {
    0x00025476 strheq r3, [r5, 0x10]                                 |         __asm ("strheq r3, [r5, 0x10]");
                                                                     |     }
                                                                     |     if ((r3 & 0x9000) != 0) {
    0x00025478 bne 0x254f2                                           |         goto label_27;
                                                                     |     }
                                                                     | label_11:
    0x0002547a ldr r3, [r5, 0x14]                                    |     r3 = *((r5 + 0x14));
                                                                     |     if (r3 != 0) {
    0x0002547c cbz r3, 0x2548e                                       |         
    0x0002547e ldr.w r3, [r3, 0x108]                                 |         r3 = *((r3 + 0x108));
                                                                     |         if (r3 == 0) {
    0x00025482 cbz r3, 0x2548e                                       |             goto label_28;
                                                                     |         }
    0x00025484 ldr r2, [r3, 0x24]                                    |         r2 = *((r3 + 0x24));
    0x00025486 movs r1, 0x12                                         |         r1 = 0x12;
    0x00025488 str r1, [r3, 0xc]                                     |         *((r3 + 0xc)) = r1;
    0x0002548a adds r2, 1                                            |         r2++;
    0x0002548c str r2, [r3, 0x24]                                    |         *((r3 + 0x24)) = r2;
                                                                     |     }
                                                                     | label_28:
    0x0002548e movs r0, 0x12                                         |     r0 = 0x12;
    0x00025490 b 0x2539c                                             |     goto label_6;
                                                                     | label_13:
    0x00025492 ldrh r3, [r0, 0x10]                                   |     r3 = *(arg_28hx10);
    0x00025494 tst.w r3, 0x9000                                      |     
    0x00025498 itt eq                                                |     
                                                                     |     if ((r3 & 0x9000) != 0) {
    0x0002549a moveq r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if ((r3 & 0x9000) != 0) {
    0x0002549c strheq r3, [r0, 0x10]                                 |         __asm ("strheq r3, [arg_28hx10]");
                                                                     |         goto label_29;
                                                                     |     }
                                                                     |     if ((r3 & 0x9000) == 0) {
                                                                     | label_29:
    0x0002549e beq.w 0x2539a                                         |         goto label_4;
                                                                     |     }
    0x000254a2 bl 0x1390c                                            |     fcn_0001390c (r0);
    0x000254a6 b 0x2539a                                             |     goto label_4;
                                                                     | label_23:
    0x000254a8 movs r6, 3                                            |     r6 = 3;
    0x000254aa b 0x25430                                             |     goto label_7;
                                                                     | label_20:
    0x000254ac movs r2, 0                                            |     r2 = 0;
    0x000254ae mov r0, r5                                            |     r0 = r5;
    0x000254b0 bl 0x1b028                                            |     r0 = fcn_0001b028 (r0, r1, r2);
    0x000254b4 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x000254b6 bne 0x2543c                                           |         goto label_8;
                                                                     |     }
    0x000254b8 ldr r0, [r5, 8]                                       |     r0 = *((r5 + 8));
    0x000254ba b 0x25382                                             |     goto label_9;
                                                                     | label_18:
    0x000254bc ldr r3, [r5, 0x14]                                    |     r3 = *((r5 + 0x14));
    0x000254be str r6, [r5, 0x20]                                    |     *((r5 + 0x20)) = r6;
                                                                     |     if (r3 != 0) {
    0x000254c0 cbz r3, 0x254e4                                       |         
    0x000254c2 ldr.w r2, [r3, 0x164]                                 |         r2 = *((r3 + 0x164));
    0x000254c6 cmp r2, r6                                            |         
                                                                     |         if (r2 < r6) {
    0x000254c8 bls 0x254e4                                           |             goto label_30;
                                                                     |         }
    0x000254ca ldr.w r2, [r3, 0x15c]                                 |         r2 = *((r3 + 0x15c));
    0x000254ce cmp r2, r6                                            |         
    0x000254d0 it ls                                                 |         
                                                                     |         if (r2 > r6) {
    0x000254d2 movls r0, 0x80                                        |             r0 = 0x80;
                                                                     |         }
                                                                     |         if (r2 < r6) {
    0x000254d4 bls 0x254ee                                           |             goto label_31;
                                                                     |         }
    0x000254d6 ldr.w r2, [r3, 0x160]                                 |         r2 = *((r3 + 0x160));
    0x000254da cmp r2, r6                                            |         
    0x000254dc it ls                                                 |         
                                                                     |         if (r2 <= r6) {
    0x000254de ldrhls r0, [r3, 0x136]                                |             __asm ("ldrhls r0, aav.0x000000ff");
                                                                     |         }
                                                                     |         if (r2 < r6) {
    0x000254e2 bls 0x254ee                                           |             goto label_31;
                                                                     |         }
                                                                     |     }
                                                                     | label_30:
    0x000254e4 ldr r3, [pc, 0x4c]                                    |     
    0x000254e6 mov r0, r6                                            |     r0 = r6;
    0x000254e8 add r3, pc                                            |     
    0x000254ea ldr r3, [r3, 0x2c]                                    |     r3 = *(0x4aa4c);
    0x000254ec blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                     | label_31:
    0x000254ee str r0, [r5, 0x18]                                    |     *((r5 + 0x18)) = r0;
    0x000254f0 b 0x2538a                                             |     goto label_10;
                                                                     | label_27:
    0x000254f2 mov r0, r5                                            |     r0 = r5;
    0x000254f4 bl 0x1390c                                            |     fcn_0001390c (r0);
    0x000254f8 b 0x2547a                                             |     goto label_11;
                                                                     | label_25:
    0x000254fa ldrd r0, r2, [r5, 8]                                  |     __asm ("ldrd r0, r2, [r5, 8]");
    0x000254fe subs r2, 2                                            |     r2 -= 2;
    0x00025500 adds r1, r0, 2                                        |     r1 = r0 + 2;
    0x00025502 str r2, [r5, 0xc]                                     |     *((r5 + 0xc)) = r2;
    0x00025504 blx 0x9928                                            |     fcn_00009928 ();
    0x00025508 ldrd r2, r3, [r5, 8]                                  |     __asm ("ldrd r2, r3, [r5, 8]");
    0x0002550c strb r4, [r2, r3]                                     |     *((r2 + r3)) = r4;
    0x0002550e ldrd r3, r2, [r5, 8]                                  |     __asm ("ldrd r3, r2, [r5, 8]");
    0x00025512 add r3, r2                                            |     r3 += r2;
    0x00025514 strb r4, [r3, 1]                                      |     *((r3 + 1)) = r4;
    0x00025516 ldrh r3, [r5, 0x10]                                   |     r3 = *((r5 + 0x10));
    0x00025518 strb r6, [r5, 0x12]                                   |     *((r5 + 0x12)) = r6;
    0x0002551a orr r3, r3, 0x200                                     |     r3 |= 0x200;
    0x0002551e strh r3, [r5, 0x10]                                   |     *((r5 + 0x10)) = r3;
    0x00025520 b 0x2539a                                             |     goto label_4;
                                                                     | label_26:
    0x00025522 mov r1, r6                                            |     r1 = r6;
    0x00025524 mov r0, fp                                            |     r0 = fp;
    0x00025526 bl 0x137d0                                            |     fcn_000137d0 (r0, r1);
    0x0002552a b 0x2546c                                             |     goto label_12;
                                                                     | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x25cc0 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00025cc0 ()                  | void fcn_00025cc0 (int16_t arg_18h, int16_t arg1, int16_t arg3, int16_t arg4) {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     r0 = arg1;
                                             |     r2 = arg3;
                                             |     r3 = arg4;
                                             |     do {
    0x00009a6c bx pc                         |         return void (*pc)() ();
    0x00025cc0 push {r4, r5, lr}             |         
    0x00025cc2 sub sp, 0xc                   |         
    0x00025cc4 mov r4, r0                    |         r4 = r0;
    0x00025cc6 ldr r0, [sp, 0x18]            |         r0 = *(arg_18h);
    0x00025cc8 str r3, [sp]                  |         *(sp) = r3;
    0x00025cca asrs r3, r2, 0x1f             |         r3 = r2 >> 0x1f;
    0x00025ccc str r0, [sp, 4]               |         var_4h = r0;
    0x00025cce ldr r5, [r4]                  |         r5 = *(r4);
    0x00025cd0 mov r0, r5                    |         r0 = r5;
    0x00025cd2 bl 0x252e0                    |         r0 = fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
                                             |         if (r0 == 0) {
    0x00025cd6 cbz r0, 0x25d06               |             goto label_1;
                                             |         }
    0x00025cd8 cmp r0, 0x12                  |         
                                             |         if (r0 != 0x12) {
    0x00025cda beq 0x25cfa                   |             
    0x00025cdc mov r0, r4                    |             r0 = r4;
    0x00025cde add sp, 0xc                   |             
    0x00025ce0 pop.w {r4, r5, lr}            |             
    0x00025ce4 b.w 0x9714                    |             void (*0x9714)() ();
                                             | label_0:
    0x00025ce8 lsls r3, r3, 0x15             |             r3 <<= 0x15;
    0x00025cea ldr r2, [r5, 0xc]             |             r2 = *((r5 + 0xc));
    0x00025cec itt mi                        |             
                                             |             if (r3 >= r3) {
    0x00025cee ldrmi r3, [r5]                |                 r3 = *(r5);
                                             |             }
                                             |             if (r3 >= r3) {
    0x00025cf0 addmi r2, r2, r3              |                 r2 += r3;
                                             |             }
    0x00025cf2 ldr r3, [r5, 0x14]            |             r3 = *((r5 + 0x14));
    0x00025cf4 ldr r3, [r3, 0x78]            |             r3 = *((r3 + 0x78));
    0x00025cf6 cmp r3, r2                    |             
                                             |             if (r3 >= r2) {
    0x00025cf8 bge 0x25d26                   |                 goto label_2;
                                             |             }
                                             |         }
    0x00025cfa mov r0, r4                    |         r0 = r4;
    0x00025cfc add sp, 0xc                   |         
    0x00025cfe pop.w {r4, r5, lr}            |         
    0x00025d02 b.w 0x9a6c                    |         
                                             |     } while (1);
                                             | label_1:
    0x00025d06 ldrh r3, [r5, 0x10]           |     r3 = *((r5 + 0x10));
    0x00025d08 ldrb r1, [r4, 0x18]           |     r1 = *((r4 + 0x18));
    0x00025d0a lsls r2, r3, 0x1e             |     r2 = r3 << 0x1e;
    0x00025d0c it pl                         |     
                                             |     if (r2 < r3) {
    0x00025d0e strbpl r1, [r5, 0x12]         |         *((r5 + 0x12)) = r1;
                                             |     }
                                             |     if (r2 < r3) {
    0x00025d10 bpl 0x25d20                   |         
    0x00025d12 ldrb r2, [r5, 0x12]           |         r2 = *((r5 + 0x12));
    0x00025d14 cmp r2, r1                    |         
                                             |         if (r2 == r1) {
    0x00025d16 beq 0x25d20                   |             goto label_3;
                                             |         }
    0x00025d18 mov r0, r5                    |         r0 = r5;
    0x00025d1a bl 0x1f1ec                    |         fcn_0001f1ec (r0, r1);
    0x00025d1e ldrh r3, [r5, 0x10]           |         r3 = *((r5 + 0x10));
                                             |     }
                                             | label_3:
    0x00025d20 tst.w r3, 0x12                |     
                                             |     if ((r3 & 0x12) != 0) {
    0x00025d24 bne 0x25ce8                   |         goto label_0;
                                             |     }
                                             | label_2:
    0x00025d26 add sp, 0xc                   |     
    0x00025d28 pop {r4, r5, pc}              |     
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x26228 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00026228 ()                                      | void fcn_00026228 (int16_t arg_60h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00026228 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0002622c sub sp, 0x3c                                      |     
    0x0002622e mov sb, r1                                        |     sb = r1;
    0x00026230 mov fp, r2                                        |     
    0x00026232 mov sl, r3                                        |     sl = r3;
    0x00026234 str r0, [sp, 0x18]                                |     var_18h = r0;
    0x00026236 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00026238 beq.w 0x2642a                                     |         goto label_11;
                                                                 |     }
    0x0002623c mov r0, r3                                        |     r0 = r3;
    0x0002623e blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00026242 mov r5, r0                                        |     r5 = r0;
    0x00026244 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00026248 beq.w 0x26490                                     |         goto label_12;
                                                                 |     }
    0x0002624c mov r0, fp                                        |     r0 = fp;
    0x0002624e movs r7, 0                                        |     r7 = 0;
    0x00026250 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00026254 bic r6, r0, 0xc0000000                            |     r6 = BIT_MASK (r0, 0xc0000000);
    0x00026258 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0002625a mov r4, r6                                        |     r4 = r6;
    0x0002625c blx 0x9c48                                        |     fcn_00009c48 ();
    0x00026260 str r0, [sp, 8]                                   |     var_8h = r0;
                                                                 | label_7:
    0x00026262 ldr.w r8, [sp, 8]                                 |     r8 = var_8h;
    0x00026266 mov r2, sl                                        |     r2 = sl;
    0x00026268 ldr r1, [pc, 0x260]                               |     
    0x0002626a mov r0, r8                                        |     r0 = r8;
    0x0002626c add r1, pc                                        |     r1 = 0x4c73c;
    0x0002626e bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00026272 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x00026274 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00026276 beq.w 0x264a0                                     |         goto label_13;
                                                                 |     }
    0x0002627a blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x0002627e bic r0, r0, 0xc0000000                            |     r0 = BIT_MASK (r0, 0xc0000000);
    0x00026282 subs r3, r0, 1                                    |     r3 = r0 - 1;
    0x00026284 mov r0, r8                                        |     r0 = r8;
    0x00026286 mov r2, r3                                        |     r2 = r3;
    0x00026288 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0002628a ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0002628e smlal r4, r7, r3, r2                              |     __asm ("smlal r4, r7, r3, r2");
    0x00026292 adds r4, 1                                        |     r4++;
    0x00026294 adc r3, r7, 0                                     |     __asm ("adc r3, r7, 0");
    0x00026298 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002629a beq.w 0x263b0                                     |         goto label_14;
                                                                 |     }
    0x0002629e mov r2, r4                                        |     r2 = r4;
    0x000262a0 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x000262a4 mov r8, r0                                        |     r8 = r0;
    0x000262a6 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000262aa beq.w 0x263c2                                     |         goto label_5;
                                                                 |     }
                                                                 | label_1:
    0x000262ae bic r3, r5, 0xc0000000                            |     r3 = BIT_MASK (r5, 0xc0000000);
    0x000262b2 mov r2, r4                                        |     r2 = r4;
    0x000262b4 movs r1, 0                                        |     r1 = 0;
    0x000262b6 mov r0, r8                                        |     r0 = r8;
    0x000262b8 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000262ba blx 0x97d4                                        |     fcn_000097d4 ();
    0x000262be movs r3, 0                                        |     r3 = 0;
    0x000262c0 strd r3, r3, [sp, 0x20]                           |     __asm ("strd r3, r3, [var_24h]");
                                                                 | label_6:
    0x000262c4 mov r2, r6                                        |     r2 = r6;
    0x000262c6 mov r1, fp                                        |     r1 = fp;
    0x000262c8 mov r0, r8                                        |     r0 = r8;
    0x000262ca blx 0x9e2c                                        |     fcn_00009e2c ();
    0x000262ce ldr.w r4, [sb]                                    |     r4 = *(sb);
    0x000262d2 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000262d4 beq 0x2638a                                       |         goto label_15;
                                                                 |     }
    0x000262d6 ldr r3, [pc, 0x1f8]                               |     
    0x000262d8 add r3, pc                                        |     r3 = 0x4c7ae;
    0x000262da str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000262dc ldr r3, [pc, 0x1f4]                               |     
    0x000262de add r3, pc                                        |     r3 = 0x4c7b6;
    0x000262e0 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000262e2 ldr r3, [pc, 0x1f4]                               |     
    0x000262e4 add r3, pc                                        |     r3 = 0x4c7c2;
    0x000262e6 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000262e8 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x000262ea str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 | label_0:
    0x000262ec ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x000262ee mov r7, sb                                        |     r7 = sb;
    0x000262f0 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000262f2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000262f4 beq.w 0x26424                                     |         goto label_16;
                                                                 |     }
    0x000262f8 mov r5, r4                                        |     r5 = r4;
    0x000262fa mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x000262fc ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x000262fe cmp r0, r1                                        |         
    0x00026300 it hi                                             |         
                                                                 |         if (r0 <= r1) {
    0x00026302 movhi r5, r3                                      |             r5 = r3;
                                                                 |         }
    0x00026304 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x00026306 it hi                                             |         
                                                                 |         if (r0 <= r1) {
    0x00026308 movhi r1, r0                                      |             r1 = r0;
                                                                 |         }
    0x0002630a cmp r3, 0                                         |         
    0x0002630c bne 0x262fc                                       |         
                                                                 |     } while (r3 != 0);
    0x0002630e cmp r5, r4                                        |     
    0x00026310 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
                                                                 |     if (r5 == r4) {
    0x00026312 beq 0x26324                                       |         goto label_4;
                                                                 |     }
    0x00026314 cmp r5, r2                                        |     
                                                                 |     if (r5 == r2) {
    0x00026316 beq 0x26320                                       |         goto label_17;
                                                                 |     }
                                                                 |     do {
    0x00026318 mov r4, r2                                        |         r4 = r2;
    0x0002631a ldr r2, [r2, 0xc]                                 |         r2 = *((r2 + 0xc));
    0x0002631c cmp r2, r5                                        |         
    0x0002631e bne 0x26318                                       |         
                                                                 |     } while (r2 != r5);
                                                                 | label_17:
    0x00026320 add.w r7, r4, 0xc                                 |     r7 = r4 + 0xc;
                                                                 | label_4:
    0x00026324 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x00026326 str r3, [r7]                                      |     *(r7) = r3;
    0x00026328 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0002632c beq 0x263d8                                       |         goto label_18;
                                                                 |     }
    0x0002632e ldr r3, [sp, 0x60]                                |     r3 = *(arg_60h);
    0x00026330 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00026332 bne 0x263c6                                       |         goto label_19;
                                                                 |     }
    0x00026334 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00026336 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00026338 add r3, r0                                        |     r3 += r0;
    0x0002633a ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0002633e tst.w r3, 0x46                                    |     
                                                                 |     if ((r3 & 0x46) == 0) {
    0x00026342 beq 0x263c6                                       |         goto label_19;
                                                                 |     }
    0x00026344 ldr r7, [sp, 0x28]                                |     r7 = var_28h;
    0x00026346 mov r3, sl                                        |     r3 = sl;
                                                                 | label_3:
    0x00026348 cmp r7, r2                                        |     
    0x0002634a sub.w r4, r1, fp                                  |     r4 = r1 - fp;
                                                                 |     if (r7 != r2) {
    0x0002634e beq 0x2636e                                       |         
    0x00026350 adds r1, r4, r2                                   |         r1 = r4 + r2;
    0x00026352 adds r0, r7, r4                                   |         r0 = r7 + r4;
    0x00026354 subs r2, r6, r1                                   |         r2 = r6 - r1;
    0x00026356 add r0, r8                                        |         r0 += r8;
    0x00026358 add r1, r8                                        |         r1 += r8;
    0x0002635a str r3, [sp, 0x14]                                |         var_14h = r3;
    0x0002635c blx 0x9928                                        |         fcn_00009928 ();
    0x00026360 ldr r2, [r5, 8]                                   |         r2 = *((r5 + 8));
    0x00026362 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00026364 subs r2, r6, r2                                   |         r2 = r6 - r2;
    0x00026366 adds r6, r2, r7                                   |         r6 = r2 + r7;
    0x00026368 movs r2, 0                                        |         r2 = 0;
    0x0002636a strb.w r2, [r8, r6]                               |         *((r8 + r6)) = r2;
                                                                 |     }
    0x0002636e mov r1, r3                                        |     r1 = r3;
    0x00026370 mov r2, r7                                        |     r2 = r7;
    0x00026372 add.w r0, r8, r4                                  |     r0 = r8 + r4;
    0x00026376 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0002637a ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x0002637c mov r1, r5                                        |     r1 = r5;
    0x0002637e bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00026382 ldr.w r4, [sb]                                    |     r4 = *(sb);
    0x00026386 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00026388 bne 0x262ec                                       |         goto label_0;
                                                                 |     }
                                                                 | label_15:
    0x0002638a mov.w r3, -1                                      |     r3 = -1;
    0x0002638e ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00026390 mov r1, r8                                        |     r1 = r8;
    0x00026392 mov r2, r3                                        |     r2 = r3;
    0x00026394 blx 0x9b70                                        |     fcn_00009b70 ();
    0x00026398 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x0002639a mov r1, r8                                        |     r1 = r8;
    0x0002639c movs r4, 0                                        |     r4 = 0;
    0x0002639e bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
                                                                 | label_2:
    0x000263a2 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x000263a4 blx 0x9c24                                        |     fcn_00009c24 ();
    0x000263a8 mov r0, r4                                        |     r0 = r4;
    0x000263aa add sp, 0x3c                                      |     
    0x000263ac pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_14:
    0x000263b0 mov r1, r3                                        |     r1 = r3;
    0x000263b2 mov r0, r4                                        |     r0 = r4;
    0x000263b4 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x000263b8 mov r8, r0                                        |     r8 = r0;
    0x000263ba cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x000263be bne.w 0x262ae                                     |         goto label_1;
                                                                 |     }
                                                                 | label_5:
    0x000263c2 movs r4, 7                                        |     r4 = 7;
    0x000263c4 b 0x263a2                                         |     goto label_2;
                                                                 | label_19:
    0x000263c6 ldrb r3, [r1, r2]                                 |     r3 = *((r1 + r2));
    0x000263c8 ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x000263ca cmp r3, 0x22                                      |     
    0x000263cc it ne                                             |     
                                                                 |     if (r3 != 0x22) {
    0x000263ce ldrne r3, [sp, 0xc]                               |         r3 = var_ch;
                                                                 |         goto label_20;
                                                                 |     }
                                                                 |     if (r3 != 0x22) {
                                                                 | label_20:
    0x000263d0 bne 0x26348                                       |         goto label_3;
                                                                 |     }
    0x000263d2 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000263d4 adds r7, 1                                        |     r7++;
    0x000263d6 b 0x26348                                         |     goto label_3;
                                                                 | label_18:
    0x000263d8 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x000263da mov r0, r4                                        |     r0 = r4;
    0x000263dc blx 0x9e2c                                        |     fcn_00009e2c ();
    0x000263e0 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000263e2 mov r0, r4                                        |     r0 = r4;
    0x000263e4 strb.w sl, [r4, r3]                               |     *((r4 + r3)) = sl;
    0x000263e8 bl 0xa4e0                                         |     fcn_0000a4e0 (r0);
    0x000263ec ldrd r2, r3, [r5, 4]                              |     __asm ("ldrd r2, r3, [r5, 4]");
    0x000263f0 ldrb r3, [r2, r3]                                 |     r3 = *((r2 + r3));
    0x000263f2 cmp r3, 0x27                                      |     
    0x000263f4 it ne                                             |     
                                                                 |     if (r3 == 0x27) {
    0x000263f6 ldrne r3, [sp, 0x34]                              |         r3 = var_34h;
                                                                 |     }
                                                                 |     if (r3 == 0x27) {
    0x000263f8 bne 0x263fe                                       |         
    0x000263fa ldr r3, [pc, 0xe0]                                |         
    0x000263fc add r3, pc                                        |         r3 = 0x4c8de;
                                                                 |     }
    0x000263fe ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00026400 str r3, [sp]                                      |     *(sp) = r3;
    0x00026402 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00026404 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00026406 mov r1, r4                                        |     r1 = r4;
    0x00026408 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0002640a blx 0x9724                                        |     fcn_00009724 ();
    0x0002640e mov r0, r4                                        |     r0 = r4;
    0x00026410 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00026412 beq 0x264b6                                       |         goto label_21;
                                                                 |     }
    0x00026414 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00026418 bic r7, r0, 0xc0000000                            |     r7 = BIT_MASK (r0, 0xc0000000);
                                                                 | label_9:
    0x0002641c ldrd r1, r2, [r5, 4]                              |     __asm ("ldrd r1, r2, [r5, 4]");
    0x00026420 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00026422 b 0x26348                                         |     goto label_3;
                                                                 | label_16:
    0x00026424 mov r3, r2                                        |     r3 = r2;
    0x00026426 mov r5, r4                                        |     r5 = r4;
    0x00026428 b 0x26324                                         |     goto label_4;
                                                                 | label_11:
    0x0002642a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0002642c beq 0x264ba                                       |         goto label_22;
                                                                 |     }
    0x0002642e mov r0, r2                                        |     r0 = r2;
    0x00026430 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00026434 bic r6, r0, 0xc0000000                            |     r6 = BIT_MASK (r0, 0xc0000000);
    0x00026438 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0002643a blx 0x9c48                                        |     fcn_00009c48 ();
    0x0002643e movs r1, 2                                        |     r1 = 2;
    0x00026440 movs r3, 1                                        |     r3 = 1;
    0x00026442 mov r2, sl                                        |     r2 = sl;
    0x00026444 str r0, [sp, 8]                                   |     var_8h = r0;
    0x00026446 umlal r3, r2, r6, r1                              |     __asm ("umlal r3, r2, r6, r1");
    0x0002644a adds r1, r3, r3                                   |     r1 = r3 + r3;
    0x0002644c adc.w r0, r2, r2                                  |     __asm ("adc.w r0, r2, r2");
    0x00026450 adds r4, r1, r3                                   |     r4 = r1 + r3;
    0x00026452 adc.w r3, r2, r0                                  |     __asm ("adc.w r3, r2, r0");
    0x00026456 mov r2, r4                                        |     r2 = r4;
                                                                 | label_10:
    0x00026458 ldr r0, [sp, 8]                                   |     r0 = var_8h;
                                                                 |     if (r0 == 0) {
    0x0002645a cbz r0, 0x264aa                                   |         goto label_23;
                                                                 |     }
    0x0002645c bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x00026460 str r0, [sp, 0xc]                                 |     var_ch = r0;
                                                                 | label_8:
    0x00026462 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00026464 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00026466 beq 0x263c2                                       |         goto label_5;
                                                                 |     }
    0x00026468 mov r2, r4                                        |     r2 = r4;
    0x0002646a mov r0, r3                                        |     r0 = r3;
    0x0002646c mov r4, r3                                        |     r4 = r3;
    0x0002646e movs r1, 0                                        |     r1 = 0;
    0x00026470 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00026474 add.w r3, r4, r6, lsl 1                           |     r3 = r4 + (r6 << 1);
    0x00026478 mov r8, r4                                        |     r8 = r4;
    0x0002647a adds r3, 1                                        |     r3++;
    0x0002647c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0002647e add.w r3, r4, r6, lsl 2                           |     r3 = r4 + (r6 << 2);
    0x00026482 adds r3, 2                                        |     r3 += 2;
    0x00026484 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00026486 movs r3, 0                                        |     r3 = 0;
    0x00026488 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0002648a str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0002648c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0002648e b 0x262c4                                         |     goto label_6;
                                                                 | label_12:
    0x00026490 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00026492 mov r6, fp                                        |     r6 = fp;
    0x00026494 blx 0x9c48                                        |     fcn_00009c48 ();
    0x00026498 mov r4, fp                                        |     r4 = fp;
    0x0002649a mov r7, fp                                        |     r7 = fp;
    0x0002649c str r0, [sp, 8]                                   |     var_8h = r0;
    0x0002649e b 0x26262                                         |     goto label_7;
                                                                 | label_13:
    0x000264a0 movs r4, 7                                        |     r4 = 7;
    0x000264a2 mov r0, r4                                        |     r0 = r4;
    0x000264a4 add sp, 0x3c                                      |     
    0x000264a6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_23:
    0x000264aa mov r0, r2                                        |     r0 = r2;
    0x000264ac mov r1, r3                                        |     r1 = r3;
    0x000264ae bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x000264b2 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x000264b4 b 0x26462                                         |     goto label_8;
                                                                 | label_21:
    0x000264b6 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x000264b8 b 0x2641c                                         |     goto label_9;
                                                                 | label_22:
    0x000264ba blx 0x9c48                                        |     fcn_00009c48 ();
    0x000264be movs r2, 3                                        |     r2 = 3;
    0x000264c0 mov r3, fp                                        |     r3 = fp;
    0x000264c2 mov r4, r2                                        |     r4 = r2;
    0x000264c4 mov r6, fp                                        |     r6 = fp;
    0x000264c6 str r0, [sp, 8]                                   |     var_8h = r0;
    0x000264c8 b 0x26458                                         |     goto label_10;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x27234 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00027234 ()                                      | void fcn_00027234 (int16_t arg_64h, int16_t arg_80h, int16_t arg_2d0h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t s;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_45h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_50h;
                                                                 |     int32_t var_50h_2;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ah;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_74h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00027234 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00027238 mov ip, r0                                        |     
    0x0002723a ldr.w lr, [r0]                                    |     
    0x0002723e sub sp, 0x7c                                      |     
    0x00027240 movs r3, 0                                        |     r3 = 0;
    0x00027242 mov r5, r1                                        |     r5 = r1;
    0x00027244 ldr r0, [pc, 0x324]                               |     
    0x00027246 ldr r2, [pc, 0x328]                               |     r2 = *(0x27572);
    0x00027248 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0002724c add r0, pc                                        |     r0 = 0x4e7bc;
    0x0002724e vstr d16, [sp, 0x30]                              |     __asm ("vstr d16, [sp, 0x30]");
    0x00027252 ldr r2, [r0, r2]                                  |     
    0x00027254 ldr.w r0, [lr, 0x78]                              |     r0 = *((lr + 0x78));
    0x00027258 ldr r2, [r2]                                      |     r2 = *(0x4e7bc);
    0x0002725a str r2, [sp, 0x74]                                |     var_74h = r2;
    0x0002725c mov.w r2, 0                                       |     r2 = 0;
    0x00027260 ldr.w r2, [lr, 0xc4]                              |     r2 = *((lr + 0xc4));
    0x00027264 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00027266 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00027268 cmp r2, 1                                         |     
    0x0002726a str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0002726c strh.w r3, [sp, 0x44]                             |     var_44h = r3;
    0x00027270 str r0, [sp, 0x3c]                                |     var_3ch = r0;
                                                                 |     if (r2 <= 1) {
    0x00027272 ble 0x27312                                       |         goto label_9;
                                                                 |     }
    0x00027274 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00027276 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00027278 beq.w 0x27452                                     |         goto label_10;
                                                                 |     }
    0x0002727c ldr r6, [pc, 0x2f4]                               |     
    0x0002727e add r7, sp, 0x30                                  |     r7 += s;
    0x00027280 add r6, pc                                        |     r6 = 0x4e7f8;
                                                                 | label_0:
    0x00027282 mov r4, r5                                        |     r4 = r5;
    0x00027284 b 0x2728a                                         |     
                                                                 |     while (r3 != 0xa) {
    0x00027286 ldrb r3, [r4]                                     |         r3 = *(r4);
                                                                 |         if (r3 == 0) {
    0x00027288 cbz r3, 0x27292                                   |             goto label_11;
                                                                 |         }
    0x0002728a ldrb r3, [r4], 1                                  |         r3 = *(r4);
                                                                 |         r4++;
    0x0002728e cmp r3, 0xa                                       |         
    0x00027290 bne 0x27286                                       |         
                                                                 |     }
                                                                 | label_11:
    0x00027292 movs r2, 3                                        |     r2 = 3;
    0x00027294 mov r1, r6                                        |     r1 = r6;
    0x00027296 mov r0, r7                                        |     r0 = r7;
    0x00027298 blx 0x9d54                                        |     fcn_00009d54 ();
    0x0002729c subs r2, r4, r5                                   |     r2 = r4 - r5;
    0x0002729e mov r1, r5                                        |     r1 = r5;
    0x000272a0 mov r0, r7                                        |     r0 = r7;
    0x000272a2 blx 0x9d54                                        |     fcn_00009d54 ();
    0x000272a4 ldcl p8, c7, [r8, -0x8c]                          |     __asm ("ldcl p8, c7, [r8, -0x8c]");
                                                                 |     if (r3 != 0) {
    0x000272a8 cbz r3, 0x272c6                                   |         
    0x000272aa mov r5, r4                                        |         r5 = r4;
    0x000272ac b 0x27282                                         |         goto label_0;
                                                                 | label_2:
    0x000272ae mov r2, r1                                        |         r2 = r1;
                                                                 |         if (r1 != 0) {
    0x000272b0 cbz r1, 0x272bc                                   |             
    0x000272b2 mov r0, r1                                        |             r0 = r1;
    0x000272b4 blx 0x9e8c                                        |             r0 = fcn_00009e8c ();
    0x000272b8 bic r2, r0, 0xc0000000                            |             r2 = BIT_MASK (r0, 0xc0000000);
                                                                 |         }
    0x000272bc add r7, sp, 0x30                                  |         r7 += s;
    0x000272be mov r1, r5                                        |         r1 = r5;
    0x000272c0 mov r0, r7                                        |         r0 = r7;
    0x000272c2 blx 0x9d54                                        |         fcn_00009d54 ();
                                                                 |     }
                                                                 | label_3:
    0x000272c6 ldrb.w r3, [sp, 0x44]                             |     r3 = var_44h;
                                                                 |     if (r3 != 0) {
    0x000272ca cbz r3, 0x272d2                                   |         
    0x000272cc mov r0, r7                                        |         r0 = r7;
    0x000272ce blx 0x9dec                                        |         usleep (r0);
                                                                 |     }
    0x000272d2 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000272d4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000272d6 beq.w 0x27452                                     |         goto label_10;
                                                                 |     }
    0x000272da ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000272dc movs r1, 0                                        |     r1 = 0;
    0x000272de strb r1, [r3, r2]                                 |     *((r3 + r2)) = r1;
    0x000272e0 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000272e2 cbnz r3, 0x27302                                  |     
                                                                 |     while (r3 < r3) {
    0x000272e4 ldr r0, [sp, 0x34]                                |         r0 = var_34h;
                                                                 | label_1:
    0x000272e6 ldr r2, [pc, 0x290]                               |         
    0x000272e8 ldr r3, [pc, 0x284]                               |         r3 = *(0x27570);
    0x000272ea add r2, pc                                        |         r2 = 0x4e868;
    0x000272ec ldr r3, [r2, r3]                                  |         r3 = *(0x4e868);
    0x000272ee ldr r2, [r3]                                      |         r2 = *(0x4e868);
    0x000272f0 ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x000272f2 eors r2, r3                                       |         r2 ^= r3;
    0x000272f4 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000272f8 bne.w 0x27566                                     |             goto label_12;
                                                                 |         }
    0x000272fc add sp, 0x7c                                      |         
    0x000272fe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00027302 ldrb.w r3, [sp, 0x45]                             |         r3 = var_45h;
    0x00027306 lsls r3, r3, 0x1d                                 |         r3 <<= 0x1d;
    0x00027308 bmi 0x272e4                                       |         
                                                                 |     }
    0x0002730a mov r0, r7                                        |     r0 = r7;
    0x0002730c bl 0x1eb40                                        |     fcn_0001eb40 (r0);
    0x00027310 b 0x272e6                                         |     goto label_1;
                                                                 | label_9:
    0x00027312 ldrsh.w r3, [ip, 0x10]                            |     r3 = *((ip + 0x10));
    0x00027316 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00027318 beq 0x272ae                                       |         goto label_2;
                                                                 |     }
    0x0002731a ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0002731c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002731e beq.w 0x27452                                     |         goto label_10;
                                                                 |     }
    0x00027322 ldr r3, [pc, 0x258]                               |     
    0x00027324 mov.w sl, 1                                       |     sl = 1;
    0x00027328 add r7, sp, 0x30                                  |     r7 += s;
    0x0002732a add r6, sp, 0x2c                                  |     r6 += var_2ch;
    0x0002732c mov fp, ip                                        |     
    0x0002732e str.w lr, [sp, 0x18]                              |     __asm ("str.w lr, [var_18h]");
    0x00027332 add r3, pc                                        |     r3 = 0x4e8b4;
    0x00027334 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00027336 ldr r3, [pc, 0x248]                               |     
    0x00027338 add r3, pc                                        |     r3 = 0x4e8be;
    0x0002733a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0002733c ldr r3, [pc, 0x244]                               |     
    0x0002733e add r3, pc                                        |     r3 = 0x4e8c6;
    0x00027340 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_4:
    0x00027342 mov r8, r5                                        |     r8 = r5;
    0x00027344 mov.w sb, 0                                       |     sb = 0;
    0x00027348 b 0x27358                                         |     
                                                                 |     while (r3 != 0x9c) {
    0x0002734a add r8, r0                                        |         r8 += r0;
    0x0002734c add sb, r0                                        |         sb += r0;
    0x0002734e ldrb.w r3, [r8]                                   |         r3 = *(r8);
    0x00027352 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00027354 beq.w 0x2755a                                     |             goto label_13;
                                                                 |         }
    0x00027358 mov r1, r6                                        |         r1 = r6;
    0x0002735a mov r0, r8                                        |         r0 = r8;
    0x0002735c bl 0xfda4                                         |         fcn_0000fda4 (r0, r1, r2);
    0x00027360 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00027362 cmp r3, 0x9c                                      |         
    0x00027364 bne 0x2734a                                       |         
                                                                 |     }
    0x00027366 mov r4, r0                                        |     r4 = r0;
    0x00027368 mov r2, sb                                        |     r2 = sb;
    0x0002736a mov r1, r5                                        |     r1 = r5;
    0x0002736c mov r0, r7                                        |     r0 = r7;
    0x0002736e add.w r8, r5, sb                                  |     r8 = r5 + sb;
    0x00027372 blx 0x9d54                                        |     fcn_00009d54 ();
    0x00027376 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00027378 beq 0x272c6                                       |         goto label_3;
                                                                 |     }
    0x0002737a ldrb.w r3, [r8]                                   |     r3 = *(r8);
    0x0002737e add.w r5, r8, r4                                  |     r5 = r8 + r4;
    0x00027382 cmp r3, 0x3f                                      |     
                                                                 |     if (r3 != 0x3f) {
    0x00027384 bne 0x27456                                       |         goto label_14;
                                                                 |     }
    0x00027386 cmp r4, 1                                         |     
    0x00027388 itt le                                            |     
                                                                 |     if (r4 > 1) {
    0x0002738a movle r0, sl                                      |         r0 = sl;
                                                                 |     }
                                                                 |     if (r4 > 1) {
    0x0002738c strle sl, [sp, 0x28]                              |         var_28h = sl;
                                                                 |     }
                                                                 |     if (r4 > 1) {
    0x00027390 bgt.w 0x27498                                     |         goto label_15;
                                                                 |     }
                                                                 | label_6:
    0x00027394 add.w sl, r0, 1                                   |     sl = r0 + 1;
                                                                 | label_5:
    0x00027398 add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x0002739c ldr.w r1, [fp, 0x64]                              |     r1 = *(arg_64h);
    0x000273a0 lsls r2, r0, 3                                    |     r2 = r0 << 3;
    0x000273a2 subs r2, 0x28                                     |     r2 -= 0x28;
    0x000273a4 add.w sb, r1, r2                                  |     sb = r1 + r2;
    0x000273a8 ldrh.w r3, [sb, 0x10]                             |     r3 = *((sb + 0x10));
    0x000273ac lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x000273ae bmi 0x2746a                                       |         goto label_16;
                                                                 |     }
    0x000273b0 tst.w r3, 0x24                                    |     
                                                                 |     if ((r3 & 0x24) != 0) {
    0x000273b4 bne 0x27480                                       |         goto label_17;
                                                                 |     }
    0x000273b6 ands r0, r3, 8                                    |     r0 = r3 & 8;
    0x000273ba str r0, [sp, 0xc]                                 |     var_ch = r0;
                                                                 |     if (r0 != r3) {
    0x000273bc bne.w 0x274c4                                     |         goto label_18;
                                                                 |     }
    0x000273c0 lsls r0, r3, 0x1e                                 |     r0 = r3 << 0x1e;
                                                                 |     if (r0 >= r3) {
    0x000273c2 bpl 0x274a6                                       |         goto label_19;
                                                                 |     }
    0x000273c4 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000273c6 ldrb.w r3, [r3, 0x54]                             |     r3 = *((r3 + 0x54));
    0x000273ca cmp r3, 1                                         |     
    0x000273cc str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (r3 == 1) {
    0x000273ce beq.w 0x274dc                                     |         goto label_20;
                                                                 |     }
    0x000273d2 add r2, sp, 0x48                                  |     r2 += var_48h;
    0x000273d4 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000273d6 mov r0, r2                                        |     r0 = r2;
    0x000273d8 movs r2, 0x28                                     |     r2 = 0x28;
    0x000273da str r0, [sp, 0x24]                                |     var_24h = r0;
    0x000273dc blx 0x97d4                                        |     fcn_000097d4 ();
    0x000273e0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000273e2 ldrd r1, r2, [sb, 8]                              |     __asm ("ldrd r1, r2, [sb, 8]");
    0x000273e6 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000273e8 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x000273ea ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000273ec str r3, [sp]                                      |     *(sp) = r3;
    0x000273ee ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000273f0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000273f2 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x000273f4 bl 0x252e0                                        |     fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
    0x000273f8 ldrh.w r3, [sp, 0x58]                             |     r3 = var_58h;
    0x000273fc lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
    0x000273fe itt pl                                            |     
                                                                 |     if (r2 < r3) {
    0x00027400 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x00027402 strbpl r3, [sp, 0x5a]                             |         var_5ah = r3;
                                                                 |     }
    0x00027404 adds r0, 0x5a                                     |     r0 += 0x5a;
                                                                 |     if (r0 < 0x5a) {
    0x00027406 bpl 0x27424                                       |         
    0x00027408 ldrb.w r3, [sp, 0x5a]                             |         r3 = var_5ah;
    0x0002740c cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x0002740e beq 0x27424                                       |             goto label_21;
                                                                 |         }
    0x00027410 ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x00027412 movs r1, 1                                        |         r1 = 1;
    0x00027414 bl 0x1f1ec                                        |         r0 = fcn_0001f1ec (r0, r1);
    0x00027418 cmp r0, 7                                         |         
                                                                 |         if (r0 != 7) {
    0x0002741a bne 0x27424                                       |             goto label_21;
                                                                 |         }
    0x0002741c ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0002741e strb.w r0, [sp, 0x44]                             |         var_44h = r0;
    0x00027422 str r3, [sp, 0x38]                                |         var_38h = r3;
                                                                 |     }
                                                                 | label_21:
    0x00027424 ldr r1, [pc, 0x160]                               |     
    0x00027426 mov r0, r7                                        |     r0 = r7;
    0x00027428 ldrd r3, r2, [sp, 0x50]                           |     __asm ("ldrd r3, r2, [var_50h]");
    0x0002742c add r1, pc                                        |     r1 = 0x4e9b8;
    0x0002742e blx 0x982c                                        |     fcn_0000982c ();
    0x00027432 ldrh.w r3, [sp, 0x58]                             |     r3 = var_58h;
    0x00027434 adds r0, 0x58                                     |     r0 += 0x58;
    0x00027436 tst.w r3, 0x9000                                  |     
                                                                 |     if ((r3 & 0x9000) == 0) {
    0x0002743a bne 0x27440                                       |         
    0x0002743c ldr r3, [sp, 0x60]                                |         r3 = var_60h;
                                                                 |         if (r3 == 0) {
    0x0002743e cbz r3, 0x27446                                   |             goto label_8;
                                                                 |         }
                                                                 |     }
    0x00027440 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00027442 bl 0x13c18                                        |     fcn_00013c18 (r0);
                                                                 | label_8:
    0x00027446 ldrb.w r3, [r8, r4]                               |     r3 = *((r8 + r4));
    0x0002744a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002744c bne.w 0x27342                                     |         goto label_4;
                                                                 |     }
    0x00027450 b 0x272c6                                         |     goto label_3;
                                                                 | label_10:
    0x00027452 movs r0, 0                                        |     r0 = 0;
    0x00027454 b 0x272e6                                         |     goto label_1;
                                                                 | label_14:
    0x00027456 ldr.w r0, [fp, 0x80]                              |     r0 = *(arg_80h);
    0x0002745a mov r2, r4                                        |     r2 = r4;
    0x0002745c mov r1, r8                                        |     r1 = r8;
    0x0002745e bl 0xe2a0                                         |     fcn_0000e2a0 (r0, r1, r2);
    0x00027462 str r0, [sp, 0x28]                                |     var_28h = r0;
                                                                 | label_7:
    0x00027464 cmp sl, r0                                        |     
                                                                 |     if (sl > r0) {
    0x00027466 bgt 0x27398                                       |         goto label_5;
                                                                 |     }
    0x00027468 b 0x27394                                         |     goto label_6;
                                                                 | label_16:
    0x0002746a ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0002746c movs r2, 4                                        |     r2 = 4;
    0x0002746e mov r0, r7                                        |     r0 = r7;
    0x00027470 blx 0x9d54                                        |     fcn_00009d54 ();
    0x00027474 ldrb.w r3, [r8, r4]                               |     r3 = *((r8 + r4));
    0x00027478 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002747a bne.w 0x27342                                     |         goto label_4;
                                                                 |     }
    0x0002747e b 0x272c6                                         |     goto label_3;
                                                                 | label_17:
    0x00027480 ldrd r2, r3, [sb]                                 |     __asm ("ldrd r2, r3, [sb]");
    0x00027484 mov r0, r7                                        |     r0 = r7;
    0x00027486 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00027488 blx 0x982c                                        |     fcn_0000982c ();
    0x0002748c ldrb.w r3, [r8, r4]                               |     r3 = *((r8 + r4));
    0x00027490 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00027492 bne.w 0x27342                                     |         goto label_4;
                                                                 |     }
    0x00027496 b 0x272c6                                         |     goto label_3;
                                                                 | label_15:
    0x00027498 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x0002749a add.w r0, r8, 1                                   |     r0 = r8 + 1;
    0x0002749e bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x000274a2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000274a4 b 0x27464                                         |     goto label_7;
                                                                 | label_19:
    0x000274a6 ands r3, r3, 0x400                                |     r3 &= 0x400;
                                                                 |     if (r3 == r3) {
    0x000274aa beq 0x274f6                                       |         goto label_22;
                                                                 |     }
    0x000274ac ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x000274ae mov r0, r7                                        |     r0 = r7;
    0x000274b0 ldr r1, [pc, 0xd8]                                |     
    0x000274b2 add r1, pc                                        |     r1 = 0x4ea42;
    0x000274b4 blx 0x982c                                        |     fcn_0000982c ();
    0x000274b8 ldrb.w r3, [r8, r4]                               |     r3 = *((r8 + r4));
    0x000274bc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000274be bne.w 0x27342                                     |         goto label_4;
                                                                 |     }
    0x000274c2 b 0x272c6                                         |     goto label_3;
                                                                 | label_18:
    0x000274c4 ldrd r2, r3, [sb]                                 |     __asm ("ldrd r2, r3, [sb]");
    0x000274c8 mov r0, r7                                        |     r0 = r7;
    0x000274ca ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000274cc blx 0x982c                                        |     fcn_0000982c ();
    0x000274d0 ldrb.w r3, [r8, r4]                               |     r3 = *((r8 + r4));
    0x000274d4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000274d6 bne.w 0x27342                                     |         goto label_4;
                                                                 |     }
    0x000274d8 add r7, sp, 0xd0                                  |     r7 = sp + 0xd0;
    0x000274da b 0x272c6                                         |     goto label_3;
                                                                 | label_20:
    0x000274dc ldr r1, [pc, 0xb0]                                |     
    0x000274de mov r0, r7                                        |     r0 = r7;
    0x000274e0 ldrd r3, r2, [sb, 8]                              |     __asm ("ldrd r3, r2, [sb, 8]");
    0x000274e4 add r1, pc                                        |     r1 = 0x4ea78;
    0x000274e6 blx 0x982c                                        |     fcn_0000982c ();
    0x000274ea ldrb.w r3, [r8, r4]                               |     r3 = *((r8 + r4));
    0x000274ee cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000274f0 bne.w 0x27342                                     |         goto label_4;
                                                                 |     }
    0x000274f4 b 0x272c6                                         |     goto label_3;
                                                                 | label_22:
    0x000274f6 ldr r1, [pc, 0x9c]                                |     
    0x000274f8 movs r2, 2                                        |     r2 = 2;
    0x000274fa mov r0, r7                                        |     r0 = r7;
    0x000274fc str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000274fe add r1, pc                                        |     r1 = 0x4ea98;
    0x00027500 blx 0x9d54                                        |     fcn_00009d54 ();
    0x00027504 ldr.w r1, [sb, 0xc]                               |     r1 = *((sb + 0xc));
    0x00027508 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0002750a cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x0002750c ble 0x2754c                                       |         goto label_23;
                                                                 |     }
    0x0002750e ldr r2, [pc, 0x88]                                |     
    0x00027510 str.w r8, [sp, 0x20]                              |     __asm ("str.w r8, [var_20h]");
    0x00027514 mov r8, r3                                        |     r8 = r3;
    0x00027516 mov r3, r6                                        |     r3 = r6;
    0x00027518 str.w sl, [sp, 0xc]                               |     __asm ("str.w sl, [var_ch]");
    0x0002751c add r2, pc                                        |     r2 = 0x4eaba;
    0x0002751e mov r6, r5                                        |     r6 = r5;
    0x00027520 str r4, [sp, 0x24]                                |     var_24h = r4;
    0x00027522 mov r5, sb                                        |     r5 = sb;
    0x00027524 mov sl, r1                                        |     sl = r1;
    0x00027526 mov r4, r2                                        |     r4 = r2;
    0x00027528 mov sb, r3                                        |     sb = r3;
                                                                 |     do {
    0x0002752a ldr r2, [r5, 8]                                   |         r2 = *((r5 + 8));
    0x0002752c mov r1, r4                                        |         r1 = r4;
    0x0002752e mov r0, r7                                        |         r0 = r7;
    0x00027530 ldrb.w r2, [r2, r8]                               |         r2 = *((r2 + r8));
    0x00027534 add.w r8, r8, 1                                   |         r8++;
    0x00027538 blx 0x982c                                        |         fcn_0000982c ();
    0x0002753c cmp sl, r8                                        |         
    0x0002753e bne 0x2752a                                       |         
                                                                 |     } while (sl != r8);
    0x00027540 ldr.w sl, [sp, 0xc]                               |     sl = var_ch;
    0x00027544 mov r5, r6                                        |     r5 = r6;
    0x00027546 ldrd r8, r4, [sp, 0x20]                           |     __asm ("ldrd r8, r4, [var_20h]");
    0x0002754a mov r6, sb                                        |     r6 = sb;
                                                                 | label_23:
    0x0002754c ldr r1, [pc, 0x4c]                                |     
    0x0002754e movs r2, 1                                        |     r2 = 1;
    0x00027550 mov r0, r7                                        |     r0 = r7;
    0x00027552 add r1, pc                                        |     r1 = 0x4eaf2;
    0x00027554 blx 0x9d54                                        |     fcn_00009d54 ();
    0x00027558 b 0x27446                                         |     goto label_8;
                                                                 | label_13:
    0x0002755a mov r2, sb                                        |     r2 = sb;
    0x0002755c mov r1, r5                                        |     r1 = r5;
    0x0002755e mov r0, r7                                        |     r0 = r7;
    0x00027560 blx 0x9d54                                        |     fcn_00009d54 ();
    0x00027564 b 0x272c6                                         |     goto label_3;
                                                                 | label_12:
    0x00027566 blx 0x9b44                                        |     fcn_00009b44 ();
    0x0002756a nop                                               |     
    0x0002756c ldr r0, [sp, 0x2d0]                               |     r0 = *(arg_2d0h);
    0x0002756e movs r7, r0                                       |     r7 = r0;
    0x00027570 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00027572 movs r0, r0                                       |     
    0x00027574 str r4, [r6, 0x74]                                |     *((r6 + 0x74)) = r4;
    0x00027576 movs r6, r0                                       |     r6 = r0;
    0x00027578 ldr r0, [sp, 0x58]                                |     r0 = var_58h;
    0x0002757a movs r7, r0                                       |     r7 = r0;
    0x0002757c ldrh r6, [r4, r7]                                 |     r6 = *((r4 + r7));
    0x0002757e movs r6, r0                                       |     r6 = r0;
    0x00027580 str r4, [r6, 0x68]                                |     *((r6 + 0x68)) = r4;
    0x00027582 movs r6, r0                                       |     r6 = r0;
    0x00027584 invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x283b4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000283b4 ()                                      | void fcn_000283b4 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000283b4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000283b8 mov r5, r1                                        |     r5 = r1;
    0x000283ba ldrd r1, r2, [r1, 0x28]                           |     __asm ("ldrd r1, r2, [r1, 0x28]");
    0x000283be sub sp, 0x3c                                      |     
    0x000283c0 mov r4, r0                                        |     r4 = r0;
    0x000283c2 ldr r0, [pc, 0x358]                               |     
    0x000283c4 mov r6, r1                                        |     r6 = r1;
    0x000283c6 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x000283c8 ldr r1, [pc, 0x354]                               |     r1 = *(0x28720);
    0x000283ca add.w fp, r2, r6                                  |     
    0x000283ce add r0, pc                                        |     r0 = 0x50af0;
    0x000283d0 ldr.w r3, [r5, 0xe0]                              |     r3 = *((r5 + 0xe0));
    0x000283d4 ldrsh.w r2, [r5, 0xcc]                            |     r2 = *((r5 + 0xcc));
    0x000283d8 cmp.w fp, 0                                       |     
    0x000283dc ldr r1, [r0, r1]                                  |     
    0x000283de ldr r1, [r1]                                      |     r1 = *(0x50af0);
    0x000283e0 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x000283e2 mov.w r1, 0                                       |     r1 = 0;
    0x000283e6 str.w r3, [r4, 0x80]                              |     __asm ("str.w r3, [r4, 0x80]");
    0x000283ea mov.w r3, 0                                       |     r3 = 0;
    0x000283ee str r2, [sp, 0x10]                                |     var_10h = r2;
    0x000283f0 str.w r3, [r5, 0xe0]                              |     __asm ("str.w r3, [r5, 0xe0]");
    0x000283f4 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000283f6 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000283f8 ldr r3, [r5, 0x60]                                |     r3 = *((r5 + 0x60));
    0x000283fa str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000283fc clz r3, r6                                        |     r3 &= r6;
    0x00028400 lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x00028404 it le                                             |     
                                                                 |     if (fp > 0) {
    0x00028406 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00028408 cbz r3, 0x2840e                                   |         
    0x0002840a add.w fp, fp, 1                                   |         
                                                                 |     }
    0x0002840e ldr r3, [r4, 0x6c]                                |     r3 = *((r4 + 0x6c));
    0x00028410 add r1, sp, 0x30                                  |     r1 += var_30h;
    0x00028412 ldr r2, [r4, 0x68]                                |     r2 = *((r4 + 0x68));
    0x00028414 mov r0, r4                                        |     r0 = r4;
    0x00028416 ldr r7, [r5, 0x30]                                |     r7 = *((r5 + 0x30));
    0x00028418 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0002841c lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0002841e adds r3, 7                                        |     r3 += 7;
    0x00028420 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x00028424 subs r7, r7, r3                                   |     r7 -= r3;
    0x00028426 adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x00028428 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002842a asr.w r8, r7, 0x1f                                |     r8 = r7 >> 0x1f;
    0x0002842e bic r7, r7, 7                                     |     r7 = BIT_MASK (r7, 7);
    0x00028430 lsls r7, r0, 0x1c                                 |     r7 = r0 << 0x1c;
    0x00028432 bl 0x13db4                                        |     fcn_00013db4 (r0, r1, r2);
    0x00028434 ldc2 p13, c7, [pc], 0xa4                          |     __asm ("ldc2 p13, c7, [pc], 0xa4");
    0x00028438 mov r3, r7                                        |     r3 = r7;
    0x0002843a mov r2, r8                                        |     r2 = r8;
                                                                 |     if (r1 != 0) {
    0x0002843c cbz r1, 0x28446                                   |         
    0x0002843e ldrb r1, [r5, 0x15]                               |         r1 = *((r5 + 0x15));
    0x00028440 subs r1, 0                                        |         
    0x00028442 it ne                                             |         
                                                                 |         if (r1 != 0) {
    0x00028444 movne r1, 1                                       |             r1 = 1;
                                                                 |             goto label_10;
                                                                 |         }
                                                                 |     }
                                                                 | label_10:
    0x00028446 ldrb.w r0, [r4, 0x96]                             |     r0 = *((r4 + 0x96));
    0x0002844a bfi r0, r1, 5, 1                                  |     value_0 = BIT_MASK (5, 1);
                                                                 |     value_1 = r1 & value_0;
                                                                 |     value_0 = ~value_0;
                                                                 |     r0 &= value_0;
                                                                 |     r0 |= value_1;
    0x0002844e strb.w r0, [r4, 0x96]                             |     *((r4 + 0x96)) = r0;
    0x00028452 ldrb.w r1, [r5, 0xcf]                             |     r1 = *((r5 + 0xcf));
    0x00028456 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00028458 beq 0x284d2                                       |         goto label_11;
                                                                 |     }
    0x0002845a cmp.w fp, 0xa                                     |     
    0x0002845e uxtb r0, r0                                       |     r0 = (int8_t) r0;
    0x00028460 it lt                                             |     
                                                                 |     if (fp >= 0xa) {
    0x00028462 movlt fp, 0xa                                     |         
                                                                 |     }
    0x00028466 strd r3, r2, [sp, 0x18]                           |     __asm ("strd r3, r2, [var_1ch]");
    0x0002846a cmp r1, 2                                         |     
    0x0002846c bfi r0, r1, 2, 2                                  |     value_2 = BIT_MASK (2, 2);
                                                                 |     value_3 = r1 & value_2;
                                                                 |     value_2 = ~value_2;
                                                                 |     r0 &= value_2;
                                                                 |     r0 |= value_3;
    0x00028470 strb.w r0, [r4, 0x96]                             |     *((r4 + 0x96)) = r0;
                                                                 |     if (r1 == 2) {
    0x00028474 beq.w 0x286ac                                     |         goto label_12;
                                                                 |     }
    0x00028478 mov.w sb, 8                                       |     sb = 8;
    0x0002847c mov r0, r4                                        |     r0 = r4;
    0x0002847e mov r1, sb                                        |     r1 = sb;
    0x00028480 movs r5, 0                                        |     r5 = 0;
    0x00028482 bl 0x1d86c                                        |     fcn_0001d86c (r0, r1);
    0x00028486 ldrd r3, r2, [sp, 0x18]                           |     __asm ("ldrd r3, r2, [var_1ch]");
                                                                 | label_5:
    0x0002848a ldr.w sl, [pc, 0x298]                             |     
    0x0002848e movs r6, 0                                        |     r6 = 0;
    0x00028490 strd fp, r7, [sp, 0x18]                           |     __asm ("strd fp, r7, [var_1ch]");
    0x00028494 mov r7, r3                                        |     r7 = r3;
    0x00028496 mov fp, r2                                        |     
    0x00028498 add sl, pc                                        |     
    0x0002849a add.w sl, sl, 0x788                               |     sl = 0x5134a;
                                                                 |     do {
    0x0002849e ldr r3, [r4]                                      |         r3 = *(r4);
    0x000284a0 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 == 0) {
    0x000284a4 cbnz r3, 0x284c0                                  |             
    0x000284a6 str r3, [sp, 4]                                   |             var_4h = r3;
    0x000284a8 movs r3, 1                                        |             r3 = 1;
    0x000284aa str r3, [sp]                                      |             *(sp) = r3;
    0x000284ac mov.w r2, -1                                      |             r2 = -1;
    0x000284b0 ldr r0, [r4, 0x74]                                |             r0 = *((r4 + 0x74));
    0x000284b2 mov.w r3, -1                                      |             r3 = -1;
    0x000284b6 ldr.w r1, [sl, r5, lsl 2]                         |             offset_4 = r5 << 2;
                                                                 |             r1 = *((sl + offset_4));
    0x000284ba add r0, r6                                        |             r0 += r6;
    0x000284bc bl 0x252e0                                        |             fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |         }
    0x000284c0 adds r5, 1                                        |         r5++;
    0x000284c2 adds r6, 0x28                                     |         r6 += 0x28;
    0x000284c4 cmp r5, sb                                        |         
    0x000284c6 blt 0x2849e                                       |         
                                                                 |     } while (r5 < sb);
    0x000284c8 mov r3, r7                                        |     r3 = r7;
    0x000284ca mov r2, fp                                        |     r2 = fp;
    0x000284cc ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x000284ce ldr.w fp, [sp, 0x18]                              |     fp = var_18h;
                                                                 | label_11:
    0x000284d2 add.w r5, fp, fp, lsl 2                           |     r5 = fp + (fp << 2);
    0x000284d6 ldrb.w r1, [r4, 0x96]                             |     r1 = *((r4 + 0x96));
    0x000284da movs r0, 0                                        |     r0 = 0;
    0x000284dc lsls r5, r5, 3                                    |     r5 <<= 3;
    0x000284de bfc r1, 0, 2                                      |     value_5 = BIT_MASK (2, );
                                                                 |     value_5 = ~value_5;
                                                                 |     r1 &= value_5;
    0x000284e2 adds r5, 7                                        |     r5 += 7;
    0x000284e4 strb.w r1, [r4, 0x96]                             |     *((r4 + 0x96)) = r1;
    0x000284e8 bic r5, r5, 7                                     |     r5 = BIT_MASK (r5, 7);
    0x000284ec adc sb, r0, 0                                     |     __asm ("adc sb, r0, 0");
    0x000284f0 cmp r7, r5                                        |     
    0x000284f2 str r5, [sp, 0x20]                                |     var_20h = r5;
    0x000284f4 sbcs.w r1, r8, sb                                 |     __asm ("sbcs.w r1, r8, sb");
                                                                 |     if (r7 < r5) {
    0x000284f8 blt.w 0x286a6                                     |         goto label_13;
                                                                 |     }
    0x000284fc ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x000284fe subs r7, r7, r5                                   |     r7 -= r5;
    0x00028500 mov r6, r0                                        |     r6 = r0;
    0x00028502 sbc.w r8, r8, sb                                  |     __asm ("sbc.w r8, r8, sb");
    0x00028506 mov r2, r8                                        |     r2 = r8;
    0x00028508 mov r3, r7                                        |     r3 = r7;
    0x0002850a adds r0, r1, r7                                   |     r0 = r1 + r7;
    0x0002850c mov r8, r6                                        |     r8 = r6;
                                                                 | label_4:
    0x0002850e ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00028510 str r0, [r4, 0x58]                                |     *((r4 + 0x58)) = r0;
    0x00028512 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x00028516 lsls r7, r1, 3                                    |     r7 = r1 << 3;
    0x00028518 cmp r3, r7                                        |     
    0x0002851a str r7, [sp, 0x2c]                                |     var_2ch = r7;
    0x0002851c sbcs r1, r2, 0                                    |     __asm ("sbcs r1, r2, 0");
    0x00028520 str r7, [sp, 0x1c]                                |     var_1ch = r7;
                                                                 |     if (r3 < r7) {
    0x00028522 blt.w 0x28698                                     |         goto label_14;
                                                                 |     }
    0x00028526 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00028528 subs r3, r3, r7                                   |     r3 -= r7;
    0x0002852a sbc r2, r2, 0                                     |     __asm ("sbc r2, r2, 0");
    0x0002852e add.w ip, r1, r3                                  |     
                                                                 | label_3:
    0x00028532 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00028534 str.w ip, [r4, 0x64]                              |     __asm ("str.w ip, [r4, 0x64]");
    0x00028538 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x0002853a adds r1, 7                                        |     r1 += 7;
    0x0002853c bic sl, r1, 7                                     |     sl = BIT_MASK (r1, 7);
    0x00028540 mov.w r1, 0                                       |     r1 = 0;
    0x00028544 adc r7, r1, 0                                     |     __asm ("adc r7, r1, 0");
    0x00028548 cmp r3, sl                                        |     
    0x0002854a mov r5, r7                                        |     r5 = r7;
    0x0002854c str r7, [sp, 0x24]                                |     var_24h = r7;
    0x0002854e sbcs.w r7, r2, r7                                 |     __asm ("sbcs.w r7, r2, r7");
                                                                 |     if (r3 < sl) {
    0x00028552 blt.w 0x2868c                                     |         goto label_15;
                                                                 |     }
    0x00028556 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00028558 subs.w r3, r3, sl                                 |     r3 -= sl;
    0x0002855c sbc.w r2, r2, r5                                  |     __asm ("sbc.w r2, r2, r5");
    0x00028560 add r1, r3                                        |     r1 += r3;
                                                                 | label_2:
    0x00028562 str r1, [r4, 0x5c]                                |     *((r4 + 0x5c)) = r1;
    0x00028564 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00028566 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x00028568 mov r7, r1                                        |     r7 = r1;
    0x0002856a str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0002856c adds r7, 7                                        |     r7 += 7;
    0x0002856e mov.w r1, 0                                       |     r1 = 0;
    0x00028572 bic r7, r7, 7                                     |     r7 = BIT_MASK (r7, 7);
    0x00028576 adc r5, r1, 0                                     |     __asm ("adc r5, r1, 0");
    0x0002857a cmp r3, r7                                        |     
    0x0002857c str r5, [sp, 0x28]                                |     var_28h = r5;
    0x0002857e sbcs r2, r5                                       |     __asm ("sbcs r2, r5");
                                                                 |     if (r3 < r7) {
    0x00028580 blt 0x28680                                       |         goto label_16;
                                                                 |     }
    0x00028582 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00028584 subs r3, r3, r7                                   |     r3 -= r7;
    0x00028586 add r2, r3                                        |     r2 += r3;
    0x00028588 mov r3, r2                                        |     r3 = r2;
                                                                 | label_1:
    0x0002858a orrs.w r2, r6, r8                                 |     r2 = r6 | r8;
    0x0002858e str r3, [r4, 0x60]                                |     *((r4 + 0x60)) = r3;
                                                                 |     if (r2 != r6) {
    0x00028590 bne 0x285f0                                       |         goto label_17;
                                                                 |     }
    0x00028592 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00028594 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00028598 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0002859a beq 0x28630                                       |         goto label_18;
                                                                 |     }
                                                                 |     do {
    0x0002859c vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x000285a0 add.w r3, r4, 0x14                                |         r3 = r4 + 0x14;
    0x000285a4 movs r2, 0                                        |         r2 = 0;
    0x000285a6 strh r2, [r4, 0x10]                               |         *((r4 + 0x10)) = r2;
    0x000285a8 vst1.32 {d16}, [r3]                               |         __asm ("vst1.32 {d16}, [r3]");
                                                                 | label_0:
    0x000285ac movs r2, 0                                        |         r2 = 0;
    0x000285ae movs r3, 1                                        |         r3 = 1;
    0x000285b0 str r2, [r4, 0x30]                                |         *((r4 + 0x30)) = r2;
    0x000285b2 movw r1, 0xff02                                   |         r1 = 0xff02;
    0x000285b6 ldr r2, [pc, 0x170]                               |         
    0x000285b8 strb.w r3, [r4, 0x95]                             |         *((r4 + 0x95)) = r3;
    0x000285bc str r3, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r3;
    0x000285be vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x000285c2 add r2, pc                                        |         r2 = 0x50cf0;
    0x000285c4 ldr r3, [pc, 0x158]                               |         r3 = *(0x28720);
    0x000285c6 vmov.i64 d17, 0xffffffff                          |         __asm ("vmov.i64 d17, aav.0x000000ff");
    0x000285ca vstr d16, [r4, 0x28]                              |         __asm ("vstr d16, [r4, 0x28]");
    0x000285ce strh.w r1, [r4, 0x92]                             |         *((r4 + 0x92)) = r1;
    0x000285d2 vstr d17, [r4, 0x20]                              |         __asm ("vstr d17, [r4, 0x20]");
    0x000285d6 vstr d16, [r4, 0x40]                              |         __asm ("vstr d16, [r4, 0x40]");
    0x000285da ldr r3, [r2, r3]                                  |         r3 = *(0x50cf0);
    0x000285dc ldr r2, [r3]                                      |         r2 = *(0x50cf0);
    0x000285de ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x000285e0 eors r2, r3                                       |         r2 ^= r3;
    0x000285e2 mov.w r3, 0                                       |         r3 = 0;
    0x000285e4 lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
                                                                 |         if (r0 != r0) {
    0x000285e6 bne.w 0x28718                                     |             goto label_19;
                                                                 |         }
    0x000285ea add sp, 0x3c                                      |         
    0x000285ec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_17:
    0x000285f0 ldr r5, [sp, 0xc]                                 |         r5 = var_ch;
    0x000285f2 mov r3, r8                                        |         r3 = r8;
    0x000285f4 mov r2, r6                                        |         r2 = r6;
    0x000285f6 mov r0, r5                                        |         r0 = r5;
    0x000285f8 bl 0x1d740                                        |         fcn_0001d740 (r0, r1);
    0x000285fc str.w r0, [r4, 0xc8]                              |         __asm ("str.w r0, [r4, 0xc8]");
    0x00028600 mov r1, r0                                        |         r1 = r0;
    0x00028602 ldrb.w r3, [r5, 0x57]                             |         r3 = *((r5 + 0x57));
    0x00028606 cmp r3, 0                                         |         
    0x00028608 bne 0x2859c                                       |         
                                                                 |     } while (r3 != 0);
    0x0002860a ldr r0, [r4, 0x58]                                |     r0 = *((r4 + 0x58));
    0x0002860c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002860e beq 0x286c0                                       |         goto label_20;
                                                                 |     }
                                                                 | label_6:
    0x00028610 ldr.w ip, [r4, 0x64]                              |     ip = *((r4 + 0x64));
    0x00028614 str r0, [r4, 0x58]                                |     *((r4 + 0x58)) = r0;
    0x00028616 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x0002861a beq 0x28700                                       |         goto label_21;
                                                                 |     }
                                                                 | label_9:
    0x0002861c ldr r3, [r4, 0x5c]                                |     r3 = *((r4 + 0x5c));
    0x0002861e str.w ip, [r4, 0x64]                              |     __asm ("str.w ip, [r4, 0x64]");
    0x00028622 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00028624 beq 0x286e8                                       |         goto label_22;
                                                                 |     }
                                                                 | label_8:
    0x00028626 str r3, [r4, 0x5c]                                |     *((r4 + 0x5c)) = r3;
    0x00028628 ldr r3, [r4, 0x60]                                |     r3 = *((r4 + 0x60));
    0x0002862a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002862c beq 0x286d8                                       |         goto label_23;
                                                                 |     }
                                                                 | label_7:
    0x0002862e str r3, [r4, 0x60]                                |     *((r4 + 0x60)) = r3;
                                                                 | label_18:
    0x00028630 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00028632 str r2, [r4, 0x18]                                |     *((r4 + 0x18)) = r2;
    0x00028634 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00028636 cmp r2, 0                                         |     
    0x00028638 strh r2, [r4, 0x10]                               |     *((r4 + 0x10)) = r2;
                                                                 |     if (r2 <= 0) {
    0x0002863a ble 0x28656                                       |         goto label_24;
                                                                 |     }
    0x0002863c ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0002863e movs r5, 1                                        |     r5 = 1;
    0x00028640 ldr r6, [sp, 0xc]                                 |     r6 = var_ch;
    0x00028642 movs r1, 0                                        |     r1 = 0;
    0x00028644 add r2, ip                                        |     r2 += ip;
                                                                 |     do {
    0x00028646 strh.w r5, [ip, 0x10]                             |         *((ip + 0x10)) = r5;
    0x0002864a strd r6, r1, [ip, 0x14]                           |         __asm ("strd r6, r1, [ip, 0x14]");
    0x0002864e add.w ip, ip, 0x28                                |         
    0x00028652 cmp r2, ip                                        |         
    0x00028654 bne 0x28646                                       |         
                                                                 |     } while (r2 != ip);
                                                                 | label_24:
    0x00028656 cmp.w fp, 0                                       |     
    0x0002865a str.w fp, [r4, 0x14]                              |     __asm ("str.w fp, [r4, 0x14]");
                                                                 |     if (fp <= 0) {
    0x0002865e ble 0x28674                                       |         goto label_25;
                                                                 |     }
    0x00028660 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00028662 movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x00028664 subs.w fp, fp, 1                                  |         
    0x00028668 strh r2, [r0, 0x10]                               |         *((r0 + 0x10)) = r2;
    0x0002866a strd r1, r2, [r0, 0x14]                           |         __asm ("strd r1, r2, [r0, 0x14]");
    0x0002866e add.w r0, r0, 0x28                                |         r0 += 0x28;
    0x00028672 bne 0x28664                                       |         
                                                                 |     } while (fp != fp);
                                                                 | label_25:
    0x00028674 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00028676 movs r1, 0                                        |     r1 = 0;
    0x00028678 mov r0, r3                                        |     r0 = r3;
    0x0002867a blx 0x97d4                                        |     fcn_000097d4 ();
    0x0002867e b 0x285ac                                         |     goto label_0;
                                                                 | label_16:
    0x00028680 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00028682 adds r6, r6, r7                                   |     r6 += r7;
    0x00028684 mov r3, r1                                        |     r3 = r1;
    0x00028686 adc.w r8, r8, r2                                  |     __asm ("adc.w r8, r8, r2");
    0x0002868a b 0x2858a                                         |     goto label_1;
                                                                 | label_15:
    0x0002868c ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x0002868e adds.w r6, sl, r6                                 |     r6 = sl + r6;
    0x00028692 adc.w r8, r8, r5                                  |     __asm ("adc.w r8, r8, r5");
    0x00028696 b 0x28562                                         |     goto label_2;
                                                                 | label_14:
    0x00028698 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0002869a mov.w ip, 0                                       |     
    0x0002869e adds r6, r1, r6                                   |     r6 = r1 + r6;
    0x000286a0 adc r8, r8, 0                                     |     __asm ("adc r8, r8, 0");
    0x000286a4 b 0x28532                                         |     goto label_3;
                                                                 | label_13:
    0x000286a6 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x000286a8 mov r8, sb                                        |     r8 = sb;
    0x000286aa b 0x2850e                                         |     goto label_4;
                                                                 | label_12:
    0x000286ac movs r1, 4                                        |     r1 = 4;
    0x000286ae mov r0, r4                                        |     r0 = r4;
    0x000286b0 bl 0x1d86c                                        |     fcn_0001d86c (r0, r1);
    0x000286b4 mov.w sb, 0xc                                     |     sb = 0xc;
    0x000286b8 ldrd r3, r2, [sp, 0x18]                           |     __asm ("ldrd r3, r2, [var_1ch]");
    0x000286bc movs r5, 8                                        |     r5 = 8;
    0x000286be b 0x2848a                                         |     goto label_5;
                                                                 | label_20:
    0x000286c0 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000286c2 cmp r6, r2                                        |     
    0x000286c4 sbcs.w r3, r8, sb                                 |     __asm ("sbcs.w r3, r8, sb");
                                                                 |     if (r6 < r2) {
    0x000286c8 blt 0x28610                                       |         goto label_6;
                                                                 |     }
    0x000286ca subs r5, r6, r2                                   |     r5 = r6 - r2;
    0x000286cc sbc.w sb, r8, sb                                  |     __asm ("sbc.w sb, r8, sb");
    0x000286d0 mov r6, r5                                        |     r6 = r5;
    0x000286d2 mov r8, sb                                        |     r8 = sb;
    0x000286d4 adds r0, r1, r5                                   |     r0 = r1 + r5;
    0x000286d6 b 0x28610                                         |     goto label_6;
                                                                 | label_23:
    0x000286d8 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000286da cmp r6, r7                                        |     
    0x000286dc sbcs.w r8, r8, r2                                 |     __asm ("sbcs.w r8, r8, r2");
                                                                 |     if (r6 < r7) {
    0x000286e0 blt 0x2862e                                       |         goto label_7;
                                                                 |     }
    0x000286e2 subs r6, r6, r7                                   |     r6 -= r7;
    0x000286e4 adds r3, r1, r6                                   |     r3 = r1 + r6;
    0x000286e6 b 0x2862e                                         |     goto label_7;
                                                                 | label_22:
    0x000286e8 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x000286ea cmp r6, sl                                        |     
    0x000286ec sbcs.w r2, r8, r5                                 |     __asm ("sbcs.w r2, r8, r5");
                                                                 |     if (r6 < sl) {
    0x000286f0 blt 0x28626                                       |         goto label_8;
                                                                 |     }
    0x000286f2 subs.w r6, r6, sl                                 |     r6 -= sl;
    0x000286f6 sbc.w r3, r8, r5                                  |     __asm ("sbc.w r3, r8, r5");
    0x000286fa mov r8, r3                                        |     r8 = r3;
    0x000286fc adds r3, r1, r6                                   |     r3 = r1 + r6;
    0x000286fe b 0x28626                                         |     goto label_8;
                                                                 | label_21:
    0x00028700 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00028702 cmp r6, r2                                        |     
    0x00028704 sbcs r3, r8, 0                                    |     __asm ("sbcs r3, r8, 0");
                                                                 |     if (r6 < r2) {
    0x00028708 blt 0x2861c                                       |         goto label_9;
                                                                 |     }
    0x0002870a subs r3, r6, r2                                   |     r3 = r6 - r2;
    0x0002870c mov r6, r3                                        |     r6 = r3;
    0x0002870e sbc r8, r8, 0                                     |     __asm ("sbc r8, r8, 0");
    0x00028712 add.w ip, r1, r3                                  |     
    0x00028716 b 0x2861c                                         |     goto label_9;
                                                                 | label_19:
    0x00028718 blx 0x9b44                                        |     fcn_00009b44 ();
    0x0002871c strh r2, [r6, 0x38]                               |     *((r6 + 0x38)) = r2;
    0x0002871e movs r7, r0                                       |     r7 = r0;
    0x00028720 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00028722 movs r0, r0                                       |     
    0x00028724 strb r4, [r2, 0xb]                                |     *((r2 + 0xb)) = r4;
    0x00028726 movs r7, r0                                       |     r7 = r0;
    0x00028728 strh r6, [r7, 0x28]                               |     *((r7 + 0x28)) = r6;
    0x0002872a movs r7, r0                                       |     r7 = r0;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2872c */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0002872c ()                              | void fcn_0002872c (int16_t arg1, int16_t arg2) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x0002872c mvnsmi lr, 0xb4000                        |     __asm ("mvnsmi lr, aav.0x000000ff");
    0x00028730 mov r4, r1                                |     r4 = r1;
    0x00028732 ldrb r7, [r1, 7]                          |     r7 = *((r1 + 7));
    0x00028734 sub sp, 0xc                               |     
    0x00028736 mov r6, r0                                |     r6 = r0;
    0x00028738 cmp r7, 1                                 |     
    0x0002873a mov r1, r7                                |     r1 = r7;
    0x0002873c it lo                                     |     
                                                         |     if (r7 >= 1) {
    0x0002873e movlo r1, 1                               |         r1 = 1;
                                                         |     }
    0x00028740 bl 0x1d86c                                |     fcn_0001d86c (r0, r1);
                                                         |     if (r7 == 0) {
    0x00028744 cbz r7, 0x28790                           |         goto label_0;
                                                         |     }
    0x00028746 ldr.w r8, [pc, 0x70]                      |     r8 = *(0x000287b8);
    0x0002874a mov.w sb, 1                               |     sb = 1;
    0x0002874e ldrb r3, [r4, 6]                          |     r3 = *((r4 + 6));
    0x00028750 movs r4, 0                                |     r4 = 0;
    0x00028752 add r8, pc                                |     r8 += pc;
    0x00028754 add.w r8, r8, 0x7b8                       |     r8 += 0x7b8;
    0x00028758 add.w r8, r8, r3, lsl 2                   |     r8 += (r3 << 2);
                                                         |     do {
    0x0002875c ldr r1, [r6]                              |         r1 = *(r6);
    0x0002875e add.w r0, r4, r4, lsl 2                   |         r0 = r4 + (r4 << 2);
    0x00028762 mov.w r2, -1                              |         r2 = -1;
    0x00028766 mov.w r3, -1                              |         r3 = -1;
    0x0002876a ldrb.w r5, [r1, 0x57]                     |         r5 = *((r1 + 0x57));
                                                         |         if (r5 == 0) {
    0x0002876e cbnz r5, 0x28784                          |             
    0x00028770 ldr.w ip, [r6, 0x74]                      |             ip = *((r6 + 0x74));
    0x00028774 ldr.w r1, [r8, r4, lsl 2]                 |             offset_0 = r4 << 2;
                                                         |             r1 = *((r8 + offset_0));
    0x00028778 strd sb, r5, [sp]                         |             __asm ("strd sb, r5, [sp]");
    0x0002877c add.w r0, ip, r0, lsl 3                   |             r0 = ip + (r0 << 3);
    0x00028780 bl 0x252e0                                |             fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
                                                         |         }
    0x00028784 adds r4, 1                                |         r4++;
    0x00028786 cmp r7, r4                                |         
    0x00028788 bne 0x2875c                               |         
                                                         |     } while (r7 != r4);
                                                         |     do {
    0x0002878a add sp, 0xc                               |         
    0x0002878c pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         | label_0:
    0x00028790 ldr r3, [r6]                              |         r3 = *(r6);
    0x00028792 ldr r1, [r4]                              |         r1 = *(r4);
    0x00028794 ldrb.w r3, [r3, 0x57]                     |         r3 = *((r3 + 0x57));
    0x00028798 cmp r3, 0                                 |         
    0x0002879a bne 0x2878a                               |         
                                                         |     } while (r3 != 0);
    0x0002879c movs r2, 1                                |     r2 = 1;
    0x0002879e ldr r0, [r6, 0x74]                        |     r0 = *((r6 + 0x74));
    0x000287a0 strd r2, r3, [sp]                         |     __asm ("strd r2, r3, [sp]");
    0x000287a4 mov.w r2, -1                              |     r2 = -1;
    0x000287a8 mov.w r3, -1                              |     r3 = -1;
    0x000287ac bl 0x252e0                                |     fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
    0x000287b0 add sp, 0xc                               |     
    0x000287b2 pop.w {r4, r5, r6, r7, r8, sb, pc}        |     
                                                         | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x28bac */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00028bac ()                              | void fcn_00028bac (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x00028bac push.w {r4, r5, r6, r7, r8, lr}           |     
    0x00028bb0 mov r5, r0                                |     r5 = r0;
    0x00028bb2 ldr.w r8, [r0]                            |     r8 = *(r0);
    0x00028bb6 mov r6, r2                                |     r6 = r2;
                                                         |     if (r1 == 0) {
    0x00028bb8 cbz r1, 0x28c06                           |         goto label_2;
                                                         |     }
    0x00028bba ldr r2, [r1]                              |     r2 = *(r1);
    0x00028bbc movs r3, 0                                |     r3 = 0;
    0x00028bbe mov r0, r8                                |     r0 = r8;
    0x00028bc0 mov r7, r1                                |     r7 = r1;
    0x00028bc2 adds r2, 2                                |     r2 += 2;
    0x00028bc4 lsls r2, r2, 3                            |     r2 <<= 3;
    0x00028bc6 bl 0x1ac9c                                |     r0 = fcn_0001ac9c (r0, r1, r2);
    0x00028bca mov r4, r0                                |     r4 = r0;
    0x00028bcc cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00028bce beq 0x28c46                               |         goto label_3;
                                                         |     }
    0x00028bd0 ldr r7, [r0]                              |     r7 = *(r0);
    0x00028bd2 adds r7, 1                                |     r7++;
    0x00028bd4 mov r3, r7                                |     r3 = r7;
                                                         |     do {
    0x00028bd6 str r3, [r4]                              |         *(r4) = r3;
    0x00028bd8 mov r0, r8                                |         r0 = r8;
    0x00028bda mov r1, r6                                |         r1 = r6;
    0x00028bdc bl 0x1e9ec                                |         fcn_0001e9ec (r0, r1);
    0x00028be0 str.w r0, [r4, r7, lsl 3]                 |         __asm ("str.w r0, [r4, r7, lsl 3]");
    0x00028be4 ldrb.w r3, [r5, 0xd0]                     |         r3 = *((r5 + 0xd0));
    0x00028be8 cmp r3, 3                                 |         
    0x00028bea it ne                                     |         
                                                         |         if (r3 != 3) {
    0x00028bec cmpne r3, 1                               |             __asm ("cmpne r3, 1");
                                                         |         }
    0x00028bee ite hi                                    |         
                                                         |         if (r3 <= 3) {
    0x00028bf0 movhi r3, 1                               |             r3 = 1;
                                                         |         }
                                                         |         if (r3 > 3) {
    0x00028bf2 movls r3, 0                               |             r3 = 0;
                                                         |         }
    0x00028bf4 cmp r0, 0                                 |         
    0x00028bf6 ite eq                                    |         
                                                         |         if (r0 != 0) {
    0x00028bf8 moveq r3, 0                               |             r3 = 0;
                                                         |         }
                                                         |         if (r0 == 0) {
    0x00028bfa andne r3, r3, 1                           |             r3 &= 1;
                                                         |         }
                                                         |         if (r3 != 0) {
    0x00028bfe cbnz r3, 0x28c36                          |             goto label_4;
                                                         |         }
                                                         | label_1:
    0x00028c00 mov r0, r4                                |         r0 = r4;
    0x00028c02 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_2:
    0x00028c06 cmp.w r8, 0                               |         
                                                         |         if (r8 == 0) {
    0x00028c0a beq 0x28c2a                               |             goto label_5;
                                                         |         }
    0x00028c0c movs r2, 0x10                             |         r2 = 0x10;
    0x00028c0e movs r3, 0                                |         r3 = 0;
    0x00028c10 mov r0, r8                                |         r0 = r8;
    0x00028c12 bl 0x1d740                                |         r0 = fcn_0001d740 (r0, r1);
    0x00028c16 mov r4, r0                                |         r4 = r0;
                                                         |         if (r4 == 0) {
                                                         | label_0:
    0x00028c18 cbz r4, 0x28c4e                           |             goto label_6;
                                                         |         }
    0x00028c1a movs r3, 0                                |         r3 = 0;
    0x00028c1c str r3, [r4]                              |         *(r4) = r3;
    0x00028c1e str r3, [r4, 4]                           |         *((r4 + 4)) = r3;
    0x00028c20 str r3, [r4, 8]                           |         *((r4 + 8)) = r3;
    0x00028c22 str r3, [r4, 0xc]                         |         *((r4 + 0xc)) = r3;
    0x00028c24 movs r3, 1                                |         r3 = 1;
    0x00028c26 mov r7, r3                                |         r7 = r3;
    0x00028c28 b 0x28bd6                                 |         
                                                         |     } while (1);
                                                         | label_5:
    0x00028c2a movs r0, 0x10                             |     r0 = 0x10;
    0x00028c2c movs r1, 0                                |     r1 = 0;
    0x00028c2e bl 0x117c8                                |     r0 = fcn_000117c8 (r0);
    0x00028c32 mov r4, r0                                |     r4 = r0;
    0x00028c34 b 0x28c18                                 |     goto label_0;
                                                         | label_4:
    0x00028c36 mov r1, r0                                |     r1 = r0;
    0x00028c38 mov r2, r6                                |     r2 = r6;
    0x00028c3a mov r0, r5                                |     r0 = r5;
    0x00028c3c bl 0x1ee7c                                |     fcn_0001ee7c (r0, r1, r2);
    0x00028c40 mov r0, r4                                |     r0 = r4;
    0x00028c42 pop.w {r4, r5, r6, r7, r8, pc}            |     
                                                         | label_3:
    0x00028c46 mov r1, r7                                |     r1 = r7;
    0x00028c48 mov r0, r8                                |     r0 = r8;
    0x00028c4a bl 0x15350                                |     fcn_00015350 (r0, r1);
                                                         | label_6:
    0x00028c4e movs r4, 0                                |     r4 = 0;
    0x00028c50 b 0x28c00                                 |     goto label_1;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x28c54 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00028c54 ()                                      | void fcn_00028c54 (int16_t arg1, int16_t arg2, uint32_t arg3) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00028c54 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00028c58 mov r6, r0                                        |     r6 = r0;
    0x00028c5a ldr.w sl, [r0]                                    |     sl = *(r0);
    0x00028c5e sub sp, 0x1c                                      |     
    0x00028c60 ldr r0, [pc, 0x218]                               |     
    0x00028c62 ldr r3, [pc, 0x21c]                               |     r3 = *(0x28e82);
    0x00028c64 add r0, pc                                        |     r0 = 0x51ae4;
    0x00028c66 ldr r3, [r0, r3]                                  |     
    0x00028c68 ldr r3, [r3]                                      |     r3 = *(0x51ae4);
    0x00028c6a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00028c6c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r1 == 0) {
    0x00028c70 cbz r1, 0x28cb2                                   |         goto label_5;
                                                                 |     }
    0x00028c72 ldr.w sb, [r1, 8]                                 |     sb = *((r1 + 8));
    0x00028c76 mov r4, r1                                        |     r4 = r1;
    0x00028c78 ldrb.w r3, [sb, 1]                                |     r3 = *((sb + 1));
                                                                 |     if (r3 != 0) {
    0x00028c7c cbnz r3, 0x28cce                                  |         goto label_11;
                                                                 |     }
    0x00028c7e ldrh.w r5, [r6, 0xcc]                             |     r5 = *((r6 + 0xcc));
    0x00028c82 ldr.w r2, [sl, 0x9c]                              |     r2 = *((sl + 0x9c));
    0x00028c86 adds r5, 1                                        |     r5++;
    0x00028c88 sxth r5, r5                                       |     __asm ("sxth r5, r5");
    0x00028c8a strh.w r5, [r6, 0xcc]                             |     *((r6 + 0xcc)) = r5;
                                                                 | label_0:
    0x00028c8e cmp r5, r2                                        |     
    0x00028c90 strh r5, [r4, 0x20]                               |     *((r4 + 0x20)) = r5;
                                                                 |     if (r5 <= r2) {
    0x00028c92 ble 0x28cb2                                       |         goto label_5;
                                                                 |     }
    0x00028c94 ldr r1, [pc, 0x1ec]                               |     
    0x00028c96 mov r0, r6                                        |     r0 = r6;
    0x00028c98 add r1, pc                                        |     r1 = 0x51b20;
    0x00028c9a bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00028c9e ldr r2, [r6]                                      |     r2 = *(r6);
                                                                 |     do {
    0x00028ca0 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00028ca2 lsls r3, r3, 0x1e                                 |         r3 <<= 0x1e;
                                                                 |         if (r3 == r3) {
    0x00028ca4 bne 0x28cac                                       |             
    0x00028ca6 ldr r3, [r4, 0x24]                                |             r3 = *((r4 + 0x24));
    0x00028ca8 cmp r3, 0                                         |             
                                                                 |             if (r3 > 0) {
    0x00028caa bgt 0x28d60                                       |                 goto label_12;
                                                                 |             }
                                                                 |         }
    0x00028cac ldr r4, [r4, 0xc]                                 |         r4 = *((r4 + 0xc));
    0x00028cae cmp r4, 0                                         |         
    0x00028cb0 bne 0x28ca0                                       |         
                                                                 |     } while (r4 != 0);
                                                                 |     do {
                                                                 | label_5:
    0x00028cb2 ldr r2, [pc, 0x1d4]                               |         
    0x00028cb4 ldr r3, [pc, 0x1c8]                               |         r3 = *(0x28e80);
    0x00028cb6 add r2, pc                                        |         r2 = 0x51b44;
    0x00028cb8 ldr r3, [r2, r3]                                  |         r3 = *(0x51b44);
    0x00028cba ldr r2, [r3]                                      |         r2 = *(0x51b44);
    0x00028cbc ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00028cbe eors r2, r3                                       |         r2 ^= r3;
    0x00028cc0 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00028cc4 bne.w 0x28e76                                     |             goto label_13;
                                                                 |         }
    0x00028cc8 add sp, 0x1c                                      |         
    0x00028cca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_11:
    0x00028cce ldrb.w r1, [sb]                                   |         r1 = *(sb);
    0x00028cd2 mov r7, r2                                        |         r7 = r2;
    0x00028cd4 cmp r1, 0x3f                                      |         
                                                                 |         if (r1 != 0x3f) {
    0x00028cd6 bne 0x28d64                                       |             goto label_14;
                                                                 |         }
    0x00028cd8 cmp r2, 2                                         |         
                                                                 |         if (r2 != 2) {
    0x00028cda bne 0x28d7e                                       |             goto label_15;
                                                                 |         }
    0x00028cdc subs r3, 0x30                                     |         r3 -= 0x30;
    0x00028cde asrs r0, r3, 0x1f                                 |         r0 = r3 >> 0x1f;
    0x00028ce0 strd r3, r0, [sp, 8]                              |         __asm ("strd r3, r0, [var_8h]");
                                                                 | label_2:
    0x00028ce4 cmp r3, 1                                         |         
    0x00028ce6 ldr.w r2, [sl, 0x9c]                              |         r2 = *((sl + 0x9c));
    0x00028cea sbcs r1, r0, 0                                    |         __asm ("sbcs r1, r0, 0");
                                                                 |         if (r3 < 1) {
    0x00028cee blt 0x28d9e                                       |             goto label_16;
                                                                 |         }
    0x00028cf0 asrs r1, r2, 0x1f                                 |         r1 = r2 >> 0x1f;
    0x00028cf2 cmp r2, r3                                        |         
    0x00028cf4 sbcs r1, r0                                       |         __asm ("sbcs r1, r0");
                                                                 |         if (r2 < r3) {
    0x00028cf6 blt 0x28d9e                                       |             goto label_16;
                                                                 |         }
    0x00028cf8 sxth r5, r3                                       |         __asm ("sxth r5, r3");
    0x00028cfa ldrsh.w r3, [r6, 0xcc]                            |         r3 = *((r6 + 0xcc));
    0x00028cfe ldr.w r8, [r6, 0xe0]                              |         r8 = *((r6 + 0xe0));
    0x00028d02 cmp r3, r5                                        |         
                                                                 |         if (r3 >= r5) {
    0x00028d04 bge.w 0x28e38                                     |             goto label_17;
                                                                 |         }
                                                                 | label_1:
    0x00028d08 adds r3, r7, 3                                    |         r3 = r7 + 3;
    0x00028d0a strh.w r5, [r6, 0xcc]                             |         *((r6 + 0xcc)) = r5;
    0x00028d0e ands.w r3, r3, r7, asr 32                         |         r3 &= (r7 >> 32);
    0x00028d12 it lo                                             |         
                                                                 |         if (r3 >= r3) {
    0x00028d14 movlo r3, r7                                      |             r3 = r7;
                                                                 |         }
    0x00028d16 asrs r3, r3, 2                                    |         r3 >>= 2;
    0x00028d18 add.w fp, r3, 3                                   |         
    0x00028d1c cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x00028d20 beq 0x28e0a                                       |             goto label_18;
                                                                 |         }
                                                                 | label_10:
    0x00028d22 ldrd r1, r3, [r8]                                 |         __asm ("ldrd r1, r3, [r8]");
    0x00028d26 add.w r2, r3, fp                                  |         r2 = r3 + fp;
    0x00028d2a cmp r2, r1                                        |         
                                                                 |         if (r2 > r1) {
    0x00028d2c bgt 0x28dbc                                       |             goto label_19;
                                                                 |         }
    0x00028d2e lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00028d30 adds r0, r3, 4                                    |         r0 = r3 + 4;
    0x00028d32 add.w r1, r3, 8                                   |         r1 = r3 + 8;
                                                                 | label_7:
    0x00028d36 str.w r5, [r8, r3]                                |         __asm ("str.w r5, [r8, r3]");
    0x00028d3a add.w r3, r8, r1                                  |         r3 = r8 + r1;
    0x00028d3e str.w fp, [r8, r0]                                |         __asm ("str.w fp, [r8, r0]");
    0x00028d42 mov r1, sb                                        |         r1 = sb;
    0x00028d44 str.w r2, [r8, 4]                                 |         __asm ("str.w r2, [r8, 4]");
    0x00028d48 mov r0, r3                                        |         r0 = r3;
    0x00028d4a mov r2, r7                                        |         r2 = r7;
    0x00028d4c blx 0x9e2c                                        |         fcn_00009e2c ();
    0x00028d50 movs r2, 0                                        |         r2 = 0;
    0x00028d52 strb r2, [r0, r7]                                 |         *((r0 + r7)) = r2;
                                                                 | label_6:
    0x00028d54 ldr.w r2, [sl, 0x9c]                              |         r2 = *((sl + 0x9c));
    0x00028d58 str.w r8, [r6, 0xe0]                              |         __asm ("str.w r8, [r6, 0xe0]");
    0x00028d5c b 0x28c8e                                         |         goto label_0;
                                                                 | label_3:
    0x00028d5e ldr r2, [r6]                                      |         r2 = *(r6);
                                                                 | label_12:
    0x00028d60 str r3, [r2, 0x44]                                |         *((r2 + 0x44)) = r3;
    0x00028d62 b 0x28cb2                                         |         
                                                                 |     } while (1);
                                                                 | label_14:
    0x00028d64 ldr.w r8, [r6, 0xe0]                              |     r8 = *((r6 + 0xe0));
    0x00028d68 mov r1, sb                                        |     r1 = sb;
    0x00028d6a mov r0, r8                                        |     r0 = r8;
    0x00028d6c bl 0xe2a0                                         |     r0 = fcn_0000e2a0 (r0, r1, r2);
    0x00028d70 sxth r5, r0                                       |     __asm ("sxth r5, r0");
                                                                 |     if (r5 == 0) {
    0x00028d72 cbnz r5, 0x28d94                                  |         
    0x00028d74 ldrh.w r5, [r6, 0xcc]                             |         r5 = *((r6 + 0xcc));
    0x00028d78 adds r5, 1                                        |         r5++;
    0x00028d7a sxth r5, r5                                       |         __asm ("sxth r5, r5");
    0x00028d7c b 0x28d08                                         |         goto label_1;
                                                                 | label_15:
    0x00028d7e movs r3, 1                                        |         r3 = 1;
    0x00028d80 subs r2, 1                                        |         r2--;
    0x00028d82 add r1, sp, 8                                     |         r1 += var_8h;
    0x00028d84 add.w r0, sb, r3                                  |         r0 = sb + r3;
    0x00028d88 bl 0xab58                                         |         r0 = fcn_0000ab58 (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x00028d8c cbnz r0, 0x28d9a                                  |             goto label_20;
                                                                 |         }
    0x00028d8e ldrd r3, r0, [sp, 8]                              |         __asm ("ldrd r3, r0, [var_8h]");
    0x00028d92 b 0x28ce4                                         |         goto label_2;
                                                                 |     }
    0x00028d94 ldr.w r2, [sl, 0x9c]                              |     r2 = *((sl + 0x9c));
    0x00028d98 b 0x28c8e                                         |     goto label_0;
                                                                 | label_20:
    0x00028d9a ldr.w r2, [sl, 0x9c]                              |     r2 = *((sl + 0x9c));
                                                                 | label_16:
    0x00028d9e ldr r1, [pc, 0xec]                                |     
    0x00028da0 mov r0, r6                                        |     r0 = r6;
    0x00028da2 add r1, pc                                        |     r1 = 0x51c34;
    0x00028da4 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_4:
    0x00028da8 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00028daa lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 != r3) {
    0x00028dac bne 0x28db4                                       |         goto label_21;
                                                                 |     }
    0x00028dae ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00028db0 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00028db2 bgt 0x28d5e                                       |         goto label_3;
                                                                 |     }
                                                                 | label_21:
    0x00028db4 ldr r4, [r4, 0xc]                                 |     r4 = *((r4 + 0xc));
    0x00028db6 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00028db8 bne 0x28da8                                       |         goto label_4;
                                                                 |     }
    0x00028dba b 0x28cb2                                         |     goto label_5;
                                                                 | label_19:
    0x00028dbc asr.w r3, fp, 0x1f                                |     r3 = fp >> 0x1f;
    0x00028dc0 movs r2, 2                                        |     r2 = 2;
    0x00028dc2 mov r0, fp                                        |     r0 = fp;
    0x00028dc4 smlal r0, r3, r1, r2                              |     __asm ("smlal r0, r3, r1, r2");
    0x00028dc8 mov r1, r8                                        |     r1 = r8;
    0x00028dca lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00028dcc lsls r2, r0, 2                                    |     r2 = r0 << 2;
    0x00028dce str r0, [sp, 4]                                   |     var_4h = r0;
    0x00028dd0 orr.w r3, r3, r0, lsr 30                          |     r3 |= (r0 >> 30);
    0x00028dd4 mov r0, sl                                        |     r0 = sl;
    0x00028dd6 bl 0x1ac9c                                        |     r0 = fcn_0001ac9c (r0, r1, r2);
    0x00028dda cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00028ddc beq 0x28d54                                       |         goto label_6;
                                                                 |     }
    0x00028dde ldr.w ip, [r0, 4]                                 |     ip = *((r0 + 4));
    0x00028de2 mov r8, r0                                        |     r8 = r0;
    0x00028de4 lsl.w r3, ip, 2                                   |     r3 = ip << 2;
    0x00028de8 adds r0, r3, 4                                    |     r0 = r3 + 4;
    0x00028dea add.w r1, r3, 8                                   |     r1 = r3 + 8;
                                                                 | label_8:
    0x00028dee ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x00028df0 str.w r2, [r8]                                    |     __asm ("str.w r2, [r8]");
    0x00028df4 add.w r2, ip, fp                                  |     r2 = ip + fp;
    0x00028df8 b 0x28d36                                         |     goto label_7;
                                                                 | label_9:
    0x00028dfa adds r3, r7, 3                                    |     r3 = r7 + 3;
    0x00028dfc ands.w r3, r3, r7, asr 32                         |     r3 &= (r7 >> 32);
    0x00028e00 it lo                                             |     
                                                                 |     if (r3 >= r3) {
    0x00028e02 movlo r3, r7                                      |         r3 = r7;
                                                                 |     }
    0x00028e04 asrs r3, r3, 2                                    |     r3 >>= 2;
    0x00028e06 add.w fp, r3, 3                                   |     
                                                                 | label_18:
    0x00028e0a add.w r2, r3, 0xd                                 |     r2 = r3 + 0xd;
    0x00028e0e movs r1, 0                                        |     r1 = 0;
    0x00028e10 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x00028e12 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00028e14 mov r0, sl                                        |     r0 = sl;
    0x00028e16 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00028e18 orr.w r3, r3, r2, lsr 30                          |     r3 |= (r2 >> 30);
    0x00028e1c lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00028e1e bl 0x1ac9c                                        |     r0 = fcn_0001ac9c (r0, r1, r2);
    0x00028e22 mov r8, r0                                        |     r8 = r0;
    0x00028e24 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00028e26 beq 0x28d54                                       |         goto label_6;
                                                                 |     }
    0x00028e28 movs r2, 2                                        |     r2 = 2;
    0x00028e2a movs r1, 0x10                                     |     r1 = 0x10;
    0x00028e2c mov ip, r2                                        |     
    0x00028e2e movs r0, 0xc                                      |     r0 = 0xc;
    0x00028e30 movs r3, 8                                        |     r3 = 8;
    0x00028e32 str.w r2, [r8, 4]                                 |     __asm ("str.w r2, [r8, 4]");
    0x00028e36 b 0x28dee                                         |     goto label_8;
                                                                 | label_17:
    0x00028e38 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00028e3c beq 0x28dfa                                       |         goto label_9;
                                                                 |     }
    0x00028e3e ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
    0x00028e42 movs r3, 2                                        |     r3 = 2;
    0x00028e44 mov ip, r2                                        |     
    0x00028e46 b 0x28e52                                         |     
                                                                 |     while (r2 != r5) {
    0x00028e48 add r1, r8                                        |         r1 += r8;
    0x00028e4a ldr r1, [r1, 4]                                   |         r1 = *((r1 + 4));
    0x00028e4c add r3, r1                                        |         r3 += r1;
    0x00028e4e cmp r0, r3                                        |         
                                                                 |         if (r0 <= r3) {
    0x00028e50 ble 0x28e60                                       |             goto label_22;
                                                                 |         }
    0x00028e52 ldr.w r2, [r8, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r2 = *((r8 + offset_0));
    0x00028e56 lsls r1, r3, 2                                    |         r1 = r3 << 2;
    0x00028e58 cmp r2, r5                                        |         
    0x00028e5a bne 0x28e48                                       |         
                                                                 |     }
    0x00028e5c mov r2, ip                                        |     r2 = ip;
    0x00028e5e b 0x28c8e                                         |     goto label_0;
                                                                 | label_22:
    0x00028e60 add.w fp, r7, 3                                   |     
    0x00028e64 ands.w fp, fp, r7, asr 32                         |     
    0x00028e68 it lo                                             |     
                                                                 |     if (fp >= fp) {
    0x00028e6a movlo fp, r7                                      |         
                                                                 |     }
    0x00028e6c asr.w fp, fp, 2                                   |     
    0x00028e70 add.w fp, fp, 3                                   |     
    0x00028e74 b 0x28d22                                         |     goto label_10;
                                                                 | label_13:
    0x00028e76 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00028e7a nop                                               |     
    0x00028e7c ldrb r4, [r3, 0x1a]                               |     r4 = *((r3 + 0x1a));
    0x00028e7e movs r7, r0                                       |     r7 = r0;
    0x00028e80 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00028e82 movs r0, r0                                       |     
    0x00028e84 ldr r6, [pc, 0x70]                                |     r6 = *(0x28ef8);
    0x00028e86 movs r6, r0                                       |     r6 = r0;
    0x00028e88 ldrb r2, [r1, 0x19]                               |     r2 = *((r1 + 0x19));
    0x00028e8a movs r7, r0                                       |     r7 = r0;
    0x00028e8c ldr r4, [pc, 0x398]                               |     r4 = *(0x29228);
    0x00028e8e movs r6, r0                                       |     r6 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x28f5c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00028f5c ()                                      | void fcn_00028f5c (int16_t arg_80h, int16_t arg_58h, int16_t arg1, int16_t arg4) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int32_t var_14h_2;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r3 = arg4;
    0x00028f5c push {r1, r7, ip, sp, pc}                         |     
    0x00028f60 ldr r7, [pc, 0x3c0]                               |     r7 = *(0x29324);
    0x00028f62 sub sp, 0x2c                                      |     
    0x00028f64 ldr.w r7, [r0, 0xec]                              |     r7 = *(arg_58hxec);
    0x00028f68 add.w r8, sp, 0x20                                |     r8 += var_20h;
    0x00028f6c ldr.w fp, [r0]                                    |     fp = *(r0);
    0x00028f70 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00028f72 stm.w r8, {r1, r2}                                |     *(r8) = r1;
                                                                 |     *((r8 + 4)) = r2;
    0x00028f76 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00028f78 beq.w 0x2910e                                     |         goto label_6;
                                                                 |     }
    0x00028f7c ldrsh.w r2, [r7, 0x22]                            |     r2 = *((r7 + 0x22));
    0x00028f80 ldr.w r3, [fp, 0x80]                              |     r3 = *(arg_80h);
    0x00028f84 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00028f86 bge.w 0x2925a                                     |         goto label_11;
                                                                 |     }
    0x00028f8a ldrb.w r3, [r0, 0xd0]                             |     r3 = *(arg_58hxd0);
    0x00028f8e mov sb, r0                                        |     sb = r0;
    0x00028f90 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00028f92 bls.w 0x29234                                     |         goto label_12;
                                                                 |     }
    0x00028f96 ldr r5, [sp, 0x58]                                |     r5 = *(arg_58h);
    0x00028f98 cmp r5, 0xf                                       |     
                                                                 |     if (r5 > 0xf) {
    0x00028f9a bhi.w 0x29118                                     |         goto label_7;
                                                                 |     }
                                                                 | label_1:
    0x00028f9e cmp r5, 2                                         |     
                                                                 |     if (r5 > 2) {
    0x00028fa0 bhi.w 0x291ba                                     |         goto label_13;
                                                                 |     }
                                                                 | label_2:
    0x00028fa4 subs r1, r5, 0                                    |     r1 = r5 - 0;
    0x00028fa6 mov.w r3, 0x41                                    |     r3 = 0x41;
    0x00028faa mov r6, r5                                        |     r6 = r5;
    0x00028fac it ne                                             |     
                                                                 |     if (r1 == r5) {
    0x00028fae movne r1, 1                                       |         r1 = 1;
                                                                 |     }
    0x00028fb0 movs r0, 1                                        |     r0 = 1;
    0x00028fb2 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00028fb4 movs r3, 0                                        |     r3 = 0;
    0x00028fb6 strd r0, r3, [sp, 8]                              |     __asm ("strd r0, r3, [var_ch]");
                                                                 | label_4:
    0x00028fba ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00028fbc movs r3, 0                                        |     r3 = 0;
    0x00028fbe mov r0, fp                                        |     r0 = fp;
    0x00028fc0 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00028fc2 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00028fc6 adds r2, r2, r6                                   |     r2 += r6;
    0x00028fc8 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00028fcc adds r2, r2, r1                                   |     r2 += r1;
    0x00028fce adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00028fd2 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00028fd6 mov r6, r0                                        |     r6 = r0;
    0x00028fd8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00028fda beq.w 0x2910e                                     |         goto label_6;
                                                                 |     }
    0x00028fde ldrb.w r3, [sb, 0xd0]                             |     r3 = *((sb + 0xd0));
    0x00028fe2 cmp r3, 3                                         |     
    0x00028fe4 it ne                                             |     
                                                                 |     if (r3 != 3) {
    0x00028fe6 cmpne r3, 1                                       |         __asm ("cmpne r3, 1");
                                                                 |     }
                                                                 |     if (r3 > 3) {
    0x00028fe8 bhi.w 0x29244                                     |         goto label_14;
                                                                 |     }
                                                                 | label_8:
    0x00028fec ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00028fee mov r2, r4                                        |     r2 = r4;
    0x00028ff0 mov r0, r6                                        |     r0 = r6;
    0x00028ff2 mov.w r8, 0                                       |     r8 = 0;
    0x00028ff6 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00028ffa mov r0, r6                                        |     r0 = r6;
    0x00028ffc strb.w r8, [r6, r4]                               |     *((r6 + r4)) = r8;
    0x00029000 bl 0xa4e0                                         |     fcn_0000a4e0 (r0);
    0x00029004 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x00029006 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00029008 beq.w 0x29250                                     |         goto label_15;
                                                                 |     }
    0x0002900c ldr r1, [pc, 0x2c0]                               |     
    0x0002900e mov r4, r8                                        |     r4 = r8;
    0x00029010 mov r2, r6                                        |     r2 = r6;
    0x00029012 add r1, pc                                        |     r1 = 0x522e6;
                                                                 |     do {
    0x00029014 add r3, r1                                        |         r3 += r1;
    0x00029016 ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x0002901a add r4, r3                                        |         r4 += r3;
    0x0002901c ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x00029020 uxtb r4, r4                                       |         r4 = (int8_t) r4;
    0x00029022 cmp r3, 0                                         |         
    0x00029024 bne 0x29014                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_9:
    0x00029026 ldrsh.w r2, [r7, 0x22]                            |     r2 = *((r7 + 0x22));
    0x0002902a ldr.w sl, [r7, 4]                                 |     sl = *((r7 + 4));
    0x0002902e cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00029030 ble 0x29090                                       |         goto label_16;
                                                                 |     }
    0x00029032 ldr.w ip, [pc, 0x2a0]                             |     ip = *(0x000292d4);
    0x00029036 add.w r8, r2, r2, lsl 1                           |     r8 = r2 + (r2 << 1);
    0x0002903a movs r3, 0                                        |     r3 = 0;
    0x0002903c strd r5, r7, [sp, 0x14]                           |     __asm ("strd r5, r7, [var_14h]");
    0x00029040 add.w lr, sl, 7                                   |     lr = sl + 7;
    0x00029044 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00029046 add ip, pc                                        |     
    0x00029048 str r4, [sp, 4]                                   |     var_4h = r4;
    0x0002904a b 0x29052                                         |     
                                                                 |     while (r1 != r2) {
                                                                 | label_0:
    0x0002904c adds r3, 3                                        |         r3 += 3;
    0x0002904e cmp r3, r8                                        |         
                                                                 |         if (r3 == r8) {
    0x00029050 beq 0x29088                                       |             goto label_17;
                                                                 |         }
    0x00029052 ldrb.w r1, [lr, r3, lsl 2]                        |         offset_0 = r3 << 2;
                                                                 |         r1 = *((lr + offset_0));
    0x00029056 ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x00029058 cmp r1, r2                                        |         
    0x0002905a bne 0x2904c                                       |         
                                                                 |     }
    0x0002905c ldr.w r0, [sl, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r0 = *((sl + offset_1));
    0x00029060 subs r5, r6, 1                                    |     r5 = r6 - 1;
    0x00029062 subs r0, 1                                        |     r0--;
                                                                 |     do {
                                                                 | label_5:
    0x00029064 ldrb r2, [r5, 1]!                                 |         r2 = *((r5 += 1));
    0x00029068 ldrb r1, [r0, 1]!                                 |         r1 = *((r0 += 1));
    0x0002906c add.w r7, ip, r2                                  |         r7 = ip + r2;
    0x00029070 cmp r2, r1                                        |         
    0x00029072 add.w r4, ip, r1                                  |         r4 = ip + r1;
                                                                 |         if (r2 == r1) {
    0x00029076 beq.w 0x29218                                     |             goto label_18;
                                                                 |         }
    0x0002907a ldrb.w r2, [r7, 0x140]                            |         r2 = *((r7 + 0x140));
    0x0002907e ldrb.w r1, [r4, 0x140]                            |         r1 = *((r4 + 0x140));
    0x00029082 cmp r2, r1                                        |         
    0x00029084 beq 0x29064                                       |         
                                                                 |     } while (r2 == r1);
    0x00029086 b 0x2904c                                         |     goto label_0;
                                                                 | label_17:
    0x00029088 ldrd r5, r7, [sp, 0x14]                           |     __asm ("ldrd r5, r7, [var_14h]");
    0x0002908c ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0002908e ldr r4, [sp, 4]                                   |     r4 = var_4h;
                                                                 | label_16:
    0x00029090 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x00029092 adds r2, 1                                        |     r2++;
    0x00029094 mov r1, sl                                        |     r1 = sl;
    0x00029096 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x0002909a adds r0, r2, r2                                   |     r0 = r2 + r2;
    0x0002909c adc.w ip, r3, r3                                  |     __asm ("adc.w ip, r3, r3");
    0x000290a0 adds r2, r0, r2                                   |     r2 = r0 + r2;
    0x000290a2 adc.w r3, r3, ip                                  |     __asm ("adc.w r3, r3, ip");
    0x000290a6 mov r0, fp                                        |     r0 = fp;
    0x000290a8 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000290aa orr.w r3, r3, r2, lsr 30                          |     r3 |= (r2 >> 30);
    0x000290ae lsls r2, r2, 2                                    |     r2 <<= 2;
    0x000290b0 bl 0x1ac9c                                        |     r0 = fcn_0001ac9c (r0, r1, r2);
    0x000290b4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000290b6 beq.w 0x292a8                                     |         goto label_19;
                                                                 |     }
    0x000290ba ldrsh.w r3, [r7, 0x22]                            |     r3 = *((r7 + 0x22));
    0x000290be mov.w sl, 0                                       |     sl = 0;
    0x000290c2 str r0, [r7, 4]                                   |     *((r7 + 4)) = r0;
    0x000290c4 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x000290c8 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000290ca add.w r8, r0, r3                                  |     r8 = r0 + r3;
    0x000290ce str.w sl, [r8, 4]                                 |     __asm ("str.w sl, [r8, 4]");
    0x000290d2 str.w sl, [r8, 8]                                 |     __asm ("str.w sl, [r8, 8]");
    0x000290d6 str r6, [r0, r3]                                  |     *((r0 + r3)) = r6;
    0x000290d8 strb.w r4, [r8, 7]                                |     *((r8 + 7)) = r4;
    0x000290dc cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000290de bne.w 0x2926e                                     |         goto label_20;
                                                                 |     }
    0x000290e2 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000290e4 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000290e6 strb.w r3, [r8, 5]                                |     *((r8 + 5)) = r3;
    0x000290ea ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000290ec strb.w r3, [r8, 6]                                |     *((r8 + 6)) = r3;
    0x000290f0 ldrb.w r3, [r8, 4]                                |     r3 = *((r8 + 4));
    0x000290f4 bfi r3, r2, 4, 4                                  |     value_2 = BIT_MASK (4, 4);
                                                                 |     value_3 = r2 & value_2;
                                                                 |     value_2 = ~value_2;
                                                                 |     r3 &= value_2;
                                                                 |     r3 |= value_3;
    0x000290f8 strb.w r3, [r8, 4]                                |     *((r8 + 4)) = r3;
                                                                 | label_10:
    0x000290fc ldrh r2, [r7, 0x22]                               |     r2 = *((r7 + 0x22));
    0x000290fe movs r1, 0                                        |     r1 = 0;
    0x00029100 ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x00029102 adds r2, 1                                        |     r2++;
    0x00029104 adds r3, 1                                        |     r3++;
    0x00029106 strh r2, [r7, 0x22]                               |     *((r7 + 0x22)) = r2;
    0x00029108 strh r3, [r7, 0x24]                               |     *((r7 + 0x24)) = r3;
    0x0002910a str.w r1, [sb, 0x4c]                              |     __asm ("str.w r1, [sb, 0x4c]");
                                                                 | label_6:
    0x0002910e add sp, 0x2c                                      |     
    0x00029110 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00029114 add sp, 8                                         |     
    0x00029116 bx lr                                             |     return;
                                                                 | label_7:
    0x00029118 ldr.w sl, [sp, 0x54]                              |     sl = var_54h;
    0x0002911c subs r5, 6                                        |     r5 -= 6;
    0x0002911e ldr r1, [pc, 0x1b8]                               |     
    0x00029120 movs r2, 6                                        |     r2 = 6;
    0x00029122 add.w r6, sl, r5                                  |     r6 = sl + r5;
    0x00029126 add r1, pc                                        |     r1 = 0x52404;
    0x00029128 mov r0, r6                                        |     r0 = r6;
    0x0002912a blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x0002912e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00029130 bne 0x291ba                                       |         goto label_13;
                                                                 |     }
    0x00029132 ldr.w ip, [pc, 0x1a8]                             |     ip = *(0x000292dc);
    0x00029136 mov r2, r6                                        |     r2 = r6;
    0x00029138 str r5, [sp, 0x58]                                |     *(arg_58h) = r5;
    0x0002913a add ip, pc                                        |     
    0x0002913c b 0x29148                                         |     
                                                                 |     while (r3 != r3) {
    0x0002913e mov r4, r5                                        |         r4 = r5;
    0x00029140 movs r0, 1                                        |         r0 = 1;
    0x00029142 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00029144 beq.w 0x29254                                     |             goto label_21;
                                                                 |         }
    0x00029148 ldrb r3, [r2, -0x1]!                              |         r3 = *((r2 -= 0x1));
    0x0002914c mov r1, r5                                        |         r1 = r5;
    0x0002914e subs r5, 1                                        |         r5--;
    0x00029150 add r3, ip                                        |         r3 += ip;
    0x00029152 ldrb.w r3, [r3, 0x40]                             |         r3 = *((r3 + 0x40));
    0x00029156 ands r3, r3, 1                                    |         r3 &= 1;
    0x0002915a bne 0x2913e                                       |         
                                                                 |     }
    0x0002915c str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     if (r0 != 0) {
    0x0002915e cbz r0, 0x29162                                   |         
    0x00029160 str r4, [sp, 0x58]                                |         *(arg_58h) = r4;
                                                                 |     }
    0x00029162 cmp r1, 8                                         |     
                                                                 |     if (r1 < 8) {
    0x00029164 bls 0x29256                                       |         goto label_22;
                                                                 |     }
    0x00029166 sub.w r4, r1, 9                                   |     r4 = r1 - 9;
    0x0002916a ldr r1, [pc, 0x174]                               |     
    0x0002916c add sl, r4                                        |     sl += r4;
    0x0002916e movs r2, 9                                        |     r2 = 9;
    0x00029170 mov r0, sl                                        |     r0 = sl;
    0x00029172 add r1, pc                                        |     r1 = 0x52458;
    0x00029174 blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x00029178 mov r1, r0                                        |     r1 = r0;
    0x0002917a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002917c bne 0x29256                                       |         goto label_22;
                                                                 |     }
    0x0002917e str r4, [sp, 0x58]                                |     *(arg_58h) = r4;
    0x00029180 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00029182 beq.w 0x292c0                                     |         goto label_23;
                                                                 |     }
    0x00029186 ldr r0, [pc, 0x15c]                               |     
    0x00029188 mov r2, sl                                        |     r2 = sl;
    0x0002918a ldr r6, [sp, 4]                                   |     r6 = var_4h;
    0x0002918c mov r5, r4                                        |     r5 = r4;
    0x0002918e add r0, pc                                        |     r0 = 0x52478;
    0x00029190 b 0x2919c                                         |     
                                                                 |     while (r3 < r3) {
    0x00029192 mov r6, r5                                        |         r6 = r5;
    0x00029194 movs r1, 1                                        |         r1 = 1;
    0x00029196 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00029198 beq.w 0x292b2                                     |             goto label_24;
                                                                 |         }
    0x0002919c ldrb r3, [r2, -0x1]!                              |         r3 = *((r2 -= 0x1));
    0x000291a0 subs r5, 1                                        |         r5--;
    0x000291a2 add r3, r0                                        |         r3 += r0;
    0x000291a4 ldrb.w r3, [r3, 0x40]                             |         r3 = *((r3 + 0x40));
    0x000291a8 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x000291aa bmi 0x29192                                       |         
                                                                 |     }
    0x000291ac mov r5, r4                                        |     r5 = r4;
    0x000291ae cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000291b0 beq.w 0x28f9e                                     |         goto label_1;
                                                                 |     }
    0x000291b4 mov r5, r6                                        |     r5 = r6;
    0x000291b6 str r6, [sp, 0x58]                                |     *(arg_58h) = r6;
    0x000291b8 b 0x28f9e                                         |     goto label_1;
                                                                 | label_13:
    0x000291ba ldr.w sl, [pc, 0x12c]                             |     
    0x000291be add r0, sp, 0x54                                  |     r0 += var_54h;
    0x000291c0 ldr r6, [pc, 0x128]                               |     
    0x000291c2 movs r4, 0                                        |     r4 = 0;
    0x000291c4 bl 0xa530                                         |     fcn_0000a530 (r0);
    0x000291c8 add sl, pc                                        |     
    0x000291ca ldr r5, [sp, 0x58]                                |     r5 = *(arg_58h);
    0x000291cc add.w sl, sl, 0xf80                               |     sl = 0x53436;
    0x000291d0 add r6, pc                                        |     r6 = 0x524c0;
    0x000291d2 b 0x291dc                                         |     goto label_25;
                                                                 | label_3:
    0x000291d4 adds r4, 1                                        |     r4++;
    0x000291d6 cmp r4, 6                                         |     
                                                                 |     if (r4 == 6) {
    0x000291d8 beq.w 0x28fa4                                     |         goto label_2;
                                                                 |     }
                                                                 | label_25:
    0x000291dc ldrb r3, [sl], 1                                  |     r3 = *(sl);
                                                                 |     sl++;
    0x000291e0 cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x000291e2 bne 0x291d4                                       |         goto label_3;
                                                                 |     }
    0x000291e4 ldr.w r1, [r6, r4, lsl 2]                         |     offset_4 = r4 << 2;
                                                                 |     r1 = *((r6 + offset_4));
    0x000291e8 mov r2, r5                                        |     r2 = r5;
    0x000291ea ldr r0, [sp, 0x54]                                |     r0 = var_54h;
    0x000291ec blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x000291f0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000291f2 bne 0x291d4                                       |         goto label_3;
                                                                 |     }
    0x000291f4 ldr r3, [pc, 0xf8]                                |     
    0x000291f6 mov r1, r0                                        |     r1 = r0;
    0x000291f8 str r0, [sp, 0x58]                                |     *(arg_58h) = r0;
    0x000291fa add r3, pc                                        |     r3 = 0x524ee;
    0x000291fc add r3, r4                                        |     r3 += r4;
    0x000291fe adds r4, 1                                        |     r4++;
    0x00029200 ldrb.w r3, [r3, 0xf88]                            |     r3 = *((r3 + 0xf88));
    0x00029204 uxtb r2, r4                                       |     r2 = (int8_t) r4;
    0x00029206 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00029208 cmp r3, 0x42                                      |     
    0x0002920a str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 |     if (r3 > 0x42) {
    0x0002920c bhi 0x292b6                                       |         goto label_26;
                                                                 |     }
    0x0002920e movs r3, 5                                        |     r3 = 5;
    0x00029210 mov r6, r0                                        |     r6 = r0;
    0x00029212 mov r5, r0                                        |     r5 = r0;
    0x00029214 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00029216 b 0x28fba                                         |     goto label_4;
                                                                 | label_18:
    0x00029218 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0002921a bne.w 0x29064                                     |         goto label_5;
                                                                 |     }
    0x0002921e ldr r1, [pc, 0xd4]                                |     
    0x00029220 mov r0, sb                                        |     r0 = sb;
    0x00029222 mov r2, r6                                        |     r2 = r6;
    0x00029224 add r1, pc                                        |     r1 = 0x5251e;
    0x00029226 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0002922a mov r1, r6                                        |     r1 = r6;
    0x0002922c mov r0, fp                                        |     r0 = fp;
    0x0002922e bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00029232 b 0x2910e                                         |     goto label_6;
                                                                 | label_12:
    0x00029234 mov r0, r8                                        |     r0 = r8;
    0x00029236 bl 0xa530                                         |     fcn_0000a530 (r0);
    0x0002923a ldr r5, [sp, 0x58]                                |     r5 = *(arg_58h);
    0x0002923c cmp r5, 0xf                                       |     
                                                                 |     if (r5 < 0xf) {
    0x0002923e bls.w 0x28f9e                                     |         goto label_1;
                                                                 |     }
    0x00029242 b 0x29118                                         |     goto label_7;
                                                                 | label_14:
    0x00029244 mov r1, r0                                        |     r1 = r0;
    0x00029246 mov r2, r8                                        |     r2 = r8;
    0x00029248 mov r0, sb                                        |     r0 = sb;
    0x0002924a bl 0x1ee7c                                        |     fcn_0001ee7c (r0, r1, r2);
    0x0002924e b 0x28fec                                         |     goto label_8;
                                                                 | label_15:
    0x00029250 mov r4, r3                                        |     r4 = r3;
    0x00029252 b 0x29026                                         |     goto label_9;
                                                                 | label_21:
    0x00029254 str r5, [sp, 0x58]                                |     *(arg_58h) = r5;
                                                                 | label_22:
    0x00029256 ldr r5, [sp, 0x58]                                |     r5 = *(arg_58h);
    0x00029258 b 0x28f9e                                         |     goto label_1;
                                                                 | label_11:
    0x0002925a ldr r1, [pc, 0x9c]                                |     
    0x0002925c ldr r2, [r7]                                      |     r2 = *(r7);
    0x0002925e add r1, pc                                        |     r1 = 0x5255c;
    0x00029260 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00029264 add sp, 0x2c                                      |     
    0x00029266 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0002926a add sp, 8                                         |     
    0x0002926c bx lr                                             |     return;
                                                                 | label_20:
    0x0002926e mov r0, r6                                        |     r0 = r6;
    0x00029270 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00029274 bic r3, r0, 0xc0000000                            |     r3 = BIT_MASK (r0, 0xc0000000);
    0x00029278 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x0002927a adds r3, 1                                        |     r3++;
    0x0002927c mov r2, r5                                        |     r2 = r5;
    0x0002927e add r6, r3                                        |     r6 += r3;
    0x00029280 mov r0, r6                                        |     r0 = r6;
    0x00029282 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00029286 mov r0, r6                                        |     r0 = r6;
    0x00029288 strb.w sl, [r6, r5]                               |     *((r6 + r5)) = sl;
    0x0002928c bl 0xa4e0                                         |     fcn_0000a4e0 (r0);
    0x00029290 mov r1, r8                                        |     r1 = r8;
    0x00029292 bl 0xd2bc                                         |     fcn_0000d2bc (r0, r1, r2, r3);
    0x00029296 ldrh.w r3, [r8, 0xa]                              |     r3 = *((r8 + 0xa));
    0x0002929a strb.w r0, [r8, 5]                                |     *((r8 + 5)) = r0;
    0x0002929e orr r3, r3, 4                                     |     r3 |= 4;
    0x000292a2 strh.w r3, [r8, 0xa]                              |     *((r8 + 0xa)) = r3;
    0x000292a6 b 0x290fc                                         |     goto label_10;
                                                                 | label_19:
    0x000292a8 mov r1, r6                                        |     r1 = r6;
    0x000292aa mov r0, fp                                        |     r0 = fp;
    0x000292ac bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x000292b0 b 0x2910e                                         |     goto label_6;
                                                                 | label_24:
    0x000292b2 str r5, [sp, 0x58]                                |     *(arg_58h) = r5;
    0x000292b4 b 0x28fa4                                         |     goto label_2;
                                                                 | label_26:
    0x000292b6 movs r3, 1                                        |     r3 = 1;
    0x000292b8 mov r6, r0                                        |     r6 = r0;
    0x000292ba mov r5, r0                                        |     r5 = r0;
    0x000292bc str r3, [sp, 8]                                   |     var_8h = r3;
    0x000292be b 0x28fba                                         |     goto label_4;
                                                                 | label_23:
    0x000292c0 movs r3, 0x41                                     |     r3 = 0x41;
    0x000292c2 mov r5, r4                                        |     r5 = r4;
    0x000292c4 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000292c6 movs r3, 1                                        |     r3 = 1;
    0x000292c8 mov r1, r4                                        |     r1 = r4;
    0x000292ca mov r6, r4                                        |     r6 = r4;
    0x000292cc str r3, [sp, 8]                                   |     var_8h = r3;
    0x000292ce b 0x28fba                                         |     goto label_4;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x29758 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00029758 ()                                      | void fcn_00029758 (int16_t arg_1h, int16_t arg1, uint32_t arg2, uint32_t arg3) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00029758 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0002975c mov r7, r1                                        |     r7 = r1;
    0x0002975e sub sp, 0x14                                      |     
    0x00029760 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00029762 beq 0x29818                                       |         goto label_6;
                                                                 |     }
    0x00029764 mov r8, r2                                        |     r8 = r2;
    0x00029766 ldr.w fp, [r2]                                    |     fp = *(r2);
    0x0002976a ldr.w sb, [r0]                                    |     sb = *(r0);
    0x0002976e cmp.w fp, 0                                       |     
    0x00029772 it ne                                             |     
                                                                 |     if (fp != 0) {
    0x00029774 cmpne r1, 0                                       |         __asm ("cmpne r1, 0");
                                                                 |     }
                                                                 |     if (fp == 0) {
    0x00029776 beq 0x29822                                       |         goto label_7;
                                                                 |     }
    0x00029778 ldr r3, [r1]                                      |     r3 = *(r1);
    0x0002977a cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0002977c ble 0x297d0                                       |         goto label_5;
                                                                 |     }
    0x0002977e ldr r4, [pc, 0x12c]                               |     
    0x00029780 mov r6, r1                                        |     r6 = r1;
    0x00029782 ldr r2, [pc, 0x12c]                               |     
    0x00029784 movs r5, 0                                        |     r5 = 0;
    0x00029786 str.w sb, [sp, 0xc]                               |     __asm ("str.w sb, [var_ch]");
    0x0002978a add.w sl, fp, -1                                  |     sl = fp + -1;
    0x0002978e mov sb, r8                                        |     sb = r8;
    0x00029790 add r4, pc                                        |     r4 = 0x53042;
    0x00029792 mov r8, r0                                        |     r8 = r0;
    0x00029794 add r2, pc                                        |     r2 = 0x5304a;
    0x00029796 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00029798 str r3, [sp, 4]                                   |     var_4h = r3;
                                                                 | label_0:
    0x0002979a ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x0002979c mov ip, sl                                        |     
    0x0002979e subs r0, 1                                        |     r0--;
                                                                 |     do {
                                                                 | label_2:
    0x000297a0 ldrb r3, [ip, 1]!                                 |         r3 = *((ip += 1));
    0x000297a4 ldrb r2, [r0, 1]!                                 |         r2 = *((r0 += 1));
    0x000297a8 add.w lr, r4, r3                                  |         lr = r4 + r3;
    0x000297ac cmp r3, r2                                        |         
    0x000297ae add.w r1, r4, r2                                  |         r1 = r4 + r2;
                                                                 |         if (r3 == r2) {
    0x000297b2 beq 0x2987c                                       |             goto label_8;
                                                                 |         }
    0x000297b4 ldrb.w r2, [lr, 0x140]                            |         r2 = *((lr + 0x140));
    0x000297b8 ldrb.w r3, [r1, 0x140]                            |         r3 = *((r1 + 0x140));
    0x000297bc cmp r2, r3                                        |         
    0x000297be beq 0x297a0                                       |         
                                                                 |     } while (r2 == r3);
    0x000297c0 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000297c2 adds r5, 1                                        |     r5++;
    0x000297c4 adds r6, 0x18                                     |     r6 += 0x18;
    0x000297c6 cmp r3, r5                                        |     
                                                                 |     if (r3 > r5) {
    0x000297c8 bgt 0x2979a                                       |         goto label_0;
                                                                 |     }
                                                                 | label_3:
    0x000297ca mov r8, sb                                        |     r8 = sb;
    0x000297cc ldr.w sb, [sp, 0xc]                               |     sb = var_ch;
                                                                 | label_5:
    0x000297d0 add.w r2, r3, r3, lsl 1                           |     r2 = r3 + (r3 << 1);
    0x000297d4 mov r1, r7                                        |     r1 = r7;
    0x000297d6 movs r3, 0                                        |     r3 = 0;
    0x000297d8 lsls r2, r2, 3                                    |     r2 <<= 3;
    0x000297da mov r0, sb                                        |     r0 = sb;
    0x000297dc adds r2, 0x24                                     |     r2 += 0x24;
    0x000297de bl 0x1ac9c                                        |     r0 = fcn_0001ac9c (r0, r1, r2);
    0x000297e2 mov r5, r0                                        |     r5 = r0;
                                                                 |     do {
    0x000297e4 ldrb.w r3, [sb, 0x57]                             |         r3 = *((sb + 0x57));
                                                                 |         if (r3 == 0) {
    0x000297e8 cbz r3, 0x2984e                                   |             goto label_9;
                                                                 |         }
                                                                 | label_1:
    0x000297ea ldr.w r1, [r8, 4]                                 |         r1 = *((r8 + 4));
                                                                 |         if (r1 != 0) {
    0x000297ee cbz r1, 0x297f6                                   |             
    0x000297f0 mov r0, sb                                        |             r0 = sb;
    0x000297f2 bl 0x16c98                                        |             fcn_00016c98 (r0, r1);
                                                                 |         }
    0x000297f6 ldr.w r1, [r8, 8]                                 |         r1 = *((r8 + 8));
                                                                 |         if (r1 != 0) {
    0x000297fa cbz r1, 0x29804                                   |             
    0x000297fc movs r2, 1                                        |             r2 = 1;
    0x000297fe mov r0, sb                                        |             r0 = sb;
    0x00029800 bl 0x16b48                                        |             fcn_00016b48 (r0, r1, r2);
                                                                 |         }
    0x00029804 ldr.w r1, [r8]                                    |         r1 = *(r8);
                                                                 |         if (r1 != 0) {
    0x00029808 cbz r1, 0x29810                                   |             
    0x0002980a mov r0, sb                                        |             r0 = sb;
    0x0002980c bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x00029810 mov r1, r8                                        |         r1 = r8;
    0x00029812 mov r0, sb                                        |         r0 = sb;
    0x00029814 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 | label_6:
    0x00029818 mov r5, r7                                        |         r5 = r7;
    0x0002981a mov r0, r5                                        |         r0 = r5;
    0x0002981c add sp, 0x14                                      |         
    0x0002981e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_7:
    0x00029822 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x00029824 bne 0x298a6                                       |             goto label_10;
                                                                 |         }
    0x00029826 cmp.w sb, 0                                       |         
                                                                 |         if (sb == 0) {
    0x0002982a beq 0x2989a                                       |             goto label_11;
                                                                 |         }
    0x0002982c movs r2, 0x24                                     |         r2 = 0x24;
    0x0002982e movs r3, 0                                        |         r3 = 0;
    0x00029830 mov r0, sb                                        |         r0 = sb;
    0x00029832 bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
    0x00029836 mov r5, r0                                        |         r5 = r0;
                                                                 | label_4:
    0x00029838 cmp r5, 0                                         |         
    0x0002983a beq 0x297e4                                       |         
                                                                 |     } while (r5 == 0);
    0x0002983c movs r2, 0x24                                     |     r2 = 0x24;
    0x0002983e movs r1, 0                                        |     r1 = 0;
    0x00029840 mov r0, r5                                        |     r0 = r5;
    0x00029842 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00029846 ldrb.w r3, [sb, 0x57]                             |     r3 = *((sb + 0x57));
    0x0002984a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002984c bne 0x297ea                                       |         goto label_1;
                                                                 |     }
                                                                 | label_9:
    0x0002984e ldr r3, [r5]                                      |     r3 = *(r5);
    0x00029850 mov r6, r8                                        |     r6 = r8;
    0x00029852 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00029854 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00029858 str r2, [r5]                                      |     *(r5) = r2;
    0x0002985a add.w r4, r5, r3, lsl 3                           |     r4 = r5 + (r3 << 3);
    0x0002985e ldm r6!, {r0, r1, r2, r3}                         |     r0 = *(r6!);
                                                                 |     r1 = *((r6! + 4));
                                                                 |     r2 = *((r6! + 8));
                                                                 |     r3 = *((r6! + 12));
    0x00029860 adds r4, 0xc                                      |     r4 += 0xc;
    0x00029862 stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00029864 ldm.w r6, {r0, r1}                                |     r0 = *(r6);
                                                                 |     r1 = *((r6 + 4));
    0x00029868 stm.w r4, {r0, r1}                                |     *(r4) = r0;
                                                                 |     *((r4 + 4)) = r1;
    0x0002986c mov r0, sb                                        |     r0 = sb;
    0x0002986e mov r1, r8                                        |     r1 = r8;
    0x00029870 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00029874 mov r0, r5                                        |     r0 = r5;
    0x00029876 add sp, 0x14                                      |     
    0x00029878 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_8:
    0x0002987c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002987e bne 0x297a0                                       |         goto label_2;
                                                                 |     }
    0x00029880 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00029882 mov r2, fp                                        |     r2 = fp;
    0x00029884 mov r0, r8                                        |     r0 = r8;
    0x00029886 adds r5, 1                                        |     r5++;
    0x00029888 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0002988c ldr r3, [r7]                                      |     r3 = *(r7);
    0x0002988e adds r6, 0x18                                     |     r6 += 0x18;
    0x00029890 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00029892 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00029894 cmp r3, r5                                        |     
                                                                 |     if (r3 > r5) {
    0x00029896 bgt 0x2979a                                       |         goto label_0;
                                                                 |     }
    0x00029898 b 0x297ca                                         |     goto label_3;
                                                                 | label_11:
    0x0002989a movs r0, 0x24                                     |     r0 = 0x24;
    0x0002989c movs r1, 0                                        |     r1 = 0;
    0x0002989e bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x000298a2 mov r5, r0                                        |     r5 = r0;
    0x000298a4 b 0x29838                                         |     goto label_4;
                                                                 | label_10:
    0x000298a6 ldr r3, [r1]                                      |     r3 = *(r1);
    0x000298a8 b 0x297d0                                         |     goto label_5;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x29e4c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00029e4c ()                                      | void fcn_00029e4c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00029e4c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00029e50 sub sp, 0xc                                       |     
    0x00029e52 ldr r7, [r1, 0xc]                                 |     r7 = *((r1 + 0xc));
                                                                 |     if (r7 == 0) {
    0x00029e54 cbz r7, 0x29ec4                                   |         goto label_4;
                                                                 |     }
    0x00029e56 ldr r5, [r0, 8]                                   |     r5 = *((r0 + 8));
    0x00029e58 mov r4, r1                                        |     r4 = r1;
    0x00029e5a mov fp, r2                                        |     
    0x00029e5c mov r6, r3                                        |     r6 = r3;
                                                                 |     if (r5 == 0) {
    0x00029e5e cbz r5, 0x29eca                                   |         goto label_5;
                                                                 |     }
    0x00029e60 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00029e62 ldr.w r8, [r4, 0x4c]                              |     r8 = *((r4 + 0x4c));
                                                                 |     if (r3 != 0) {
    0x00029e66 cbz r3, 0x29e6c                                   |         
                                                                 | label_1:
    0x00029e68 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00029e6a add r8, r3                                        |         r8 += r3;
                                                                 |     }
                                                                 | label_2:
    0x00029e6c ldr r3, [r7]                                      |     r3 = *(r7);
    0x00029e6e cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00029e70 ble 0x29ec4                                       |         goto label_4;
                                                                 |     }
    0x00029e72 movs r4, 0                                        |     r4 = 0;
    0x00029e74 mov.w sl, 0x5e                                    |     sl = 0x5e;
    0x00029e78 mov sb, r4                                        |     sb = r4;
    0x00029e7a b 0x29e9a                                         |     
                                                                 |     while (r1 < r2) {
    0x00029e7c ldr.w ip, [r5, 0x68]                              |         ip = *((r5 + 0x68));
    0x00029e80 adds r4, 1                                        |         r4++;
    0x00029e82 str r2, [r5, 0x6c]                                |         *((r5 + 0x6c)) = r2;
    0x00029e84 add.w r2, ip, r1, lsl 2                           |         r2 = ip + (r1 << 2);
    0x00029e88 strd fp, r3, [r2, 4]                              |         __asm ("strd fp, r3, [r2, 4]");
    0x00029e8c strd r0, sb, [r2, 0xc]                            |         __asm ("strd r0, sb, [r2, 0xc]");
    0x00029e90 str.w sl, [ip, r1, lsl 2]                         |         __asm ("str.w sl, [ip, r1, lsl 2]");
    0x00029e94 ldr r3, [r7]                                      |         r3 = *(r7);
    0x00029e96 cmp r4, r3                                        |         
                                                                 |         if (r4 >= r3) {
    0x00029e98 bge 0x29ec4                                       |             goto label_4;
                                                                 |         }
                                                                 | label_0:
    0x00029e9a ldrd r1, r2, [r5, 0x6c]                           |         __asm ("ldrd r1, r2, [r5, 0x6c]");
    0x00029e9e add.w r3, r8, r4                                  |         r3 = r8 + r4;
    0x00029ea2 adds r0, r6, r4                                   |         r0 = r6 + r4;
    0x00029ea4 cmp r1, r2                                        |         
    0x00029ea6 add.w r2, r1, 1                                   |         r2 = r1 + 1;
    0x00029eaa add.w r1, r1, r1, lsl 2                           |         r1 += (r1 << 2);
    0x00029eae blt 0x29e7c                                       |         
                                                                 |     }
    0x00029eb0 str r0, [sp]                                      |     *(sp) = r0;
    0x00029eb2 mov r2, fp                                        |     r2 = fp;
    0x00029eb4 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x00029eb6 mov r0, r5                                        |     r0 = r5;
    0x00029eb8 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00029ebc ldr r3, [r7]                                      |     r3 = *(r7);
    0x00029ebe adds r4, 1                                        |     r4++;
    0x00029ec0 cmp r4, r3                                        |     
                                                                 |     if (r4 < r3) {
    0x00029ec2 blt 0x29e9a                                       |         goto label_0;
                                                                 |     }
                                                                 | label_4:
    0x00029ec4 add sp, 0xc                                       |     
    0x00029ec6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_5:
    0x00029eca ldr r3, [r0, 0x74]                                |     r3 = *((r0 + 0x74));
                                                                 |     if (r3 == 0) {
    0x00029ecc cbz r3, 0x29ee0                                   |         goto label_6;
                                                                 |     }
                                                                 | label_3:
    0x00029ece bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x00029ed2 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00029ed4 mov r5, r0                                        |     r5 = r0;
    0x00029ed6 ldr.w r8, [r4, 0x4c]                              |     r8 = *((r4 + 0x4c));
    0x00029eda cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00029edc bne 0x29e68                                       |         goto label_1;
                                                                 |     }
    0x00029ede b 0x29e6c                                         |     goto label_2;
                                                                 | label_6:
    0x00029ee0 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00029ee2 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00029ee4 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x00029ee6 itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x00029ee8 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00029eea strbpl r3, [r0, 0x17]                             |         *((r0 + 0x17)) = r3;
                                                                 |     }
    0x00029eec b 0x29ece                                         |     goto label_3;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x29ef0 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.00029ef0 ()                                          | void fcn_00029ef0 (int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg_54h, int16_t arg_58h, arithmetic arg1, arithmetic arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     arithmetic var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int32_t var_18h_2;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x00029ef0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x00029ef4 sub sp, 0x24                                          |     
    0x00029ef6 ldr r4, [r1, 8]                                       |     r4 = *((r1 + 8));
    0x00029ef8 mov r8, r0                                            |     r8 = r0;
    0x00029efa mov sb, r2                                            |     sb = r2;
    0x00029efc ldr.w fp, [sp, 0x4c]                                  |     fp = *(arg_4ch);
    0x00029f00 ldr.w sl, [sp, 0x58]                                  |     sl = *(arg_58h);
    0x00029f04 ldr r5, [r0, 8]                                       |     r5 = *((r0 + 8));
    0x00029f06 str r1, [sp, 0x10]                                    |     var_10h = r1;
    0x00029f08 str r3, [sp, 8]                                       |     var_8h = r3;
    0x00029f0a cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x00029f0c beq.w 0x2a098                                         |         goto label_6;
                                                                     |     }
    0x00029f10 lsl.w r3, sl, 4                                       |     r3 = sl << 4;
    0x00029f14 movs r6, 0                                            |     r6 = 0;
    0x00029f16 sub.w r7, fp, 4                                       |     r7 = fp - 4;
    0x00029f1a strd r0, sb, [sp, 0x18]                               |     __asm ("strd r0, sb, [var_18h]");
    0x00029f1e uxtb r2, r3                                           |     r2 = (int8_t) r3;
    0x00029f20 ldr r3, [sp, 0x50]                                    |     r3 = *(arg_50h);
    0x00029f22 str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x00029f24 and r3, r3, 2                                         |     r3 &= 2;
    0x00029f28 orrs r3, r2                                           |     r3 |= r2;
    0x00029f2a orr r3, r3, 1                                         |     r3 |= 1;
    0x00029f2e str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x00029f30 b 0x29f8c                                             |     goto label_7;
                                                                     | label_0:
    0x00029f32 ldr.w fp, [r5, 0x68]                                  |     fp = *((r5 + 0x68));
    0x00029f36 add.w r1, r0, r0, lsl 2                               |     r1 = r0 + (r0 << 2);
    0x00029f3a adds r3, r0, 1                                        |     r3 = r0 + 1;
    0x00029f3c str r3, [r5, 0x6c]                                    |     *((r5 + 0x6c)) = r3;
    0x00029f3e add.w ip, fp, r1, lsl 2                               |     
    0x00029f42 strd lr, r2, [ip, 4]                                  |     __asm ("strd lr, r2, [ip, 4]");
    0x00029f46 movs r2, 0                                            |     r2 = 0;
    0x00029f48 str.w r2, [ip, 0x10]                                  |     __asm ("str.w r2, [ip, 0x10]");
    0x00029f4c movs r2, 0x8a                                         |     r2 = 0x8a;
    0x00029f4e str.w sl, [ip, 0xc]                                   |     __asm ("str.w sl, [ip, 0xc]");
    0x00029f52 str.w r2, [fp, r1, lsl 2]                             |     __asm ("str.w r2, [fp, r1, lsl 2]");
                                                                     | label_1:
    0x00029f56 ldr r2, [r5]                                          |     r2 = *(r5);
    0x00029f58 ldrb.w r2, [r2, 0x57]                                 |     r2 = *((r2 + 0x57));
                                                                     |     if (r2 == 0) {
    0x00029f5c cbnz r2, 0x29f72                                      |         
    0x00029f5e ldr r2, [r5, 0x68]                                    |         r2 = *((r5 + 0x68));
    0x00029f60 add.w r0, r0, r0, lsl 2                               |         r0 += (r0 << 2);
    0x00029f64 mvn r1, 2                                             |         r1 = ~2;
    0x00029f68 add.w r2, r2, r0, lsl 2                               |         r2 += (r0 << 2);
    0x00029f6c str.w sb, [r2, 0x10]                                  |         __asm ("str.w sb, [r2, 0x10]");
    0x00029f70 strb r1, [r2, 1]                                      |         *((r2 + 1)) = r1;
                                                                     |     }
    0x00029f72 cmp r3, 0                                             |     
    0x00029f74 itttt gt                                              |     
                                                                     |     if (r3 <= 0) {
    0x00029f76 ldrgt r2, [r5, 0x68]                                  |         r2 = *((r5 + 0x68));
                                                                     |     }
                                                                     |     if (r3 <= 0) {
    0x00029f78 addgt r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
                                                                     |     }
                                                                     |     if (r3 <= 0) {
    0x00029f7c addgt r2, r2, r3, lsl 2                               |         r2 += (r3 << 2);
                                                                     |     }
    0x00029f80 strh r8, [r2, -0x12]                                  |     *((r2 - 0x12)) = r8;
                                                                     |     while (r2 == 0) {
    0x00029f84 ldr r4, [r4, 0x14]                                    |         r4 = *((r4 + 0x14));
    0x00029f86 adds r6, 1                                            |         r6++;
    0x00029f88 cmp r4, 0                                             |         
                                                                     |         if (r4 == 0) {
    0x00029f8a beq 0x2a000                                           |             goto label_8;
                                                                     |         }
                                                                     | label_7:
    0x00029f8c ldr r2, [r7, 4]!                                      |         r2 = *((r7 += 4));
    0x00029f90 cmp r2, 0                                             |         
    0x00029f92 beq 0x29f84                                           |         
                                                                     |     }
    0x00029f94 ldr r3, [r4, 0x24]                                    |     r3 = *((r4 + 0x24));
                                                                     |     if (r3 != 0) {
    0x00029f96 cbz r3, 0x29faa                                       |         
    0x00029f98 ldr r3, [r5, 0x6c]                                    |         r3 = *((r5 + 0x6c));
    0x00029f9a movs r1, 0                                            |         r1 = 0;
    0x00029f9c str r1, [sp]                                          |         *(sp) = r1;
    0x00029f9e mov r0, r5                                            |         r0 = r5;
    0x00029fa0 movs r1, 0x32                                         |         r1 = 0x32;
    0x00029fa2 adds r3, 2                                            |         r3 += 2;
    0x00029fa4 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00029fa8 ldr r2, [r7]                                          |         r2 = *(r7);
                                                                     |     }
    0x00029faa ldrb.w r3, [r4, 0x37]                                 |     r3 = *((r4 + 0x37));
    0x00029fae and r1, r3, 3                                         |     r1 = r3 & 3;
    0x00029fb2 cmp r1, 2                                             |     
    0x00029fb4 it ne                                                 |     
                                                                     |     if (r1 == 2) {
    0x00029fb6 ldrne r8, [sp, 0xc]                                   |         r8 = var_ch;
                                                                     |     }
                                                                     |     if (r1 == 2) {
    0x00029fba bne 0x29fce                                           |         
    0x00029fbc ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
    0x00029fbe ldr r0, [sp, 0x14]                                    |         r0 = var_14h;
    0x00029fc0 ldr r1, [r1, 0x1c]                                    |         r1 = *((r1 + 0x1c));
    0x00029fc2 tst.w r1, 0x80                                        |         
    0x00029fc6 ldr r1, [sp, 0xc]                                     |         r1 = var_ch;
    0x00029fc8 ite ne                                                |         
                                                                     |         if ((r1 & 0x80) == 0) {
    0x00029fca movne r8, r0                                          |             r8 = r0;
                                                                     |         }
                                                                     |         if ((r1 & 0x80) == 0) {
    0x00029fcc moveq r8, r1                                          |             r8 = r1;
                                                                     |             goto label_9;
                                                                     |         }
                                                                     |     }
                                                                     | label_9:
    0x00029fce lsls r3, r3, 0x1c                                     |     r3 <<= 0x1c;
    0x00029fd0 ldrd r0, r3, [r5, 0x6c]                               |     __asm ("ldrd r0, r3, [r5, 0x6c]");
    0x00029fd4 ldr r1, [sp, 8]                                       |     r1 = var_8h;
    0x00029fd6 add.w sl, r2, 1                                       |     sl = r2 + 1;
    0x00029fda ite mi                                                |     
                                                                     |     if (r3 < r3) {
    0x00029fdc ldrhmi sb, [r4, 0x32]                                 |         __asm ("ldrhmi sb, [r4, 0x32]");
                                                                     |     }
                                                                     |     if (r3 >= r3) {
    0x00029fe0 ldrh.w sb, [r4, 0x34]                                 |         sb = *((r4 + 0x34));
                                                                     |     }
    0x00029fe4 cmp r0, r3                                            |     
    0x00029fe6 add.w lr, r6, r1                                      |     lr = r6 + r1;
                                                                     |     if (r0 < r3) {
    0x00029fea blt 0x29f32                                           |         goto label_0;
                                                                     |     }
    0x00029fec mov r3, r2                                            |     r3 = r2;
    0x00029fee movs r1, 0x8a                                         |     r1 = 0x8a;
    0x00029ff0 mov r2, lr                                            |     r2 = lr;
    0x00029ff2 mov r0, r5                                            |     r0 = r5;
    0x00029ff4 str.w sl, [sp]                                        |     __asm ("str.w sl, [sp]");
    0x00029ff8 bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00029ffc ldr r3, [r5, 0x6c]                                    |     r3 = *((r5 + 0x6c));
    0x00029ffe b 0x29f56                                             |     goto label_1;
                                                                     | label_8:
    0x0002a000 ldrd r8, sb, [sp, 0x18]                               |     __asm ("ldrd r8, sb, [var_18h]");
    0x0002a004 ldr.w fp, [sp, 0x4c]                                  |     fp = *(arg_4ch);
    0x0002a008 ldr.w sl, [sp, 0x58]                                  |     sl = *(arg_58h);
                                                                     | label_5:
    0x0002a00c ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0002a00e ldr r3, [r3, 0x1c]                                    |     r3 = *((r3 + 0x1c));
    0x0002a010 ands r4, r3, 0x80                                     |     r4 = r3 & 0x80;
                                                                     |     if (r4 != r3) {
    0x0002a014 bne 0x2a05a                                           |         goto label_10;
                                                                     |     }
    0x0002a016 ldrb.w r3, [r8, 0x12]                                 |     r3 = *((r8 + 0x12));
    0x0002a01a cbz r3, 0x2a060                                       |     
                                                                     |     while (r3 == 0) {
    0x0002a01c ldr r3, [sp, 0x54]                                    |         r3 = *(arg_54h);
                                                                     |         if (r3 != 0) {
    0x0002a01e cbz r3, 0x2a024                                       |             
                                                                     | label_3:
    0x0002a020 orr r4, r4, 8                                         |             r4 |= 8;
                                                                     |         }
                                                                     | label_2:
    0x0002a024 cmp.w sl, 0                                           |         
                                                                     |         if (sl != 0) {
    0x0002a028 beq 0x2a02e                                           |             
    0x0002a02a orr r4, r4, 0x10                                      |             r4 |= 0x10;
                                                                     |         }
    0x0002a02e ldr r1, [sp, 0x48]                                    |         r1 = *(arg_48h);
    0x0002a030 mov r2, sb                                            |         r2 = sb;
    0x0002a032 ldr.w r3, [fp, r6, lsl 2]                             |         offset_0 = r6 << 2;
                                                                     |         r3 = *((fp + offset_0));
    0x0002a036 mov r0, r5                                            |         r0 = r5;
    0x0002a038 str r1, [sp]                                          |         *(sp) = r1;
    0x0002a03a movs r1, 0x80                                         |         r1 = 0x80;
    0x0002a03c bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0002a040 ldrb.w r3, [r8, 0x12]                                 |         r3 = *((r8 + 0x12));
                                                                     |         if (r3 == 0) {
    0x0002a044 cbz r3, 0x2a076                                       |             goto label_11;
                                                                     |         }
    0x0002a046 ldr r3, [r5, 0x6c]                                    |         r3 = *((r5 + 0x6c));
                                                                     | label_4:
    0x0002a048 cmp r3, 0                                             |         
    0x0002a04a itttt gt                                              |         
                                                                     |         if (r3 <= 0) {
    0x0002a04c ldrgt r2, [r5, 0x68]                                  |             r2 = *((r5 + 0x68));
                                                                     |         }
                                                                     |         if (r3 <= 0) {
    0x0002a04e addgt r3, r3, r3, lsl 2                               |             r3 += (r3 << 2);
                                                                     |         }
                                                                     |         if (r3 <= 0) {
    0x0002a052 addgt r3, r2, r3, lsl 2                               |             r3 = r2 + (r3 << 2);
                                                                     |         }
                                                                     |         if (r3 > 0) {
    0x0002a056 strh r4, [r3, -0x12]                                  |             *((r3 - 0x12)) = r4;
                                                                     |         }
                                                                     | label_10:
    0x0002a05a add sp, 0x24                                          |         
    0x0002a05c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
    0x0002a060 ldr r3, [sp, 0x50]                                    |         r3 = *(arg_50h);
    0x0002a062 movs r4, 0x21                                         |         r4 = 0x21;
    0x0002a064 cmp r3, 0                                             |         
    0x0002a066 beq 0x2a01c                                           |         
                                                                     |     }
    0x0002a068 orr r3, r3, 1                                         |     r3 |= 1;
    0x0002a06c uxtb r4, r3                                           |     r4 = (int8_t) r3;
    0x0002a06e ldr r3, [sp, 0x54]                                    |     r3 = *(arg_54h);
    0x0002a070 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002a072 beq 0x2a024                                           |         goto label_2;
                                                                     |     }
    0x0002a074 b 0x2a020                                             |     goto label_3;
                                                                     | label_11:
    0x0002a076 ldr r2, [r5]                                          |     r2 = *(r5);
    0x0002a078 ldr r3, [r5, 0x6c]                                    |     r3 = *((r5 + 0x6c));
    0x0002a07a ldrb.w r2, [r2, 0x57]                                 |     r2 = *((r2 + 0x57));
    0x0002a07e cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0002a080 bne 0x2a048                                           |         goto label_4;
                                                                     |     }
    0x0002a082 add.w r2, r3, r3, lsl 2                               |     r2 = r3 + (r3 << 2);
    0x0002a086 ldr r1, [r5, 0x68]                                    |     r1 = *((r5 + 0x68));
    0x0002a088 lsls r2, r2, 2                                        |     r2 <<= 2;
    0x0002a08a subs r2, 0x14                                         |     r2 -= 0x14;
    0x0002a08c add r2, r1                                            |     r2 += r1;
    0x0002a08e ldr r1, [sp, 0x10]                                    |     r1 = var_10h;
    0x0002a090 str r1, [r2, 0x10]                                    |     *((r2 + 0x10)) = r1;
    0x0002a092 movs r1, 0xfb                                         |     r1 = 0xfb;
    0x0002a094 strb r1, [r2, 1]                                      |     *((r2 + 1)) = r1;
    0x0002a096 b 0x2a048                                             |     goto label_4;
                                                                     | label_6:
    0x0002a098 mov r6, r4                                            |     r6 = r4;
    0x0002a09a b 0x2a00c                                             |     goto label_5;
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2a09c */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0002a09c ()                                          | void fcn_0002a09c (int16_t arg1, int16_t arg2) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     arithmetic x;
                                                                     |     int16_t var_4h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x0002a09c push {r2, r3}                                         |     
    0x0002a09e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002a0a2 sub sp, 0x14                                          |     
    0x0002a0a4 add r3, sp, 0x38                                      |     r3 += x;
    0x0002a0a6 mov sl, r1                                            |     sl = r1;
    0x0002a0a8 mov r4, r0                                            |     r4 = r0;
    0x0002a0aa ldr sb, [r3], 4                                       |     sb = *(r3);
                                                                     |     r3 += 4;
    0x0002a0ae ldr r1, [pc, 0x130]                                   |     
    0x0002a0b0 ldr r2, [pc, 0x130]                                   |     r2 = *(0x2a1e4);
    0x0002a0b2 ldrb.w r0, [sb]                                       |     r0 = *(sb);
    0x0002a0b6 add r1, pc                                            |     r1 = 0x5429c;
    0x0002a0b8 ldr r2, [r1, r2]                                      |     
    0x0002a0ba ldr r2, [r2]                                          |     r2 = *(0x5429c);
    0x0002a0bc str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0002a0be mov.w r2, 0                                           |     r2 = 0;
    0x0002a0c2 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0002a0c4 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002a0c6 beq.w 0x2a1d6                                         |         goto label_3;
                                                                     |     }
    0x0002a0ca mov r6, sl                                            |     r6 = sl;
    0x0002a0cc mov r5, sb                                            |     r5 = sb;
    0x0002a0ce movs r7, 0                                            |     r7 = 0;
    0x0002a0d0 mov.w r8, 0x47                                        |     r8 = 0x47;
    0x0002a0d4 b 0x2a112                                             |     
                                                                     |     while (r0 != 0x73) {
    0x0002a0d6 cmp r0, 0x69                                          |         
                                                                     |         if (r0 != 0x69) {
    0x0002a0d8 bne 0x2a19c                                           |             goto label_4;
                                                                     |         }
    0x0002a0da ldrd r3, r1, [r4, 0x6c]                               |         __asm ("ldrd r3, r1, [r4, 0x6c]");
    0x0002a0de ldr r2, [sp, 8]                                       |         r2 = var_8h;
    0x0002a0e0 cmp r3, r1                                            |         
    0x0002a0e2 add.w r0, r2, 4                                       |         r0 = r2 + 4;
    0x0002a0e6 ldr r2, [r2]                                          |         r2 = *(r2);
    0x0002a0e8 str r0, [sp, 8]                                       |         var_8h = r0;
                                                                     |         if (r3 >= r1) {
    0x0002a0ea bge 0x2a1ba                                           |             goto label_5;
                                                                     |         }
    0x0002a0ec ldr r1, [r4, 0x68]                                    |         r1 = *((r4 + 0x68));
    0x0002a0ee add.w r0, r3, r3, lsl 2                               |         r0 = r3 + (r3 << 2);
    0x0002a0f2 adds r3, 1                                            |         r3++;
    0x0002a0f4 str r3, [r4, 0x6c]                                    |         *((r4 + 0x6c)) = r3;
    0x0002a0f6 add.w r3, r1, r0, lsl 2                               |         r3 = r1 + (r0 << 2);
    0x0002a0fa strd r2, r6, [r3, 4]                                  |         __asm ("strd r2, r6, [r3, 4]");
    0x0002a0fe strd r7, r7, [r3, 0xc]                                |         __asm ("strd r7, r7, [r3, 0xc]");
    0x0002a102 str.w r8, [r1, r0, lsl 2]                             |         __asm ("str.w r8, [r1, r0, lsl 2]");
                                                                     | label_0:
    0x0002a106 ldrb r0, [r5, 1]                                      |         r0 = *((r5 + 1));
    0x0002a108 adds r3, r5, 1                                        |         r3 = r5 + 1;
    0x0002a10a adds r6, 1                                            |         r6++;
    0x0002a10c cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0002a10e beq 0x2a188                                           |             goto label_6;
                                                                     |         }
                                                                     | label_1:
    0x0002a110 mov r5, r3                                            |         r5 = r3;
    0x0002a112 cmp r0, 0x73                                          |         
    0x0002a114 bne 0x2a0d6                                           |         
                                                                     |     }
    0x0002a116 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0002a118 ldrd r0, r2, [r4, 0x6c]                               |     __asm ("ldrd r0, r2, [r4, 0x6c]");
    0x0002a11c ldr.w fp, [r3]                                        |     fp = *(r3);
    0x0002a120 adds r3, 4                                            |     r3 += 4;
    0x0002a122 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0002a124 cmp.w fp, 0                                           |     
    0x0002a128 ite eq                                                |     
                                                                     |     if (fp != 0) {
    0x0002a12a moveq r1, 0x4b                                        |         r1 = 0x4b;
                                                                     |     }
                                                                     |     if (fp == 0) {
    0x0002a12c movne r1, 0x75                                        |         r1 = 0x75;
                                                                     |     }
    0x0002a12e cmp r0, r2                                            |     
                                                                     |     if (r0 >= r2) {
    0x0002a130 bge 0x2a1c8                                           |         goto label_7;
                                                                     |     }
    0x0002a132 adds r3, r0, 1                                        |     r3 = r0 + 1;
    0x0002a134 add.w r2, r0, r0, lsl 2                               |     r2 = r0 + (r0 << 2);
    0x0002a138 str r3, [r4, 0x6c]                                    |     *((r4 + 0x6c)) = r3;
    0x0002a13a ldr r3, [r4, 0x68]                                    |     r3 = *((r4 + 0x68));
    0x0002a13c strb.w r1, [r3, r2, lsl 2]                            |     offset_0 = r2 << 2;
                                                                     |     *((r3 + offset_0)) = r1;
    0x0002a140 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0002a144 strh r7, [r3, 2]                                      |     *((r3 + 2)) = r7;
    0x0002a146 strd r7, r6, [r3, 4]                                  |     __asm ("strd r7, r6, [r3, 4]");
    0x0002a14a strd r7, r7, [r3, 0xc]                                |     __asm ("strd r7, r7, [r3, 0xc]");
    0x0002a14e strb r7, [r3, 1]                                      |     *((r3 + 1)) = r7;
                                                                     | label_2:
    0x0002a150 ldr r3, [r4]                                          |     r3 = *(r4);
    0x0002a152 ldrb.w r3, [r3, 0x57]                                 |     r3 = *((r3 + 0x57));
    0x0002a156 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0002a158 bne 0x2a106                                           |         goto label_0;
                                                                     |     }
    0x0002a15a cmp r0, 0                                             |     
    0x0002a15c ldr r1, [r4, 0x68]                                    |     r1 = *((r4 + 0x68));
    0x0002a15e it lt                                                 |     
                                                                     |     if (r0 >= 0) {
    0x0002a160 ldrlt r0, [r4, 0x6c]                                  |         r0 = *((r4 + 0x6c));
                                                                     |     }
    0x0002a162 mov.w r3, 0                                           |     r3 = 0;
    0x0002a166 mov r2, fp                                            |     r2 = fp;
    0x0002a168 add.w r6, r6, 1                                       |     r6++;
    0x0002a16c it lt                                                 |     
                                                                     |     if (r0 >= 0) {
    0x0002a16e addlt r0, r0, -1                                      |         r0 += -1;
                                                                     |     }
    0x0002a172 add.w r0, r0, r0, lsl 2                               |     r0 += (r0 << 2);
    0x0002a176 add.w r1, r1, r0, lsl 2                               |     r1 += (r0 << 2);
    0x0002a17a mov r0, r4                                            |     r0 = r4;
    0x0002a17c bl 0x1ebdc                                            |     fcn_0001ebdc (r0, r1, r2, r3);
    0x0002a180 ldrb r0, [r5, 1]                                      |     r0 = *((r5 + 1));
    0x0002a182 adds r3, r5, 1                                        |     r3 = r5 + 1;
    0x0002a184 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0002a186 bne 0x2a110                                           |         goto label_1;
                                                                     |     }
                                                                     | label_6:
    0x0002a188 rsb.w r3, sb, 1                                       |     r3 = 1 - sb;
    0x0002a18c add r3, r5                                            |     r3 += r5;
                                                                     |     do {
    0x0002a18e movs r5, 0                                            |         r5 = 0;
    0x0002a190 mov r2, sl                                            |         r2 = sl;
    0x0002a192 movs r1, 0x54                                         |         r1 = 0x54;
    0x0002a194 mov r0, r4                                            |         r0 = r4;
    0x0002a196 str r5, [sp]                                          |         *(sp) = r5;
    0x0002a198 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_4:
    0x0002a19c ldr r2, [pc, 0x48]                                    |         
    0x0002a19e ldr r3, [pc, 0x44]                                    |         r3 = *(0x2a1e6);
    0x0002a1a0 add r2, pc                                            |         r2 = 0x5438c;
    0x0002a1a2 ldr r3, [r2, r3]                                      |         r3 = *(0x5438c);
    0x0002a1a4 ldr r2, [r3]                                          |         r2 = *(0x5438c);
    0x0002a1a6 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002a1a8 eors r2, r3                                           |         r2 ^= r3;
    0x0002a1aa mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0002a1ae bne 0x2a1da                                           |             goto label_8;
                                                                     |         }
    0x0002a1b0 add sp, 0x14                                          |         
    0x0002a1b2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0002a1b6 add sp, 8                                             |         
    0x0002a1b8 bx lr                                                 |         return;
                                                                     | label_5:
    0x0002a1ba mov r3, r6                                            |         r3 = r6;
    0x0002a1bc movs r1, 0x47                                         |         r1 = 0x47;
    0x0002a1be mov r0, r4                                            |         r0 = r4;
    0x0002a1c0 str r7, [sp]                                          |         *(sp) = r7;
    0x0002a1c2 bl 0x29a7c                                            |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0002a1c6 b 0x2a106                                             |         goto label_0;
                                                                     | label_7:
    0x0002a1c8 movs r2, 0                                            |         r2 = 0;
    0x0002a1ca mov r3, r6                                            |         r3 = r6;
    0x0002a1cc mov r0, r4                                            |         r0 = r4;
    0x0002a1ce str r2, [sp]                                          |         *(sp) = r2;
    0x0002a1d0 bl 0x29a7c                                            |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0002a1d4 b 0x2a150                                             |         goto label_2;
                                                                     | label_3:
    0x0002a1d6 mov r3, r0                                            |         r3 = r0;
    0x0002a1d8 b 0x2a18e                                             |         
                                                                     |     } while (1);
                                                                     | label_8:
    0x0002a1da blx 0x9b44                                            |     fcn_00009b44 ();
    0x0002a1de nop                                                   |     
    0x0002a1e0 ldr r2, [r1, 0x24]                                    |     r2 = *((r1 + 0x24));
    0x0002a1e2 movs r7, r0                                           |     r7 = r0;
    0x0002a1e4 lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0002a1e6 movs r0, r0                                           |     
    0x0002a1e8 ldr r0, [r4, 0x14]                                    |     r0 = *((r4 + 0x14));
    0x0002a1ea movs r7, r0                                           |     r7 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2a7a8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0002a7a8 ()                                      | void fcn_0002a7a8 (int16_t arg_40h, int16_t arg_44h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0002a7a8 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0002a7ac sub sp, 0x1c                                      |     
    0x0002a7ae ldr r7, [sp, 0x40]                                |     r7 = *(arg_40h);
    0x0002a7b0 cmp r1, 1                                         |     
    0x0002a7b2 it eq                                             |     
                                                                 |     if (r1 != 1) {
    0x0002a7b4 moveq r6, 0                                       |         r6 = 0;
                                                                 |     }
    0x0002a7b6 ldr r5, [r0, 8]                                   |     r5 = *((r0 + 8));
    0x0002a7b8 ldr.w sb, [r7]                                    |     sb = *(r7);
                                                                 |     if (r1 == 1) {
    0x0002a7bc beq 0x2a85a                                       |         goto label_1;
                                                                 |     }
    0x0002a7be cmp r1, 2                                         |     
    0x0002a7c0 mov r8, r0                                        |     r8 = r0;
    0x0002a7c2 mov ip, r3                                        |     
                                                                 |     if (r1 != 2) {
    0x0002a7c4 bne 0x2a862                                       |         goto label_2;
                                                                 |     }
    0x0002a7c6 ldr r2, [r0, 0x2c]                                |     r2 = *((r0 + 0x2c));
    0x0002a7c8 cmp.w sb, 0                                       |     
    0x0002a7cc ldr r3, [r5, 0x6c]                                |     r3 = *((r5 + 0x6c));
    0x0002a7ce add.w fp, sb, -1                                  |     
    0x0002a7d2 add.w sl, r2, 1                                   |     sl = r2 + 1;
    0x0002a7d6 add r2, sb                                        |     r2 += sb;
    0x0002a7d8 add r3, sb                                        |     r3 += sb;
    0x0002a7da mov r6, sl                                        |     r6 = sl;
    0x0002a7dc str r2, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r2;
                                                                 |     if (sb <= 0) {
    0x0002a7de ble 0x2a84a                                       |         goto label_3;
                                                                 |     }
    0x0002a7e0 movs r4, 0                                        |     r4 = 0;
    0x0002a7e2 mov r8, r3                                        |     r8 = r3;
    0x0002a7e4 str.w sl, [sp, 0x14]                              |     __asm ("str.w sl, [var_14h]");
    0x0002a7e8 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0002a7ea str.w ip, [sp, 0x10]                              |     __asm ("str.w ip, [var_10h]");
                                                                 |     do {
    0x0002a7ee ldr r1, [r7, 8]                                   |         r1 = *((r7 + 8));
    0x0002a7f0 adds r7, 0x10                                     |         r7 += 0x10;
    0x0002a7f2 ldr r0, [sp, 0xc]                                 |         r0 = var_ch;
    0x0002a7f4 bl 0x27e14                                        |         fcn_00027e14 (r0, r1);
    0x0002a7f8 ldr r3, [sp, 0x44]                                |         r3 = *(arg_44h);
    0x0002a7fa cmp fp, r4                                        |         
    0x0002a7fc add.w r1, sl, r4                                  |         r1 = sl + r4;
    0x0002a800 mov r6, r0                                        |         r6 = r0;
    0x0002a802 str r1, [sp]                                      |         *(sp) = r1;
    0x0002a804 mov r0, r5                                        |         r0 = r5;
    0x0002a806 add.w r2, r3, r4                                  |         r2 = r3 + r4;
    0x0002a80a ite gt                                            |         
                                                                 |         if (fp <= r4) {
    0x0002a80c movgt r1, 0x34                                    |             r1 = 0x34;
                                                                 |         }
                                                                 |         if (fp > r4) {
    0x0002a80e movle r1, 0x35                                    |             r1 = 0x35;
                                                                 |         }
    0x0002a810 mov r3, r8                                        |         r3 = r8;
    0x0002a812 it le                                             |         
                                                                 |         if (fp > r4) {
    0x0002a814 ldrle r3, [sp, 0x10]                              |             r3 = var_10h;
                                                                 |         }
    0x0002a816 adds r4, 1                                        |         r4++;
    0x0002a818 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0002a81c mov r2, r6                                        |         r2 = r6;
    0x0002a81e mvn r3, 1                                         |         r3 = ~1;
    0x0002a822 mov.w r1, -1                                      |         r1 = -1;
    0x0002a826 mov r0, r5                                        |         r0 = r5;
    0x0002a828 bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
    0x0002a82c ldr r3, [r5, 0x6c]                                |         r3 = *((r5 + 0x6c));
    0x0002a82e cmp r3, 0                                         |         
    0x0002a830 it gt                                             |         
                                                                 |         if (r3 <= 0) {
    0x0002a832 ldrgt r2, [r5, 0x68]                              |             r2 = *((r5 + 0x68));
                                                                 |         }
    0x0002a834 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x0002a838 ittt gt                                           |         
                                                                 |         if (r3 <= 0) {
    0x0002a83a addgt r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
                                                                 |         }
                                                                 |         if (r3 <= 0) {
    0x0002a83e movgt r3, 0x80                                    |             r3 = 0x80;
                                                                 |         }
                                                                 |         if (r3 > 0) {
    0x0002a840 strh r3, [r2, -0x12]                              |             *((r2 - 0x12)) = r3;
                                                                 |         }
    0x0002a844 cmp sb, r4                                        |         
    0x0002a846 bne 0x2a7ee                                       |         
                                                                 |     } while (sb != r4);
    0x0002a848 ldr r6, [sp, 0x14]                                |     r6 = var_14h;
                                                                 | label_3:
    0x0002a84a ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0002a84c mov r3, sl                                        |     r3 = sl;
    0x0002a84e mov r0, r5                                        |     r0 = r5;
    0x0002a850 movs r1, 0x50                                     |     r1 = 0x50;
    0x0002a852 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0002a856 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     do {
                                                                 | label_1:
    0x0002a85a mov r0, r6                                        |         r0 = r6;
    0x0002a85c add sp, 0x1c                                      |         
    0x0002a85e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_2:
    0x0002a862 ldrb r3, [r0, 0x13]                               |         r3 = *(arg_40hx13);
    0x0002a864 mov r4, r2                                        |         r4 = r2;
    0x0002a866 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0002a868 beq 0x2a8dc                                       |             goto label_4;
                                                                 |         }
    0x0002a86a subs r3, 1                                        |         r3--;
    0x0002a86c uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x0002a86e strb r3, [r0, 0x13]                               |         *((r0 + 0x13)) = r3;
    0x0002a870 adds r3, 0x26                                     |         r3 += 0x26;
    0x0002a872 ldr.w r6, [r0, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r6 = *((r0 + offset_0));
                                                                 | label_0:
    0x0002a876 ldr r2, [sp, 0x44]                                |         r2 = *(arg_44h);
    0x0002a878 mov r3, ip                                        |         r3 = ip;
    0x0002a87a movs r1, 0x1c                                     |         r1 = 0x1c;
    0x0002a87c mov r0, r5                                        |         r0 = r5;
    0x0002a87e str.w sb, [sp, 4]                                 |         __asm ("str.w sb, [var_4h]");
    0x0002a882 str r2, [sp]                                      |         *(sp) = r2;
    0x0002a884 mov r2, r4                                        |         r2 = r4;
    0x0002a886 bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0002a88a ldr r2, [sp, 0x44]                                |         r2 = *(arg_44h);
    0x0002a88c mov r3, sb                                        |         r3 = sb;
    0x0002a88e movs r1, 0x61                                     |         r1 = 0x61;
    0x0002a890 mov r0, r5                                        |         r0 = r5;
    0x0002a892 str r6, [sp]                                      |         *(sp) = r6;
    0x0002a894 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0002a898 ldr r3, [sp, 0x44]                                |         r3 = *(arg_44h);
    0x0002a89a mov r2, r4                                        |         r2 = r4;
    0x0002a89c movs r1, 0x8a                                     |         r1 = 0x8a;
    0x0002a89e mov r0, r5                                        |         r0 = r5;
    0x0002a8a0 str.w sb, [sp, 4]                                 |         __asm ("str.w sb, [var_4h]");
    0x0002a8a4 str r3, [sp]                                      |         *(sp) = r3;
    0x0002a8a6 mov r3, r6                                        |         r3 = r6;
    0x0002a8a8 bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0002a8ac ldr r3, [r5, 0x6c]                                |         r3 = *((r5 + 0x6c));
    0x0002a8ae cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x0002a8b0 ble 0x2a8c2                                       |             
    0x0002a8b2 ldr r2, [r5, 0x68]                                |             r2 = *((r5 + 0x68));
    0x0002a8b4 add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x0002a8b8 add.w r3, r2, r3, lsl 2                           |             r3 = r2 + (r3 << 2);
    0x0002a8bc movs r2, 0x10                                     |             r2 = 0x10;
    0x0002a8be strh r2, [r3, -0x12]                              |             *((r3 - 0x12)) = r2;
                                                                 |         }
                                                                 |         if (r6 != 0) {
    0x0002a8c2 cbz r6, 0x2a8d8                                   |             
    0x0002a8c4 ldrb.w r3, [r8, 0x13]                             |             r3 = *((r8 + 0x13));
    0x0002a8c8 cmp r3, 7                                         |             
                                                                 |             if (r3 > 7) {
    0x0002a8ca bhi 0x2a8d8                                       |                 goto label_5;
                                                                 |             }
    0x0002a8cc adds r2, r3, 1                                    |             r2 = r3 + 1;
    0x0002a8ce adds r3, 0x26                                     |             r3 += 0x26;
    0x0002a8d0 strb.w r2, [r8, 0x13]                             |             *((r8 + 0x13)) = r2;
    0x0002a8d4 str.w r6, [r8, r3, lsl 2]                         |             __asm ("str.w r6, [r8, r3, lsl 2]");
                                                                 |         }
                                                                 | label_5:
    0x0002a8d8 mov r6, r4                                        |         r6 = r4;
    0x0002a8da b 0x2a85a                                         |         
                                                                 |     } while (1);
                                                                 | label_4:
    0x0002a8dc ldr r6, [r0, 0x2c]                                |     r6 = *((r0 + 0x2c));
    0x0002a8de adds r6, 1                                        |     r6++;
    0x0002a8e0 str r6, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r6;
    0x0002a8e2 b 0x2a876                                         |     goto label_0;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2ab48 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0002ab48 ()                              | void fcn_0002ab48 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                         |     int16_t var_0h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x0002ab48 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x0002ab4c movs r6, 0                                |     r6 = 0;
    0x0002ab4e sub sp, 8                                 |     
    0x0002ab50 mov r3, r2                                |     r3 = r2;
    0x0002ab52 mov r4, r0                                |     r4 = r0;
    0x0002ab54 mov r7, r2                                |     r7 = r2;
    0x0002ab56 mov r8, r1                                |     r8 = r1;
    0x0002ab58 mov r2, r6                                |     r2 = r6;
    0x0002ab5a movs r1, 0x47                             |     r1 = 0x47;
    0x0002ab5c str r6, [sp]                              |     *(sp) = r6;
    0x0002ab5e bl 0x29ac4                                |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0002ab62 ldrd r5, r3, [r4, 0x6c]                   |     __asm ("ldrd r5, r3, [r4, 0x6c]");
    0x0002ab66 cmp r5, r3                                |     
                                                         |     if (r5 >= r3) {
    0x0002ab68 bge 0x2abd8                               |         goto label_0;
                                                         |     }
    0x0002ab6a add.w r3, r5, r5, lsl 2                   |     r3 = r5 + (r5 << 2);
    0x0002ab6e ldr r1, [r4, 0x68]                        |     r1 = *((r4 + 0x68));
    0x0002ab70 adds r2, r5, 1                            |     r2 = r5 + 1;
    0x0002ab72 lsls r3, r3, 2                            |     r3 <<= 2;
    0x0002ab74 str r2, [r4, 0x6c]                        |     *((r4 + 0x6c)) = r2;
    0x0002ab76 movs r0, 0x23                             |     r0 = 0x23;
    0x0002ab78 adds r2, r1, r3                           |     r2 = r1 + r3;
    0x0002ab7a strd r8, r6, [r2, 4]                      |     __asm ("strd r8, r6, [r2, 4]");
    0x0002ab7e strd r6, r6, [r2, 0xc]                    |     __asm ("strd r6, r6, [r2, 0xc]");
    0x0002ab82 str r0, [r1, r3]                          |     *((r1 + r3)) = r0;
                                                         |     do {
    0x0002ab84 movs r3, 0                                |         r3 = 0;
    0x0002ab86 mov r2, r8                                |         r2 = r8;
    0x0002ab88 movs r1, 0x5e                             |         r1 = 0x5e;
    0x0002ab8a mov r0, r4                                |         r0 = r4;
    0x0002ab8c str r7, [sp]                              |         *(sp) = r7;
    0x0002ab8e bl 0x29ac4                                |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0002ab92 ldr r3, [r4, 0x6c]                        |         r3 = *((r4 + 0x6c));
    0x0002ab94 cmp r3, 0                                 |         
                                                         |         if (r3 > 0) {
    0x0002ab96 ble 0x2aba8                               |             
    0x0002ab98 ldr r2, [r4, 0x68]                        |             r2 = *((r4 + 0x68));
    0x0002ab9a add.w r1, r3, r3, lsl 2                   |             r1 = r3 + (r3 << 2);
    0x0002ab9e add.w r2, r2, r1, lsl 2                   |             r2 += (r1 << 2);
    0x0002aba2 movs r1, 0x80                             |             r1 = 0x80;
    0x0002aba4 strh r1, [r2, -0x12]                      |             *((r2 - 0x12)) = r1;
                                                         |         }
    0x0002aba8 ldr r2, [r4]                              |         r2 = *(r4);
    0x0002abaa cmp r5, 0                                 |         
    0x0002abac it lt                                     |         
                                                         |         if (r5 >= 0) {
    0x0002abae addlt r5, r3, -1                          |             r5 = r3 + -1;
                                                         |         }
    0x0002abb2 ldrb.w r2, [r2, 0x57]                     |         r2 = *((r2 + 0x57));
                                                         |         if (r2 == 0) {
    0x0002abb6 cbnz r2, 0x2abca                          |             
    0x0002abb8 ldr r2, [r4, 0x68]                        |             r2 = *((r4 + 0x68));
    0x0002abba add.w r5, r5, r5, lsl 2                   |             r5 += (r5 << 2);
    0x0002abbe add.w r2, r2, r5, lsl 2                   |             r2 += (r5 << 2);
    0x0002abc2 str r3, [r2, 8]                           |             *((r2 + 8)) = r3;
    0x0002abc4 add sp, 8                                 |             
    0x0002abc6 pop.w {r4, r5, r6, r7, r8, pc}            |             
    0x0002abc8 strh r0, [r6, 0xe]                        |             *((r6 + 0xe)) = r0;
                                                         |         }
    0x0002abca ldr r2, [pc, 0x20]                        |         
    0x0002abcc add r2, pc                                |         r2 = 0x557be;
    0x0002abce adds r2, 4                                |         r2 += 4;
    0x0002abd0 str r3, [r2, 8]                           |         *((r2 + 8)) = r3;
    0x0002abd2 add sp, 8                                 |         
    0x0002abd4 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_0:
    0x0002abd8 mov r3, r6                                |         r3 = r6;
    0x0002abda mov r2, r8                                |         r2 = r8;
    0x0002abdc movs r1, 0x23                             |         r1 = 0x23;
    0x0002abde mov r0, r4                                |         r0 = r4;
    0x0002abe0 str r6, [sp]                              |         *(sp) = r6;
    0x0002abe2 bl 0x29a7c                                |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0002abe6 mov r5, r0                                |         r5 = r0;
    0x0002abe8 b 0x2ab84                                 |         
                                                         |     } while (1);
                                                         | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2b06c */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0002b06c ()                      | void fcn_0002b06c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
                                                 |     r3 = arg4;
    0x0002b06c push {r4, r5, r6, r7, lr}         |     
    0x0002b06e mov ip, r1                        |     
    0x0002b070 mov r6, r3                        |     r6 = r3;
    0x0002b072 ldrd r1, r3, [r0, 0x6c]           |     __asm ("ldrd r1, r3, [var_0hx6c]");
    0x0002b076 sub sp, 0xc                       |     
    0x0002b078 mov r4, r0                        |     r4 = r0;
    0x0002b07a mov r5, r2                        |     r5 = r2;
    0x0002b07c cmp r1, r3                        |     
                                                 |     if (r1 >= r3) {
    0x0002b07e bge 0x2b110                       |         goto label_1;
                                                 |     }
    0x0002b080 add.w r0, r1, r1, lsl 2           |     r0 = r1 + (r1 << 2);
    0x0002b084 ldr r2, [r4, 0x68]                |     r2 = *((r4 + 0x68));
    0x0002b086 adds r3, r1, 1                    |     r3 = r1 + 1;
    0x0002b088 lsls r0, r0, 2                    |     r0 <<= 2;
    0x0002b08a str r3, [r4, 0x6c]                |     *((r4 + 0x6c)) = r3;
    0x0002b08c movs r7, 0                        |     r7 = 0;
    0x0002b08e adds r3, r2, r0                   |     r3 = r2 + r0;
    0x0002b090 mov.w lr, 0x95                    |     lr = 0x95;
    0x0002b094 strd ip, r7, [r3, 4]              |     __asm ("strd ip, r7, [r3, 4]");
    0x0002b098 strd r7, r7, [r3, 0xc]            |     __asm ("strd r7, r7, [r3, 0xc]");
    0x0002b09c str.w lr, [r2, r0]                |     __asm ("str.w lr, [r2, r0]");
                                                 | label_0:
    0x0002b0a0 mvn r3, 5                         |     r3 = ~5;
    0x0002b0a4 mov r2, r5                        |     r2 = r5;
    0x0002b0a6 mov r0, r4                        |     r0 = r4;
    0x0002b0a8 bl 0x1ec70                        |     fcn_0001ec70 (r0, r1, r2);
    0x0002b0ac ldr r2, [r4, 0x6c]                |     r2 = *((r4 + 0x6c));
    0x0002b0ae cmp r2, 0                         |     
    0x0002b0b0 itttt gt                          |     
                                                 |     if (r2 <= 0) {
    0x0002b0b2 ldrgt r3, [r4, 0x68]              |         r3 = *((r4 + 0x68));
                                                 |     }
                                                 |     if (r2 <= 0) {
    0x0002b0b4 addgt r2, r2, r2, lsl 2           |         r2 += (r2 << 2);
                                                 |     }
                                                 |     if (r2 <= 0) {
    0x0002b0b8 addgt r3, r3, r2, lsl 2           |         r3 += (r2 << 2);
                                                 |     }
                                                 |     if (r2 > 0) {
    0x0002b0bc strh r6, [r3, -0x12]              |         *((r3 - 0x12)) = r6;
                                                 |     }
    0x0002b0c0 ldr r6, [r4]                      |     r6 = *(r4);
    0x0002b0c2 ldr r5, [r6, 0x14]                |     r5 = *((r6 + 0x14));
    0x0002b0c4 cmp r5, 0                         |     
                                                 |     if (r5 <= 0) {
    0x0002b0c6 ble 0x2b0fe                       |         goto label_2;
                                                 |     }
    0x0002b0c8 ldr.w r0, [r4, 0x98]              |     r0 = *((r4 + 0x98));
    0x0002b0cc movs r3, 0                        |     r3 = 0;
    0x0002b0ce mov.w ip, 1                       |     
                                                 |     do {
    0x0002b0d2 lsl.w r1, ip, r3                  |         r1 = ip << r3;
    0x0002b0d6 cmp r3, 1                         |         
    0x0002b0d8 orr.w r0, r0, r1                  |         r0 |= r1;
                                                 |         if (r3 != 1) {
    0x0002b0dc beq 0x2b0f4                       |             
    0x0002b0de ldr r2, [r6, 0x10]                |             r2 = *((r6 + 0x10));
    0x0002b0e0 add.w r2, r2, r3, lsl 4           |             r2 += (r3 << 4);
    0x0002b0e4 ldr r2, [r2, 4]                   |             r2 = *((r2 + 4));
    0x0002b0e6 ldrb r2, [r2, 9]                  |             r2 = *((r2 + 9));
                                                 |             if (r2 == 0) {
    0x0002b0e8 cbz r2, 0x2b0f4                   |                 goto label_3;
                                                 |             }
    0x0002b0ea ldr.w r2, [r4, 0x9c]              |             r2 = *((r4 + 0x9c));
    0x0002b0ee orrs r2, r1                       |             r2 |= r1;
    0x0002b0f0 str.w r2, [r4, 0x9c]              |             __asm ("str.w r2, [r4, 0x9c]");
                                                 |         }
                                                 | label_3:
    0x0002b0f4 adds r3, 1                        |         r3++;
    0x0002b0f6 cmp r3, r5                        |         
    0x0002b0f8 bne 0x2b0d2                       |         
                                                 |     } while (r3 != r5);
    0x0002b0fa str.w r0, [r4, 0x98]              |     __asm ("str.w r0, [r4, 0x98]");
                                                 | label_2:
    0x0002b0fe ldr r2, [r4, 0xc]                 |     r2 = *((r4 + 0xc));
    0x0002b100 movs r1, 1                        |     r1 = 1;
    0x0002b102 ldr r3, [r2, 0x74]                |     r3 = *((r2 + 0x74));
    0x0002b104 cmp r3, 0                         |     
    0x0002b106 it eq                             |     
                                                 |     if (r3 != 0) {
    0x0002b108 moveq r3, r2                      |         r3 = r2;
                                                 |     }
    0x0002b10a strb r1, [r3, 0x15]               |     *((r3 + 0x15)) = r1;
    0x0002b10c add sp, 0xc                       |     
    0x0002b10e pop {r4, r5, r6, r7, pc}          |     
                                                 | label_1:
    0x0002b110 movs r3, 0                        |     r3 = 0;
    0x0002b112 movs r1, 0x95                     |     r1 = 0x95;
    0x0002b114 mov r2, ip                        |     r2 = ip;
    0x0002b116 str r3, [sp]                      |     *(sp) = r3;
    0x0002b118 bl 0x29a7c                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0002b11c mov r1, r0                        |     r1 = r0;
    0x0002b11e b 0x2b0a0                         |     goto label_0;
                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2b120 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0002b120 ()                      | void fcn_0002b120 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
    0x0002b120 push {r4, r5, r6, lr}             |     
    0x0002b122 mov r4, r0                        |     r4 = r0;
    0x0002b124 ldr r0, [r0, 8]                   |     r0 = *((r0 + 8));
    0x0002b126 sub sp, 8                         |     
                                                 |     if (r0 != 0) {
    0x0002b128 cbz r0, 0x2b158                   |         
    0x0002b12a ldr r3, [r4]                      |         r3 = *(r4);
    0x0002b12c mov r5, r1                        |         r5 = r1;
    0x0002b12e mov r6, r2                        |         r6 = r2;
    0x0002b130 mov r2, r5                        |         r2 = r5;
    0x0002b132 ldr r1, [r3, 0x10]                |         r1 = *((r3 + 0x10));
    0x0002b134 add.w r1, r1, r5, lsl 4           |         r1 += (r5 << 4);
    0x0002b138 ldr r3, [r1, 0xc]                 |         r3 = *((r1 + 0xc));
    0x0002b13a ldr r1, [r3]                      |         r1 = *(r3);
    0x0002b13c movs r3, 1                        |         r3 = 1;
    0x0002b13e adds r1, 1                        |         r1++;
    0x0002b140 str r1, [sp]                      |         *(sp) = r1;
    0x0002b142 movs r1, 0x64                     |         r1 = 0x64;
    0x0002b144 bl 0x29ac4                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0002b148 ldr r0, [r4, 8]                   |         r0 = *((r4 + 8));
    0x0002b14a mov r3, r6                        |         r3 = r6;
    0x0002b14c movs r2, 0                        |         r2 = 0;
    0x0002b14e mov r1, r5                        |         r1 = r5;
    0x0002b150 bl 0x2b06c                        |         fcn_0002b06c (r0, r1, r2, r3);
    0x0002b154 cmp r5, 1                         |         
                                                 |         if (r5 != 1) {
    0x0002b156 bne 0x2b15c                       |             goto label_0;
                                                 |         }
                                                 |     }
    0x0002b158 add sp, 8                         |     
    0x0002b15a pop {r4, r5, r6, pc}              |     
                                                 | label_0:
    0x0002b15c ldr r0, [r4, 8]                   |     r0 = *((r4 + 8));
    0x0002b15e mov r3, r6                        |     r3 = r6;
    0x0002b160 movs r2, 0                        |     r2 = 0;
    0x0002b162 movs r1, 1                        |     r1 = 1;
    0x0002b164 add sp, 8                         |     
    0x0002b166 pop.w {r4, r5, r6, lr}            |     
    0x0002b16a b 0x2b06c                         |     return void (*0x2b06c)() ();
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2ba0c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0002ba0c ()                                      | void fcn_0002ba0c (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0002ba0c push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x0002ba10 mov r6, r2                                        |     r6 = r2;
    0x0002ba12 ldr r5, [r0, 0x74]                                |     r5 = *(arg_20hx74);
    0x0002ba14 mov r4, r1                                        |     r4 = r1;
    0x0002ba16 mov r7, r3                                        |     r7 = r3;
    0x0002ba18 ldr.w r8, [sp, 0x20]                              |     r8 = *(arg_20h);
    0x0002ba1c cmp r5, 0                                         |     
    0x0002ba1e it eq                                             |     
                                                                 |     if (r5 != 0) {
    0x0002ba20 moveq r5, r0                                      |         r5 = r0;
                                                                 |     }
    0x0002ba22 ldrd r2, sb, [r5, 0x68]                           |     __asm ("ldrd r2, sb, [r5, 0x68]");
    0x0002ba26 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0002ba28 ble 0x2ba5a                                       |         goto label_2;
                                                                 |     }
    0x0002ba2a mov r0, sb                                        |     r0 = sb;
    0x0002ba2c mov.w ip, 0                                       |     
    0x0002ba30 b 0x2ba3a                                         |     
                                                                 |     while (r3 != r4) {
                                                                 | label_0:
    0x0002ba32 cmp ip, r2                                        |         
    0x0002ba34 add.w r0, r0, 0x10                                |         r0 += 0x10;
                                                                 |         if (ip == r2) {
    0x0002ba38 beq 0x2ba5a                                       |             goto label_2;
                                                                 |         }
    0x0002ba3a ldr r3, [r0]                                      |         r3 = *(r0);
    0x0002ba3c add.w ip, ip, 1                                   |         
    0x0002ba40 cmp r3, r4                                        |         
    0x0002ba42 bne 0x2ba32                                       |         
                                                                 |     }
    0x0002ba44 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0002ba46 cmp r3, r6                                        |     
                                                                 |     if (r3 != r6) {
    0x0002ba48 bne 0x2ba32                                       |         goto label_0;
                                                                 |     }
    0x0002ba4a ldrb r3, [r0, 8]                                  |     r3 = *((r0 + 8));
    0x0002ba4c orrs r3, r7                                       |     r3 |= r7;
    0x0002ba4e ite ne                                            |     
                                                                 |     if (r3 == r7) {
    0x0002ba50 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != r7) {
    0x0002ba52 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0002ba54 strb r3, [r0, 8]                                  |     *((r0 + 8)) = r3;
    0x0002ba56 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |     
                                                                 | label_2:
    0x0002ba5a ldr.w sl, [r5]                                    |     sl = *(r5);
    0x0002ba5e adds r2, 1                                        |     r2++;
    0x0002ba60 lsls r2, r2, 4                                    |     r2 <<= 4;
    0x0002ba62 mov r1, sb                                        |     r1 = sb;
    0x0002ba64 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0002ba66 mov r0, sl                                        |     r0 = sl;
    0x0002ba68 bl 0x1ac9c                                        |     r0 = fcn_0001ac9c (r0, r1, r2);
                                                                 |     if (r0 == 0) {
    0x0002ba6c cbz r0, 0x2ba88                                   |         goto label_3;
                                                                 |     }
    0x0002ba6e ldr r3, [r5, 0x68]                                |     r3 = *((r5 + 0x68));
    0x0002ba70 str r0, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r0;
    0x0002ba72 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0002ba74 lsls r3, r3, 4                                    |     r3 <<= 4;
    0x0002ba76 str r2, [r5, 0x68]                                |     *((r5 + 0x68)) = r2;
    0x0002ba78 str r4, [r0, r3]                                  |     *((r0 + r3)) = r4;
    0x0002ba7a add r0, r3                                        |     r0 += r3;
    0x0002ba7c str r6, [r0, 4]                                   |     *((r0 + 4)) = r6;
    0x0002ba7e strb r7, [r0, 8]                                  |     *((r0 + 8)) = r7;
    0x0002ba80 str.w r8, [r0, 0xc]                               |     __asm ("str.w r8, [r0, 0xc]");
                                                                 |     do {
                                                                 | label_1:
    0x0002ba84 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_3:
    0x0002ba88 cmp.w sb, 0                                       |         
                                                                 |         if (sb != 0) {
    0x0002ba8c beq 0x2ba96                                       |             
    0x0002ba8e mov r1, sb                                        |             r1 = sb;
    0x0002ba90 mov r0, sl                                        |             r0 = sl;
    0x0002ba92 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x0002ba96 ldr r0, [r5]                                      |         r0 = *(r5);
    0x0002ba98 movs r3, 0                                        |         r3 = 0;
    0x0002ba9a strd r3, r3, [r5, 0x68]                           |         __asm ("strd r3, r3, [r5, 0x68]");
    0x0002ba9e ldrb.w r3, [r0, 0x57]                             |         r3 = *((r0 + 0x57));
    0x0002baa2 cmp r3, 0                                         |         
    0x0002baa4 bne 0x2ba84                                       |         
                                                                 |     } while (r3 != 0);
    0x0002baa6 ldrb.w r3, [r0, 0x58]                             |     r3 = *((r0 + 0x58));
    0x0002baaa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002baac bne 0x2ba84                                       |         goto label_1;
                                                                 |     }
    0x0002baae pop.w {r4, r5, r6, r7, r8, sb, sl, lr}            |     
    0x0002bab2 b.w 0x1d600                                       |     return void (*0x1d600)() ();
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2c338 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0002c338 ()                      | void fcn_0002c338 (arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                 |     int16_t var_4h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
                                                 |     r3 = arg4;
    0x0002c338 push {r4, r5, r6, r7, lr}         |     
    0x0002c33a mov r5, r2                        |     r5 = r2;
    0x0002c33c mov r2, r3                        |     r2 = r3;
    0x0002c33e ldrh r3, [r5, 8]                  |     r3 = *((r5 + 8));
    0x0002c340 sub sp, 0xc                       |     
    0x0002c342 mov r7, r1                        |     r7 = r1;
    0x0002c344 ldr r4, [r1, 0x34]                |     r4 = *((r1 + 0x34));
                                                 |     if (r3 == 0) {
    0x0002c346 cbz r3, 0x2c380                   |         goto label_3;
                                                 |     }
                                                 |     if (r4 == 0) {
    0x0002c348 cbz r4, 0x2c370                   |         goto label_0;
                                                 |     }
    0x0002c34a ldr r6, [r4]                      |     r6 = *(r4);
    0x0002c34c cmp r6, r3                        |     
                                                 |     if (r6 >= r3) {
    0x0002c34e bge 0x2c39c                       |         goto label_4;
                                                 |     }
    0x0002c350 ldr r1, [r4, 4]                   |     r1 = *((r4 + 4));
    0x0002c352 adds r3, r6, 1                    |     r3 = r6 + 1;
    0x0002c354 strh r3, [r5, 8]                  |     *((r5 + 8)) = r3;
    0x0002c356 cmp r1, r6                        |     
                                                 |     if (r1 <= r6) {
    0x0002c358 ble 0x2c390                       |         goto label_5;
                                                 |     }
                                                 | label_1:
    0x0002c35a add.w r6, r4, r6, lsl 4           |     r6 = r4 + (r6 << 4);
    0x0002c35e movs r1, 0                        |     r1 = 0;
    0x0002c360 str r3, [r4]                      |     *(r4) = r3;
    0x0002c362 strd r1, r1, [r6, 0xc]            |     __asm ("strd r1, r1, [r6, 0xc]");
    0x0002c366 str r1, [r6, 0x14]                |     *((r6 + 0x14)) = r1;
    0x0002c368 str r2, [r6, 8]                   |     *((r6 + 8)) = r2;
                                                 |     do {
                                                 | label_2:
    0x0002c36a str r4, [r7, 0x34]                |         *((r7 + 0x34)) = r4;
    0x0002c36c add sp, 0xc                       |         
    0x0002c36e pop {r4, r5, r6, r7, pc}          |         
                                                 | label_0:
    0x0002c370 movs r3, 1                        |         r3 = 1;
    0x0002c372 ldr r0, [r0]                      |         r0 = *(r0);
    0x0002c374 mov r1, r2                        |         r1 = r2;
    0x0002c376 strh r3, [r5, 8]                  |         *((r5 + 8)) = r3;
    0x0002c378 bl 0x1db50                        |         r0 = fcn_0001db50 (r0);
    0x0002c37c mov r4, r0                        |         r4 = r0;
    0x0002c37e b 0x2c36a                         |         
                                                 |     } while (1);
                                                 | label_3:
    0x0002c380 cmp r4, 0                         |     
                                                 |     if (r4 == 0) {
    0x0002c382 beq 0x2c370                       |         goto label_0;
                                                 |     }
    0x0002c384 ldr r6, [r4]                      |     r6 = *(r4);
    0x0002c386 ldr r1, [r4, 4]                   |     r1 = *((r4 + 4));
    0x0002c388 adds r3, r6, 1                    |     r3 = r6 + 1;
    0x0002c38a cmp r1, r6                        |     
    0x0002c38c strh r3, [r5, 8]                  |     *((r5 + 8)) = r3;
                                                 |     if (r1 > r6) {
    0x0002c38e bgt 0x2c35a                       |         goto label_1;
                                                 |     }
                                                 | label_5:
    0x0002c390 mov r1, r4                        |     r1 = r4;
    0x0002c392 ldr r0, [r0]                      |     r0 = *(r0);
    0x0002c394 bl 0x2bf84                        |     r0 = fcn_0002bf84 (r0, r1);
    0x0002c398 mov r4, r0                        |     r4 = r0;
    0x0002c39a b 0x2c36a                         |     goto label_2;
                                                 | label_4:
    0x0002c39c subs r3, 1                        |     r3--;
    0x0002c39e lsls r3, r3, 4                    |     r3 <<= 4;
    0x0002c3a0 adds r1, r4, r3                   |     r1 = r4 + r3;
    0x0002c3a2 ldr r1, [r1, 8]                   |     r1 = *((r1 + 8));
                                                 |     if (r1 != 0) {
    0x0002c3a4 cbz r1, 0x2c3b6                   |         
    0x0002c3a6 ldr r0, [r0]                      |         r0 = *(r0);
    0x0002c3a8 str r2, [sp, 4]                   |         var_4h = r2;
    0x0002c3aa bl 0x16c0c                        |         fcn_00016c0c (r0, r1);
    0x0002c3ae ldrh r3, [r5, 8]                  |         r3 = *((r5 + 8));
    0x0002c3b0 ldr r2, [sp, 4]                   |         r2 = var_4h;
    0x0002c3b2 subs r3, 1                        |         r3--;
    0x0002c3b4 lsls r3, r3, 4                    |         r3 <<= 4;
                                                 |     }
    0x0002c3b6 add r4, r3                        |     r4 += r3;
    0x0002c3b8 str r2, [r4, 8]                   |     *((r4 + 8)) = r2;
    0x0002c3ba add sp, 0xc                       |     
    0x0002c3bc pop {r4, r5, r6, r7, pc}          |     
                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2c5b4).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2d0d0 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0002d0d0 ()                                          | void fcn_0002d0d0 (arithmetic arg1, uint32_t arg2) {
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     arithmetic var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x0002d0d0 ldr r2, [pc, 0xfc]                                    |     
    0x0002d0d2 ldr r3, [pc, 0x100]                                   |     r3 = *(0x2d1d6);
    0x0002d0d4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002d0d8 sub sp, 0x2c                                          |     
    0x0002d0da add r2, pc                                            |     r2 = 0x5a2ae;
    0x0002d0dc ldr r3, [r2, r3]                                      |     
    0x0002d0de ldr r3, [r3]                                          |     r3 = *(0x5a2ae);
    0x0002d0e0 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0002d0e2 mov.w r3, 0                                           |     r3 = 0;
    0x0002d0e6 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0002d0e8 beq 0x2d1c8                                           |         goto label_1;
                                                                     |     }
    0x0002d0ea ldr r3, [pc, 0xec]                                    |     
    0x0002d0ec mov r8, r1                                            |     r8 = r1;
    0x0002d0ee ldr r1, [r0]                                          |     r1 = *(r0);
    0x0002d0f0 movs r5, 0                                            |     r5 = 0;
    0x0002d0f2 ldr r2, [r0, 0x18]                                    |     r2 = *((r0 + 0x18));
    0x0002d0f4 movw sl, 0x6fef                                       |     
    0x0002d0f8 add r3, pc                                            |     r3 = 0x5a2d6;
    0x0002d0fa movw r7, 0x9010                                       |     
    0x0002d0fe strd r1, r3, [sp, 8]                                  |     __asm ("strd r1, r3, [sp, 8]");
    0x0002d102 movt sl, 0xf7ff                                       |     sl = 0xf7ff6fef;
    0x0002d106 ldr r3, [pc, 0xd4]                                    |     
    0x0002d108 movt r7, 0x800                                        |     r7 = 0x8009010;
    0x0002d10c and.w r1, r2, sl                                      |     r1 = r2 & sl;
    0x0002d110 mov sb, r0                                            |     sb = r0;
    0x0002d112 and.w fp, r2, r7                                      |     
    0x0002d116 str r0, [sp, 0x20]                                    |     var_20h = r0;
    0x0002d118 add r3, pc                                            |     r3 = 0x5a2fa;
    0x0002d11a strd r3, r5, [sp, 0x10]                               |     __asm ("strd r3, r5, [sp, 0x10]");
    0x0002d11e ldr.w r3, [r8]                                        |     r3 = *(r8);
    0x0002d122 str r1, [r0, 0x18]                                    |     *((r0 + 0x18)) = r1;
    0x0002d124 cmp r3, r5                                            |     
                                                                     |     if (r3 <= r5) {
    0x0002d126 ble 0x2d1c4                                           |         goto label_2;
                                                                     |     }
    0x0002d128 add r2, sp, 8                                         |     r2 += var_8h;
    0x0002d12a mov r6, r8                                            |     r6 = r8;
    0x0002d12c str r2, [sp, 4]                                       |     var_4h = r2;
    0x0002d12e b 0x2d17a                                             |     goto label_3;
                                                                     | label_0:
    0x0002d130 mov r1, r4                                            |     r1 = r4;
    0x0002d132 ldr r0, [sp, 4]                                       |     r0 = var_4h;
    0x0002d134 bl 0x2cd88                                            |     fcn_0002cd88 (r0, r1);
    0x0002d138 ldr r0, [sp, 8]                                       |     r0 = var_8h;
    0x0002d13a ldr r2, [r4, 0x18]                                    |     r2 = *((r4 + 0x18));
    0x0002d13c ldr.w r1, [sb, 0x18]                                  |     r1 = *((sb + 0x18));
    0x0002d140 ldr.w r3, [r0, 0xd8]                                  |     r3 = *((r0 + 0xd8));
    0x0002d144 subs r3, r3, r2                                       |     r3 -= r2;
    0x0002d146 str.w r3, [r0, 0xd8]                                  |     __asm ("str.w r3, [r0, 0xd8]");
    0x0002d14a ands.w r3, r1, r7                                     |     r3 = r1 & r7;
                                                                     |     if (r3 != r1) {
    0x0002d14e beq 0x2d168                                           |         
    0x0002d150 orr.w fp, fp, r3                                      |         
    0x0002d154 ldr r3, [r4, 4]                                       |         r3 = *((r4 + 4));
    0x0002d156 movw r2, 0x8010                                       |         r2 = 0x8010;
    0x0002d15a ands r2, r1                                           |         r2 &= r1;
    0x0002d15c and.w r1, r1, sl                                      |         r1 &= sl;
    0x0002d160 orrs r3, r2                                           |         r3 |= r2;
    0x0002d162 str r3, [r4, 4]                                       |         *((r4 + 4)) = r3;
    0x0002d164 str.w r1, [sb, 0x18]                                  |         __asm ("str.w r1, [sb, 0x18]");
                                                                     |     }
    0x0002d168 ldr r3, [r0, 0x24]                                    |     r3 = *((r0 + 0x24));
    0x0002d16a cmp r3, 0                                             |     
                                                                     |     if (r3 > 0) {
    0x0002d16c bgt 0x2d1a0                                           |         goto label_4;
                                                                     |     }
    0x0002d16e ldr.w r3, [r8]                                        |     r3 = *(r8);
                                                                     |     do {
    0x0002d172 adds r5, 1                                            |         r5++;
    0x0002d174 adds r6, 0x10                                         |         r6 += 0x10;
    0x0002d176 cmp r3, r5                                            |         
                                                                     |         if (r3 <= r5) {
    0x0002d178 ble 0x2d1bc                                           |             goto label_5;
                                                                     |         }
                                                                     | label_3:
    0x0002d17a ldr r4, [r6, 8]                                       |         r4 = *((r6 + 8));
    0x0002d17c cmp r4, 0                                             |         
    0x0002d17e beq 0x2d172                                           |         
                                                                     |     } while (r4 == 0);
    0x0002d180 ldr r0, [sp, 8]                                       |     r0 = var_8h;
    0x0002d182 ldr r1, [r4, 0x18]                                    |     r1 = *((r4 + 0x18));
    0x0002d184 ldr r2, [r0]                                          |     r2 = *(r0);
    0x0002d186 ldr.w r3, [r0, 0xd8]                                  |     r3 = *((r0 + 0xd8));
    0x0002d18a ldr.w r2, [r2, 0x84]                                  |     r2 = *((r2 + 0x84));
    0x0002d18e add r3, r1                                            |     r3 += r1;
    0x0002d190 str.w r3, [r0, 0xd8]                                  |     __asm ("str.w r3, [r0, 0xd8]");
    0x0002d194 cmp r3, r2                                            |     
                                                                     |     if (r3 <= r2) {
    0x0002d196 ble 0x2d130                                           |         goto label_0;
                                                                     |     }
    0x0002d198 ldr r1, [pc, 0x44]                                    |     
    0x0002d19a add r1, pc                                            |     r1 = 0x5a37e;
    0x0002d19c bl 0x1d554                                            |     fcn_0001d554 (r0, r1);
                                                                     | label_4:
    0x0002d1a0 movs r0, 2                                            |     r0 = 2;
                                                                     |     do {
    0x0002d1a2 ldr r2, [pc, 0x40]                                    |         
    0x0002d1a4 ldr r3, [pc, 0x2c]                                    |         r3 = *(0x2d1d4);
    0x0002d1a6 add r2, pc                                            |         r2 = 0x5a390;
    0x0002d1a8 ldr r3, [r2, r3]                                      |         r3 = *(0x5a390);
    0x0002d1aa ldr r2, [r3]                                          |         r2 = *(0x5a390);
    0x0002d1ac ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0002d1ae eors r2, r3                                           |         r2 ^= r3;
    0x0002d1b0 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0002d1b4 bne 0x2d1cc                                           |             goto label_6;
                                                                     |         }
    0x0002d1b6 add sp, 0x2c                                          |         
    0x0002d1b8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_5:
    0x0002d1bc ldr.w r2, [sb, 0x18]                                  |         r2 = *((sb + 0x18));
    0x0002d1c0 orr.w r2, fp, r2                                      |         r2 = fp | r2;
                                                                     | label_2:
    0x0002d1c4 str.w r2, [sb, 0x18]                                  |         __asm ("str.w r2, [sb, 0x18]");
                                                                     | label_1:
    0x0002d1c8 movs r0, 0                                            |         r0 = 0;
    0x0002d1ca b 0x2d1a2                                             |         
                                                                     |     } while (1);
                                                                     | label_6:
    0x0002d1cc blx 0x9b44                                            |     fcn_00009b44 ();
    0x0002d1d0 subs r2, 0x26                                         |     r2 -= 0x26;
    0x0002d1d2 movs r7, r0                                           |     r7 = r0;
    0x0002d1d4 lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0002d1d6 movs r0, r0                                           |     
    0x0002d1d8 subs r5, 0x69                                         |     r5 -= 0x69;
    0x0002d1da movs r1, r0                                           |     r1 = r0;
    0x0002d1dc strh r5, [r6, 4]                                      |     *((r6 + 4)) = r5;
    0x0002d1de movs r0, r0                                           |     
    0x0002d1e0 invalid                                               |     
                                                                     | }
    ; assembly                                                                               | /* r2dec pseudo code output */
                                                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2d8f0 */
                                                                                             | #include <stdint.h>
                                                                                             |  
    ; (fcn) fcn.0002d8f0 ()                                                                  | void fcn_0002d8f0 (int16_t arg1, int16_t arg2) {
                                                                                             |     int32_t var_0h;
                                                                                             |     int32_t var_0h_2;
                                                                                             |     int16_t var_8h;
                                                                                             |     int32_t var_ch;
                                                                                             |     int32_t var_ch_2;
                                                                                             |     int32_t var_14h;
                                                                                             |     int32_t var_14h_2;
                                                                                             |     int16_t var_1ch;
                                                                                             |     r0 = arg1;
                                                                                             |     r1 = arg2;
    0x0002d8f0 mvnsmi lr, sp, lsr 18                                                         |     __asm ("mvnsmi lr, sp, lsr 18");
    0x0002d8f4 mov r6, r0                                                                    |     r6 = r0;
    0x0002d8f6 ldr r4, [pc, 0xb4]                                                            |     
    0x0002d8f8 sub sp, 0x20                                                                  |     
    0x0002d8fa movs r2, 0                                                                    |     r2 = 0;
    0x0002d8fc mov r7, r1                                                                    |     r7 = r1;
    0x0002d8fe ldr r0, [pc, 0xb0]                                                            |     r0 = *(0x2d9b2);
    0x0002d900 add r4, pc                                                                    |     r4 = 0x5b2b2;
    0x0002d902 ldr r3, [pc, 0xb0]                                                            |     
    0x0002d904 ldr r0, [r4, r0]                                                              |     
    0x0002d906 add r3, pc                                                                    |     r3 = 0x5b2c0;
    0x0002d908 ldr r0, [r0]                                                                  |     r0 = *(0x5b2b2);
    0x0002d90a str r0, [sp, 0x1c]                                                            |     var_1ch = r0;
    0x0002d90c mov.w r0, 0                                                                   |     r0 = 0;
    0x0002d910 str r2, [sp, 8]                                                               |     var_8h = r2;
    0x0002d912 strd r6, r3, [sp]                                                             |     __asm ("strd r6, r3, [sp]");
    0x0002d916 strd r2, r2, [sp, 0xc]                                                        |     __asm ("strd r2, r2, [var_ch]");
    0x0002d91a strd r2, r2, [sp, 0x14]                                                       |     __asm ("strd r2, r2, [var_14h]");
                                                                                             |     if (r1 == 0) {
    0x0002d91e cbz r1, 0x2d942                                                               |         goto label_3;
                                                                                             |     }
    0x0002d920 ldr r4, [r1]                                                                  |     r4 = *(r1);
    0x0002d922 cmp r4, 0                                                                     |     
                                                                                             |     if (r4 <= 0) {
    0x0002d924 ble 0x2d98c                                                                   |         goto label_4;
                                                                                             |     }
    0x0002d926 add.w r5, r1, 0x18                                                            |     r5 = r1 + 0x18;
    0x0002d92a mov r8, sp                                                                    |     r8 = sp;
                                                                                             |     do {
    0x0002d92c ldr r1, [r5, -0x10]                                                           |         r1 = *((r5 - 0x10));
                                                                                             |         if (r1 != 0) {
    0x0002d930 cbz r1, 0x2d93a                                                               |             
    0x0002d932 mov r0, r8                                                                    |             r0 = r8;
    0x0002d934 bl 0x2cd88                                                                    |             r0 = fcn_0002cd88 (r0, r1);
                                                                                             |             if (r0 != 0) {
    0x0002d938 cbnz r0, 0x2d942                                                              |                 goto label_3;
                                                                                             |             }
                                                                                             |         }
    0x0002d93a subs r4, 1                                                                    |         r4--;
    0x0002d93c add.w r5, r5, 0x10                                                            |         r5 += 0x10;
    0x0002d940 bne 0x2d92c                                                                   |         
                                                                                             |     } while (r4 != 1);
                                                                                             | label_3:
    0x0002d942 ldr r0, [r7]                                                                  |     r0 = *(r7);
    0x0002d944 cmp r0, 0                                                                     |     
    0x0002d946 ittt gt                                                                       |     
                                                                                             |     if (r0 <= 0) {
    0x0002d948 movgt r3, 0                                                                   |         r3 = 0;
                                                                                             |     }
                                                                                             |     if (r0 <= 0) {
    0x0002d94a movgt r1, r7                                                                  |         r1 = r7;
                                                                                             |     }
                                                                                             |     if (r0 <= 0) {
    0x0002d94c movgt ip, r3                                                                  |         
                                                                                             |     }
                                                                                             |     if (r0 > 0) {
    0x0002d94e bgt 0x2d95c                                                                   |         goto label_2;
                                                                                             |     }
    0x0002d950 b 0x2d98c                                                                     |     goto label_4;
                                                                                             |     do {
                                                                                             | label_0:
    0x0002d952 cmp r2, r0                                                                    |         
    0x0002d954 mov r3, r2                                                                    |         r3 = r2;
    0x0002d956 add.w r1, r1, 0x10                                                            |         r1 += 0x10;
                                                                                             |         if (r2 == r0) {
    0x0002d95a beq 0x2d98c                                                                   |             goto label_4;
                                                                                             |         }
                                                                                             | label_2:
    0x0002d95c adds r2, r3, 1                                                                |         r2 = r3 + 1;
    0x0002d95e add.w r3, r7, r2, lsl 4                                                       |         r3 = r7 + (r2 << 4);
    0x0002d962 ldrb r3, [r3, 1]                                                              |         r3 = *((r3 + 1));
    0x0002d964 lsls r3, r3, 0x1e                                                             |         r3 <<= 0x1e;
    0x0002d966 bne 0x2d952                                                                   |         
                                                                                             |     } while (r3 != r3);
    0x0002d968 ldr.w r3, [r6, 0x10c]                                                         |     r3 = *((r6 + 0x10c));
    0x0002d96c ldr r4, [r1, 0xc]                                                             |     r4 = *((r1 + 0xc));
                                                                                             |     if (r3 != 0) {
    0x0002d96e cbnz r3, 0x2d978                                                              |         goto label_5;
                                                                                             |     }
    0x0002d970 b 0x2d952                                                                     |     goto label_0;
                                                                                             | label_1:
    0x0002d972 ldr r3, [r3, 0xc]                                                             |     r3 = *((r3 + 0xc));
    0x0002d974 cmp r3, 0                                                                     |     
                                                                                             |     if (r3 == 0) {
    0x0002d976 beq 0x2d952                                                                   |         goto label_0;
                                                                                             |     }
                                                                                             | label_5:
    0x0002d978 ldr r5, [r3]                                                                  |     r5 = *(r3);
    0x0002d97a cmp r4, r5                                                                    |     
                                                                                             |     if (r4 != r5) {
    0x0002d97c bne 0x2d972                                                                   |         goto label_1;
                                                                                             |     }
    0x0002d97e cmp r2, r0                                                                    |     
    0x0002d980 str.w ip, [r3]                                                                |     __asm ("str.w ip, [r3]");
    0x0002d984 add.w r1, r1, 0x10                                                            |     r1 += 0x10;
    0x0002d988 mov r3, r2                                                                    |     r3 = r2;
                                                                                             |     if (r2 != r0) {
    0x0002d98a bne 0x2d95c                                                                   |         goto label_2;
                                                                                             |     }
                                                                                             | label_4:
    0x0002d98c ldr r2, [pc, 0x28]                                                            |     
    0x0002d98e ldr r3, [pc, 0x20]                                                            |     r3 = *(0x2d9b2);
    0x0002d990 add r2, pc                                                                    |     r2 = 0x5b34c;
    0x0002d992 ldr r3, [r2, r3]                                                              |     r3 = *(0x5b34c);
    0x0002d994 ldr r2, [r3]                                                                  |     r2 = *(0x5b34c);
    0x0002d996 ldr r3, [sp, 0x1c]                                                            |     r3 = var_1ch;
    0x0002d998 eors r2, r3                                                                   |     r2 ^= r3;
    0x0002d99a mov.w r3, 0                                                                   |     r3 = 0;
                                                                                             |     if (r2 == r3) {
    0x0002d99e bne 0x2d9a6                                                                   |         
    0x0002d9a0 add sp, 0x20                                                                  |         
    0x0002d9a2 pop.w {r4, r5, r6, r7, r8, pc}                                                |         
                                                                                             |     }
    0x0002d9a6 blx 0x9b44                                                                    |     fcn_00009b44 ();
    0x0002d9aa nop                                                                           |     
    0x0002d9ac adds r2, 0                                                                    |     r2 += 0;
    0x0002d9ae movs r7, r0                                                                   |     r7 = r0;
    0x0002d9b0 lsls r0, r1, 0x13                                                             |     r0 = r1 << 0x13;
    0x0002d9b2 movs r0, r0                                                                   |     
    0x0002d9b4 ldmdb pc, {r0, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, sp, lr, pc}        |     __asm ("ldmdb pc, {r0, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, sp, lr, pc}");
                                                                                             | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2e444 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0002e444 ()                              | void fcn_0002e444 (int16_t arg_58h, 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_0h;
                                                         |     int32_t var_10h;
                                                         |     int16_t var_18h;
                                                         |     int16_t var_30h;
                                                         |     int16_t var_34h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x0002e444 invalid                                   |     
    0x0002e448 ldr r2, [pc, 0x1bc]                       |     
    0x0002e44a push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x0002e44e mov r5, r3                                |     r5 = r3;
    0x0002e450 ldr r3, [pc, 0x1b8]                       |     r3 = *(0x2e60c);
    0x0002e452 add r2, pc                                |     r2 = 0x5ca5e;
    0x0002e454 sub sp, 0x3c                              |     
    0x0002e456 ldr r4, [r1, 8]                           |     r4 = *((r1 + 8));
    0x0002e458 mov r6, r0                                |     r6 = r0;
    0x0002e45a ldr r3, [r2, r3]                          |     
    0x0002e45c ldr.w r8, [sp, 0x58]                      |     r8 = *(arg_58h);
    0x0002e460 ldr r7, [r0]                              |     r7 = *(r0);
    0x0002e462 ldr r3, [r3]                              |     r3 = *(0x5ca5e);
    0x0002e464 str r3, [sp, 0x34]                        |     var_34h = r3;
    0x0002e466 mov.w r3, 0                               |     r3 = 0;
    0x0002e46a cmp r4, 0                                 |     
                                                         |     if (r4 == 0) {
    0x0002e46c beq.w 0x2e598                             |         goto label_6;
                                                         |     }
    0x0002e470 movs r3, 0                                |     r3 = 0;
    0x0002e472 mov r1, r4                                |     r1 = r4;
    0x0002e474 mov r2, r3                                |     r2 = r3;
    0x0002e476 mov r0, r7                                |     r0 = r7;
    0x0002e478 bl 0x2dd00                                |     fcn_0002dd00 (r0, r1, r2, r3);
    0x0002e47c ldrb.w r3, [r7, 0x57]                     |     r3 = *((r7 + 0x57));
    0x0002e480 mov r4, r0                                |     r4 = r0;
                                                         |     if (r3 != 0) {
    0x0002e482 cbz r3, 0x2e4ae                           |         
    0x0002e484 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x0002e486 beq 0x2e57e                               |             goto label_7;
                                                         |         }
    0x0002e488 ldr r2, [pc, 0x184]                       |         
    0x0002e48a ldr r3, [pc, 0x180]                       |         r3 = *(0x2e60e);
    0x0002e48c add r2, pc                                |         r2 = 0x5caa0;
    0x0002e48e ldr r3, [r2, r3]                          |         r3 = *(0x5caa0);
    0x0002e490 ldr r2, [r3]                              |         r2 = *(0x5caa0);
    0x0002e492 ldr r3, [sp, 0x34]                        |         r3 = var_34h;
    0x0002e494 eors r2, r3                               |         r2 ^= r3;
    0x0002e496 mov.w r3, 0                               |         r3 = 0;
    0x0002e49a itt eq                                    |         
                                                         |         if (r2 != r3) {
    0x0002e49c moveq r1, r0                              |             r1 = r0;
                                                         |         }
                                                         |         if (r2 != r3) {
    0x0002e49e moveq r0, r7                              |             r0 = r7;
                                                         |         }
                                                         |         if (r2 != r3) {
    0x0002e4a0 bne.w 0x2e604                             |             goto label_8;
                                                         |         }
                                                         | label_4:
    0x0002e4a4 add sp, 0x3c                              |         
    0x0002e4a6 pop.w {r4, r5, r6, r7, r8, sb, lr}        |         
    0x0002e4aa b.w 0x16c0c                               |         void (*0x16c0c)() ();
                                                         |     }
    0x0002e4ae cmp.w r8, 0                               |     
                                                         |     if (r8 != 0) {
    0x0002e4b2 bne 0x2e5ac                               |         goto label_9;
                                                         |     }
                                                         | label_0:
    0x0002e4b4 mov r7, sp                                |     r7 = sp;
                                                         | label_1:
    0x0002e4b6 ldrb r3, [r5]                             |     r3 = *(r5);
    0x0002e4b8 cmp r3, 0x71                              |     
                                                         |     if (r3 == 0x71) {
    0x0002e4ba beq.w 0x2e5da                             |         goto label_10;
                                                         |     }
                                                         | label_3:
    0x0002e4be mov ip, r4                                |     
    0x0002e4c0 mov r8, r7                                |     r8 = r7;
    0x0002e4c2 add.w sb, r4, 0x30                        |     sb = r4 + 0x30;
                                                         |     do {
    0x0002e4c6 ldr.w r0, [ip]                            |         r0 = *(ip);
    0x0002e4ca add.w ip, ip, 0x10                        |         
    0x0002e4ce ldr r1, [ip, -0xc]                        |         r1 = *((ip - 0xc));
    0x0002e4d2 mov lr, r8                                |         lr = r8;
    0x0002e4d4 ldr r2, [ip, -0x8]                        |         r2 = *((ip - 0x8));
    0x0002e4d8 ldr r3, [ip, -0x4]                        |         r3 = *((ip - 0x4));
    0x0002e4dc cmp ip, sb                                |         
    0x0002e4de stm.w lr!, {r0, r1, r2, r3}               |         *(lr!) = r0;
                                                         |         *((lr! + 4)) = r1;
                                                         |         *((lr! + 8)) = r2;
                                                         |         *((lr! + 12)) = r3;
    0x0002e4e2 mov r8, lr                                |         r8 = lr;
    0x0002e4e4 bne 0x2e4c6                               |         
                                                         |     } while (ip != sb);
    0x0002e4e6 mov r2, r5                                |     r2 = r5;
    0x0002e4e8 mov r3, r4                                |     r3 = r4;
    0x0002e4ea ldr.w r0, [ip]                            |     r0 = *(ip);
    0x0002e4ee add.w r8, r5, 0x30                        |     r8 = r5 + 0x30;
    0x0002e4f2 str.w r0, [lr]                            |     __asm ("str.w r0, [lr]");
                                                         |     do {
    0x0002e4f6 ldr.w lr, [r2]                            |         
    0x0002e4fa adds r2, 0x10                             |         r2 += 0x10;
    0x0002e4fc ldr ip, [r2, -0xc]                        |         ip = *((r2 - 0xc));
    0x0002e500 adds r3, 0x10                             |         r3 += 0x10;
    0x0002e502 ldr r0, [r2, -0x8]                        |         r0 = *((r2 - 0x8));
    0x0002e506 ldr r1, [r2, -0x4]                        |         r1 = *((r2 - 0x4));
    0x0002e50a cmp r2, r8                                |         
    0x0002e50c str lr, [r3, -0x10]                       |         
    0x0002e510 str ip, [r3, -0xc]                        |         *((r3 - 0xc)) = ip;
    0x0002e514 str r0, [r3, -0x8]                        |         *((r3 - 0x8)) = r0;
    0x0002e518 str r1, [r3, -0x4]                        |         *((r3 - 0x4)) = r1;
    0x0002e51c bne 0x2e4f6                               |         
                                                         |     } while (r2 != r8);
    0x0002e51e ldr r2, [r2]                              |     r2 = *(r2);
    0x0002e520 mov lr, r5                                |     lr = r5;
    0x0002e522 add.w r8, sp, 0x30                        |     r8 += var_30h;
    0x0002e526 str r2, [r3]                              |     *(r3) = r2;
                                                         |     do {
    0x0002e528 mov ip, r7                                |         
    0x0002e52a add.w lr, lr, 0x10                        |         lr += 0x10;
    0x0002e52e ldm.w ip!, {r0, r1, r2, r3}               |         r0 = *(ip!);
                                                         |         r1 = *((ip! + 4));
                                                         |         r2 = *((ip! + 8));
                                                         |         r3 = *((ip! + 12));
    0x0002e532 adds r7, 0x10                             |         r7 += 0x10;
    0x0002e534 cmp ip, r8                                |         
    0x0002e536 str r0, [lr, -0x10]                       |         *((lr - 0x10)) = r0;
    0x0002e53a str r1, [lr, -0xc]                        |         *((lr - 0xc)) = r1;
    0x0002e53e str r2, [lr, -0x8]                        |         *((lr - 0x8)) = r2;
    0x0002e542 str r3, [lr, -0x4]                        |         *((lr - 0x4)) = r3;
    0x0002e546 bne 0x2e528                               |         
                                                         |     } while (ip != r8);
    0x0002e548 ldr r0, [r7]                              |     r0 = *(r7);
    0x0002e54a str.w r0, [lr]                            |     __asm ("str.w r0, [lr]");
    0x0002e54e ldr r3, [r5, 4]                           |     r3 = *((r5 + 4));
    0x0002e550 lsls r3, r3, 7                            |     r3 <<= 7;
                                                         |     if (r3 < r3) {
    0x0002e552 bpl 0x2e55a                               |         
    0x0002e554 ldr r3, [r5, 0x2c]                        |         r3 = *((r5 + 0x2c));
                                                         |         if (r3 == 0) {
    0x0002e556 cbz r3, 0x2e55a                           |             goto label_11;
                                                         |         }
    0x0002e558 str r5, [r3, 0x48]                        |         *((r3 + 0x48)) = r5;
                                                         |     }
                                                         | label_11:
    0x0002e55a ldr r0, [r6]                              |     r0 = *(r6);
    0x0002e55c cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x0002e55e beq 0x2e5d0                               |         goto label_12;
                                                         |     }
    0x0002e560 movs r2, 0xc                              |     r2 = 0xc;
    0x0002e562 movs r3, 0                                |     r3 = 0;
    0x0002e564 bl 0x1d740                                |     r0 = fcn_0001d740 (r0, r1);
                                                         | label_2:
    0x0002e568 cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x0002e56a beq 0x2e5e8                               |         goto label_13;
                                                         |     }
    0x0002e56c ldr r3, [pc, 0xa4]                        |     
    0x0002e56e ldr.w r2, [r6, 0x80]                      |     r2 = *((r6 + 0x80));
    0x0002e572 add r3, pc                                |     r3 = 0x5cb8a;
    0x0002e574 str r2, [r0]                              |     *(r0) = r2;
    0x0002e576 str.w r0, [r6, 0x80]                      |     __asm ("str.w r0, [r6, 0x80]");
    0x0002e57a strd r4, r3, [r0, 4]                      |     __asm ("strd r4, r3, [r0, 4]");
                                                         |     do {
                                                         | label_7:
    0x0002e57e ldr r2, [pc, 0x98]                        |         
    0x0002e580 ldr r3, [pc, 0x88]                        |         r3 = *(0x2e60c);
    0x0002e582 add r2, pc                                |         r2 = 0x5cba0;
    0x0002e584 ldr r3, [r2, r3]                          |         r3 = *(0x5cba0);
    0x0002e586 ldr r2, [r3]                              |         r2 = *(0x5cba0);
    0x0002e588 ldr r3, [sp, 0x34]                        |         r3 = var_34h;
    0x0002e58a eors r2, r3                               |         r2 ^= r3;
    0x0002e58c mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x0002e590 bne 0x2e604                               |             goto label_8;
                                                         |         }
    0x0002e592 add sp, 0x3c                              |         
    0x0002e594 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         | label_6:
    0x0002e598 ldrb.w r3, [r7, 0x57]                     |         r3 = *((r7 + 0x57));
    0x0002e59c cmp r3, 0                                 |         
    0x0002e59e bne 0x2e57e                               |         
                                                         |     } while (r3 != 0);
    0x0002e5a0 cmp.w r8, 0                               |     
                                                         |     if (r8 == 0) {
    0x0002e5a4 beq 0x2e4b4                               |         goto label_0;
                                                         |     }
    0x0002e5a6 mov r7, sp                                |     r7 = sp;
                                                         |     do {
    0x0002e5a8 movs r4, 0                                |         r4 = 0;
    0x0002e5aa b 0x2e4b6                                 |         goto label_1;
                                                         | label_9:
    0x0002e5ac str r3, [sp]                              |         *(sp) = r3;
    0x0002e5ae mov r7, sp                                |         r7 = sp;
    0x0002e5b0 strd r3, r3, [sp, 8]                      |         __asm ("strd r3, r3, [var_8h]");
    0x0002e5b4 strd r3, r3, [sp, 0x10]                   |         __asm ("strd r3, r3, [var_0h]");
    0x0002e5b8 ldr r3, [pc, 0x60]                        |         
    0x0002e5ba str.w r8, [sp, 0x18]                      |         __asm ("str.w r8, [var_18h]");
    0x0002e5be add r3, pc                                |         r3 = 0x5cbde;
    0x0002e5c0 str r3, [sp, 4]                           |         var_4h = r3;
    0x0002e5c2 cmp r0, 0                                 |         
    0x0002e5c4 beq 0x2e5a8                               |         
                                                         |     } while (r0 == 0);
    0x0002e5c6 mov r1, r0                                |     r1 = r0;
    0x0002e5c8 mov r0, r7                                |     r0 = r7;
    0x0002e5ca bl 0x2cd88                                |     fcn_0002cd88 (r0, r1);
    0x0002e5ce b 0x2e4b6                                 |     goto label_1;
                                                         | label_12:
    0x0002e5d0 movs r1, 0                                |     r1 = 0;
    0x0002e5d2 movs r0, 0xc                              |     r0 = 0xc;
    0x0002e5d4 bl 0x117c8                                |     fcn_000117c8 (r0);
    0x0002e5d8 b 0x2e568                                 |     goto label_2;
                                                         | label_10:
    0x0002e5da mov r1, r4                                |     r1 = r4;
    0x0002e5dc ldr r2, [r5, 8]                           |     r2 = *((r5 + 8));
    0x0002e5de mov r0, r6                                |     r0 = r6;
    0x0002e5e0 bl 0x1dd3c                                |     r0 = fcn_0001dd3c (r0, r1, r2);
    0x0002e5e4 mov r4, r0                                |     r4 = r0;
    0x0002e5e6 b 0x2e4be                                 |     goto label_3;
                                                         | label_13:
    0x0002e5e8 ldr r2, [pc, 0x34]                        |     
    0x0002e5ea ldr r3, [pc, 0x20]                        |     r3 = *(0x2e60e);
    0x0002e5ec add r2, pc                                |     r2 = 0x5cc10;
                                                         | label_5:
    0x0002e5ee ldr r3, [r2, r3]                          |     r3 = *((r2 + r3));
    0x0002e5f0 ldr r2, [r3]                              |     r2 = *(r3);
    0x0002e5f2 ldr r3, [sp, 0x34]                        |     r3 = var_34h;
    0x0002e5f4 eors r2, r3                               |     r2 ^= r3;
    0x0002e5f6 mov.w r3, 0                               |     r3 = 0;
    0x0002e5fa itt eq                                    |     
                                                         |     if (r2 != r3) {
    0x0002e5fc ldreq r0, [r6]                            |         r0 = *(r6);
                                                         |     }
                                                         |     if (r2 == r3) {
    0x0002e5fe moveq r1, r4                              |         r1 = r4;
                                                         |         goto label_14;
                                                         |     }
                                                         |     if (r2 == r3) {
                                                         | label_14:
    0x0002e600 beq.w 0x2e4a4                             |         goto label_4;
                                                         |     }
                                                         | label_8:
    0x0002e604 blx 0x9b44                                |     fcn_00009b44 ();
    0x0002e608 movs r6, 0xae                             |     r6 = 0xae;
    0x0002e60a movs r7, r0                               |     r7 = r0;
    0x0002e60c lsls r0, r1, 0x13                         |     r0 = r1 << 0x13;
    0x0002e60e movs r0, r0                               |     
    0x0002e610 movs r6, 0x74                             |     r6 = 0x74;
    0x0002e612 movs r7, r0                               |     r7 = r0;
    0x0002e614 strh r3, [r3, 0x38]                       |     *((r3 + 0x38)) = r3;
    0x0002e616 vsli.32 q9, q15, 0x1e                     |     __asm ("vsli.32 q9, q15, 0x1e");
    0x0002e61a movs r7, r0                               |     r7 = r0;
                                                         |     if (r7 < r0) {
    0x0002e61c bls 0x2e5ee                               |         goto label_5;
                                                         |     }
    0x0002e61e vsli.32 d18, d4, 0x1d                     |     __asm ("vsli.32 d18, d4, 0x1d");
    0x0002e622 movs r7, r0                               |     r7 = r0;
                                                         | }
    ; assembly                                                           | /* r2dec pseudo code output */
                                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2ea98 */
                                                                         | #include <stdint.h>
                                                                         |  
    ; (fcn) fcn.0002ea98 ()                                              | void fcn_0002ea98 (int16_t arg1, uint32_t arg2, int16_t arg3) {
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
                                                                         |     r2 = arg3;
    0x0002ea98 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002ea9c cmp r1, 0                                                 |     
                                                                         |     if (r1 == 0) {
    0x0002ea9e beq.w 0x2ebb6                                             |         goto label_3;
                                                                         |     }
    0x0002eaa2 ldr r3, [r1]                                              |     r3 = *(r1);
    0x0002eaa4 mov fp, r2                                                |     
    0x0002eaa6 mov r7, r0                                                |     r7 = r0;
    0x0002eaa8 mov sl, r1                                                |     sl = r1;
    0x0002eaaa cmp r3, 0                                                 |     
    0x0002eaac iteet gt                                                  |     
                                                                         |     if (r3 <= 0) {
    0x0002eaae lslgt r3, r3, 6                                           |         r3 <<= 6;
                                                                         |     }
                                                                         |     if (r3 > 0) {
    0x0002eab0 movle r2, 0x48                                            |         r2 = 0x48;
                                                                         |     }
                                                                         |     if (r3 > 0) {
    0x0002eab2 movle r3, 0                                               |         r3 = 0;
                                                                         |     }
                                                                         |     if (r3 <= 0) {
    0x0002eab4 addgt r2, r3, 8                                           |         r2 = r3 + 8;
                                                                         |     }
    0x0002eab8 it gt                                                     |     
                                                                         |     if (r3 > 0) {
    0x0002eaba asrgt r3, r3, 0x1f                                        |         __asm ("asrgt r3, r3, 0x1f");
                                                                         |     }
    0x0002eabc bl 0x1d740                                                |     r0 = fcn_0001d740 (r0, r1);
    0x0002eac0 mov sb, r0                                                |     sb = r0;
    0x0002eac2 cmp r0, 0                                                 |     
                                                                         |     if (r0 == 0) {
    0x0002eac4 beq 0x2ebb6                                               |         goto label_3;
                                                                         |     }
    0x0002eac6 ldr.w r3, [sl]                                            |     r3 = *(sl);
    0x0002eaca strd r3, r3, [r0]                                         |     __asm ("strd r3, r3, [r0]");
    0x0002eace ldr.w r3, [sl]                                            |     r3 = *(sl);
    0x0002ead2 cmp r3, 0                                                 |     
                                                                         |     if (r3 <= 0) {
    0x0002ead4 ble 0x2ebba                                               |         goto label_4;
                                                                         |     }
    0x0002ead6 mov r5, sl                                                |     r5 = sl;
    0x0002ead8 mov r4, r0                                                |     r4 = r0;
    0x0002eada mov.w r8, 0                                               |     r8 = 0;
    0x0002eade b 0x2eb02                                                 |     
                                                                         |     while (r3 != r3) {
    0x0002eae0 ldr r1, [r5, 0x34]                                        |         r1 = *((r5 + 0x34));
    0x0002eae2 mov r0, r7                                                |         r0 = r7;
    0x0002eae4 bl 0x1e994                                                |         fcn_0001e994 (r0, r1);
                                                                         | label_0:
    0x0002eae8 str r0, [r4, 0x34]                                        |         *((r4 + 0x34)) = r0;
    0x0002eaea adds r4, 0x40                                             |         r4 += 0x40;
    0x0002eaec ldrd r2, r3, [r5, 0x38]                                   |         __asm ("ldrd r2, r3, [r5, 0x38]");
    0x0002eaf0 add.w r8, r8, 1                                           |         r8++;
    0x0002eaf4 adds r5, 0x40                                             |         r5 += 0x40;
    0x0002eaf6 strd r2, r3, [r4, -0x8]                                   |         __asm ("strd r2, r3, [r4, -0x8]");
    0x0002eafa ldr.w r3, [sl]                                            |         r3 = *(sl);
    0x0002eafe cmp r3, r8                                                |         
                                                                         |         if (r3 <= r8) {
    0x0002eb00 ble 0x2ebba                                               |             goto label_4;
                                                                         |         }
    0x0002eb02 ldr r3, [r5, 8]                                           |         r3 = *((r5 + 8));
    0x0002eb04 mov r0, r7                                                |         r0 = r7;
    0x0002eb06 lsl.w r6, r8, 6                                           |         r6 = r8 << 6;
    0x0002eb08 asrs r0, r1, 0x1a                                         |         r0 = r1 >> 0x1a;
    0x0002eb0a str r3, [r4, 8]                                           |         *((r4 + 8)) = r3;
    0x0002eb0c ldr r1, [r5, 0xc]                                         |         r1 = *((r5 + 0xc));
    0x0002eb0e bl 0x1e948                                                |         fcn_0001e948 (r0, r1);
    0x0002eb12 str r0, [r4, 0xc]                                         |         *((r4 + 0xc)) = r0;
    0x0002eb14 mov r0, r7                                                |         r0 = r7;
    0x0002eb16 ldr r1, [r5, 0x10]                                        |         r1 = *((r5 + 0x10));
    0x0002eb18 bl 0x1e948                                                |         fcn_0001e948 (r0, r1);
    0x0002eb1c str r0, [r4, 0x10]                                        |         *((r4 + 0x10)) = r0;
    0x0002eb1e mov r0, r7                                                |         r0 = r7;
    0x0002eb20 ldr r1, [r5, 0x14]                                        |         r1 = *((r5 + 0x14));
    0x0002eb22 bl 0x1e948                                                |         fcn_0001e948 (r0, r1);
    0x0002eb26 str r0, [r4, 0x14]                                        |         *((r4 + 0x14)) = r0;
    0x0002eb28 add.w r3, sb, r6                                          |         r3 = sb + r6;
    0x0002eb2c ldr r2, [r5, 0x2c]                                        |         r2 = *((r5 + 0x2c));
    0x0002eb2e str r2, [r4, 0x2c]                                        |         *((r4 + 0x2c)) = r2;
    0x0002eb30 ldr r2, [r5, 0x30]                                        |         r2 = *((r5 + 0x30));
    0x0002eb32 str r2, [r4, 0x30]                                        |         *((r4 + 0x30)) = r2;
    0x0002eb34 ldr r2, [r5, 0x20]                                        |         r2 = *((r5 + 0x20));
    0x0002eb36 str r2, [r4, 0x20]                                        |         *((r4 + 0x20)) = r2;
    0x0002eb38 ldr r2, [r5, 0x24]                                        |         r2 = *((r5 + 0x24));
    0x0002eb3a str r2, [r4, 0x24]                                        |         *((r4 + 0x24)) = r2;
    0x0002eb3c ldrb.w r3, [r3, 0x2d]                                     |         r3 = *((r3 + 0x2d));
    0x0002eb40 lsls r0, r3, 0x1e                                         |         r0 = r3 << 0x1e;
                                                                         |         if (r0 < r3) {
    0x0002eb42 bmi 0x2ebaa                                               |             goto label_5;
                                                                         |         }
                                                                         | label_2:
    0x0002eb44 ldr r2, [r5, 0x44]                                        |         r2 = *((r5 + 0x44));
    0x0002eb46 add.w r3, sb, r6                                          |         r3 = sb + r6;
    0x0002eb4a str r2, [r4, 0x44]                                        |         *((r4 + 0x44)) = r2;
    0x0002eb4c ldrb.w r3, [r3, 0x2e]                                     |         r3 = *((r3 + 0x2e));
    0x0002eb50 lsls r1, r3, 0x1f                                         |         r1 = r3 << 0x1f;
    0x0002eb52 ittt mi                                                   |         
                                                                         |         if (r1 >= r3) {
    0x0002eb54 ldrmi r3, [r2]                                            |             r3 = *(r2);
                                                                         |         }
                                                                         |         if (r1 >= r3) {
    0x0002eb56 addmi r3, 1                                               |             r3++;
                                                                         |         }
                                                                         |         if (r1 >= r3) {
    0x0002eb58 strmi r3, [r2]                                            |             *(r2) = r3;
                                                                         |         }
    0x0002eb5a add.w r3, sb, r6                                          |         r3 = sb + r6;
    0x0002eb5e ldrb.w r3, [r3, 0x2d]                                     |         r3 = *((r3 + 0x2d));
    0x0002eb62 lsls r3, r3, 0x1d                                         |         r3 <<= 0x1d;
                                                                         |         if (r3 < r3) {
    0x0002eb64 bmi 0x2eb9c                                               |             goto label_6;
                                                                         |         }
                                                                         | label_1:
    0x0002eb66 ldr r3, [r5, 0x18]                                        |         r3 = *((r5 + 0x18));
    0x0002eb68 str r3, [r4, 0x18]                                        |         *((r4 + 0x18)) = r3;
                                                                         |         if (r3 != 0) {
    0x0002eb6a cbz r3, 0x2eb72                                           |             
    0x0002eb6c ldr r2, [r3, 0x18]                                        |             r2 = *((r3 + 0x18));
    0x0002eb6e adds r2, 1                                                |             r2++;
    0x0002eb70 str r2, [r3, 0x18]                                        |             *((r3 + 0x18)) = r2;
                                                                         |         }
    0x0002eb72 ldr r1, [r5, 0x1c]                                        |         r1 = *((r5 + 0x1c));
    0x0002eb74 mov r2, fp                                                |         r2 = fp;
    0x0002eb76 mov r0, r7                                                |         r0 = r7;
    0x0002eb78 add r6, sl                                                |         r6 += sl;
    0x0002eb7a bl 0x2db4c                                                |         fcn_0002db4c (r0, r1, r2, r3);
    0x0002eb7e str r0, [r4, 0x1c]                                        |         *((r4 + 0x1c)) = r0;
    0x0002eb80 ldrb.w r3, [r6, 0x2e]                                     |         r3 = *((r6 + 0x2e));
    0x0002eb84 ands r3, r3, 4                                            |         r3 &= 4;
    0x0002eb88 bne 0x2eae0                                               |         
                                                                         |     }
    0x0002eb8a ldr r0, [r5, 0x34]                                        |     r0 = *((r5 + 0x34));
    0x0002eb8c cmp r0, 0                                                 |     
                                                                         |     if (r0 == 0) {
    0x0002eb8e beq 0x2eae8                                               |         goto label_0;
                                                                         |     }
    0x0002eb90 mov r1, r0                                                |     r1 = r0;
    0x0002eb92 mov r2, fp                                                |     r2 = fp;
    0x0002eb94 mov r0, r7                                                |     r0 = r7;
    0x0002eb96 bl 0x2dd00                                                |     fcn_0002dd00 (r0, r1, r2, r3);
    0x0002eb9a b 0x2eae8                                                 |     goto label_0;
                                                                         | label_6:
    0x0002eb9c ldr r1, [r5, 0x40]                                        |     r1 = *((r5 + 0x40));
    0x0002eb9e mov r2, fp                                                |     r2 = fp;
    0x0002eba0 mov r0, r7                                                |     r0 = r7;
    0x0002eba2 bl 0x2dffc                                                |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x0002eba6 str r0, [r4, 0x40]                                        |     *((r4 + 0x40)) = r0;
    0x0002eba8 b 0x2eb66                                                 |     goto label_1;
                                                                         | label_5:
    0x0002ebaa ldr r1, [r5, 0x40]                                        |     r1 = *((r5 + 0x40));
    0x0002ebac mov r0, r7                                                |     r0 = r7;
    0x0002ebae bl 0x1e948                                                |     fcn_0001e948 (r0, r1);
    0x0002ebb2 str r0, [r4, 0x40]                                        |     *((r4 + 0x40)) = r0;
    0x0002ebb4 b 0x2eb44                                                 |     goto label_2;
                                                                         | label_3:
    0x0002ebb6 mov.w sb, 0                                               |     sb = 0;
                                                                         | label_4:
    0x0002ebba mov r0, sb                                                |     r0 = sb;
    0x0002ebbc 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-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2ef84 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0002ef84 ()                                          | void fcn_0002ef84 (int16_t arg_4h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h;
                                                                     |     int32_t var_4h;
                                                                     |     int32_t var_4h_2;
                                                                     |     int32_t var_ch;
                                                                     |     int32_t var_ch_2;
                                                                     |     int16_t var_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;
                                                                     |     arithmetic x;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_54h;
                                                                     |     int16_t var_58h;
                                                                     |     int16_t var_5ch;
                                                                     |     int16_t var_64h;
                                                                     |     int32_t var_64h_2;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_70h;
                                                                     |     int16_t var_74h;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_7ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0002ef84 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002ef88 mov r4, r0                                            |     r4 = r0;
    0x0002ef8a ldr.w r5, [pc, 0x568]                                 |     r5 = *(0x0002f4f4);
    0x0002ef8e sub sp, 0x84                                          |     
    0x0002ef90 mov sb, r2                                            |     sb = r2;
    0x0002ef92 ldr.w r0, [pc, 0x564]                                 |     
    0x0002ef96 add r5, pc                                            |     r5 += pc;
    0x0002ef98 ldr r0, [r5, r0]                                      |     r0 = *((r5 + r0));
    0x0002ef9a ldr r5, [r4]                                          |     r5 = *(r4);
    0x0002ef9c ldr r0, [r0]                                          |     r0 = *(0x2f4fa);
    0x0002ef9e str r0, [sp, 0x7c]                                    |     var_7ch = r0;
    0x0002efa0 mov.w r0, 0                                           |     r0 = 0;
    0x0002efa4 str r1, [sp, 0x20]                                    |     var_20h = r1;
    0x0002efa6 subs r1, r3, 0                                        |     r1 = r3 - 0;
    0x0002efa8 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0002efaa it ne                                                 |     
                                                                     |     if (r1 == r3) {
    0x0002efac movne r1, 1                                           |         r1 = 1;
                                                                     |     }
    0x0002efae adds r3, r2, r1                                       |     r3 = r2 + r1;
    0x0002efb0 ldrb.w r8, [r3, 0x19]                                 |     r8 = *((r3 + 0x19));
    0x0002efb4 cmp.w r8, 7                                           |     
    0x0002efb8 beq 0x2eff4                                           |     
                                                                     |     while (r3 >= r3) {
    0x0002efba add.w r3, sb, r1, lsl 2                               |         r3 = sb + (r1 << 2);
    0x0002efbe ldr r6, [r3, 0x1c]                                    |         r6 = *((r3 + 0x1c));
    0x0002efc0 str r3, [sp, 0x4c]                                    |         var_4ch = r3;
    0x0002efc2 subs.w r3, r8, 0                                      |         r3 = r8 - 0;
    0x0002efc6 it ne                                                 |         
                                                                     |         if (r3 == r8) {
    0x0002efc8 movne r3, 1                                           |             r3 = 1;
                                                                     |         }
    0x0002efca cmp r6, 0                                             |         
    0x0002efcc it ne                                                 |         
                                                                     |         if (r6 == 0) {
    0x0002efce movne r3, 0                                           |             r3 = 0;
                                                                     |         }
                                                                     |         if (r3 != 0) {
    0x0002efd0 cbnz r3, 0x2effe                                      |             goto label_21;
                                                                     |         }
                                                                     | label_0:
    0x0002efd2 ldr.w r2, [pc, 0x528]                                 |         r2 = *(0x0002f4fc);
    0x0002efd6 ldr.w r3, [pc, 0x520]                                 |         r3 = *(0x2f4fa);
    0x0002efda add r2, pc                                            |         r2 += pc;
    0x0002efdc ldr r3, [r2, r3]                                      |         r3 = *((r2 + r3));
    0x0002efde ldr r2, [r3]                                          |         r2 = *(0x2f4fa);
    0x0002efe0 ldr r3, [sp, 0x7c]                                    |         r3 = var_7ch;
    0x0002efe2 eors r2, r3                                           |         r2 ^= r3;
    0x0002efe4 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0002efe8 bne.w 0x2f4ea                                         |             goto label_22;
                                                                     |         }
    0x0002efec mov r0, r6                                            |         r0 = r6;
    0x0002efee add sp, 0x84                                          |         
    0x0002eff0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
    0x0002eff4 ldr r3, [r5, 0x20]                                    |         r3 = *((r5 + 0x20));
    0x0002eff6 lsls r3, r3, 0xc                                      |         r3 <<= 0xc;
    0x0002eff8 bpl 0x2efba                                           |         
                                                                     |     }
                                                                     |     do {
                                                                     | label_19:
    0x0002effa movs r6, 0                                            |         r6 = 0;
    0x0002effc b 0x2efd2                                             |         goto label_0;
                                                                     | label_21:
    0x0002effe add r3, sp, 0x58                                      |         r3 += var_58h;
    0x0002f000 ldr r1, [sp, 0x20]                                    |         r1 = var_20h;
    0x0002f002 str r3, [sp]                                          |         *(sp) = r3;
    0x0002f004 movs r3, 0                                            |         r3 = 0;
    0x0002f006 strd r3, r3, [sp, 0x54]                               |         __asm ("strd r3, r3, [var_58h]");
    0x0002f00a mov r2, sb                                            |         r2 = sb;
    0x0002f00c add r3, sp, 0x54                                      |         r3 += var_54h;
    0x0002f00e mov r0, r4                                            |         r0 = r4;
    0x0002f010 bl 0x20790                                            |         r0 = fcn_00020790 (r0, r1, r2, r3, r4, r5, r6);
    0x0002f014 mov sl, r0                                            |         sl = r0;
    0x0002f016 cmp r0, 0                                             |         
    0x0002f018 bne 0x2effa                                           |         
                                                                     |     } while (r0 != 0);
    0x0002f01a ldr.w r3, [sb, 0x14]                                  |     r3 = *((sb + 0x14));
    0x0002f01e ldr r1, [sp, 0x58]                                    |     r1 = var_58h;
    0x0002f020 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0002f022 ble.w 0x2f4c2                                         |         goto label_23;
                                                                     |     }
    0x0002f026 ldr.w r3, [pc, 0x4d8]                                 |     r3 = *(0x0002f500);
    0x0002f02a add r2, sp, 0x64                                      |     r2 += var_64h;
    0x0002f02c ldr.w fp, [sp, 0x54]                                  |     fp = var_54h;
    0x0002f030 add r7, sp, 0x5c                                      |     r7 += var_5ch;
    0x0002f032 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0002f034 add r2, sp, 0x74                                      |     r2 += var_74h;
    0x0002f036 add r3, pc                                            |     r3 += pc;
    0x0002f038 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0002f03a add r2, sp, 0x6c                                      |     r2 += var_6ch;
    0x0002f03c str r0, [sp, 0x2c]                                    |     var_2ch = r0;
    0x0002f03e str r2, [sp, 0x30]                                    |     var_30h = r2;
    0x0002f040 add.w r2, r3, 0x134                                   |     r2 = r3 + 0x134;
    0x0002f044 add.w r3, r3, 0x13c                                   |     r3 += 0x13c;
    0x0002f048 str r0, [sp, 0x48]                                    |     var_48h = r0;
    0x0002f04a str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0002f04c str r2, [sp, 0x3c]                                    |     var_3ch = r2;
    0x0002f04e str r3, [sp, 0x40]                                    |     x = r3;
    0x0002f050 str r1, [sp, 0x34]                                    |     var_34h = r1;
                                                                     |     do {
    0x0002f052 ldr r3, [sp, 0x3c]                                    |         r3 = var_3ch;
    0x0002f054 ldm.w r3, {r0, r1}                                    |         r0 = *(r3);
                                                                     |         r1 = *((r3 + 4));
    0x0002f058 ldr r3, [sp, 0x40]                                    |         r3 = x;
    0x0002f05a stm.w r7, {r0, r1}                                    |         *(r7) = r0;
                                                                     |         *((r7 + 4)) = r1;
    0x0002f05e ldm.w r3, {r0, r1}                                    |         r0 = *(r3);
                                                                     |         r1 = *((r3 + 4));
    0x0002f062 ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0002f064 stm.w r3, {r0, r1}                                    |         *(r3) = r0;
                                                                     |         *((r3 + 4)) = r1;
    0x0002f068 ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0002f06a cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0002f06c beq.w 0x2f390                                         |             goto label_24;
                                                                     |         }
    0x0002f070 ldr.w r6, [r3, sl, lsl 2]                             |         offset_0 = sl << 2;
                                                                     |         r6 = *((r3 + offset_0));
                                                                     | label_4:
    0x0002f074 ldr r3, [sp, 0x20]                                    |         r3 = var_20h;
    0x0002f076 ldr r2, [r3, 4]                                       |         r2 = *((r3 + 4));
    0x0002f078 cmp.w fp, 0                                           |         
                                                                     |         if (fp == 0) {
    0x0002f07c beq.w 0x2f382                                         |             goto label_25;
                                                                     |         }
    0x0002f080 ldr.w r3, [fp, 4]                                     |         r3 = *(arg_4h);
    0x0002f084 ldrsh.w r3, [r3, sl, lsl 1]                           |         offset_1 = sl << 1;
                                                                     |         r3 = *((r3 + offset_1));
    0x0002f088 add.w r3, r3, r3, lsl 1                               |         r3 += (r3 << 1);
    0x0002f08c lsls r3, r3, 2                                        |         r3 <<= 2;
                                                                     | label_3:
    0x0002f08e ldr r0, [r2, r3]                                      |         r0 = *((r2 + r3));
    0x0002f090 str r0, [sp, 0x74]                                    |         var_74h = r0;
                                                                     |         if (r0 != 0) {
    0x0002f092 cbz r0, 0x2f09c                                       |             
    0x0002f094 blx 0x9e8c                                            |             r0 = fcn_00009e8c ();
    0x0002f098 bic r0, r0, 0xc0000000                                |             r0 = BIT_MASK (r0, 0xc0000000);
                                                                     |         }
    0x0002f09c ldr.w r3, [sb]                                        |         r3 = *(sb);
    0x0002f0a0 add.w r6, r6, r6, lsl 1                               |         r6 += (r6 << 1);
    0x0002f0a4 str r0, [sp, 0x78]                                    |         var_78h = r0;
    0x0002f0a6 ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x0002f0a8 ldr.w r0, [r3, r6, lsl 2]                             |         offset_2 = r6 << 2;
                                                                     |         r0 = *((r3 + offset_2));
    0x0002f0ac lsls r3, r6, 2                                        |         r3 = r6 << 2;
    0x0002f0ae str r3, [sp, 0x38]                                    |         var_38h = r3;
    0x0002f0b0 str r0, [sp, 0x6c]                                    |         var_6ch = r0;
                                                                     |         if (r0 != 0) {
    0x0002f0b2 cbz r0, 0x2f0bc                                       |             
    0x0002f0b4 blx 0x9e8c                                            |             r0 = fcn_00009e8c ();
    0x0002f0b8 bic r0, r0, 0xc0000000                                |             r0 = BIT_MASK (r0, 0xc0000000);
                                                                     |         }
    0x0002f0bc movs r3, 0                                            |         r3 = 0;
    0x0002f0be mov r2, r7                                            |         r2 = r7;
    0x0002f0c0 movs r1, 0x3b                                         |         r1 = 0x3b;
    0x0002f0c2 str r0, [sp, 0x70]                                    |         var_70h = r0;
    0x0002f0c4 mov r0, r5                                            |         r0 = r5;
    0x0002f0c6 bl 0x1db90                                            |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f0ca ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0002f0cc mov r6, r0                                            |         r6 = r0;
    0x0002f0ce movs r1, 0x3b                                         |         r1 = 0x3b;
    0x0002f0d0 movs r3, 0                                            |         r3 = 0;
    0x0002f0d2 mov r0, r5                                            |         r0 = r5;
    0x0002f0d4 bl 0x1db90                                            |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f0d8 mov r2, r6                                            |         r2 = r6;
    0x0002f0da mov r3, r0                                            |         r3 = r0;
    0x0002f0dc movs r1, 0x8d                                         |         r1 = 0x8d;
    0x0002f0de mov r0, r4                                            |         r0 = r4;
    0x0002f0e0 bl 0x20c10                                            |         fcn_00020c10 (r0, r1, r2, r3);
    0x0002f0e4 ldr r2, [sp, 0x30]                                    |         r2 = var_30h;
    0x0002f0e6 mov r6, r0                                            |         r6 = r0;
    0x0002f0e8 movs r1, 0x3b                                         |         r1 = 0x3b;
    0x0002f0ea movs r3, 0                                            |         r3 = 0;
    0x0002f0ec mov r0, r5                                            |         r0 = r5;
    0x0002f0ee bl 0x1db90                                            |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f0f2 mov r2, r6                                            |         r2 = r6;
    0x0002f0f4 mov r3, r0                                            |         r3 = r0;
    0x0002f0f6 movs r1, 0x35                                         |         r1 = 0x35;
    0x0002f0f8 mov r0, r4                                            |         r0 = r4;
    0x0002f0fa bl 0x20c10                                            |         fcn_00020c10 (r0, r1, r2, r3);
    0x0002f0fe ldr r1, [sp, 0x18]                                    |         r1 = var_18h;
    0x0002f100 mov r2, r0                                            |         r2 = r0;
    0x0002f102 mov r0, r4                                            |         r0 = r4;
    0x0002f104 bl 0x2c1c4                                            |         fcn_0002c1c4 (r0, r1, r2, r3);
    0x0002f108 ldr r3, [sp, 0x28]                                    |         r3 = var_28h;
    0x0002f10a str r0, [sp, 0x18]                                    |         var_18h = r0;
    0x0002f10c cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0002f10e beq.w 0x2f370                                         |             goto label_26;
                                                                     |         }
    0x0002f112 movs r3, 0                                            |         r3 = 0;
    0x0002f114 mov r2, r7                                            |         r2 = r7;
    0x0002f116 movs r1, 0x3b                                         |         r1 = 0x3b;
    0x0002f118 mov r0, r5                                            |         r0 = r5;
    0x0002f11a bl 0x1db90                                            |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f11e ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0002f120 mov r6, r0                                            |         r6 = r0;
    0x0002f122 movs r1, 0x3b                                         |         r1 = 0x3b;
    0x0002f124 movs r3, 0                                            |         r3 = 0;
    0x0002f126 mov r0, r5                                            |         r0 = r5;
    0x0002f128 bl 0x1db90                                            |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f12c mov r2, r6                                            |         r2 = r6;
    0x0002f12e mov r3, r0                                            |         r3 = r0;
    0x0002f130 movs r1, 0x8d                                         |         r1 = 0x8d;
    0x0002f132 mov r0, r4                                            |         r0 = r4;
    0x0002f134 bl 0x20c10                                            |         fcn_00020c10 (r0, r1, r2, r3);
    0x0002f138 ldr r2, [sp, 0x24]                                    |         r2 = var_24h;
    0x0002f13a mov r6, r0                                            |         r6 = r0;
    0x0002f13c movs r3, 0                                            |         r3 = 0;
    0x0002f13e movs r1, 0x3b                                         |         r1 = 0x3b;
    0x0002f140 mov r0, r5                                            |         r0 = r5;
    0x0002f142 bl 0x1db90                                            |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f146 ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0002f148 movs r1, 0x3b                                         |         r1 = 0x3b;
    0x0002f14a movs r3, 0                                            |         r3 = 0;
    0x0002f14c str r0, [sp, 0x44]                                    |         var_44h = r0;
    0x0002f14e mov r0, r5                                            |         r0 = r5;
    0x0002f150 bl 0x1db90                                            |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f154 ldr r2, [sp, 0x44]                                    |         r2 = var_44h;
    0x0002f156 mov r3, r0                                            |         r3 = r0;
    0x0002f158 movs r1, 0x8d                                         |         r1 = 0x8d;
    0x0002f15a mov r0, r4                                            |         r0 = r4;
    0x0002f15c bl 0x20c10                                            |         fcn_00020c10 (r0, r1, r2, r3);
    0x0002f160 mov r2, r6                                            |         r2 = r6;
    0x0002f162 mov r3, r0                                            |         r3 = r0;
    0x0002f164 movs r1, 0x2d                                         |         r1 = 0x2d;
    0x0002f166 mov r0, r4                                            |         r0 = r4;
    0x0002f168 bl 0x20c10                                            |         fcn_00020c10 (r0, r1, r2, r3);
    0x0002f16c ldr r1, [sp, 0x2c]                                    |         r1 = var_2ch;
    0x0002f16e mov r2, r0                                            |         r2 = r0;
    0x0002f170 mov r0, r4                                            |         r0 = r4;
    0x0002f172 bl 0x2c1c4                                            |         fcn_0002c1c4 (r0, r1, r2, r3);
    0x0002f176 cmp.w r8, 7                                           |         
    0x0002f17a str r0, [sp, 0x2c]                                    |         var_2ch = r0;
                                                                     |         if (r8 != 7) {
    0x0002f17c beq 0x2f208                                           |             
    0x0002f17e cmp.w r8, 0xa                                         |             
                                                                     |             if (r8 == 0xa) {
    0x0002f182 beq.w 0x2f44a                                         |                 goto label_27;
                                                                     |             }
                                                                     | label_2:
    0x0002f186 cmp.w r8, 9                                           |             
                                                                     |             if (r8 == 9) {
    0x0002f18a bne 0x2f1c8                                           |                 
    0x0002f18c ldr.w r0, [sb]                                        |                 r0 = *(sb);
    0x0002f190 ldr r2, [sp, 0x38]                                    |                 r2 = var_38h;
    0x0002f192 ldr r3, [r0, 4]                                       |                 r3 = *((r0 + 4));
    0x0002f194 add r3, r2                                            |                 r3 += r2;
    0x0002f196 ldrh r2, [r3, 0xa]                                    |                 r2 = *((r3 + 0xa));
    0x0002f198 and r2, r2, 0x60                                      |                 r2 &= 0x60;
                                                                     |                 if (r2 == 0) {
    0x0002f19c cbnz r2, 0x2f1c8                                      |                     
    0x0002f19e ldrh r1, [r3, 8]                                      |                     r1 = *((r3 + 8));
                                                                     |                     if (r1 == 0) {
    0x0002f1a0 cbz r1, 0x2f1c8                                       |                         goto label_28;
                                                                     |                     }
    0x0002f1a2 ldrb.w r3, [r0, 0x2b]                                 |                     r3 = *((r0 + 0x2b));
                                                                     |                     if (r3 != 0) {
    0x0002f1a6 cbnz r3, 0x2f1c8                                      |                         goto label_28;
                                                                     |                     }
    0x0002f1a8 ldr r2, [r0, 0x34]                                    |                     r2 = *((r0 + 0x34));
                                                                     |                     if (r2 == 0) {
    0x0002f1aa cbz r2, 0x2f1c8                                       |                         goto label_28;
                                                                     |                     }
    0x0002f1ac ldr r0, [r2]                                          |                     r0 = *(r2);
    0x0002f1ae cmp r0, r1                                            |                     
                                                                     |                     if (r0 < r1) {
    0x0002f1b0 blt 0x2f1c8                                           |                         goto label_28;
                                                                     |                     }
    0x0002f1b2 add.w r2, r2, r1, lsl 4                               |                     r2 += (r1 << 4);
    0x0002f1b6 ldr r1, [r2, -0x8]                                    |                     r1 = *((r2 - 0x8));
                                                                     |                     if (r1 == 0) {
    0x0002f1ba cbz r1, 0x2f1c8                                       |                         goto label_28;
                                                                     |                     }
    0x0002f1bc mov r2, r3                                            |                     r2 = r3;
    0x0002f1be mov r0, r5                                            |                     r0 = r5;
    0x0002f1c0 bl 0x2dd00                                            |                     r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0002f1c4 mov r6, r0                                            |                     r6 = r0;
    0x0002f1c6 b 0x2f1ee                                             |                     
                                                                     |                 }
                                                                     |             } else {
                                                                     | label_28:
    0x0002f1c8 mov r0, r5                                            |                 r0 = r5;
    0x0002f1ca movs r2, 0x34                                         |                 r2 = 0x34;
    0x0002f1cc movs r3, 0                                            |                 r3 = 0;
    0x0002f1ce bl 0x1d740                                            |                 r0 = fcn_0001d740 (r0, r1);
    0x0002f1d2 mov r6, r0                                            |                 r6 = r0;
                                                                     |                 if (r0 == 0) {
    0x0002f1d4 cbz r0, 0x2f1ee                                       |                     goto label_6;
                                                                     |                 }
    0x0002f1d6 movs r2, 0x33                                         |                 r2 = 0x33;
    0x0002f1d8 movs r1, 0                                            |                 r1 = 0;
    0x0002f1da adds r0, 1                                            |                 r0++;
    0x0002f1dc blx 0x97d4                                            |                 fcn_000097d4 ();
    0x0002f1e0 movs r3, 0x79                                         |                 r3 = 0x79;
    0x0002f1e2 strb r3, [r6]                                         |                 *(r6) = r3;
    0x0002f1e4 movw r3, 0xffff                                       |                 r3 = 0xffff;
    0x0002f1e8 strh r3, [r6, 0x22]                                   |                 *((r6 + 0x22)) = r3;
    0x0002f1ea movs r3, 1                                            |                 r3 = 1;
    0x0002f1ec str r3, [r6, 0x18]                                    |                 *((r6 + 0x18)) = r3;
                                                                     |             }
                                                                     | label_6:
    0x0002f1ee ldr r1, [sp, 0x48]                                    |             r1 = var_48h;
    0x0002f1f0 mov r2, r6                                            |             r2 = r6;
    0x0002f1f2 mov r0, r4                                            |             r0 = r4;
    0x0002f1f4 bl 0x2bffc                                            |             r0 = fcn_0002bffc (r0, r1, r2);
    0x0002f1f8 mov r1, r0                                            |             r1 = r0;
    0x0002f1fa str r0, [sp, 0x48]                                    |             var_48h = r0;
                                                                     |             if (r0 == 0) {
    0x0002f1fc cbz r0, 0x2f208                                       |                 goto label_1;
                                                                     |             }
    0x0002f1fe ldr r2, [sp, 0x30]                                    |             r2 = var_30h;
    0x0002f200 movs r3, 0                                            |             r3 = 0;
    0x0002f202 mov r0, r4                                            |             r0 = r4;
    0x0002f204 bl 0x1eec0                                            |             fcn_0001eec0 (r0, r1, r2, r3, r4);
                                                                     |         }
                                                                     | label_1:
    0x0002f208 ldr.w r3, [sb, 0x14]                                  |         r3 = *((sb + 0x14));
    0x0002f20c add.w sl, sl, 1                                       |         sl++;
    0x0002f210 cmp r3, sl                                            |         
    0x0002f212 bgt.w 0x2f052                                         |         
                                                                     |     } while (r3 > sl);
    0x0002f216 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
                                                                     |     if (r1 != 0) {
    0x0002f218 cbz r1, 0x2f220                                       |         
                                                                     | label_15:
    0x0002f21a mov r0, r5                                            |         r0 = r5;
    0x0002f21c bl 0x137d0                                            |         fcn_000137d0 (r0, r1);
                                                                     |     }
                                                                     | label_16:
    0x0002f220 ldr.w r3, [sb]                                        |     r3 = *(sb);
    0x0002f224 ldr.w fp, [r3]                                        |     fp = *(r3);
    0x0002f228 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0002f22c beq.w 0x2f498                                         |         goto label_29;
                                                                     |     }
    0x0002f230 mov r0, fp                                            |     r0 = fp;
    0x0002f232 blx 0x9e8c                                            |     r0 = fcn_00009e8c ();
    0x0002f236 bic sb, r0, 0xc0000000                                |     sb = BIT_MASK (r0, 0xc0000000);
    0x0002f23a add.w r3, sb, 0x55                                    |     r3 = sb + 0x55;
    0x0002f23e mov r6, r3                                            |     r6 = r3;
    0x0002f240 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
                                                                     | label_13:
    0x0002f242 cmp.w r8, 7                                           |     
                                                                     |     if (r8 == 7) {
    0x0002f246 beq.w 0x2f396                                         |         goto label_30;
                                                                     |     }
    0x0002f24a ldr.w r3, [r5, 0x130]                                 |     r3 = *((r5 + 0x130));
    0x0002f24e mov.w sl, 0                                           |     sl = 0;
    0x0002f252 mov r2, r6                                            |     r2 = r6;
    0x0002f254 mov r0, r5                                            |     r0 = r5;
    0x0002f256 strh.w sl, [r5, 0x134]                                |     *((r5 + 0x134)) = sl;
    0x0002f25a adds r3, 1                                            |     r3++;
    0x0002f25c str.w r3, [r5, 0x130]                                 |     __asm ("str.w r3, aav.0x000000ff");
    0x0002f260 mov r3, sl                                            |     r3 = sl;
    0x0002f262 bl 0x1d740                                            |     r0 = fcn_0001d740 (r0, r1);
    0x0002f266 mov r7, r0                                            |     r7 = r0;
    0x0002f268 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002f26a beq.w 0x2f48c                                         |         goto label_31;
                                                                     |     }
    0x0002f26e ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0002f270 mov r1, sl                                            |     r1 = sl;
    0x0002f272 blx 0x97d4                                            |     fcn_000097d4 ();
    0x0002f276 add.w r0, r7, 0x54                                    |     r0 = r7 + 0x54;
    0x0002f27a mov r2, sb                                            |     r2 = sb;
    0x0002f27c add.w sb, r7, 0x24                                    |     sb = r7 + 0x24;
    0x0002f280 mov r1, fp                                            |     r1 = fp;
    0x0002f282 str r0, [r7, 0x30]                                    |     *((r7 + 0x30)) = r0;
    0x0002f284 mov r6, r7                                            |     r6 = r7;
    0x0002f286 str.w sb, [r7, 0x1c]                                  |     __asm ("str.w sb, [r7, 0x1c]");
    0x0002f28a mov r7, sb                                            |     r7 = sb;
    0x0002f28c blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0002f290 ldr r1, [sp, 0x18]                                    |     r1 = var_18h;
    0x0002f292 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0002f294 beq.w 0x2f4ee                                         |         goto label_32;
                                                                     |     }
    0x0002f298 mov r3, sl                                            |     r3 = sl;
    0x0002f29a movs r2, 1                                            |     r2 = 1;
    0x0002f29c mov r0, r5                                            |     r0 = r5;
    0x0002f29e bl 0x2dd00                                            |     fcn_0002dd00 (r0, r1, r2, r3);
                                                                     | label_14:
    0x0002f2a2 ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0002f2a4 movs r2, 1                                            |     r2 = 1;
    0x0002f2a6 str r0, [r6, 0x38]                                    |     *((r6 + 0x38)) = r0;
    0x0002f2a8 mov r0, r5                                            |     r0 = r5;
    0x0002f2aa bl 0x2dffc                                            |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x0002f2ae movs r2, 1                                            |     r2 = 1;
    0x0002f2b0 str r0, [r6, 0x3c]                                    |     *((r6 + 0x3c)) = r0;
    0x0002f2b2 mov r1, sl                                            |     r1 = sl;
    0x0002f2b4 mov r0, r5                                            |     r0 = r5;
    0x0002f2b6 bl 0x2db4c                                            |     fcn_0002db4c (r0, r1, r2, r3);
    0x0002f2ba ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0002f2bc str r0, [r6, 0x2c]                                    |     *((r6 + 0x2c)) = r0;
                                                                     |     if (r3 != 0) {
    0x0002f2be cbz r3, 0x2f2e2                                       |         
    0x0002f2c0 mov r2, r3                                            |         r2 = r3;
    0x0002f2c2 movs r1, 0x13                                         |         r1 = 0x13;
    0x0002f2c4 mov r0, r4                                            |         r0 = r4;
    0x0002f2c6 movs r3, 0                                            |         r3 = 0;
    0x0002f2c8 bl 0x20c10                                            |         r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0002f2cc mov r1, r0                                            |         r1 = r0;
    0x0002f2ce str r0, [sp, 0x2c]                                    |         var_2ch = r0;
    0x0002f2d0 cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0002f2d2 beq.w 0x2f4d6                                         |             goto label_33;
                                                                     |         }
    0x0002f2d6 movs r3, 0                                            |         r3 = 0;
    0x0002f2d8 movs r2, 1                                            |         r2 = 1;
    0x0002f2da mov r0, r5                                            |         r0 = r5;
    0x0002f2dc bl 0x2dd00                                            |         fcn_0002dd00 (r0, r1, r2, r3);
                                                                     | label_18:
    0x0002f2e0 str r0, [r6, 0xc]                                     |         *((r6 + 0xc)) = r0;
                                                                     |     }
                                                                     | label_11:
    0x0002f2e2 ldr.w r3, [r5, 0x130]                                 |     r3 = *((r5 + 0x130));
    0x0002f2e6 subs r3, 1                                            |     r3--;
    0x0002f2e8 str.w r3, [r5, 0x130]                                 |     __asm ("str.w r3, aav.0x000000ff");
    0x0002f2ec cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0002f2ee bne.w 0x2f484                                         |         goto label_34;
                                                                     |     }
    0x0002f2f2 ldrh.w r3, [r5, 0x136]                                |     r3 = *((r5 + 0x136));
                                                                     | label_9:
    0x0002f2f6 strh.w r3, [r5, 0x134]                                |     *((r5 + 0x134)) = r3;
    0x0002f2fa ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
                                                                     |     if (r3 != 0) {
    0x0002f2fc cbz r3, 0x2f306                                       |         
    0x0002f2fe mov r1, r3                                            |         r1 = r3;
    0x0002f300 mov r0, r5                                            |         r0 = r5;
    0x0002f302 bl 0x16c0c                                            |         fcn_00016c0c (r0, r1);
                                                                     |     }
                                                                     | label_5:
    0x0002f306 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
                                                                     |     if (r3 != 0) {
    0x0002f308 cbz r3, 0x2f312                                       |         
    0x0002f30a mov r1, r3                                            |         r1 = r3;
    0x0002f30c mov r0, r5                                            |         r0 = r5;
    0x0002f30e bl 0x16c0c                                            |         fcn_00016c0c (r0, r1);
                                                                     |     }
    0x0002f312 ldr r3, [sp, 0x48]                                    |     r3 = var_48h;
                                                                     |     if (r3 != 0) {
    0x0002f314 cbz r3, 0x2f31e                                       |         
    0x0002f316 mov r1, r3                                            |         r1 = r3;
    0x0002f318 mov r0, r5                                            |         r0 = r5;
    0x0002f31a bl 0x16c98                                            |         fcn_00016c98 (r0, r1);
                                                                     |     }
    0x0002f31e cmp.w sl, 0                                           |     
                                                                     |     if (sl != 0) {
    0x0002f322 beq 0x2f32e                                           |         
    0x0002f324 mov r1, sl                                            |         r1 = sl;
    0x0002f326 movs r2, 1                                            |         r2 = 1;
    0x0002f328 mov r0, r5                                            |         r0 = r5;
    0x0002f32a bl 0x16b48                                            |         fcn_00016b48 (r0, r1, r2);
                                                                     |     }
    0x0002f32e ldrb.w r3, [r5, 0x57]                                 |     r3 = *((r5 + 0x57));
    0x0002f332 cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0002f334 beq.w 0x2f4da                                         |         goto label_35;
                                                                     |     }
    0x0002f338 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0002f33a cmp.w r8, 7                                           |     
    0x0002f33e ldr r3, [r3, 0x3c]                                    |     r3 = *((r3 + 0x3c));
    0x0002f340 vdup.32 d16, r3                                       |     __asm ("vdup.32 d16, r3");
                                                                     |     if (r8 == 7) {
    0x0002f344 beq.w 0x2f488                                         |         goto label_36;
                                                                     |     }
    0x0002f348 cmp.w r8, 0xa                                         |     
                                                                     |     if (r8 != 0xa) {
    0x0002f34c bne.w 0x2f474                                         |         goto label_37;
                                                                     |     }
    0x0002f350 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0002f352 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002f354 beq.w 0x2f4d0                                         |         goto label_38;
                                                                     |     }
    0x0002f358 movs r3, 0x81                                         |     r3 = 0x81;
    0x0002f35a strb r3, [r7]                                         |     *(r7) = r3;
                                                                     | label_7:
    0x0002f35c movs r2, 0x81                                         |     r2 = 0x81;
                                                                     | label_8:
    0x0002f35e add.w r3, r6, 0x14                                    |     r3 = r6 + 0x14;
    0x0002f362 str r6, [r7, 4]                                       |     *((r7 + 4)) = r6;
    0x0002f364 vst1.32 {d16}, [r3]                                   |     __asm ("vst1.32 {d16}, [r3]");
    0x0002f368 ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0002f36a str r6, [r3, 0x1c]                                    |     *((r3 + 0x1c)) = r6;
    0x0002f36c strb r2, [r6, 8]                                      |     *((r6 + 8)) = r2;
    0x0002f36e b 0x2efd2                                             |     goto label_0;
                                                                     | label_26:
    0x0002f370 cmp.w r8, 7                                           |     
                                                                     |     if (r8 == 7) {
    0x0002f374 beq.w 0x2f208                                         |         goto label_1;
                                                                     |     }
    0x0002f378 cmp.w r8, 0xa                                         |     
                                                                     |     if (r8 == 0xa) {
    0x0002f37c beq.w 0x2f208                                         |         goto label_1;
                                                                     |     }
    0x0002f380 b 0x2f186                                             |     goto label_2;
                                                                     | label_25:
    0x0002f382 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0002f384 ldrsh.w r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0002f388 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0002f38c lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0002f38e b 0x2f08e                                             |     goto label_3;
                                                                     | label_24:
    0x0002f390 ldr.w r6, [sb, 0x24]                                  |     r6 = *((sb + 0x24));
    0x0002f394 b 0x2f074                                             |     goto label_4;
                                                                     | label_30:
    0x0002f396 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0002f398 ldr r2, [r5, 0x10]                                    |     r2 = *((r5 + 0x10));
    0x0002f39a ldr r0, [r3, 0x3c]                                    |     r0 = *((r3 + 0x3c));
    0x0002f39c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002f39e beq.w 0x2f4e4                                         |         goto label_39;
                                                                     |     }
    0x0002f3a2 ldr r3, [r2, 0xc]                                     |     r3 = *((r2 + 0xc));
    0x0002f3a4 cmp r0, r3                                            |     
                                                                     |     if (r0 == r3) {
    0x0002f3a6 beq 0x2f3b8                                           |         goto label_20;
                                                                     |     }
    0x0002f3a8 add.w r3, r2, 0x10                                    |     r3 = r2 + 0x10;
                                                                     |     do {
    0x0002f3ac mov r2, r3                                            |         r2 = r3;
    0x0002f3ae adds r3, 0x10                                         |         r3 += 0x10;
    0x0002f3b0 ldr r1, [r3, -0x4]                                    |         r1 = *((r3 - 0x4));
    0x0002f3b4 cmp r0, r1                                            |         
    0x0002f3b6 bne 0x2f3ac                                           |         
                                                                     |     } while (r0 != r1);
                                                                     | label_20:
    0x0002f3b8 ldr r0, [r2]                                          |     r0 = *(r2);
    0x0002f3ba strd fp, sb, [sp, 0x64]                               |     __asm ("strd fp, sb, [var_64h]");
    0x0002f3be str r0, [sp, 0x6c]                                    |     var_6ch = r0;
                                                                     |     if (r0 != 0) {
    0x0002f3c0 cbz r0, 0x2f3ca                                       |         
    0x0002f3c2 blx 0x9e8c                                            |         r0 = fcn_00009e8c ();
    0x0002f3c6 bic r0, r0, 0xc0000000                                |         r0 = BIT_MASK (r0, 0xc0000000);
                                                                     |     }
    0x0002f3ca ldr r3, [pc, 0x138]                                   |     
    0x0002f3cc movs r1, 0x47                                         |     r1 = 0x47;
    0x0002f3ce str r0, [sp, 0x70]                                    |     var_70h = r0;
    0x0002f3d0 add r2, sp, 0x74                                      |     r2 += var_74h;
    0x0002f3d2 mov r0, r5                                            |     r0 = r5;
    0x0002f3d4 add r3, pc                                            |     r3 = 0x5e8de;
    0x0002f3d6 str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0002f3d8 movs r3, 0x1d                                         |     r3 = 0x1d;
    0x0002f3da str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0002f3dc movs r3, 0                                            |     r3 = 0;
    0x0002f3de bl 0x1db90                                            |     r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f3e2 mov r1, r0                                            |     r1 = r0;
                                                                     |     if (r0 != 0) {
    0x0002f3e4 cbz r0, 0x2f3ea                                       |         
    0x0002f3e6 movs r3, 2                                            |         r3 = 2;
    0x0002f3e8 strb r3, [r0, 1]                                      |         *((r0 + 1)) = r3;
                                                                     |     }
    0x0002f3ea ldr r0, [r4]                                          |     r0 = *(r4);
    0x0002f3ec bl 0x1db50                                            |     fcn_0001db50 (r0);
    0x0002f3f0 add r3, sp, 0x64                                      |     r3 += var_64h;
    0x0002f3f2 mov r7, r0                                            |     r7 = r0;
    0x0002f3f4 add r2, sp, 0x6c                                      |     r2 += var_6ch;
    0x0002f3f6 movs r1, 0                                            |     r1 = 0;
    0x0002f3f8 mov r0, r4                                            |     r0 = r4;
    0x0002f3fa bl 0x29448                                            |     fcn_00029448 (r0, r1, r2, r3);
    0x0002f3fe mov r1, r7                                            |     r1 = r7;
    0x0002f400 movs r7, 0                                            |     r7 = 0;
    0x0002f402 mov r2, r0                                            |     r2 = r0;
    0x0002f404 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0002f406 mov r0, r4                                            |     r0 = r4;
    0x0002f408 strd r7, r7, [sp, 0xc]                                |     __asm ("strd r7, r7, [var_ch]");
    0x0002f40c strd r7, r7, [sp, 4]                                  |     __asm ("strd r7, r7, [var_4h]");
    0x0002f410 str r7, [sp]                                          |     *(sp) = r7;
    0x0002f412 bl 0x1fb50                                            |     fcn_0001fb50 (r0, r1, r2, r3, r4, r5, r6);
    0x0002f416 ldr.w r3, [r5, 0x130]                                 |     r3 = *((r5 + 0x130));
    0x0002f41a mov r2, r6                                            |     r2 = r6;
    0x0002f41c mov sl, r0                                            |     sl = r0;
    0x0002f41e strh.w r7, [r5, 0x134]                                |     *((r5 + 0x134)) = r7;
    0x0002f422 mov r0, r5                                            |     r0 = r5;
    0x0002f424 adds r3, 1                                            |     r3++;
    0x0002f426 str.w r3, [r5, 0x130]                                 |     __asm ("str.w r3, aav.0x000000ff");
    0x0002f42a mov r3, r7                                            |     r3 = r7;
    0x0002f42c bl 0x1d740                                            |     r0 = fcn_0001d740 (r0, r1);
    0x0002f430 mov r6, r0                                            |     r6 = r0;
                                                                     |     if (r0 != 0) {
    0x0002f432 cbnz r0, 0x2f4a0                                      |         goto label_40;
                                                                     |     }
    0x0002f434 ldr.w r3, [r5, 0x130]                                 |     r3 = *((r5 + 0x130));
    0x0002f438 subs r3, 1                                            |     r3--;
    0x0002f43a str.w r3, [r5, 0x130]                                 |     __asm ("str.w r3, aav.0x000000ff");
                                                                     |     if (r3 == 0) {
    0x0002f43e cbz r3, 0x2f492                                       |         goto label_41;
                                                                     |     }
    0x0002f440 mov r3, r6                                            |     r3 = r6;
                                                                     | label_12:
    0x0002f442 movs r7, 0                                            |     r7 = 0;
    0x0002f444 strh.w r3, [r5, 0x134]                                |     *((r5 + 0x134)) = r3;
    0x0002f448 b 0x2f306                                             |     goto label_5;
                                                                     | label_27:
    0x0002f44a ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0002f44c movs r3, 0                                            |     r3 = 0;
    0x0002f44e movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0002f450 mov r0, r5                                            |     r0 = r5;
    0x0002f452 bl 0x1db90                                            |     fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f456 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0002f458 mov r6, r0                                            |     r6 = r0;
    0x0002f45a movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0002f45c movs r3, 0                                            |     r3 = 0;
    0x0002f45e mov r0, r5                                            |     r0 = r5;
    0x0002f460 bl 0x1db90                                            |     fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0002f464 mov r2, r6                                            |     r2 = r6;
    0x0002f466 mov r3, r0                                            |     r3 = r0;
    0x0002f468 movs r1, 0x8d                                         |     r1 = 0x8d;
    0x0002f46a mov r0, r4                                            |     r0 = r4;
    0x0002f46c bl 0x20c10                                            |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0002f470 mov r6, r0                                            |     r6 = r0;
    0x0002f472 b 0x2f1ee                                             |     goto label_6;
                                                                     | label_37:
    0x0002f474 movs r3, 0x81                                         |     r3 = 0x81;
                                                                     | label_10:
    0x0002f476 strb r3, [r7]                                         |     *(r7) = r3;
    0x0002f478 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0002f47a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0002f47c bne.w 0x2f35c                                         |         goto label_7;
                                                                     |     }
                                                                     | label_17:
    0x0002f480 movs r2, 0x80                                         |     r2 = 0x80;
    0x0002f482 b 0x2f35e                                             |     goto label_8;
                                                                     | label_34:
    0x0002f484 movs r3, 0                                            |     r3 = 0;
    0x0002f486 b 0x2f2f6                                             |     goto label_9;
                                                                     | label_36:
    0x0002f488 movs r3, 0x8a                                         |     r3 = 0x8a;
    0x0002f48a b 0x2f476                                             |     goto label_10;
                                                                     | label_31:
    0x0002f48c mov sl, r0                                            |     sl = r0;
    0x0002f48e mov r6, r0                                            |     r6 = r0;
    0x0002f490 b 0x2f2e2                                             |     goto label_11;
                                                                     | label_41:
    0x0002f492 ldrh.w r3, [r5, 0x136]                                |     r3 = *((r5 + 0x136));
    0x0002f496 b 0x2f442                                             |     goto label_12;
                                                                     | label_29:
    0x0002f498 movs r6, 0x55                                         |     r6 = 0x55;
    0x0002f49a mov sb, fp                                            |     sb = fp;
    0x0002f49c str r6, [sp, 0x1c]                                    |     var_1ch = r6;
    0x0002f49e b 0x2f242                                             |     goto label_13;
                                                                     | label_40:
    0x0002f4a0 mov r1, r7                                            |     r1 = r7;
    0x0002f4a2 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0002f4a4 blx 0x97d4                                            |     fcn_000097d4 ();
    0x0002f4a8 add.w r0, r6, 0x54                                    |     r0 = r6 + 0x54;
    0x0002f4ac str r7, [sp, 0x18]                                    |     var_18h = r7;
    0x0002f4ae add.w r7, r6, 0x24                                    |     r7 = r6 + 0x24;
    0x0002f4b2 mov r2, sb                                            |     r2 = sb;
    0x0002f4b4 mov r1, fp                                            |     r1 = fp;
    0x0002f4b6 str r0, [r6, 0x30]                                    |     *((r6 + 0x30)) = r0;
    0x0002f4b8 str r7, [r6, 0x1c]                                    |     *((r6 + 0x1c)) = r7;
    0x0002f4ba blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0002f4be ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0002f4c0 b 0x2f2a2                                             |     goto label_14;
                                                                     | label_23:
    0x0002f4c2 str r0, [sp, 0x2c]                                    |     var_2ch = r0;
    0x0002f4c4 str r0, [sp, 0x48]                                    |     var_48h = r0;
    0x0002f4c6 str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0002f4c8 cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0002f4ca bne.w 0x2f21a                                         |         goto label_15;
                                                                     |     }
    0x0002f4ce b 0x2f220                                             |     goto label_16;
                                                                     | label_38:
    0x0002f4d0 movs r3, 0x80                                         |     r3 = 0x80;
    0x0002f4d2 strb r3, [r7]                                         |     *(r7) = r3;
    0x0002f4d4 b 0x2f480                                             |     goto label_17;
                                                                     | label_33:
    0x0002f4d6 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0002f4d8 b 0x2f2e0                                             |     goto label_18;
                                                                     | label_35:
    0x0002f4da mov r1, r6                                            |     r1 = r6;
    0x0002f4dc mov r0, r5                                            |     r0 = r5;
    0x0002f4de bl 0x17078                                            |     fcn_00017078 (r0, r1);
    0x0002f4e2 b 0x2effa                                             |     goto label_19;
                                                                     | label_39:
    0x0002f4e4 sub.w r2, r2, 0x80000                                 |     r2 -= 0x80000;
    0x0002f4e8 b 0x2f3b8                                             |     goto label_20;
                                                                     | label_22:
    0x0002f4ea blx 0x9b44                                            |     fcn_00009b44 ();
                                                                     | label_32:
    0x0002f4ee ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0002f4f0 mov sl, r0                                            |     sl = r0;
    0x0002f4f2 b 0x2f2a2                                             |     goto label_14;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x300d4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000300d4 ()                                      | void fcn_000300d4 (int16_t arg_1h, int16_t arg1, uint32_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000300d4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000300d8 mov r6, r0                                        |     r6 = r0;
    0x000300da ldrb r0, [r0, 9]                                  |     r0 = *((r0 + 9));
    0x000300dc mov r7, r2                                        |     r7 = r2;
    0x000300de add.w lr, r1, r2                                  |     lr = r1 + r2;
    0x000300e2 mov r8, r2                                        |     r8 = r2;
    0x000300e4 ldr r5, [r6, 0x38]                                |     r5 = *((r6 + 0x38));
    0x000300e6 sub sp, 0xc                                       |     
    0x000300e8 add.w ip, r0, 1                                   |     
    0x000300ec mov sb, ip                                        |     sb = ip;
    0x000300ee add.w r3, r5, ip                                  |     r3 = r5 + ip;
    0x000300f2 ldrb.w r2, [r5, ip]                               |     r2 = *((r5 + ip));
    0x000300f6 ldrb r3, [r3, 1]                                  |     r3 = *((r3 + 1));
    0x000300f8 orrs.w r4, r3, r2                                 |     r4 = r3 | r2;
                                                                 |     if (r4 == r3) {
    0x000300fc beq 0x3018a                                       |         goto label_5;
                                                                 |     }
    0x000300fe mov sl, lr                                        |     sl = lr;
    0x00030100 b 0x3010e                                         |     
                                                                 |     while (r1 > r4) {
    0x00030102 cmp r2, r4                                        |         
                                                                 |         if (r2 >= r4) {
    0x00030104 bge 0x30152                                       |             goto label_6;
                                                                 |         }
    0x00030106 ldrb r2, [r5, r4]                                 |         r2 = *((r5 + r4));
    0x00030108 mov ip, r4                                        |         
    0x0003010a ldrb.w r3, [fp, 1]                                |         r3 = *(arg_1h);
    0x0003010e orr.w r3, r3, r2, lsl 8                           |         r3 |= (r2 << 8);
    0x00030112 add.w r2, ip, 3                                   |         r2 = ip + 3;
    0x00030116 mov r4, r3                                        |         r4 = r3;
    0x00030118 sxth r3, r3                                       |         __asm ("sxth r3, r3");
    0x0003011a cmp r1, r4                                        |         
    0x0003011c add.w fp, r5, r4                                  |         
    0x00030120 bhi 0x30102                                       |         
                                                                 |     }
    0x00030122 ldr r2, [r6, 0x34]                                |     r2 = *((r6 + 0x34));
    0x00030124 ldr r2, [r2, 0x28]                                |     r2 = *((r2 + 0x28));
    0x00030126 sub.w fp, r2, 4                                   |     
    0x0003012a cmp r4, fp                                        |     
                                                                 |     if (r4 < fp) {
    0x0003012c bls 0x30210                                       |         goto label_7;
                                                                 |     }
    0x0003012e blx 0xa230                                        |     fcn_0000a230 ();
    0x00030132 ldr r2, [pc, 0x220]                               |     
    0x00030134 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00030138 ldr r1, [pc, 0x21c]                               |     
    0x0003013a movw r3, 0xd8c                                    |     
    0x0003013e movt r3, 1                                        |     r3 = 0x10d8c;
    0x00030142 movs r0, 0xb                                      |     r0 = 0xb;
    0x00030144 add r2, pc                                        |     r2 = 0x6049e;
    0x00030146 str r4, [sp]                                      |     *(sp) = r4;
    0x00030148 add r1, pc                                        |     r1 = 0x604a4;
    0x0003014a blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 | label_4:
    0x0003014e movs r0, 0xb                                      |     r0 = 0xb;
    0x00030150 b 0x301d2                                         |     goto label_8;
                                                                 | label_6:
    0x00030152 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00030154 bne.w 0x302a8                                     |         goto label_9;
                                                                 |     }
                                                                 | label_1:
    0x00030158 mov r3, r4                                        |     r3 = r4;
                                                                 | label_2:
    0x0003015a cmp sb, ip                                        |     
                                                                 |     if (sb < ip) {
    0x0003015c bge 0x30176                                       |         
    0x0003015e add.w r2, r5, ip                                  |         r2 = r5 + ip;
    0x00030162 ldrb.w sl, [r2, 2]                                |         sl = *((r2 + 2));
    0x00030166 ldrb r2, [r2, 3]                                  |         r2 = *((r2 + 3));
    0x00030168 orr.w r2, r2, sl, lsl 8                           |         r2 |= (sl << 8);
    0x0003016c add r2, ip                                        |         r2 += ip;
    0x0003016e add.w sl, r2, 3                                   |         sl = r2 + 3;
    0x00030172 cmp r1, sl                                        |         
                                                                 |         if (r1 <= sl) {
    0x00030174 ble 0x3024e                                       |             goto label_10;
                                                                 |         }
                                                                 |     }
                                                                 | label_3:
    0x00030176 add.w sl, r0, 7                                   |     sl = r0 + 7;
    0x0003017a ldrb.w r2, [r5, sl]                               |     r2 = *((r5 + sl));
    0x0003017e cmp r2, r3                                        |     
    0x00030180 itt hs                                            |     
                                                                 |     if (r2 < r3) {
    0x00030182 subhs r2, r2, r3                                  |         r2 -= r3;
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x00030184 strbhs r2, [r5, sl]                               |         *((r5 + sl)) = r2;
                                                                 |     }
                                                                 |     if (r2 <= r3) {
    0x00030188 blo 0x30264                                       |         goto label_11;
                                                                 |     }
                                                                 | label_5:
    0x0003018a adds r3, r0, 5                                    |     r3 = r0 + 5;
    0x0003018c ldrh r2, [r5, r3]                                 |     r2 = *((r5 + r3));
    0x0003018e rev16 r2, r2                                      |     __asm ("rev16 r2, r2");
    0x00030190 uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x00030192 cmp r2, r1                                        |     
                                                                 |     if (r2 >= r1) {
    0x00030194 bhs 0x301d8                                       |         goto label_12;
                                                                 |     }
    0x00030196 lsrs r3, r1, 8                                    |     r3 = r1 >> 8;
    0x00030198 lsr.w sb, r4, 8                                   |     sb = r4 >> 8;
    0x0003019c uxtb r4, r4                                       |     r4 = (int8_t) r4;
    0x0003019e strb.w r3, [r5, ip]                               |     *((r5 + ip)) = r3;
    0x000301a2 add ip, r5                                        |     
    0x000301a4 strb.w r1, [ip, 1]                                |     *((ip + 1)) = r1;
    0x000301a8 add r5, r1                                        |     r5 += r1;
    0x000301aa ldr r3, [r6, 0x34]                                |     r3 = *((r6 + 0x34));
    0x000301ac ldrh r3, [r3, 0x18]                               |     r3 = *((r3 + 0x18));
    0x000301ae and r3, r3, 0xc                                   |     r3 &= 0xc;
                                                                 |     if (r3 != 0) {
    0x000301b2 cbnz r3, 0x30204                                  |         goto label_13;
                                                                 |     }
                                                                 |     do {
                                                                 | label_0:
    0x000301b4 movs r3, 0                                        |         r3 = 0;
    0x000301b6 lsrs r2, r7, 8                                    |         r2 = r7 >> 8;
    0x000301b8 bfi r3, sb, 0, 8                                  |         value_0 = BIT_MASK (0, 8);
                                                                 |         value_1 = sb & value_0;
                                                                 |         value_0 = ~value_0;
                                                                 |         r3 &= value_0;
                                                                 |         r3 |= value_1;
    0x000301bc bfi r3, r4, 8, 8                                  |         value_2 = BIT_MASK (8, 8);
                                                                 |         value_3 = r4 & value_2;
                                                                 |         value_2 = ~value_2;
                                                                 |         r3 &= value_2;
                                                                 |         r3 |= value_3;
    0x000301c0 movs r0, 0                                        |         r0 = 0;
    0x000301c2 bfi r3, r2, 0x10, 8                               |         value_4 = BIT_MASK (0x10, 8);
                                                                 |         value_5 = r2 & value_4;
                                                                 |         value_4 = ~value_4;
                                                                 |         r3 &= value_4;
                                                                 |         r3 |= value_5;
    0x000301c6 bfi r3, r7, 0x18, 8                               |         value_6 = BIT_MASK (0x18, 8);
                                                                 |         value_7 = r7 & value_6;
                                                                 |         value_6 = ~value_6;
                                                                 |         r3 &= value_6;
                                                                 |         r3 |= value_7;
    0x000301ca str r3, [r5]                                      |         *(r5) = r3;
    0x000301cc ldr r3, [r6, 0x14]                                |         r3 = *((r6 + 0x14));
    0x000301ce add r3, r8                                        |         r3 += r8;
    0x000301d0 str r3, [r6, 0x14]                                |         *((r6 + 0x14)) = r3;
                                                                 | label_8:
    0x000301d2 add sp, 0xc                                       |         
    0x000301d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |         if (r0 > 0) {
                                                                 | label_12:
    0x000301d8 bhi 0x302ca                                       |             goto label_14;
                                                                 |         }
    0x000301da cmp ip, sb                                        |         
                                                                 |         if (ip != sb) {
    0x000301dc bne 0x30286                                       |             goto label_15;
                                                                 |         }
    0x000301de lsr.w sb, r4, 8                                   |         sb = r4 >> 8;
    0x000301e2 lsr.w r2, lr, 8                                   |         r2 = lr >> 8;
    0x000301e6 uxtb r4, r4                                       |         r4 = (int8_t) r4;
    0x000301e8 add r0, r5                                        |         r0 += r5;
    0x000301ea strb.w sb, [r0, 1]                                |         *((r0 + 1)) = sb;
    0x000301ee strb r4, [r0, 2]                                  |         *((r0 + 2)) = r4;
    0x000301f0 strb r2, [r5, r3]                                 |         *((r5 + r3)) = r2;
    0x000301f2 add r5, r1                                        |         r5 += r1;
    0x000301f4 strb.w lr, [r0, 6]                                |         
    0x000301f8 ldr r3, [r6, 0x34]                                |         r3 = *((r6 + 0x34));
    0x000301fa ldrh r3, [r3, 0x18]                               |         r3 = *((r3 + 0x18));
    0x000301fc and r3, r3, 0xc                                   |         r3 &= 0xc;
    0x00030200 cmp r3, 0                                         |         
    0x00030202 beq 0x301b4                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_13:
    0x00030204 mov r2, r7                                        |     r2 = r7;
    0x00030206 movs r1, 0                                        |     r1 = 0;
    0x00030208 mov r0, r5                                        |     r0 = r5;
    0x0003020a blx 0x97d4                                        |     fcn_000097d4 ();
    0x0003020e b 0x301b4                                         |     goto label_0;
                                                                 | label_7:
    0x00030210 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00030212 beq 0x30158                                       |         goto label_1;
                                                                 |     }
    0x00030214 add.w fp, lr, 3                                   |     
    0x00030218 cmp r4, fp                                        |     
    0x0003021a it hi                                             |     
                                                                 |     if (r4 > fp) {
    0x0003021c movhi r3, 0                                       |         r3 = 0;
                                                                 |         goto label_16;
                                                                 |     }
                                                                 |     if (r4 > fp) {
                                                                 | label_16:
    0x0003021e bhi 0x3015a                                       |         goto label_2;
                                                                 |     }
    0x00030220 cmp r4, lr                                        |     
                                                                 |     if (r4 > lr) {
    0x00030222 blo 0x302ec                                       |         
    0x00030224 adds r7, r5, r4                                   |         r7 = r5 + r4;
    0x00030226 ldrb.w fp, [r7, 2]                                |         fp = *((r7 + 2));
    0x0003022a ldrb.w lr, [r7, 3]                                |         
    0x0003022e orr.w lr, lr, fp, lsl 8                           |         lr |= (fp << 8);
    0x00030232 add lr, r4                                        |         lr += r4;
    0x00030234 cmp r2, lr                                        |         
                                                                 |         if (r2 <= lr) {
    0x00030236 blo 0x30330                                       |             goto label_17;
                                                                 |         }
    0x00030238 ldrb r2, [r5, r4]                                 |         r2 = *((r5 + r4));
    0x0003023a sub.w r3, r3, sl                                  |         r3 -= sl;
    0x0003023e ldrb r4, [r7, 1]                                  |         r4 = *((r7 + 1));
    0x00030240 sub.w r7, lr, r1                                  |         r7 = lr - r1;
    0x00030244 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x00030246 uxth r7, r7                                       |         r7 = (int16_t) r7;
    0x00030248 orr.w r4, r4, r2, lsl 8                           |         r4 |= (r2 << 8);
    0x0003024c b 0x3015a                                         |         goto label_2;
                                                                 | label_10:
    0x0003024e cmp r1, r2                                        |         
                                                                 |         if (r1 < r2) {
    0x00030250 blt 0x3030e                                       |             goto label_18;
                                                                 |         }
    0x00030252 add r3, r1                                        |         r3 += r1;
    0x00030254 sub.w r7, lr, ip                                  |         r7 = lr - ip;
    0x00030258 subs r3, r3, r2                                   |         r3 -= r2;
    0x0003025a uxth r7, r7                                       |         r7 = (int16_t) r7;
    0x0003025c and r3, r3, 0xff                                  |         r3 &= 0xff;
    0x00030260 mov r1, ip                                        |         r1 = ip;
    0x00030262 b 0x30176                                         |         goto label_3;
                                                                 | label_11:
    0x00030264 blx 0xa230                                        |         fcn_0000a230 ();
    0x00030268 ldr r2, [pc, 0xf0]                                |         
    0x0003026a add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x0003026e ldr r1, [pc, 0xf0]                                |         
    0x00030270 movw r3, 0xdae                                    |         
    0x00030274 movt r3, 1                                        |         r3 = 0x10dae;
    0x00030278 movs r0, 0xb                                      |         r0 = 0xb;
    0x0003027a add r2, pc                                        |         r2 = 0x605da;
    0x0003027c str r4, [sp]                                      |         *(sp) = r4;
    0x0003027e add r1, pc                                        |         r1 = 0x605e4;
    0x00030280 blx 0x9f00                                        |         fcn_00009f00 ();
    0x00030284 b 0x3014e                                         |         goto label_4;
                                                                 | label_15:
    0x00030286 blx 0xa230                                        |         fcn_0000a230 ();
    0x0003028a ldr r2, [pc, 0xd8]                                |         
    0x0003028c add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x00030290 ldr r1, [pc, 0xd4]                                |         
    0x00030292 movw r3, 0xdb8                                    |         
    0x00030296 movt r3, 1                                        |         r3 = 0x10db8;
    0x0003029a movs r0, 0xb                                      |         r0 = 0xb;
    0x0003029c add r2, pc                                        |         r2 = 0x60606;
    0x0003029e str r4, [sp]                                      |         *(sp) = r4;
    0x000302a0 add r1, pc                                        |         r1 = 0x6060c;
    0x000302a2 blx 0x9f00                                        |         fcn_00009f00 ();
    0x000302a6 b 0x3014e                                         |         goto label_4;
                                                                 | label_9:
    0x000302a8 blx 0xa230                                        |         fcn_0000a230 ();
    0x000302ac ldr r2, [pc, 0xbc]                                |         
    0x000302ae add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x000302b2 ldr r1, [pc, 0xbc]                                |         
    0x000302b4 movw r3, 0xd87                                    |         
    0x000302b8 movt r3, 1                                        |         r3 = 0x10d87;
    0x000302bc movs r0, 0xb                                      |         r0 = 0xb;
    0x000302be add r2, pc                                        |         r2 = 0x6062e;
    0x000302c0 str r4, [sp]                                      |         *(sp) = r4;
    0x000302c2 add r1, pc                                        |         r1 = 0x60638;
    0x000302c4 blx 0x9f00                                        |         fcn_00009f00 ();
    0x000302c8 b 0x3014e                                         |         goto label_4;
                                                                 | label_14:
    0x000302ca blx 0xa230                                        |         fcn_0000a230 ();
    0x000302ce ldr r2, [pc, 0xa4]                                |         
    0x000302d0 add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x000302d4 ldr r1, [pc, 0xa0]                                |         
    0x000302d6 movw r3, 0xdb7                                    |         
    0x000302da movt r3, 1                                        |         r3 = 0x10db7;
    0x000302de movs r0, 0xb                                      |         r0 = 0xb;
    0x000302e0 add r2, pc                                        |         r2 = 0x6065a;
    0x000302e2 str r4, [sp]                                      |         *(sp) = r4;
    0x000302e4 add r1, pc                                        |         r1 = 0x60660;
    0x000302e6 blx 0x9f00                                        |         fcn_00009f00 ();
    0x000302ea b 0x3014e                                         |         goto label_4;
                                                                 |     }
    0x000302ec blx 0xa230                                        |     fcn_0000a230 ();
    0x000302f0 ldr r2, [pc, 0x88]                                |     
    0x000302f2 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x000302f6 ldr r1, [pc, 0x88]                                |     
    0x000302f8 movw r3, 0xd98                                    |     
    0x000302fc movt r3, 1                                        |     r3 = 0x10d98;
    0x00030300 movs r0, 0xb                                      |     r0 = 0xb;
    0x00030302 add r2, pc                                        |     r2 = 0x60682;
    0x00030304 str r4, [sp]                                      |     *(sp) = r4;
    0x00030306 add r1, pc                                        |     r1 = 0x6068c;
    0x00030308 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0003030c b 0x3014e                                         |     goto label_4;
                                                                 | label_18:
    0x0003030e blx 0xa230                                        |     fcn_0000a230 ();
    0x00030312 ldr r2, [pc, 0x70]                                |     
    0x00030314 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00030318 ldr r1, [pc, 0x6c]                                |     
    0x0003031a movw r3, 0xda8                                    |     
    0x0003031e movt r3, 1                                        |     r3 = 0x10da8;
    0x00030322 movs r0, 0xb                                      |     r0 = 0xb;
    0x00030324 add r2, pc                                        |     r2 = 0x606ae;
    0x00030326 str r4, [sp]                                      |     *(sp) = r4;
    0x00030328 add r1, pc                                        |     r1 = 0x606b4;
    0x0003032a blx 0x9f00                                        |     fcn_00009f00 ();
    0x0003032e b 0x3014e                                         |     goto label_4;
                                                                 | label_17:
    0x00030330 blx 0xa230                                        |     fcn_0000a230 ();
    0x00030334 ldr r2, [pc, 0x54]                                |     
    0x00030336 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x0003033a ldr r1, [pc, 0x54]                                |     
    0x0003033c movw r3, 0xd9b                                    |     
    0x00030340 movt r3, 1                                        |     r3 = 0x10d9b;
    0x00030344 movs r0, 0xb                                      |     r0 = 0xb;
    0x00030346 add r2, pc                                        |     r2 = 0x606d6;
    0x00030348 str r4, [sp]                                      |     *(sp) = r4;
    0x0003034a add r1, pc                                        |     r1 = 0x606e0;
    0x0003034c blx 0x9f00                                        |     fcn_00009f00 ();
    0x00030350 b 0x3014e                                         |     goto label_4;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x309b8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000309b8 ()                                      | void fcn_000309b8 (int16_t arg_ch, 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_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000309b8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000309bc sub sp, 0x1c                                      |     
    0x000309be ldr.w r8, [r0, 0x38]                              |     r8 = *(arg_40hx38);
    0x000309c2 mov r7, r3                                        |     r7 = r3;
    0x000309c4 mov r4, r0                                        |     r4 = r0;
    0x000309c6 mov fp, r1                                        |     
    0x000309c8 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x000309ca mov r6, r2                                        |     r6 = r2;
    0x000309cc ldr r5, [r0, 8]                                   |     r5 = *((r0 + 8));
    0x000309ce add.w sl, r8, -1                                  |     sl = r8 + -1;
    0x000309d2 ldr.w sb, [r5, 0x6c]                              |     sb = *((r5 + 0x6c));
    0x000309d6 str.w sl, [r0, 0x38]                              |     __asm ("str.w sl, [r0, 0x38]");
                                                                 |     if (r3 != 0) {
    0x000309da cbnz r3, 0x30a20                                  |         goto label_9;
                                                                 |     }
                                                                 | label_0:
    0x000309dc ldr r3, [r4]                                      |     r3 = *(r4);
    0x000309de ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 != 0) {
    0x000309e2 cbnz r3, 0x30a14                                  |         goto label_10;
                                                                 |     }
    0x000309e4 ldr.w r2, [fp, 0xc]                               |     r2 = *(arg_ch);
    0x000309e8 cmp r2, 0                                         |     
    0x000309ea bgt 0x30a04                                       |     
                                                                 |     while (1) {
    0x000309ec ldrb r2, [r7]                                     |         r2 = *(r7);
    0x000309ee ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x000309f0 subs r2, 0xa                                      |         r2 -= 0xa;
    0x000309f2 cmp r2, 3                                         |         
                                                                 |         if (r2 > 3) {
    0x000309f4 bhi.w 0x30cb6                                     |             goto label_11;
                                                                 |         }
                                                                 |         /* switch table (5 cases) at 0x309fc */
    0x000309f8 tbh [pc, r2, lsl 1]                               |         __asm ("tbh [pc, r2, lsl 1]");
    0x00030a04 movs r1, 1                                        |         r1 = 1;
    0x00030a06 mov r3, sl                                        |         r3 = sl;
    0x00030a08 str r1, [sp]                                      |         *(sp) = r1;
    0x00030a0a mov r0, r5                                        |         r0 = r5;
    0x00030a0c movs r1, 0x31                                     |         r1 = 0x31;
    0x00030a0e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00030a12 b 0x309ec                                         |         
                                                                 |     }
                                                                 | label_10:
    0x00030a14 mov.w sb, 0                                       |     sb = 0;
    0x00030a18 mov r0, sb                                        |     r0 = sb;
    0x00030a1a add sp, 0x1c                                      |     
    0x00030a1c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_9:
    0x00030a20 ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
    0x00030a22 cmp sb, r3                                        |     
                                                                 |     if (sb >= r3) {
    0x00030a24 bge.w 0x30c6c                                     |         goto label_12;
                                                                 |     }
    0x00030a28 add.w r3, sb, sb, lsl 2                           |     r3 = sb + (sb << 2);
    0x00030a2c ldr r0, [r5, 0x68]                                |     r0 = *((r5 + 0x68));
    0x00030a2e add.w r2, sb, 1                                   |     r2 = sb + 1;
    0x00030a32 str.w sb, [sp, 0x14]                              |     __asm ("str.w sb, [var_14h]");
    0x00030a36 lsl.w ip, r3, 2                                   |     
    0x00030a3a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00030a3c str r2, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r2;
    0x00030a3e movs r1, 0                                        |     r1 = 0;
    0x00030a40 add.w r2, r0, ip                                  |     r2 = r0 + ip;
    0x00030a44 strd r3, r1, [r2, 4]                              |     __asm ("strd r3, r1, [r2, 4]");
    0x00030a48 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x00030a4c movs r2, 0x10                                     |     r2 = 0x10;
    0x00030a4e str.w r2, [r0, ip]                                |     __asm ("str.w r2, [r0, ip]");
                                                                 | label_5:
    0x00030a52 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00030a54 ldrd r2, r1, [r6, 0xc]                            |     __asm ("ldrd r2, r1, [r6, 0xc]");
    0x00030a58 adds r3, 1                                        |     r3++;
    0x00030a5a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00030a5c ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
                                                                 |     if (r3 != 0) {
    0x00030a5e cbz r3, 0x30a68                                   |         
    0x00030a60 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00030a62 ldr r0, [sp, 0x48]                                |         r0 = *(arg_48h);
    0x00030a64 adds r3, 1                                        |         r3++;
    0x00030a66 str r3, [r0]                                      |         *(r0) = r3;
                                                                 |     }
    0x00030a68 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00030a6a mov r0, r5                                        |     r0 = r5;
    0x00030a6c strd r1, r3, [sp]                                 |     __asm ("strd r1, r3, [sp]");
    0x00030a70 mvn r3, 7                                         |     r3 = ~7;
    0x00030a74 movs r1, 0x5a                                     |     r1 = 0x5a;
    0x00030a76 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00030a78 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00030a7a bl 0x2a324                                        |     r0 = fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00030a7e adds r2, r0, 2                                    |     r2 = r0 + 2;
    0x00030a80 mov r3, sl                                        |     r3 = sl;
    0x00030a82 movs r1, 0xd                                      |     r1 = 0xd;
    0x00030a84 mov r0, r5                                        |     r0 = r5;
    0x00030a86 str r2, [sp]                                      |     *(sp) = r2;
    0x00030a88 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030a8c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00030a8e ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00030a90 cmp r3, 0                                         |     
    0x00030a92 itt lt                                            |     
                                                                 |     if (r3 >= 0) {
    0x00030a94 addlt r3, r1, -1                                  |         r3 = r1 + -1;
                                                                 |     }
                                                                 |     if (r3 < 0) {
    0x00030a98 str r3, [sp, 0x14]                                |         var_14h = r3;
                                                                 |     }
    0x00030a9a ldr r3, [r5]                                      |     r3 = *(r5);
    0x00030a9c ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 != 0) {
    0x00030aa0 cbnz r3, 0x30ad4                                  |         goto label_13;
                                                                 |     }
    0x00030aa2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00030aa4 ldr r2, [r5, 0x68]                                |     r2 = *((r5 + 0x68));
    0x00030aa6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00030aaa add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
                                                                 |     do {
    0x00030aae ldr r2, [r6, 0x10]                                |         r2 = *((r6 + 0x10));
    0x00030ab0 mov r0, r5                                        |         r0 = r5;
    0x00030ab2 str r1, [r3, 8]                                   |         *((r3 + 8)) = r1;
    0x00030ab4 movs r1, 0x50                                     |         r1 = 0x50;
    0x00030ab6 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00030ab8 subs r2, 1                                        |         r2--;
    0x00030aba str r2, [sp]                                      |         *(sp) = r2;
    0x00030abc ldr r2, [r6, 0xc]                                 |         r2 = *((r6 + 0xc));
    0x00030abe bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00030ac2 movs r2, 0                                        |         r2 = 0;
    0x00030ac4 ldr r3, [sp, 0x44]                                |         r3 = *(arg_44h);
    0x00030ac6 str r2, [sp]                                      |         *(sp) = r2;
    0x00030ac8 movs r1, 0x47                                     |         r1 = 0x47;
    0x00030aca movs r2, 1                                        |         r2 = 1;
    0x00030acc mov r0, r5                                        |         r0 = r5;
    0x00030ace bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00030ad2 b 0x309dc                                         |         goto label_0;
                                                                 | label_13:
    0x00030ad4 ldr r3, [pc, 0x1f0]                               |         
    0x00030ad6 add r3, pc                                        |         r3 = 0x617a2;
    0x00030ad8 adds r3, 4                                        |         r3 += 4;
    0x00030ada b 0x30aae                                         |         
                                                                 |     } while (1);
    0x00030adc str r3, [sp]                                      |     *(sp) = r3;
    0x00030ade movs r1, 0x4f                                     |     r1 = 0x4f;
    0x00030ae0 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00030ae2 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x00030ae4 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00030ae6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     do {
                                                                 | label_1:
    0x00030aea ldr.w r2, [fp, 8]                                 |         r2 = *(arg_48h);
    0x00030aee cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00030af0 bne.w 0x30c46                                     |             goto label_14;
                                                                 |         }
                                                                 | label_2:
    0x00030af4 ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x00030af6 ldrd r3, r2, [r0, 0x38]                           |         __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00030afa cmn r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x00030afc bmi.w 0x30c60                                     |             goto label_15;
                                                                 |         }
                                                                 | label_3:
    0x00030b00 ldr r2, [r5, 0x6c]                                |         r2 = *((r5 + 0x6c));
    0x00030b02 lsl.w r8, r8, 2                                   |         r8 <<= 2;
    0x00030b06 ldr r3, [r0, 0x40]                                |         r3 = *((r0 + 0x40));
    0x00030b08 rsb.w r8, r8, 0                                   |         r8 -= ;
    0x00030b0c str.w r2, [r3, r8]                                |         __asm ("str.w r2, [r3, r8]");
                                                                 | label_4:
    0x00030b10 movs r3, 0                                        |         r3 = 0;
    0x00030b12 ldr r2, [sp, 0x40]                                |         r2 = *(arg_40h);
    0x00030b14 mov r0, r5                                        |         r0 = r5;
    0x00030b16 movs r1, 0x43                                     |         r1 = 0x43;
    0x00030b18 str r3, [sp]                                      |         *(sp) = r3;
    0x00030b1a bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00030b1e mov r0, sb                                        |         r0 = sb;
    0x00030b20 add sp, 0x1c                                      |         
    0x00030b22 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00030b26 ldrb r2, [r4, 0x13]                               |         r2 = *((r4 + 0x13));
    0x00030b28 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00030b2a beq.w 0x30c90                                     |             goto label_16;
                                                                 |         }
    0x00030b2e subs r2, 1                                        |         r2--;
    0x00030b30 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x00030b32 strb r2, [r4, 0x13]                               |         *((r4 + 0x13)) = r2;
    0x00030b34 adds r2, 0x26                                     |         r2 += 0x26;
    0x00030b36 ldr.w sl, [r4, r2, lsl 2]                         |         offset_0 = r2 << 2;
                                                                 |         sl = *((r4 + offset_0));
                                                                 | label_7:
    0x00030b3a str r3, [sp, 8]                                   |         var_8h = r3;
    0x00030b3c movs r1, 0x61                                     |         r1 = 0x61;
    0x00030b3e str.w sl, [sp]                                    |         __asm ("str.w sl, [sp]");
    0x00030b42 mov r0, r5                                        |         r0 = r5;
    0x00030b44 ldr r2, [r7, 0x14]                                |         r2 = *((r7 + 0x14));
    0x00030b46 str r2, [sp, 4]                                   |         var_4h = r2;
    0x00030b48 ldr r2, [r6, 0xc]                                 |         r2 = *((r6 + 0xc));
    0x00030b4a bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00030b4e ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x00030b50 movs r1, 0x8a                                     |         r1 = 0x8a;
    0x00030b52 ldr r2, [r7, 4]                                   |         r2 = *((r7 + 4));
    0x00030b54 mov r0, r5                                        |         r0 = r5;
    0x00030b56 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00030b58 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x00030b5a str r3, [sp]                                      |         *(sp) = r3;
    0x00030b5c mov r3, sl                                        |         r3 = sl;
    0x00030b5e bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00030b62 cmp.w sl, 0                                       |         
    0x00030b66 beq 0x30aea                                       |         
                                                                 |     } while (sl == 0);
    0x00030b68 ldrb r3, [r4, 0x13]                               |     r3 = *((r4 + 0x13));
    0x00030b6a cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00030b6c bhi 0x30aea                                       |         goto label_1;
                                                                 |     }
    0x00030b6e adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00030b70 adds r3, 0x26                                     |     r3 += 0x26;
    0x00030b72 strb r2, [r4, 0x13]                               |     *((r4 + 0x13)) = r2;
    0x00030b74 str.w sl, [r4, r3, lsl 2]                         |     __asm ("str.w sl, [r4, r3, lsl 2]");
    0x00030b78 b 0x30aea                                         |     goto label_1;
    0x00030b7a ldrb r2, [r4, 0x13]                               |     r2 = *((r4 + 0x13));
    0x00030b7c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00030b7e beq 0x30c7e                                       |         goto label_17;
                                                                 |     }
    0x00030b80 subs r1, r2, 1                                    |     r1 = r2 - 1;
    0x00030b82 uxtb r1, r1                                       |     r1 = (int8_t) r1;
    0x00030b84 add.w r0, r1, 0x26                                |     r0 = r1 + 0x26;
    0x00030b88 strb r1, [r4, 0x13]                               |     *((r4 + 0x13)) = r1;
    0x00030b8a ldr.w r0, [r4, r0, lsl 2]                         |     offset_1 = r0 << 2;
                                                                 |     r0 = *((r4 + offset_1));
    0x00030b8e str r0, [sp, 0x10]                                |     var_10h = r0;
    0x00030b90 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00030b92 beq.w 0x30cb0                                     |         goto label_18;
                                                                 |     }
    0x00030b96 subs r2, 2                                        |     r2 -= 2;
    0x00030b98 uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x00030b9a strb r2, [r4, 0x13]                               |     *((r4 + 0x13)) = r2;
    0x00030b9c adds r2, 0x26                                     |     r2 += 0x26;
    0x00030b9e ldr.w sl, [r4, r2, lsl 2]                         |     offset_2 = r2 << 2;
                                                                 |     sl = *((r4 + offset_2));
                                                                 | label_6:
    0x00030ba2 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x00030ba4 movs r1, 0x61                                     |     r1 = 0x61;
    0x00030ba6 ldr r6, [sp, 0x10]                                |     r6 = var_10h;
    0x00030ba8 mov r0, r5                                        |     r0 = r5;
    0x00030baa str r6, [sp]                                      |     *(sp) = r6;
    0x00030bac bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030bb0 movs r3, 0                                        |     r3 = 0;
    0x00030bb2 movs r1, 0x7f                                     |     r1 = 0x7f;
    0x00030bb4 str r3, [sp]                                      |     *(sp) = r3;
    0x00030bb6 mov r0, r5                                        |     r0 = r5;
    0x00030bb8 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x00030bba mov r3, sl                                        |     r3 = sl;
    0x00030bbc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030bc0 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x00030bc2 mov r3, r6                                        |     r3 = r6;
    0x00030bc4 movs r1, 0x80                                     |     r1 = 0x80;
    0x00030bc6 mov r0, r5                                        |     r0 = r5;
    0x00030bc8 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00030bcc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030bd0 ldr r3, [r5, 0x6c]                                |     r3 = *((r5 + 0x6c));
    0x00030bd2 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00030bd4 ble 0x30be6                                       |         
    0x00030bd6 ldr r2, [r5, 0x68]                                |         r2 = *((r5 + 0x68));
    0x00030bd8 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00030bdc add.w r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
    0x00030be0 movs r3, 8                                        |         r3 = 8;
    0x00030be2 strh r3, [r2, -0x12]                              |         *((r2 - 0x12)) = r3;
                                                                 |     }
    0x00030be6 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00030bea beq 0x30bfe                                       |         goto label_19;
                                                                 |     }
    0x00030bec ldrb r3, [r4, 0x13]                               |     r3 = *((r4 + 0x13));
    0x00030bee cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00030bf0 bhi.w 0x30aea                                     |         goto label_1;
                                                                 |     }
    0x00030bf4 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00030bf6 adds r3, 0x26                                     |     r3 += 0x26;
    0x00030bf8 strb r2, [r4, 0x13]                               |     *((r4 + 0x13)) = r2;
    0x00030bfa str.w sl, [r4, r3, lsl 2]                         |     __asm ("str.w sl, [r4, r3, lsl 2]");
                                                                 | label_19:
    0x00030bfe ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00030c00 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00030c02 beq.w 0x30aea                                     |         goto label_1;
                                                                 |     }
    0x00030c06 ldrb r3, [r4, 0x13]                               |     r3 = *((r4 + 0x13));
    0x00030c08 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00030c0a bhi.w 0x30aea                                     |         goto label_1;
                                                                 |     }
    0x00030c0e adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00030c10 adds r3, 0x26                                     |     r3 += 0x26;
    0x00030c12 strb r2, [r4, 0x13]                               |     *((r4 + 0x13)) = r2;
    0x00030c14 str.w r1, [r4, r3, lsl 2]                         |     __asm ("str.w r1, [r4, r3, lsl 2]");
    0x00030c18 b 0x30aea                                         |     goto label_1;
    0x00030c1a ldr r0, [r7, 0xc]                                 |     r0 = *((r7 + 0xc));
    0x00030c1c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00030c1e beq 0x30c9c                                       |         goto label_20;
                                                                 |     }
                                                                 | label_8:
    0x00030c20 str r3, [sp]                                      |     *(sp) = r3;
    0x00030c22 movs r1, 0x4f                                     |     r1 = 0x4f;
    0x00030c24 mov r3, r0                                        |     r3 = r0;
    0x00030c26 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x00030c28 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00030c2a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030c2e movs r3, 0                                        |     r3 = 0;
    0x00030c30 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x00030c32 movs r1, 0xb                                      |     r1 = 0xb;
    0x00030c34 mov r0, r5                                        |     r0 = r5;
    0x00030c36 str r3, [sp]                                      |     *(sp) = r3;
    0x00030c38 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030c3c ldr.w r2, [fp, 8]                                 |     r2 = *(arg_48h);
    0x00030c40 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00030c42 beq.w 0x30af4                                     |         goto label_2;
                                                                 |     }
                                                                 | label_14:
    0x00030c46 movs r3, 0                                        |     r3 = 0;
    0x00030c48 movs r1, 0x3c                                     |     r1 = 0x3c;
    0x00030c4a str r3, [sp]                                      |     *(sp) = r3;
    0x00030c4c mov r0, r5                                        |     r0 = r5;
    0x00030c4e ldr r3, [sp, 0x4c]                                |     r3 = *(arg_ch);
    0x00030c50 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030c54 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00030c56 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00030c5a cmn r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00030c5c bpl.w 0x30b00                                     |         goto label_3;
                                                                 |     }
                                                                 | label_15:
    0x00030c60 rsb.w r2, r8, 0                                   |     r2 = r8 - ;
    0x00030c64 mov r1, r5                                        |     r1 = r5;
    0x00030c66 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00030c6a b 0x30b10                                         |     goto label_4;
                                                                 | label_12:
    0x00030c6c movs r3, 0                                        |     r3 = 0;
    0x00030c6e ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x00030c70 movs r1, 0x10                                     |     r1 = 0x10;
    0x00030c72 mov r0, r5                                        |     r0 = r5;
    0x00030c74 str r3, [sp]                                      |     *(sp) = r3;
    0x00030c76 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00030c7a str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00030c7c b 0x30a52                                         |     goto label_5;
                                                                 | label_17:
    0x00030c7e ldr r2, [r4, 0x2c]                                |     r2 = *((r4 + 0x2c));
    0x00030c80 adds r2, 1                                        |     r2++;
    0x00030c82 mov sl, r2                                        |     sl = r2;
    0x00030c84 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 |     do {
    0x00030c86 add.w sl, sl, 1                                   |         sl++;
    0x00030c8a str.w sl, [r4, 0x2c]                              |         __asm ("str.w sl, [r4, 0x2c]");
    0x00030c8e b 0x30ba2                                         |         goto label_6;
                                                                 | label_16:
    0x00030c90 ldr r2, [r4, 0x2c]                                |         r2 = *((r4 + 0x2c));
    0x00030c92 add.w sl, r2, 1                                   |         sl = r2 + 1;
    0x00030c96 str.w sl, [r4, 0x2c]                              |         __asm ("str.w sl, [r4, 0x2c]");
    0x00030c9a b 0x30b3a                                         |         goto label_7;
                                                                 | label_20:
    0x00030c9c mov r1, r3                                        |         r1 = r3;
    0x00030c9e mov r0, r4                                        |         r0 = r4;
    0x00030ca0 str r3, [sp, 0x10]                                |         var_10h = r3;
    0x00030ca2 bl 0xf638                                         |         fcn_0000f638 (r0, r1);
    0x00030ca6 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00030ca8 strd r0, r3, [r7, 0xc]                            |         __asm ("strd r0, r3, [r7, 0xc]");
    0x00030cac ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x00030cae b 0x30c20                                         |         goto label_8;
                                                                 | label_18:
    0x00030cb0 ldr.w sl, [r4, 0x2c]                              |         sl = *((r4 + 0x2c));
    0x00030cb4 b 0x30c86                                         |         
                                                                 |     } while (1);
                                                                 | label_11:
    0x00030cb6 movs r1, 0                                        |     r1 = 0;
    0x00030cb8 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x00030cba mov r0, r5                                        |     r0 = r5;
    0x00030cbc str r1, [sp]                                      |     *(sp) = r1;
    0x00030cbe movs r1, 0x54                                     |     r1 = 0x54;
    0x00030cc0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030cc4 b 0x30aea                                         |     goto label_1;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x30ccc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00030ccc ()                                      | void fcn_00030ccc (int16_t arg_1h, int16_t arg_48h, int16_t arg_4ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00030ccc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00030cd0 sub sp, 0x24                                      |     
    0x00030cd2 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00030cd4 mov r7, r1                                        |     r7 = r1;
    0x00030cd6 mov fp, r2                                        |     
    0x00030cd8 str r0, [sp, 8]                                   |     var_8h = r0;
    0x00030cda ldr r4, [r5, 8]                                   |     r4 = *((r5 + 8));
    0x00030cdc str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00030cde cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00030ce0 beq.w 0x30f8c                                     |         goto label_14;
                                                                 |     }
                                                                 | label_5:
    0x00030ce4 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00030ce6 ldrb r3, [r5, 0x13]                               |     r3 = *((r5 + 0x13));
    0x00030ce8 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00030cea ldr r2, [r5, 0x2c]                                |     r2 = *((r5 + 0x2c));
    0x00030cec ldr r0, [r1, 0xc]                                 |     r0 = *((r1 + 0xc));
    0x00030cee str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x00030cf0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030cf2 beq.w 0x30f9a                                     |         goto label_15;
                                                                 |     }
    0x00030cf6 subs r0, r3, 1                                    |     r0 = r3 - 1;
    0x00030cf8 uxtb r0, r0                                       |     r0 = (int8_t) r0;
    0x00030cfa add.w ip, r0, 0x26                                |     
    0x00030cfe strb r0, [r5, 0x13]                               |     *((r5 + 0x13)) = r0;
    0x00030d00 ldr.w r8, [r5, ip, lsl 2]                         |     offset_0 = ip << 2;
                                                                 |     r8 = *((r5 + offset_0));
    0x00030d04 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00030d06 beq.w 0x30f9e                                     |         goto label_16;
                                                                 |     }
    0x00030d0a subs r3, 2                                        |     r3 -= 2;
    0x00030d0c uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00030d0e strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x00030d10 adds r3, 0x26                                     |     r3 += 0x26;
    0x00030d12 ldr.w sl, [r5, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     sl = *((r5 + offset_1));
                                                                 | label_6:
    0x00030d16 add.w sb, r2, 1                                   |     sb = r2 + 1;
    0x00030d1a mov r2, fp                                        |     r2 = fp;
    0x00030d1c ldr.w fp, [r5, 0x38]                              |     fp = *((r5 + 0x38));
    0x00030d20 mov r3, r8                                        |     r3 = r8;
    0x00030d22 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00030d24 str.w sb, [r5, 0x2c]                              |     __asm ("str.w sb, [r5, 0x2c]");
    0x00030d28 add.w r6, fp, -1                                  |     r6 = fp + -1;
    0x00030d2c ldr r0, [r0]                                      |     r0 = *(r0);
    0x00030d2e str r6, [r5, 0x38]                                |     *((r5 + 0x38)) = r6;
    0x00030d30 str r6, [sp, 0x1c]                                |     var_1ch = r6;
    0x00030d32 bl 0x29e4c                                        |     fcn_00029e4c (r0, r1, r2, r3);
    0x00030d36 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00030d38 mov r3, sl                                        |     r3 = sl;
    0x00030d3a ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x00030d3c ldrd r0, r1, [r0]                                 |     __asm ("ldrd r0, r1, [r0]");
    0x00030d40 bl 0x29e4c                                        |     fcn_00029e4c (r0, r1, r2, r3);
    0x00030d44 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00030d46 ldrb r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00030d48 lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x00030d4a bmi.w 0x30ebc                                     |         goto label_17;
                                                                 |     }
    0x00030d4e sub.w r2, r7, 0x39                                |     r2 = r7 - 0x39;
    0x00030d52 movs r1, 0x6a                                     |     r1 = 0x6a;
    0x00030d54 clz r2, r2                                        |     r2 &= r2;
    0x00030d58 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00030d5a lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x00030d5c str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00030d5e str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_4:
    0x00030d60 lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
    0x00030d62 ldr r6, [r4, 0x6c]                                |     r6 = *((r4 + 0x6c));
                                                                 |     if (r3 < r3) {
    0x00030d64 bmi.w 0x30ee2                                     |         goto label_18;
                                                                 |     }
                                                                 | label_1:
    0x00030d68 ldr r3, [r4, 0x70]                                |     r3 = *((r4 + 0x70));
    0x00030d6a cmp r3, r6                                        |     
                                                                 |     if (r3 <= r6) {
    0x00030d6c ble.w 0x30f70                                     |         goto label_19;
                                                                 |     }
                                                                 | label_2:
    0x00030d70 add.w r2, r6, r6, lsl 2                           |     r2 = r6 + (r6 << 2);
    0x00030d74 ldr r0, [r4, 0x68]                                |     r0 = *((r4 + 0x68));
    0x00030d76 adds r3, r6, 1                                    |     r3 = r6 + 1;
    0x00030d78 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00030d7a str r3, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r3;
    0x00030d7c movs r1, 0                                        |     r1 = 0;
    0x00030d7e adds r3, r0, r2                                   |     r3 = r0 + r2;
    0x00030d80 mov.w ip, 0x75                                    |     
    0x00030d84 strd sb, r1, [r3, 8]                              |     __asm ("strd sb, r1, [r3, 8]");
    0x00030d88 str r1, [r3, 0x10]                                |     *((r3 + 0x10)) = r1;
    0x00030d8a str.w ip, [r0, r2]                                |     __asm ("str.w ip, [r0, r2]");
    0x00030d8e str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
                                                                 | label_3:
    0x00030d90 ldr r2, [pc, 0x2c0]                               |     
    0x00030d92 mov r1, r6                                        |     r1 = r6;
    0x00030d94 mov.w r3, -1                                      |     r3 = -1;
    0x00030d98 mov r0, r4                                        |     r0 = r4;
    0x00030d9a add r2, pc                                        |     r2 = 0x61df2;
    0x00030d9c bl 0x1ec70                                        |     fcn_0001ec70 (r0, r1, r2);
    0x00030da0 ldrd r6, r3, [r4, 0x6c]                           |     __asm ("ldrd r6, r3, [r4, 0x6c]");
    0x00030da4 cmp r6, r3                                        |     
                                                                 |     if (r6 >= r3) {
    0x00030da6 bge.w 0x30fb6                                     |         goto label_20;
                                                                 |     }
    0x00030daa add.w r3, r6, r6, lsl 2                           |     r3 = r6 + (r6 << 2);
    0x00030dae ldr r1, [r4, 0x68]                                |     r1 = *((r4 + 0x68));
    0x00030db0 adds r2, r6, 1                                    |     r2 = r6 + 1;
    0x00030db2 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00030db4 str r2, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r2;
    0x00030db6 movs r0, 0                                        |     r0 = 0;
    0x00030db8 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00030dba mov.w ip, 0x39                                    |     
    0x00030dbe strd sb, r0, [r2, 4]                              |     __asm ("strd sb, r0, [r2, 4]");
    0x00030dc2 strd r8, r0, [r2, 0xc]                            |     __asm ("strd r8, r0, [r2, 0xc]");
    0x00030dc6 str.w ip, [r1, r3]                                |     __asm ("str.w ip, [r1, r3]");
                                                                 | label_9:
    0x00030dca ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00030dcc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00030dce bne 0x30ea2                                       |         goto label_21;
                                                                 |     }
    0x00030dd0 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00030dd2 cmp r7, 0x37                                      |     
    0x00030dd4 it eq                                             |     
                                                                 |     if (r7 == 0x37) {
    0x00030dd6 cmpeq r3, 0x6b                                    |         __asm ("cmpeq r3, 0x6b");
                                                                 |     }
    0x00030dd8 beq 0x30ea2                                       |     
                                                                 |     while (1) {
    0x00030dda ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00030ddc mov r3, r8                                        |         r3 = r8;
    0x00030dde ldr r1, [sp, 8]                                   |         r1 = var_8h;
    0x00030de0 mov r0, r4                                        |         r0 = r4;
    0x00030de2 str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x00030de6 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00030dea ldr r3, [r4]                                      |         r3 = *(r4);
    0x00030dec cmp r6, 0                                         |         
    0x00030dee ldr r2, [r4, 0x6c]                                |         r2 = *((r4 + 0x6c));
    0x00030df0 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
    0x00030df4 it lt                                             |         
                                                                 |         if (r6 >= 0) {
    0x00030df6 addlt r6, r2, -1                                  |             r6 = r2 + -1;
                                                                 |         }
    0x00030dfa cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00030dfc bne 0x30eb4                                       |             goto label_22;
                                                                 |         }
    0x00030dfe ldr r3, [r4, 0x68]                                |         r3 = *((r4 + 0x68));
    0x00030e00 add.w r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
    0x00030e04 add.w r3, r3, r6, lsl 2                           |         r3 += (r6 << 2);
                                                                 | label_0:
    0x00030e08 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00030e0a mov r1, r7                                        |         r1 = r7;
    0x00030e0c ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x00030e0e mov r2, sl                                        |         r2 = sl;
    0x00030e10 mov r0, r4                                        |         r0 = r4;
    0x00030e12 str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x00030e16 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00030e1a ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00030e1c mov r0, r5                                        |         r0 = r5;
    0x00030e1e ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x00030e20 bl 0x27e14                                        |         r0 = fcn_00027e14 (r0, r1);
    0x00030e24 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00030e26 beq.w 0x30fa4                                     |             goto label_23;
                                                                 |         }
                                                                 | label_7:
    0x00030e2a ldr r3, [r4]                                      |         r3 = *(r4);
    0x00030e2c ldr r2, [r4, 0x6c]                                |         r2 = *((r4 + 0x6c));
    0x00030e2e ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 == 0) {
    0x00030e32 cbnz r3, 0x30e46                                  |             
    0x00030e34 add.w r3, r2, r2, lsl 2                           |             r3 = r2 + (r2 << 2);
    0x00030e38 ldr r1, [r4, 0x68]                                |             r1 = *((r4 + 0x68));
    0x00030e3a lsls r3, r3, 2                                    |             r3 <<= 2;
    0x00030e3c subs r3, 0x14                                     |             r3 -= 0x14;
    0x00030e3e add r3, r1                                        |             r3 += r1;
    0x00030e40 movs r1, 0xfe                                     |             r1 = 0xfe;
    0x00030e42 str r0, [r3, 0x10]                                |             *((r3 + 0x10)) = r0;
    0x00030e44 strb r1, [r3, 1]                                  |             *((r3 + 1)) = r1;
                                                                 |         }
    0x00030e46 cmp r2, 0                                         |         
                                                                 |         if (r2 > 0) {
    0x00030e48 ble 0x30e5a                                       |             
    0x00030e4a ldr r3, [r4, 0x68]                                |             r3 = *((r4 + 0x68));
    0x00030e4c add.w r1, r2, r2, lsl 2                           |             r1 = r2 + (r2 << 2);
    0x00030e50 add.w r3, r3, r1, lsl 2                           |             r3 += (r1 << 2);
    0x00030e54 movs r1, 0x80                                     |             r1 = 0x80;
    0x00030e56 strh r1, [r3, -0x12]                              |             *((r3 - 0x12)) = r1;
                                                                 |         }
    0x00030e5a ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x00030e5c ldrd r3, r1, [r0, 0x38]                           |         __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00030e60 cmn r1, r3                                        |         
                                                                 |         if (r1 < r3) {
    0x00030e62 bmi.w 0x30faa                                     |             goto label_24;
                                                                 |         }
    0x00030e66 ldr r1, [r0, 0x40]                                |         r1 = *((r0 + 0x40));
    0x00030e68 lsl.w r3, fp, 2                                   |         r3 = fp << 2;
    0x00030e6c rsbs r3, r3, 0                                    |         r3 -= ;
    0x00030e6e str r2, [r1, r3]                                  |         *((r1 + r3)) = r2;
                                                                 | label_8:
    0x00030e70 cmp.w r8, 0                                       |         
                                                                 |         if (r8 != 0) {
    0x00030e74 beq 0x30e86                                       |             
    0x00030e76 ldrb r3, [r5, 0x13]                               |             r3 = *((r5 + 0x13));
    0x00030e78 cmp r3, 7                                         |             
                                                                 |             if (r3 > 7) {
    0x00030e7a bhi 0x30e9c                                       |                 goto label_25;
                                                                 |             }
    0x00030e7c adds r2, r3, 1                                    |             r2 = r3 + 1;
    0x00030e7e adds r3, 0x26                                     |             r3 += 0x26;
    0x00030e80 strb r2, [r5, 0x13]                               |             *((r5 + 0x13)) = r2;
    0x00030e82 str.w r8, [r5, r3, lsl 2]                         |             __asm ("str.w r8, [r5, r3, lsl 2]");
                                                                 |         }
    0x00030e86 cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x00030e8a beq 0x30e9c                                       |             
    0x00030e8c ldrb r3, [r5, 0x13]                               |             r3 = *((r5 + 0x13));
    0x00030e8e cmp r3, 7                                         |             
    0x00030e90 itttt ls                                          |             
                                                                 |             if (r3 > 7) {
    0x00030e92 addls r2, r3, 1                                   |                 r2 = r3 + 1;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x00030e94 addls r3, 0x26                                    |                 r3 += 0x26;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x00030e96 strbls r2, [r5, 0x13]                             |                 *((r5 + 0x13)) = r2;
                                                                 |             }
                                                                 |             if (r3 <= 7) {
    0x00030e98 strls sl, [r5, r3, lsl 2]                         |                 offset_2 = r3 << 2;
                                                                 |                 *((r5 + offset_2)) = sl;
                                                                 |                 goto label_25;
                                                                 |             }
                                                                 |         }
                                                                 | label_25:
    0x00030e9c add sp, 0x24                                      |         
    0x00030e9e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_21:
    0x00030ea2 ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x00030ea4 mov r2, sl                                        |         r2 = sl;
    0x00030ea6 mov r1, r7                                        |         r1 = r7;
    0x00030ea8 mov r0, r4                                        |         r0 = r4;
    0x00030eaa str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x00030eae bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00030eb2 b 0x30dda                                         |         
                                                                 |     }
                                                                 | label_22:
    0x00030eb4 ldr r3, [pc, 0x1a0]                               |     
    0x00030eb6 add r3, pc                                        |     r3 = 0x61f12;
    0x00030eb8 adds r3, 4                                        |     r3 += 4;
    0x00030eba b 0x30e08                                         |     goto label_0;
                                                                 | label_17:
    0x00030ebc cmp r7, 0x36                                      |     
    0x00030ebe mov.w r2, 0                                       |     r2 = 0;
    0x00030ec2 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 |     if (r7 == 0x36) {
    0x00030ec4 beq.w 0x30fca                                     |         goto label_26;
                                                                 |     }
    0x00030ec8 cmp r7, 0x39                                      |     
                                                                 |     if (r7 == 0x39) {
    0x00030eca beq 0x30f82                                       |         goto label_27;
                                                                 |     }
    0x00030ecc movs r2, 1                                        |     r2 = 1;
    0x00030ece lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
    0x00030ed0 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00030ed2 mov.w r2, 0x6b                                    |     r2 = 0x6b;
    0x00030ed6 ldr r6, [r4, 0x6c]                                |     r6 = *((r4 + 0x6c));
    0x00030ed8 mov.w r7, 0x39                                    |     r7 = 0x39;
    0x00030edc str r2, [sp, 8]                                   |     var_8h = r2;
                                                                 |     if (r3 >= r3) {
    0x00030ede bpl.w 0x30d68                                     |         goto label_1;
                                                                 |     }
                                                                 | label_18:
    0x00030ee2 ldr r3, [r4, 0x70]                                |     r3 = *((r4 + 0x70));
    0x00030ee4 cmp r3, r6                                        |     
                                                                 |     if (r3 <= r6) {
    0x00030ee6 ble.w 0x31042                                     |         goto label_28;
                                                                 |     }
    0x00030eea add.w r3, r6, r6, lsl 2                           |     r3 = r6 + (r6 << 2);
    0x00030eee ldr r0, [r4, 0x68]                                |     r0 = *((r4 + 0x68));
    0x00030ef0 adds r2, r6, 1                                    |     r2 = r6 + 1;
    0x00030ef2 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00030ef4 str r2, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r2;
    0x00030ef6 movs r1, 0                                        |     r1 = 0;
    0x00030ef8 adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x00030efa mov.w ip, 0x33                                    |     
    0x00030efe strd r8, r1, [r2, 4]                              |     __asm ("strd r8, r1, [r2, 4]");
    0x00030f02 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x00030f06 str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
                                                                 | label_13:
    0x00030f0a cmp r7, 0x37                                      |     
                                                                 |     if (r7 == 0x37) {
    0x00030f0c beq.w 0x31028                                     |         goto label_29;
                                                                 |     }
    0x00030f10 cmp r7, 0x39                                      |     
                                                                 |     if (r7 == 0x39) {
    0x00030f12 beq.w 0x31018                                     |         goto label_30;
                                                                 |     }
    0x00030f16 cmp r7, 0x36                                      |     
                                                                 |     if (r7 == 0x36) {
    0x00030f18 beq 0x31006                                       |         goto label_31;
                                                                 |     }
                                                                 | label_11:
    0x00030f1a movs r2, 0                                        |     r2 = 0;
    0x00030f1c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00030f1e str r2, [sp]                                      |     *(sp) = r2;
    0x00030f20 movs r1, 8                                        |     r1 = 8;
    0x00030f22 mov r0, r4                                        |     r0 = r4;
    0x00030f24 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030f28 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00030f2a cmp r6, 0                                         |     
    0x00030f2c ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x00030f2e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00030f32 it lt                                             |     
                                                                 |     if (r6 >= 0) {
    0x00030f34 addlt r6, r2, -1                                  |         r6 = r2 + -1;
                                                                 |     }
    0x00030f38 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00030f3a bne 0x30fd4                                       |         goto label_32;
                                                                 |     }
    0x00030f3c ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x00030f3e add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x00030f42 add.w r6, r3, r6, lsl 2                           |     r6 = r3 + (r6 << 2);
                                                                 | label_10:
    0x00030f46 movs r3, 0                                        |     r3 = 0;
    0x00030f48 str r2, [r6, 8]                                   |     *((r6 + 8)) = r2;
    0x00030f4a movs r1, 0x32                                     |     r1 = 0x32;
    0x00030f4c str r3, [sp]                                      |     *(sp) = r3;
    0x00030f4e mov r2, sl                                        |     r2 = sl;
    0x00030f50 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00030f52 mov r0, r4                                        |     r0 = r4;
    0x00030f54 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00030f58 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00030f5a cmp r7, 0x36                                      |     
    0x00030f5c it eq                                             |     
                                                                 |     if (r7 != 0x36) {
    0x00030f5e orreq r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00030f62 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00030f64 bne 0x30fdc                                       |         goto label_33;
                                                                 |     }
    0x00030f66 ldr r6, [r4, 0x6c]                                |     r6 = *((r4 + 0x6c));
    0x00030f68 ldr r3, [r4, 0x70]                                |     r3 = *((r4 + 0x70));
    0x00030f6a cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x00030f6c bgt.w 0x30d70                                     |         goto label_2;
                                                                 |     }
                                                                 | label_19:
    0x00030f70 movs r2, 0                                        |     r2 = 0;
    0x00030f72 mov r3, sb                                        |     r3 = sb;
    0x00030f74 movs r1, 0x75                                     |     r1 = 0x75;
    0x00030f76 mov r0, r4                                        |     r0 = r4;
    0x00030f78 str r2, [sp]                                      |     *(sp) = r2;
    0x00030f7a bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00030f7e mov r6, r0                                        |     r6 = r0;
    0x00030f80 b 0x30d90                                         |     goto label_3;
                                                                 | label_27:
    0x00030f82 movs r1, 0x6b                                     |     r1 = 0x6b;
    0x00030f84 movs r7, 0x37                                     |     r7 = 0x37;
    0x00030f86 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00030f88 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00030f8a b 0x30d60                                         |     goto label_4;
                                                                 | label_14:
    0x00030f8c ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
    0x00030f8e cbz r3, 0x30ff8                                   |     
                                                                 |     while (1) {
    0x00030f90 mov r0, r5                                        |         r0 = r5;
    0x00030f92 bl 0x29b0c                                        |         r0 = fcn_00029b0c (r0);
    0x00030f96 mov r4, r0                                        |         r4 = r0;
    0x00030f98 b 0x30ce4                                         |         goto label_5;
                                                                 | label_15:
    0x00030f9a adds r2, 1                                        |         r2++;
    0x00030f9c mov r8, r2                                        |         r8 = r2;
                                                                 | label_16:
    0x00030f9e adds r2, 1                                        |         r2++;
    0x00030fa0 mov sl, r2                                        |         sl = r2;
    0x00030fa2 b 0x30d16                                         |         goto label_6;
                                                                 | label_23:
    0x00030fa4 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00030fa6 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00030fa8 b 0x30e2a                                         |         goto label_7;
                                                                 | label_24:
    0x00030faa rsb.w r2, fp, 0                                   |         r2 = fp - ;
    0x00030fae mov r1, r4                                        |         r1 = r4;
    0x00030fb0 bl 0x2bed8                                        |         fcn_0002bed8 (r0, r1, r2);
    0x00030fb4 b 0x30e70                                         |         goto label_8;
                                                                 | label_20:
    0x00030fb6 mov r2, sb                                        |         r2 = sb;
    0x00030fb8 movs r3, 0                                        |         r3 = 0;
    0x00030fba movs r1, 0x39                                     |         r1 = 0x39;
    0x00030fbc mov r0, r4                                        |         r0 = r4;
    0x00030fbe str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x00030fc2 bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00030fc6 mov r6, r0                                        |         r6 = r0;
    0x00030fc8 b 0x30dca                                         |         goto label_9;
                                                                 | label_26:
    0x00030fca movs r1, 0x6b                                     |         r1 = 0x6b;
    0x00030fcc movs r7, 0x38                                     |         r7 = 0x38;
    0x00030fce str r1, [sp, 8]                                   |         var_8h = r1;
    0x00030fd0 str r2, [sp, 0x18]                                |         var_18h = r2;
    0x00030fd2 b 0x30d60                                         |         goto label_4;
                                                                 | label_32:
    0x00030fd4 ldr r6, [pc, 0x84]                                |         
    0x00030fd6 add r6, pc                                        |         r6 = 0x62036;
    0x00030fd8 adds r6, 4                                        |         r6 += 4;
    0x00030fda b 0x30f46                                         |         goto label_10;
                                                                 | label_33:
    0x00030fdc ldr r3, [r4]                                      |         r3 = *(r4);
    0x00030fde ldr r6, [r4, 0x6c]                                |         r6 = *((r4 + 0x6c));
    0x00030fe0 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 != 0) {
    0x00030fe4 cbnz r3, 0x3103a                                  |             goto label_34;
                                                                 |         }
    0x00030fe6 ldr r3, [r4, 0x68]                                |         r3 = *((r4 + 0x68));
    0x00030fe8 subs r2, r6, 1                                    |         r2 = r6 - 1;
    0x00030fea add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00030fee add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
                                                                 | label_12:
    0x00030ff2 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00030ff4 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00030ff6 b 0x30d68                                         |         goto label_1;
    0x00030ff8 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00030ffa ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x00030ffc lsls r4, r3, 0x1c                                 |         r4 = r3 << 0x1c;
    0x00030ffe itt pl                                            |         
                                                                 |         if (r4 < r3) {
    0x00031000 movpl r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r4 < r3) {
    0x00031002 strbpl r3, [r5, 0x17]                             |             *((r5 + 0x17)) = r3;
                                                                 |         }
    0x00031004 b 0x30f90                                         |         
                                                                 |     }
                                                                 | label_31:
    0x00031006 movs r3, 0                                        |     r3 = 0;
    0x00031008 mov r2, sl                                        |     r2 = sl;
    0x0003100a str r3, [sp]                                      |     *(sp) = r3;
    0x0003100c movs r1, 0x33                                     |     r1 = 0x33;
    0x0003100e ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00031010 mov r0, r4                                        |     r0 = r4;
    0x00031012 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031016 b 0x30f1a                                         |     goto label_11;
                                                                 | label_30:
    0x00031018 movs r2, 0                                        |     r2 = 0;
    0x0003101a ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x0003101c movs r1, 8                                        |     r1 = 8;
    0x0003101e mov r0, r4                                        |     r0 = r4;
    0x00031020 str r2, [sp]                                      |     *(sp) = r2;
    0x00031022 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031026 b 0x30f1a                                         |     goto label_11;
                                                                 | label_29:
    0x00031028 movs r3, 0                                        |     r3 = 0;
    0x0003102a mov r2, sl                                        |     r2 = sl;
    0x0003102c str r3, [sp]                                      |     *(sp) = r3;
    0x0003102e movs r1, 0x32                                     |     r1 = 0x32;
    0x00031030 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00031032 mov r0, r4                                        |     r0 = r4;
    0x00031034 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031038 b 0x30f1a                                         |     goto label_11;
                                                                 | label_34:
    0x0003103a ldr r3, [pc, 0x24]                                |     
    0x0003103c add r3, pc                                        |     r3 = 0x620a2;
    0x0003103e adds r3, 4                                        |     r3 += 4;
    0x00031040 b 0x30ff2                                         |     goto label_12;
                                                                 | label_28:
    0x00031042 movs r3, 0                                        |     r3 = 0;
    0x00031044 mov r2, r8                                        |     r2 = r8;
    0x00031046 movs r1, 0x33                                     |     r1 = 0x33;
    0x00031048 mov r0, r4                                        |     r0 = r4;
    0x0003104a str r3, [sp]                                      |     *(sp) = r3;
    0x0003104c bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00031050 mov r6, r0                                        |     r6 = r0;
    0x00031052 b 0x30f0a                                         |     goto label_13;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x31294 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00031294 ()                      | void fcn_00031294 (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x00031294 push {r3, r4, r5, r6, r7, lr}     |     
    0x00031296 movs r4, 0                        |     r4 = 0;
    0x00031298 mov r6, r1                        |     r6 = r1;
    0x0003129a mov r7, r0                        |     r7 = r0;
    0x0003129c mov r1, r4                        |     r1 = r4;
                                                 |     do {
    0x0003129e ldrb r3, [r6, r4]                 |         r3 = *((r6 + r4));
    0x000312a0 adds r5, r4, 1                    |         r5 = r4 + 1;
    0x000312a2 cmp r3, 0                         |         
    0x000312a4 it ne                             |         
                                                 |         if (r3 != 0) {
    0x000312a6 cmpne r3, 0x2f                    |             __asm ("cmpne r3, 0x2f");
                                                 |         }
                                                 |         if (r3 == 0) {
    0x000312a8 bne 0x312b2                       |             
    0x000312aa cmp r4, r1                        |             
                                                 |             if (r4 > r1) {
    0x000312ac bgt 0x312b8                       |                 goto label_1;
                                                 |             }
                                                 | label_0:
    0x000312ae mov r1, r5                        |             r1 = r5;
                                                 |             if (r3 == 0) {
    0x000312b0 cbz r3, 0x312b6                   |                 goto label_2;
                                                 |             }
                                                 |         }
    0x000312b2 mov r4, r5                        |         r4 = r5;
    0x000312b4 b 0x3129e                         |         
                                                 |     } while (1);
                                                 | label_2:
    0x000312b6 pop {r3, r4, r5, r6, r7, pc}      |     
                                                 | label_1:
    0x000312b8 subs r2, r4, r1                   |     r2 = r4 - r1;
    0x000312ba mov r0, r7                        |     r0 = r7;
    0x000312bc add r1, r6                        |     r1 += r6;
    0x000312be bl 0x31064                        |     fcn_00031064 (r0, r1, r2);
    0x000312c2 ldrb r3, [r6, r4]                 |     r3 = *((r6 + r4));
    0x000312c4 b 0x312ae                         |     goto label_0;
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x31410 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00031410 ()                                      | void fcn_00031410 (int16_t arg_8h, int16_t arg_13h, int16_t arg_1ch, int16_t arg_28h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00031410 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00031414 mov r5, r1                                        |     r5 = r1;
    0x00031416 sub sp, 0x44                                      |     
    0x00031418 ldr r1, [r0, 0x38]                                |     r1 = *(arg_68hx38);
    0x0003141a mov r8, r2                                        |     r8 = r2;
    0x0003141c mov fp, r0                                        |     
    0x0003141e ldr r2, [sp, 0x68]                                |     r2 = *(arg_68h);
    0x00031420 add.w sb, r1, -1                                  |     sb = r1 + -1;
    0x00031424 ldr.w r0, [r8, 0x18]                              |     r0 = *((r8 + 0x18));
    0x00031428 ldr.w r6, [r8]                                    |     r6 = *(r8);
    0x0003142c str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0003142e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00031430 str r1, [sp, 0x30]                                |     var_30h = r1;
    0x00031432 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x00031436 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00031438 str.w sb, [fp, 0x38]                              |     __asm ("str.w sb, [arg_38h]");
    0x0003143c ldrb r2, [r2]                                     |     r2 = *(r2);
    0x0003143e ldr.w r4, [fp, 8]                                 |     r4 = *(arg_8h);
    0x00031442 str r0, [sp, 0x20]                                |     var_20h = r0;
    0x00031444 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00031446 ldr r2, [r5, 0x1c]                                |     r2 = *((r5 + 0x1c));
    0x00031448 str r1, [sp, 0x3c]                                |     var_3ch = r1;
    0x0003144a str r2, [sp, 0x38]                                |     var_38h = r2;
    0x0003144c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003144e bne.w 0x31898                                     |         goto label_20;
                                                                 |     }
                                                                 | label_12:
    0x00031452 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00031454 ldr.w r1, [r8, 8]                                 |     r1 = *((r8 + 8));
    0x00031458 and r3, r2, 0xfb                                  |     r3 = r2 & 0xfb;
    0x0003145c cmp r3, 9                                         |     
    0x0003145e str r1, [sp, 0x18]                                |     var_18h = r1;
                                                                 |     if (r3 != 9) {
    0x00031460 beq 0x314bc                                       |         
    0x00031462 cmp r2, 0xa                                       |         
                                                                 |         if (r2 != 0xa) {
    0x00031464 beq 0x314a8                                       |             
    0x00031466 ldrb.w r3, [fp, 0x13]                             |             r3 = *(arg_13h);
    0x0003146a ldr r2, [sp, 0x1c]                                |             r2 = var_1ch;
    0x0003146c and r1, r2, 0xfd                                  |             r1 = r2 & 0xfd;
    0x00031470 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x00031472 beq.w 0x3193e                                     |                 goto label_21;
                                                                 |             }
    0x00031476 subs r2, r3, 1                                    |             r2 = r3 - 1;
    0x00031478 cmp r1, 0xc                                       |             
    0x0003147a uxtb r2, r2                                       |             r2 = (int8_t) r2;
    0x0003147c add.w r0, r2, 0x26                                |             r0 = r2 + 0x26;
    0x00031480 strb.w r2, [fp, 0x13]                             |             *(arg_13h) = r2;
    0x00031484 ldr.w r0, [fp, r0, lsl 2]                         |             offset_0 = r0 << 2;
                                                                 |             r0 = *((fp + offset_0));
    0x00031488 str r0, [sp, 0x24]                                |             var_24h = r0;
                                                                 |             if (r1 != 0xc) {
    0x0003148a bne.w 0x3190c                                     |                 goto label_15;
                                                                 |             }
    0x0003148e cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x00031490 beq.w 0x319ca                                     |                 goto label_22;
                                                                 |             }
    0x00031494 subs r3, 2                                        |             r3 -= 2;
    0x00031496 uxtb r3, r3                                       |             r3 = (int8_t) r3;
    0x00031498 strb.w r3, [fp, 0x13]                             |             *(arg_13h) = r3;
    0x0003149c adds r3, 0x26                                     |             r3 += 0x26;
    0x0003149e ldr.w r7, [fp, r3, lsl 2]                         |             offset_1 = r3 << 2;
                                                                 |             r7 = *((fp + offset_1));
    0x000314a2 movs r3, 0                                        |             r3 = 0;
    0x000314a4 str r3, [sp, 0x14]                                |             var_14h = r3;
    0x000314a6 b 0x314c4                                         |             goto label_13;
                                                                 |         }
    0x000314a8 ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
                                                                 |         if (r3 == 0) {
    0x000314aa cbz r3, 0x314bc                                   |             goto label_23;
                                                                 |         }
    0x000314ac ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000314ae movs r2, 0                                        |         r2 = 0;
    0x000314b0 str r2, [sp]                                      |         *(sp) = r2;
    0x000314b2 movs r1, 0x4b                                     |         r1 = 0x4b;
    0x000314b4 mov r0, r4                                        |         r0 = r4;
    0x000314b6 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000314b8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_23:
    0x000314bc ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000314be ldr r7, [r3, 0xc]                                 |     r7 = *((r3 + 0xc));
    0x000314c0 movs r3, 0                                        |     r3 = 0;
    0x000314c2 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_13:
    0x000314c4 ldr r2, [r6]                                      |     r2 = *(r6);
    0x000314c6 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x000314ca subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x000314cc mov r2, r3                                        |     r2 = r3;
    0x000314ce str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000314d0 ldrb.w r3, [r8, 0x20]                             |     r3 = *((r8 + 0x20));
    0x000314d4 adds r6, r2, 1                                    |     r6 = r2 + 1;
    0x000314d6 ands r3, r3, 1                                    |     r3 &= 1;
                                                                 |     if (r3 == r3) {
    0x000314da beq.w 0x31858                                     |         goto label_24;
                                                                 |     }
    0x000314de ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000314e0 ldr.w r5, [fp, 0x2c]                              |     r5 = *(arg_2ch);
    0x000314e4 ldr.w sb, [fp, 0x28]                              |     sb = *(arg_28h);
    0x000314e8 add r6, r3                                        |     r6 += r3;
    0x000314ea ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x000314ee adds r5, 1                                        |     r5++;
    0x000314f0 add.w r2, sb, 1                                   |     r2 = sb + 1;
    0x000314f4 str.w r5, [fp, 0x2c]                              |     __asm ("str.w r5, [arg_2ch]");
    0x000314f8 str.w r2, [fp, 0x28]                              |     __asm ("str.w r2, [arg_28h]");
    0x000314fc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000314fe bne.w 0x31606                                     |         goto label_25;
                                                                 |     }
    0x00031502 mov r3, r5                                        |     r3 = r5;
    0x00031504 mov r2, sb                                        |     r2 = sb;
    0x00031506 movs r1, 0x79                                     |     r1 = 0x79;
    0x00031508 mov r0, r4                                        |     r0 = r4;
    0x0003150a str r6, [sp]                                      |     *(sp) = r6;
    0x0003150c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031510 ldr r3, [r4, 0x6c]                                |     r3 = *((r4 + 0x6c));
                                                                 | label_2:
    0x00031512 ldr r2, [r4, 0x70]                                |     r2 = *((r4 + 0x70));
    0x00031514 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00031516 ble.w 0x31672                                     |         goto label_26;
                                                                 |     }
                                                                 | label_3:
    0x0003151a add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x0003151e ldr r1, [r4, 0x68]                                |     r1 = *((r4 + 0x68));
    0x00031520 adds r3, 1                                        |     r3++;
    0x00031522 ldr r6, [sp, 0x18]                                |     r6 = var_18h;
    0x00031524 str r3, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r3;
    0x00031526 movs r0, 0                                        |     r0 = 0;
    0x00031528 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0003152a lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x0003152c mov.w ip, 0x21                                    |     
    0x00031530 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00031532 str r6, [r2, 4]                                   |     *((r2 + 4)) = r6;
    0x00031534 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x00031536 str r0, [r2, 0x10]                                |     *((r2 + 0x10)) = r0;
    0x00031538 strd r6, r0, [r2, 8]                              |     __asm ("strd r6, r0, [r2, 8]");
    0x0003153c str.w ip, [r1, r3]                                |     __asm ("str.w ip, [r1, r3]");
                                                                 | label_4:
    0x00031540 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00031542 mov r3, r5                                        |     r3 = r5;
    0x00031544 movs r1, 0x85                                     |     r1 = 0x85;
    0x00031546 mov r0, r4                                        |     r0 = r4;
    0x00031548 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0003154c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_11:
    0x00031550 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00031552 add.w sl, r3, -1                                  |     sl = r3 + -1;
    0x00031556 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00031558 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003155a ble 0x315ec                                       |         goto label_27;
                                                                 |     }
    0x0003155c ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0003155e ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00031560 add.w r5, r3, r2, lsl 4                           |     r5 = r3 + (r2 << 4);
                                                                 |     do {
    0x00031564 ldrh r2, [r3, 0x14]                               |         r2 = *((r3 + 0x14));
    0x00031566 adds r3, 0x10                                     |         r3 += 0x10;
                                                                 |         if (r2 == 0) {
    0x00031568 cbnz r2, 0x3156e                                  |             
    0x0003156a add.w sl, sl, 1                                   |             sl++;
                                                                 |         }
    0x0003156e cmp r5, r3                                        |         
    0x00031570 bne 0x31564                                       |         
                                                                 |     } while (r5 != r3);
    0x00031572 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00031574 subs r6, r3, 1                                    |     r6 = r3 - 1;
    0x00031576 add r6, r7                                        |     r6 += r7;
    0x00031578 b 0x315b6                                         |     
                                                                 |     while (r2 != 0) {
    0x0003157a subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x0003157c ldrd r1, r2, [r4, 0x6c]                           |         __asm ("ldrd r1, r2, [r4, 0x6c]");
    0x00031580 cmp r1, r2                                        |         
    0x00031582 add.w r2, r1, 1                                   |         r2 = r1 + 1;
    0x00031586 add.w r1, r1, r1, lsl 2                           |         r1 += (r1 << 2);
                                                                 |         if (r1 >= r2) {
    0x0003158a bge 0x315d2                                       |             goto label_28;
                                                                 |         }
                                                                 | label_0:
    0x0003158c ldr r0, [r4, 0x68]                                |         r0 = *((r4 + 0x68));
    0x0003158e cmp r6, r7                                        |         
    0x00031590 str r2, [r4, 0x6c]                                |         *((r4 + 0x6c)) = r2;
    0x00031592 sub.w r5, r5, 0x10                                |         r5 -= 0x10;
    0x00031596 add.w r2, r0, r1, lsl 2                           |         r2 = r0 + (r1 << 2);
    0x0003159a strd sb, r3, [r2, 4]                              |         __asm ("strd sb, r3, [r2, 4]");
    0x0003159e mov.w r3, 0                                       |         r3 = 0;
    0x000315a2 str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
    0x000315a4 mov.w r3, 0x5e                                    |         r3 = 0x5e;
    0x000315a8 str r6, [r2, 0xc]                                 |         *((r2 + 0xc)) = r6;
    0x000315aa str.w r3, [r0, r1, lsl 2]                         |         __asm ("str.w r3, [r0, r1, lsl 2]");
    0x000315ae add.w r3, r6, -1                                  |         r3 = r6 + -1;
    0x000315b2 mov r6, r3                                        |         r6 = r3;
                                                                 |         if (r6 == r7) {
    0x000315b4 beq 0x315ec                                       |             goto label_27;
                                                                 |         }
                                                                 | label_1:
    0x000315b6 ldrh r2, [r5, 4]                                  |         r2 = *((r5 + 4));
    0x000315b8 mov r3, sl                                        |         r3 = sl;
    0x000315ba cmp r2, 0                                         |         
    0x000315bc bne 0x3157a                                       |         
                                                                 |     }
    0x000315be ldrd r1, r2, [r4, 0x6c]                           |     __asm ("ldrd r1, r2, [r4, 0x6c]");
    0x000315c2 add.w sl, sl, -1                                  |     sl += -1;
    0x000315c6 cmp r1, r2                                        |     
    0x000315c8 add.w r2, r1, 1                                   |     r2 = r1 + 1;
    0x000315cc add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
                                                                 |     if (r1 < r2) {
    0x000315d0 blt 0x3158c                                       |         goto label_0;
                                                                 |     }
                                                                 | label_28:
    0x000315d2 str r6, [sp]                                      |     *(sp) = r6;
    0x000315d4 mov r2, sb                                        |     r2 = sb;
    0x000315d6 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x000315d8 mov r0, r4                                        |     r0 = r4;
    0x000315da bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000315de cmp r6, r7                                        |     
    0x000315e0 add.w r3, r6, -1                                  |     r3 = r6 + -1;
    0x000315e4 sub.w r5, r5, 0x10                                |     r5 -= 0x10;
    0x000315e8 mov r6, r3                                        |     r6 = r3;
                                                                 |     if (r6 != r7) {
    0x000315ea bne 0x315b6                                       |         goto label_1;
                                                                 |     }
                                                                 | label_27:
    0x000315ec ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000315ee subs r3, 0xa                                      |     r3 -= 0xa;
    0x000315f0 cmp r3, 5                                         |     
                                                                 |     if (r3 > 5) {
    0x000315f2 bhi.w 0x3183a                                     |         goto label_29;
                                                                 |     }
                                                                 |     /* switch table (7 cases) at 0x315fa */
    0x000315f6 tbh [pc, r3, lsl 1]                               |     __asm ("tbh [pc, r3, lsl 1]");
                                                                 | label_25:
    0x00031606 ldrd sl, r3, [r4, 0x6c]                           |     __asm ("ldrd sl, r3, [r4, 0x6c]");
    0x0003160a cmp sl, r3                                        |     
                                                                 |     if (sl >= r3) {
    0x0003160c bge.w 0x3199a                                     |         goto label_30;
                                                                 |     }
    0x00031610 add.w r2, sl, sl, lsl 2                           |     r2 = sl + (sl << 2);
    0x00031614 ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x00031616 add.w r0, sl, 1                                   |     r0 = sl + 1;
    0x0003161a vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0003161e lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00031620 str r0, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r0;
    0x00031622 movs r0, 0xe                                      |     r0 = 0xe;
    0x00031624 str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00031626 add r3, r2                                        |     r3 += r2;
    0x00031628 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x0003162a movs r1, 0                                        |     r1 = 0;
    0x0003162c vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00031630 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_18:
    0x00031634 mov r3, r5                                        |     r3 = r5;
    0x00031636 mov r2, sb                                        |     r2 = sb;
    0x00031638 movs r1, 0x79                                     |     r1 = 0x79;
    0x0003163a mov r0, r4                                        |     r0 = r4;
    0x0003163c str r6, [sp]                                      |     *(sp) = r6;
    0x0003163e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031642 cmp.w sl, 0                                       |     
    0x00031646 ldr r3, [r4, 0x6c]                                |     r3 = *((r4 + 0x6c));
                                                                 |     if (sl == 0) {
    0x00031648 beq.w 0x31512                                     |         goto label_2;
                                                                 |     }
    0x0003164c ldr r2, [r4]                                      |     r2 = *(r4);
    0x0003164e it lt                                             |     
                                                                 |     if (sl >= 0) {
    0x00031650 addlt sl, r3, -1                                  |         sl = r3 + -1;
                                                                 |     }
    0x00031654 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00031658 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0003165a bne.w 0x3195e                                     |         goto label_31;
                                                                 |     }
    0x0003165e ldr r2, [r4, 0x68]                                |     r2 = *((r4 + 0x68));
    0x00031660 add.w sl, sl, sl, lsl 2                           |     sl += (sl << 2);
    0x00031664 add.w r2, r2, sl, lsl 2                           |     r2 += (sl << 2);
                                                                 | label_16:
    0x00031668 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x0003166a ldr r2, [r4, 0x70]                                |     r2 = *((r4 + 0x70));
    0x0003166c cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x0003166e bgt.w 0x3151a                                     |         goto label_3;
                                                                 |     }
                                                                 | label_26:
    0x00031672 movs r3, 0                                        |     r3 = 0;
    0x00031674 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00031676 str r3, [sp]                                      |     *(sp) = r3;
    0x00031678 movs r1, 0x21                                     |     r1 = 0x21;
    0x0003167a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003167c mov r0, r4                                        |     r0 = r4;
    0x0003167e bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00031682 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00031684 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00031686 b 0x31540                                         |     goto label_4;
    0x00031688 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003168a mov r2, sb                                        |     r2 = sb;
    0x0003168c movs r1, 0x5e                                     |     r1 = 0x5e;
    0x0003168e mov r0, r4                                        |     r0 = r4;
    0x00031690 str r7, [sp]                                      |     *(sp) = r7;
    0x00031692 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031696 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00031698 movs r3, 0                                        |     r3 = 0;
    0x0003169a ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x0003169c movs r1, 0x7f                                     |     r1 = 0x7f;
    0x0003169e str r3, [sp]                                      |     *(sp) = r3;
    0x000316a0 mov r0, r4                                        |     r0 = r4;
    0x000316a2 mov r3, r5                                        |     r3 = r5;
    0x000316a4 mov r2, r6                                        |     r2 = r6;
    0x000316a6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000316aa mov r3, r7                                        |     r3 = r7;
    0x000316ac mov r2, r6                                        |     r2 = r6;
    0x000316ae movs r1, 0x80                                     |     r1 = 0x80;
    0x000316b0 mov r0, r4                                        |     r0 = r4;
    0x000316b2 str r5, [sp]                                      |     *(sp) = r5;
    0x000316b4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000316b8 ldr r3, [r4, 0x6c]                                |     r3 = *((r4 + 0x6c));
    0x000316ba cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000316bc ble.w 0x31904                                     |         goto label_32;
                                                                 |     }
    0x000316c0 ldr r2, [r4, 0x68]                                |     r2 = *((r4 + 0x68));
    0x000316c2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x000316c6 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x000316ca movs r3, 8                                        |     r3 = 8;
    0x000316cc strh r3, [r2, -0x12]                              |     *((r2 - 0x12)) = r3;
    0x000316d0 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000316d2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000316d4 bne 0x317ce                                       |         goto label_10;
                                                                 |     }
                                                                 |     do {
                                                                 | label_5:
    0x000316d6 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x000316d8 ldrd r3, r2, [r0, 0x38]                           |         __asm ("ldrd r3, r2, [r0, 0x38]");
    0x000316dc cmn r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x000316de bmi 0x31790                                       |             goto label_33;
                                                                 |         }
                                                                 | label_6:
    0x000316e0 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x000316e2 ldr r2, [r0, 0x40]                                |         r2 = *((r0 + 0x40));
    0x000316e4 ldr r1, [r4, 0x6c]                                |         r1 = *((r4 + 0x6c));
    0x000316e6 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x000316e8 rsbs r3, r3, 0                                    |         r3 -= ;
    0x000316ea str r1, [r2, r3]                                  |         *((r2 + r3)) = r1;
    0x000316ec ldrb.w r3, [r8, 0x20]                             |         r3 = *((r8 + 0x20));
    0x000316f0 ands r3, r3, 1                                    |         r3 &= 1;
                                                                 |         if (r3 == r3) {
    0x000316f4 beq 0x317a4                                       |             goto label_34;
                                                                 |         }
                                                                 | label_7:
    0x000316f6 movs r1, 0                                        |         r1 = 0;
    0x000316f8 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x000316fa str r1, [sp]                                      |         *(sp) = r1;
    0x000316fc mov r0, r4                                        |         r0 = r4;
    0x000316fe ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x00031700 movs r1, 0x24                                     |         r1 = 0x24;
    0x00031702 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00031706 ldr.w r2, [r8, 0xc]                               |         r2 = *((r8 + 0xc));
    0x0003170a cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0003170c bne 0x317ba                                       |             goto label_35;
                                                                 |         }
                                                                 | label_8:
    0x0003170e ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00031710 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x00031712 mvns r2, r3                                       |         r2 = ~r3;
    0x00031714 ldrd r3, r1, [r0, 0x38]                           |         __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00031718 cmn r1, r3                                        |         
                                                                 |         if (r1 < r3) {
    0x0003171a bmi.w 0x318ca                                     |             goto label_36;
                                                                 |         }
    0x0003171e ldr r1, [r4, 0x6c]                                |         r1 = *((r4 + 0x6c));
    0x00031720 ldr r3, [r0, 0x40]                                |         r3 = *((r0 + 0x40));
    0x00031722 str.w r1, [r3, r2, lsl 2]                         |         __asm ("str.w r1, [r3, r2, lsl 2]");
    0x00031726 add sp, 0x44                                      |         
    0x00031728 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0003172c ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0003172e mov r2, r7                                        |         r2 = r7;
    0x00031730 ldr r6, [sp, 0x14]                                |         r6 = var_14h;
    0x00031732 movs r1, 0x61                                     |         r1 = 0x61;
    0x00031734 ldr r5, [sp, 0x24]                                |         r5 = var_24h;
    0x00031736 mov r0, r4                                        |         r0 = r4;
    0x00031738 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0003173a str r6, [sp, 8]                                   |         var_8h = r6;
    0x0003173c str r5, [sp]                                      |         *(sp) = r5;
    0x0003173e str r3, [sp, 4]                                   |         var_4h = r3;
    0x00031740 mov r3, r6                                        |         r3 = r6;
    0x00031742 bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00031746 ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x00031748 mov r3, r5                                        |         r3 = r5;
    0x0003174a movs r1, 0x8a                                     |         r1 = 0x8a;
    0x0003174c mov r0, r4                                        |         r0 = r4;
    0x0003174e strd r7, r6, [sp]                                 |         __asm ("strd r7, r6, [sp]");
    0x00031752 bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00031756 cmp r5, 0                                         |         
    0x00031758 beq 0x316d6                                       |         
                                                                 |     } while (r5 == 0);
    0x0003175a ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003175c ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x00031760 cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00031762 beq.w 0x319ac                                     |         goto label_37;
                                                                 |     }
    0x00031766 ldr.w r2, [fp, 0x1c]                              |     r2 = *(arg_1ch);
    0x0003176a ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0003176c cmp r1, r2                                        |     
    0x0003176e it gt                                             |     
                                                                 |     if (r1 > r2) {
    0x00031770 strdgt r1, r7, [fp, 0x1c]                         |         __asm ("strdgt r1, r7, [fp, 0x1c]");
                                                                 |     }
                                                                 | label_9:
    0x00031774 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00031776 bhi 0x316d6                                       |         goto label_5;
                                                                 |     }
    0x00031778 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0003177a adds r3, 0x26                                     |     r3 += 0x26;
    0x0003177c strb.w r2, [fp, 0x13]                             |     *(arg_13h) = r2;
    0x00031780 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00031782 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00031784 str.w r2, [fp, r3, lsl 2]                         |     __asm ("str.w r2, [fp, r3, lsl 2]");
    0x00031788 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0003178c cmn r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0003178e bpl 0x316e0                                       |         goto label_6;
                                                                 |     }
                                                                 | label_33:
    0x00031790 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00031792 mov r1, r4                                        |     r1 = r4;
    0x00031794 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00031796 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x0003179a ldrb.w r3, [r8, 0x20]                             |     r3 = *((r8 + 0x20));
    0x0003179e ands r3, r3, 1                                    |     r3 &= 1;
                                                                 |     if (r3 != r3) {
    0x000317a2 bne 0x316f6                                       |         goto label_7;
                                                                 |     }
                                                                 | label_34:
    0x000317a4 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000317a6 movs r1, 0x26                                     |     r1 = 0x26;
    0x000317a8 str r3, [sp]                                      |     *(sp) = r3;
    0x000317aa mov r0, r4                                        |     r0 = r4;
    0x000317ac ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000317ae bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000317b2 ldr.w r2, [r8, 0xc]                               |     r2 = *((r8 + 0xc));
    0x000317b6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000317b8 beq 0x3170e                                       |         goto label_8;
                                                                 |     }
                                                                 | label_35:
    0x000317ba movs r3, 0                                        |     r3 = 0;
    0x000317bc movs r1, 0x43                                     |     r1 = 0x43;
    0x000317be mov r0, r4                                        |     r0 = r4;
    0x000317c0 str r3, [sp]                                      |     *(sp) = r3;
    0x000317c2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000317c6 b 0x3170e                                         |     goto label_8;
    0x000317c8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000317ca cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000317cc beq 0x316d6                                       |         goto label_5;
                                                                 |     }
                                                                 | label_10:
    0x000317ce ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x000317d2 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000317d4 beq 0x31774                                       |         goto label_9;
                                                                 |     }
    0x000317d6 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x000317d8 bhi.w 0x316d6                                     |         goto label_5;
                                                                 |     }
    0x000317dc adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x000317de add.w r2, r3, 0x26                                |     r2 = r3 + 0x26;
    0x000317e2 uxtb r3, r1                                       |     r3 = (int8_t) r1;
    0x000317e4 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x000317e8 str.w r7, [fp, r2, lsl 2]                         |     __asm ("str.w r7, [fp, r2, lsl 2]");
    0x000317ec b 0x31774                                         |     goto label_9;
    0x000317ee ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000317f0 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x000317f2 ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x000317f6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000317f8 beq.w 0x31918                                     |         goto label_38;
                                                                 |     }
    0x000317fc subs r3, 1                                        |     r3--;
    0x000317fe uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00031800 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x00031804 adds r3, 0x26                                     |     r3 += 0x26;
    0x00031806 ldr.w r5, [fp, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r5 = *((fp + offset_2));
                                                                 | label_14:
    0x0003180a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003180c lsrs r2, r6, 0x1f                                 |     r2 = r6 >> 0x1f;
    0x0003180e movs r1, 0x61                                     |     r1 = 0x61;
    0x00031810 str r5, [sp]                                      |     *(sp) = r5;
    0x00031812 mov r0, r4                                        |     r0 = r4;
    0x00031814 subs r3, r3, r2                                   |     r3 -= r2;
    0x00031816 add r2, r7                                        |     r2 += r7;
    0x00031818 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0003181c cmp r6, 0                                         |     
                                                                 |     if (r6 < 0) {
    0x0003181e blt.w 0x3196e                                     |         goto label_39;
                                                                 |     }
    0x00031822 mov r3, r5                                        |     r3 = r5;
    0x00031824 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00031826 movs r1, 0x8a                                     |     r1 = 0x8a;
    0x00031828 mov r0, r4                                        |     r0 = r4;
    0x0003182a str r6, [sp, 4]                                   |     var_4h = r6;
    0x0003182c str r7, [sp]                                      |     *(sp) = r7;
    0x0003182e bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00031832 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00031834 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031836 bne 0x317ce                                       |         goto label_10;
                                                                 |     }
    0x00031838 b 0x316d6                                         |     goto label_5;
                                                                 | label_29:
    0x0003183a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003183c cmp r3, 9                                         |     
    0x0003183e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 == 9) {
    0x00031840 beq 0x31924                                       |         goto label_40;
                                                                 |     }
    0x00031842 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00031844 movs r3, 0                                        |     r3 = 0;
    0x00031846 str r3, [sp]                                      |     *(sp) = r3;
    0x00031848 movs r1, 0xb                                      |     r1 = 0xb;
    0x0003184a mov r0, r4                                        |     r0 = r4;
    0x0003184c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031850 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00031852 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031854 bne 0x317ce                                       |         goto label_10;
                                                                 |     }
    0x00031856 b 0x316d6                                         |     goto label_5;
                                                                 | label_24:
    0x00031858 ldrd r2, r1, [r4, 0x6c]                           |     __asm ("ldrd r2, r1, [r4, 0x6c]");
    0x0003185c cmp r2, r1                                        |     
                                                                 |     if (r2 >= r1) {
    0x0003185e bge.w 0x31986                                     |         goto label_41;
                                                                 |     }
    0x00031862 add.w r1, r2, r2, lsl 2                           |     r1 = r2 + (r2 << 2);
    0x00031866 ldr r0, [r4, 0x68]                                |     r0 = *((r4 + 0x68));
    0x00031868 adds r2, 1                                        |     r2++;
    0x0003186a str r2, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r2;
    0x0003186c lsl.w lr, r1, 2                                   |     lr = r1 << 2;
    0x00031870 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00031872 mov.w ip, 0x22                                    |     
    0x00031876 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00031878 add.w r1, r0, lr                                  |     r1 = r0 + lr;
    0x0003187c str r3, [r1, 0x10]                                |     *((r1 + 0x10)) = r3;
    0x0003187e str r2, [r1, 4]                                   |     *((r1 + 4)) = r2;
    0x00031880 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00031882 strd r2, r3, [r1, 8]                              |     __asm ("strd r2, r3, [r1, 8]");
    0x00031886 str.w ip, [r0, lr]                                |     __asm ("str.w ip, [r0, lr]");
                                                                 | label_17:
    0x0003188a ldr r2, [r5, 0xc]                                 |     r2 = *((r5 + 0xc));
    0x0003188c cmp r2, 0                                         |     
    0x0003188e bgt 0x318d6                                       |     
                                                                 |     while (r3 <= 0) {
    0x00031890 ldr.w sb, [sp, 0x18]                              |         sb = var_18h;
    0x00031894 str r6, [sp, 0x28]                                |         var_28h = r6;
    0x00031896 b 0x31550                                         |         goto label_11;
                                                                 | label_20:
    0x00031898 movs r2, 0                                        |         r2 = 0;
    0x0003189a movs r1, 9                                        |         r1 = 9;
    0x0003189c str r2, [sp]                                      |         *(sp) = r2;
    0x0003189e mov r0, r4                                        |         r0 = r4;
    0x000318a0 ldr.w r2, [r8, 0xc]                               |         r2 = *((r8 + 0xc));
    0x000318a4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000318a8 ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x000318aa mov r0, r4                                        |         r0 = r4;
    0x000318ac bl 0x2a2e4                                        |         fcn_0002a2e4 (r0, r1, r2);
    0x000318b0 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x000318b2 ldr.w r2, [r8, 0x10]                              |         r2 = *((r8 + 0x10));
    0x000318b6 ldrd r3, r1, [r0, 0x38]                           |         __asm ("ldrd r3, r1, [r0, 0x38]");
    0x000318ba mvns r2, r2                                       |         r2 = ~r2;
    0x000318bc cmn r1, r3                                        |         
                                                                 |         if (r1 < r3) {
    0x000318be bmi 0x31966                                       |             goto label_42;
                                                                 |         }
    0x000318c0 ldr r3, [r0, 0x40]                                |         r3 = *((r0 + 0x40));
    0x000318c2 ldr r1, [r4, 0x6c]                                |         r1 = *((r4 + 0x6c));
    0x000318c4 str.w r1, [r3, r2, lsl 2]                         |         __asm ("str.w r1, [r3, r2, lsl 2]");
    0x000318c8 b 0x31452                                         |         goto label_12;
                                                                 | label_36:
    0x000318ca mov r1, r4                                        |         r1 = r4;
    0x000318cc add sp, 0x44                                      |         
    0x000318ce pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x000318d2 b.w 0x2bed8                                       |         void (*0x2bed8)() ();
    0x000318d6 movs r1, 1                                        |         r1 = 1;
    0x000318d8 mov r3, sb                                        |         r3 = sb;
    0x000318da str r1, [sp]                                      |         *(sp) = r1;
    0x000318dc mov r0, r4                                        |         r0 = r4;
    0x000318de movs r1, 0x31                                     |         r1 = 0x31;
    0x000318e0 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000318e4 ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x000318e6 cmp r3, 0                                         |         
    0x000318e8 ble 0x31890                                       |         
                                                                 |     }
    0x000318ea movs r3, 0                                        |     r3 = 0;
    0x000318ec ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x000318ee movs r1, 0x56                                     |     r1 = 0x56;
    0x000318f0 str r3, [sp]                                      |     *(sp) = r3;
    0x000318f2 mov r0, r4                                        |     r0 = r4;
    0x000318f4 mov.w r3, -1                                      |     r3 = -1;
    0x000318f8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000318fc ldr.w sb, [sp, 0x18]                              |     sb = var_18h;
    0x00031900 str r6, [sp, 0x28]                                |     var_28h = r6;
    0x00031902 b 0x31550                                         |     goto label_11;
                                                                 | label_32:
    0x00031904 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00031906 bne.w 0x317ce                                     |         goto label_10;
                                                                 |     }
    0x0003190a b 0x316d6                                         |     goto label_5;
                                                                 | label_15:
    0x0003190c ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0003190e mov r0, fp                                        |     r0 = fp;
    0x00031910 bl 0xf638                                         |     r0 = fcn_0000f638 (r0, r1);
    0x00031914 mov r7, r0                                        |     r7 = r0;
    0x00031916 b 0x314c4                                         |     goto label_13;
                                                                 | label_38:
    0x00031918 ldr.w r5, [fp, 0x2c]                              |     r5 = *(arg_2ch);
    0x0003191c adds r5, 1                                        |     r5++;
    0x0003191e str.w r5, [fp, 0x2c]                              |     __asm ("str.w r5, [arg_2ch]");
    0x00031922 b 0x3180a                                         |     goto label_14;
                                                                 | label_40:
    0x00031924 movs r1, 0                                        |     r1 = 0;
    0x00031926 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00031928 mov r0, r4                                        |     r0 = r4;
    0x0003192a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003192c str r1, [sp]                                      |     *(sp) = r1;
    0x0003192e movs r1, 0x54                                     |     r1 = 0x54;
    0x00031930 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031934 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00031936 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031938 bne.w 0x317ce                                     |         goto label_10;
                                                                 |     }
    0x0003193c b 0x316d6                                         |     goto label_5;
                                                                 | label_21:
    0x0003193e ldr.w r7, [fp, 0x2c]                              |     r7 = *(arg_2ch);
    0x00031942 cmp r1, 0xc                                       |     
    0x00031944 add.w r3, r7, 1                                   |     r3 = r7 + 1;
    0x00031948 mov r7, r3                                        |     r7 = r3;
    0x0003194a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0003194c str.w r3, [fp, 0x2c]                              |     __asm ("str.w r3, [arg_2ch]");
                                                                 |     if (r1 != 0xc) {
    0x00031950 bne 0x3190c                                       |         goto label_15;
                                                                 |     }
                                                                 | label_19:
    0x00031952 adds r7, 1                                        |     r7++;
    0x00031954 movs r3, 0                                        |     r3 = 0;
    0x00031956 str.w r7, [fp, 0x2c]                              |     __asm ("str.w r7, [arg_2ch]");
    0x0003195a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0003195c b 0x314c4                                         |     goto label_13;
                                                                 | label_31:
    0x0003195e ldr r2, [pc, 0x70]                                |     
    0x00031960 add r2, pc                                        |     r2 = 0x63336;
    0x00031962 adds r2, 4                                        |     r2 += 4;
    0x00031964 b 0x31668                                         |     goto label_16;
                                                                 | label_42:
    0x00031966 mov r1, r4                                        |     r1 = r4;
    0x00031968 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x0003196c b 0x31452                                         |     goto label_12;
                                                                 | label_39:
    0x0003196e mov r3, r5                                        |     r3 = r5;
    0x00031970 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00031972 movs r1, 0x80                                     |     r1 = 0x80;
    0x00031974 mov r0, r4                                        |     r0 = r4;
    0x00031976 str r7, [sp]                                      |     *(sp) = r7;
    0x00031978 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0003197c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003197e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031980 bne.w 0x317ce                                     |         goto label_10;
                                                                 |     }
    0x00031984 b 0x316d6                                         |     goto label_5;
                                                                 | label_41:
    0x00031986 str r3, [sp]                                      |     *(sp) = r3;
    0x00031988 movs r1, 0x22                                     |     r1 = 0x22;
    0x0003198a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003198c mov r0, r4                                        |     r0 = r4;
    0x0003198e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00031990 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00031994 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00031996 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00031998 b 0x3188a                                         |     goto label_17;
                                                                 | label_30:
    0x0003199a movs r3, 0                                        |     r3 = 0;
    0x0003199c movs r1, 0xe                                      |     r1 = 0xe;
    0x0003199e mov r2, r3                                        |     r2 = r3;
    0x000319a0 mov r0, r4                                        |     r0 = r4;
    0x000319a2 str r3, [sp]                                      |     *(sp) = r3;
    0x000319a4 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000319a8 mov sl, r0                                        |     sl = r0;
    0x000319aa b 0x31634                                         |     goto label_18;
                                                                 | label_37:
    0x000319ac cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000319ae beq.w 0x31774                                     |         goto label_9;
                                                                 |     }
    0x000319b2 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x000319b4 bhi.w 0x316d6                                     |         goto label_5;
                                                                 |     }
    0x000319b8 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000319ba adds r3, 0x26                                     |     r3 += 0x26;
    0x000319bc uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x000319be strb.w r2, [fp, 0x13]                             |     *(arg_13h) = r2;
    0x000319c2 str.w r7, [fp, r3, lsl 2]                         |     __asm ("str.w r7, [fp, r3, lsl 2]");
    0x000319c6 mov r3, r2                                        |     r3 = r2;
    0x000319c8 b 0x31774                                         |     goto label_9;
                                                                 | label_22:
    0x000319ca ldr.w r7, [fp, 0x2c]                              |     r7 = *(arg_2ch);
    0x000319ce b 0x31952                                         |     goto label_19;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x31a6c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00031a6c ()                                      | void fcn_00031a6c (int16_t arg_68h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_78h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00031a6c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00031a70 sub sp, 0x44                                      |     
    0x00031a72 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00031a74 mov sl, r0                                        |     sl = r0;
    0x00031a76 ldr r3, [sp, 0x6c]                                |     r3 = *(arg_6ch);
    0x00031a78 ldr r6, [r0, 8]                                   |     r6 = *((r0 + 8));
    0x00031a7a ldr r5, [sp, 0x68]                                |     r5 = *(arg_68h);
    0x00031a7c str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00031a7e ldrd sb, r3, [sp, 0x70]                           |     __asm ("ldrd sb, r3, [arg_70h]");
    0x00031a82 strd r2, r1, [sp, 0x2c]                           |     __asm ("strd r2, r1, [var_2ch]");
    0x00031a86 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00031a88 ldr r3, [sp, 0x78]                                |     r3 = *(arg_78h);
    0x00031a8a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00031a8c cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00031a8e beq.w 0x31d4e                                     |         goto label_14;
                                                                 |     }
                                                                 | label_2:
    0x00031a92 ldr.w r3, [sl, 0x28]                              |     r3 = *((sl + 0x28));
    0x00031a96 ldr.w r2, [sl, 0x38]                              |     r2 = *((sl + 0x38));
    0x00031a9a subs r3, 1                                        |     r3--;
    0x00031a9c str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00031a9e subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x00031aa0 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00031aa2 str.w r3, [sl, 0x38]                              |     __asm ("str.w r3, [sl, 0x38]");
    0x00031aa6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00031aa8 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00031aaa adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00031aac beq.w 0x31d5c                                     |         goto label_15;
                                                                 |     }
                                                                 | label_3:
    0x00031ab0 ldr r7, [r5, 0x14]                                |     r7 = *((r5 + 0x14));
    0x00031ab2 cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x00031ab4 ble 0x31b02                                       |         goto label_16;
                                                                 |     }
    0x00031ab6 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00031ab8 movs r4, 0                                        |     r4 = 0;
    0x00031aba ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x00031abc mov fp, r4                                        |     
    0x00031abe sub.w r8, r3, 4                                   |     r8 = r3 - 4;
                                                                 |     do {
    0x00031ac2 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00031ac4 adds r4, 1                                        |         r4++;
    0x00031ac6 ldr r1, [r8, 4]!                                  |         r1 = *((r8 += 4));
    0x00031aca ldr r3, [r0, 0x1c]                                |         r3 = *((r0 + 0x1c));
    0x00031acc ubfx ip, r1, 0xf, 1                               |         ip = (r1 >> 0xf) & ((1 << 1) - 1);
    0x00031ad0 sxth r1, r1                                       |         __asm ("sxth r1, r1");
    0x00031ad2 eor r3, r3, 0x20                                  |         r3 ^= 0x20;
    0x00031ad6 ubfx r3, r3, 5, 1                                 |         r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x00031ada orrs.w r3, ip, r3                                 |         r3 = ip | r3;
                                                                 |         if (r3 == ip) {
    0x00031ade bne 0x31ae6                                       |             
    0x00031ae0 bl 0xf6c8                                         |             r0 = fcn_0000f6c8 (r0, r1);
    0x00031ae4 mov r1, r0                                        |             r1 = r0;
                                                                 |         }
    0x00031ae6 add.w r2, r1, sb                                  |         r2 = r1 + sb;
    0x00031aea mov r3, r7                                        |         r3 = r7;
    0x00031aec adds r2, 1                                        |         r2++;
    0x00031aee movs r1, 0x32                                     |         r1 = 0x32;
    0x00031af0 mov r0, r6                                        |         r0 = r6;
    0x00031af2 str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x00031af6 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00031afa ldr r3, [r5, 0x14]                                |         r3 = *((r5 + 0x14));
    0x00031afc cmp r3, r4                                        |         
    0x00031afe bgt 0x31ac2                                       |         
                                                                 |     } while (r3 > r4);
    0x00031b00 mov r7, r3                                        |     r7 = r3;
                                                                 | label_16:
    0x00031b02 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00031b04 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031b06 bne 0x31bf4                                       |         goto label_1;
                                                                 |     }
    0x00031b08 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00031b0a sub.w r3, r3, 1                                   |     r3--;
    0x00031b0e clz r3, r3                                        |     r3 &= r3;
    0x00031b12 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00031b14 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00031b16 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00031b18 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00031b1a beq.w 0x31c62                                     |         goto label_17;
                                                                 |     }
    0x00031b1e mov r1, r7                                        |     r1 = r7;
    0x00031b20 mov r0, sl                                        |     r0 = sl;
    0x00031b22 bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x00031b26 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00031b28 movs r1, 0x70                                     |     r1 = 0x70;
    0x00031b2a ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00031b2c mov r8, r0                                        |     r8 = r0;
    0x00031b2e ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00031b30 str r3, [sp]                                      |     *(sp) = r3;
    0x00031b32 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00031b34 mov r0, r6                                        |     r0 = r6;
    0x00031b36 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00031b38 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031b3c mov r1, r4                                        |     r1 = r4;
    0x00031b3e mov r0, sl                                        |     r0 = sl;
    0x00031b40 bl 0x27dcc                                        |     fcn_00027dcc (r0, r1);
    0x00031b44 cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x00031b46 ble.w 0x31dfe                                     |         goto label_18;
                                                                 |     }
    0x00031b4a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00031b4c add.w fp, r8, r7                                  |     
    0x00031b50 str r7, [sp, 0x1c]                                |     var_1ch = r7;
    0x00031b52 mov r4, r8                                        |     r4 = r8;
    0x00031b54 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x00031b56 subs r3, 4                                        |     r3 -= 4;
    0x00031b58 mov r8, r3                                        |     r8 = r3;
    0x00031b5a str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     do {
    0x00031b5c ldr r0, [r5]                                      |         r0 = *(r5);
    0x00031b5e ldr r2, [r8, 4]!                                  |         r2 = *((r8 += 4));
    0x00031b62 ldr r3, [r0, 0x1c]                                |         r3 = *((r0 + 0x1c));
    0x00031b64 ubfx ip, r2, 0xf, 1                               |         ip = (r2 >> 0xf) & ((1 << 1) - 1);
    0x00031b68 sxth r1, r2                                       |         __asm ("sxth r1, r2");
    0x00031b6a eor r3, r3, 0x20                                  |         r3 ^= 0x20;
    0x00031b6e ubfx r3, r3, 5, 1                                 |         r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x00031b72 orrs.w r3, ip, r3                                 |         r3 = ip | r3;
                                                                 |         if (r3 == ip) {
    0x00031b76 bne 0x31b7e                                       |             
    0x00031b78 bl 0xf6c8                                         |             r0 = fcn_0000f6c8 (r0, r1);
    0x00031b7c mov r1, r0                                        |             r1 = r0;
                                                                 |         }
    0x00031b7e adds r2, r1, 1                                    |         r2 = r1 + 1;
    0x00031b80 mov r3, r4                                        |         r3 = r4;
    0x00031b82 add r2, sb                                        |         r2 += sb;
    0x00031b84 movs r1, 0x50                                     |         r1 = 0x50;
    0x00031b86 mov r0, r6                                        |         r0 = r6;
    0x00031b88 adds r4, 1                                        |         r4++;
    0x00031b8a str r7, [sp]                                      |         *(sp) = r7;
    0x00031b8c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00031b90 cmp r4, fp                                        |         
    0x00031b92 bne 0x31b5c                                       |         
                                                                 |     } while (r4 != fp);
    0x00031b94 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00031b96 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00031b98 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00031b9a ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x00031b9c cmp r0, r2                                        |     
    0x00031b9e ite ne                                            |     
                                                                 |     if (r0 == r2) {
    0x00031ba0 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r0 != r2) {
    0x00031ba2 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00031ba6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031ba8 bne.w 0x31e44                                     |         goto label_19;
                                                                 |     }
                                                                 | label_11:
    0x00031bac ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00031bae ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00031bb2 bl 0x319d4                                        |     fcn_000319d4 (r0, r1);
    0x00031bb6 ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x00031bb8 movs r3, 0                                        |     r3 = 0;
    0x00031bba movs r1, 0x60                                     |     r1 = 0x60;
    0x00031bbc strd r0, r7, [sp, 4]                              |     __asm ("strd r0, r7, [var_4h]");
    0x00031bc0 str r3, [sp]                                      |     *(sp) = r3;
    0x00031bc2 mov r0, r6                                        |     r0 = r6;
    0x00031bc4 mov r3, r7                                        |     r3 = r7;
    0x00031bc6 mov r2, r4                                        |     r2 = r4;
    0x00031bc8 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00031bcc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00031bce movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00031bd0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00031bd2 mov r0, r6                                        |     r0 = r6;
    0x00031bd4 str r7, [sp, 4]                                   |     var_4h = r7;
    0x00031bd6 str r4, [sp]                                      |     *(sp) = r4;
    0x00031bd8 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00031bdc cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x00031bde beq.w 0x31d9e                                     |         goto label_20;
                                                                 |     }
                                                                 | label_10:
    0x00031be2 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00031be6 cmp r7, r3                                        |     
    0x00031be8 ittt gt                                           |     
                                                                 |     if (r7 <= r3) {
    0x00031bea ldrgt r3, [sp, 0x30]                              |         r3 = var_30h;
                                                                 |     }
                                                                 |     if (r7 <= r3) {
    0x00031bec strgt r7, [sl, 0x1c]                              |         *((sl + 0x1c)) = r7;
                                                                 |     }
                                                                 |     if (r7 > r3) {
    0x00031bf0 str.w r3, [sl, 0x20]                              |         __asm ("str.w r3, [sl, 0x20]");
                                                                 |     }
                                                                 | label_1:
    0x00031bf4 ldrb r2, [r5, 0x18]                               |     r2 = *((r5 + 0x18));
                                                                 |     if (r2 != 0) {
    0x00031bf6 cbnz r2, 0x31c16                                  |         goto label_6;
                                                                 |     }
    0x00031bf8 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00031bfc ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00031bfe lsls r0, r3, 0xc                                  |     r0 = r3 << 0xc;
                                                                 |     if (r0 < r3) {
    0x00031c00 bmi 0x31c50                                       |         goto label_21;
                                                                 |     }
    0x00031c02 ldr.w r3, [sl, 0x74]                              |     r3 = *((sl + 0x74));
    0x00031c06 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00031c08 beq.w 0x31d86                                     |         goto label_22;
                                                                 |     }
    0x00031c0c ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00031c0e cmp r1, 1                                         |     
                                                                 |     if (r1 != 1) {
    0x00031c10 bne 0x31c16                                       |         goto label_6;
                                                                 |     }
                                                                 | label_0:
    0x00031c12 movs r1, 1                                        |     r1 = 1;
    0x00031c14 strb r1, [r3, 0x15]                               |     *((r3 + 0x15)) = r1;
                                                                 |     do {
                                                                 | label_6:
    0x00031c16 movs r1, 0                                        |         r1 = 0;
    0x00031c18 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00031c1a str r1, [sp]                                      |         *(sp) = r1;
    0x00031c1c mov r0, r6                                        |         r0 = r6;
    0x00031c1e movs r1, 0x9e                                     |         r1 = 0x9e;
    0x00031c20 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_12:
    0x00031c24 ldr r0, [r6, 0xc]                                 |         r0 = *((r6 + 0xc));
    0x00031c26 ldrd r3, r2, [r0, 0x38]                           |         __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00031c2a cmn r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x00031c2c bmi.w 0x31d6e                                     |             goto label_23;
                                                                 |         }
    0x00031c30 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00031c32 ldr r1, [r6, 0x6c]                                |         r1 = *((r6 + 0x6c));
    0x00031c34 ldr r2, [r0, 0x40]                                |         r2 = *((r0 + 0x40));
    0x00031c36 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00031c38 rsbs r3, r3, 0                                    |         r3 -= ;
    0x00031c3a str r1, [r2, r3]                                  |         *((r2 + r3)) = r1;
                                                                 | label_4:
    0x00031c3c movs r3, 0                                        |         r3 = 0;
    0x00031c3e ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00031c40 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00031c42 mov r0, r6                                        |         r0 = r6;
    0x00031c44 str r3, [sp, 0x68]                                |         *(arg_68h) = r3;
    0x00031c46 add sp, 0x44                                      |         
    0x00031c48 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00031c4c b.w 0x29ac4                                       |         void (*0x29ac4)() ();
                                                                 | label_21:
    0x00031c50 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00031c52 cmp r3, 1                                         |         
    0x00031c54 bne 0x31c16                                       |         
                                                                 |     } while (r3 != 1);
    0x00031c56 ldr.w r3, [sl, 0x74]                              |     r3 = *((sl + 0x74));
    0x00031c5a cmp r3, 0                                         |     
    0x00031c5c it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00031c5e moveq r3, sl                                      |         r3 = sl;
                                                                 |     }
    0x00031c60 b 0x31c12                                         |     goto label_0;
                                                                 | label_17:
    0x00031c62 ldrb.w r3, [sl, 0x13]                             |     r3 = *((sl + 0x13));
    0x00031c66 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00031c68 beq.w 0x31d7a                                     |         goto label_24;
                                                                 |     }
    0x00031c6c subs r3, 1                                        |     r3--;
    0x00031c6e uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00031c70 strb.w r3, [sl, 0x13]                             |     *((sl + 0x13)) = r3;
    0x00031c74 adds r3, 0x26                                     |     r3 += 0x26;
    0x00031c76 ldr.w r7, [sl, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r7 = *((sl + offset_0));
                                                                 | label_5:
    0x00031c7a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00031c7c ldr r0, [r5]                                      |     r0 = *(r5);
    0x00031c7e ldrsh.w r1, [r3]                                  |     r1 = *(r3);
    0x00031c82 ldr r3, [r0, 0x1c]                                |     r3 = *((r0 + 0x1c));
    0x00031c84 eor r3, r3, 0x20                                  |     r3 ^= 0x20;
    0x00031c88 ubfx r3, r3, 5, 1                                 |     r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x00031c8c orrs.w r3, r3, r1, lsr 31                         |     r3 |= (r1 >> 31);
                                                                 |     if (r3 == r3) {
    0x00031c90 bne 0x31c98                                       |         
    0x00031c92 bl 0xf6c8                                         |         r0 = fcn_0000f6c8 (r0, r1);
    0x00031c96 mov r1, r0                                        |         r1 = r0;
                                                                 |     }
    0x00031c98 adds r2, r1, 1                                    |     r2 = r1 + 1;
    0x00031c9a mov.w r8, 0                                       |     r8 = 0;
    0x00031c9e mov r3, r7                                        |     r3 = r7;
    0x00031ca0 add r2, sb                                        |     r2 += sb;
    0x00031ca2 movs r1, 0x51                                     |     r1 = 0x51;
    0x00031ca4 mov r0, r6                                        |     r0 = r6;
    0x00031ca6 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00031caa bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031cae ldrd r4, r3, [r6, 0x6c]                           |     __asm ("ldrd r4, r3, [r6, 0x6c]");
    0x00031cb2 cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x00031cb4 bge.w 0x31dea                                     |         goto label_25;
                                                                 |     }
    0x00031cb8 add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x00031cbc ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x00031cbe adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00031cc0 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00031cc2 str r2, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r2;
    0x00031cc4 movs r0, 0xc                                      |     r0 = 0xc;
    0x00031cc6 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00031cc8 strd r7, r8, [r2, 4]                              |     __asm ("strd r7, r8, [r2, 4]");
    0x00031ccc strd r8, r8, [r2, 0xc]                            |     __asm ("strd r8, r8, [r2, 0xc]");
    0x00031cd0 str r0, [r1, r3]                                  |     *((r1 + r3)) = r0;
                                                                 | label_9:
    0x00031cd2 ldr r2, [r5]                                      |     r2 = *(r5);
    0x00031cd4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00031cd6 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00031cd8 cmp r2, r1                                        |     
    0x00031cda ite ne                                            |     
                                                                 |     if (r2 == r1) {
    0x00031cdc movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != r1) {
    0x00031cde andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00031ce2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031ce4 bne.w 0x31f18                                     |         goto label_26;
                                                                 |     }
                                                                 | label_13:
    0x00031ce8 ldr.w r8, [sp, 0x14]                              |     r8 = var_14h;
    0x00031cec movs r1, 0x70                                     |     r1 = 0x70;
    0x00031cee ldrd r3, r2, [sp, 0x2c]                           |     __asm ("ldrd r3, r2, [var_2ch]");
    0x00031cf2 mov r0, sl                                        |     r0 = sl;
    0x00031cf4 str r1, [sp]                                      |     *(sp) = r1;
    0x00031cf6 mov r1, r8                                        |     r1 = r8;
    0x00031cf8 bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x00031cfc movs r3, 0                                        |     r3 = 0;
    0x00031cfe mov r2, r8                                        |     r2 = r8;
    0x00031d00 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00031d02 mov r0, r6                                        |     r0 = r6;
    0x00031d04 str r7, [sp]                                      |     *(sp) = r7;
    0x00031d06 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031d0a ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00031d0c mov r0, r6                                        |     r0 = r6;
    0x00031d0e bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00031d12 ldr r1, [r6]                                      |     r1 = *(r6);
    0x00031d14 ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x00031d16 ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
    0x00031d1a subs r2, r3, 2                                    |     r2 = r3 - 2;
    0x00031d1c it mi                                             |     
                                                                 |     if (r2 >= r3) {
    0x00031d1e addmi r2, r3, -1                                  |         r2 = r3 + -1;
                                                                 |     }
    0x00031d22 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00031d24 beq 0x31dcc                                       |         goto label_27;
                                                                 |     }
    0x00031d26 ldr r2, [pc, 0x218]                               |     
    0x00031d28 add r2, pc                                        |     r2 = 0x63c6e;
    0x00031d2a str r3, [r2, 0xc]                                 |     *((r2 + 0xc)) = r3;
    0x00031d2c adds r2, 4                                        |     r2 += 4;
                                                                 | label_8:
    0x00031d2e str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x00031d30 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00031d32 beq.w 0x31bf4                                     |         goto label_1;
                                                                 |     }
    0x00031d36 ldrb.w r3, [sl, 0x13]                             |     r3 = *((sl + 0x13));
    0x00031d3a cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00031d3c bhi.w 0x31bf4                                     |         goto label_1;
                                                                 |     }
    0x00031d40 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00031d42 adds r3, 0x26                                     |     r3 += 0x26;
    0x00031d44 strb.w r2, [sl, 0x13]                             |     *((sl + 0x13)) = r2;
    0x00031d48 str.w r7, [sl, r3, lsl 2]                         |     __asm ("str.w r7, [sl, r3, lsl 2]");
    0x00031d4c b 0x31bf4                                         |     goto label_1;
                                                                 | label_14:
    0x00031d4e ldr r3, [r0, 0x74]                                |     r3 = *((r0 + 0x74));
                                                                 |     if (r3 == 0) {
    0x00031d50 cbz r3, 0x31dbe                                   |         goto label_28;
                                                                 |     }
                                                                 | label_7:
    0x00031d52 mov r0, sl                                        |     r0 = sl;
    0x00031d54 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x00031d58 mov r6, r0                                        |     r6 = r0;
    0x00031d5a b 0x31a92                                         |     goto label_2;
                                                                 | label_15:
    0x00031d5c movs r3, 0                                        |     r3 = 0;
    0x00031d5e movs r1, 0x30                                     |     r1 = 0x30;
    0x00031d60 str r3, [sp]                                      |     *(sp) = r3;
    0x00031d62 mov r0, r6                                        |     r0 = r6;
    0x00031d64 ldrb r2, [r5, 0x18]                               |     r2 = *((r5 + 0x18));
    0x00031d66 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00031d68 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031d6c b 0x31ab0                                         |     goto label_3;
                                                                 | label_23:
    0x00031d6e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00031d70 mov r1, r6                                        |     r1 = r6;
    0x00031d72 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00031d74 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00031d78 b 0x31c3c                                         |     goto label_4;
                                                                 | label_24:
    0x00031d7a ldr.w r7, [sl, 0x2c]                              |     r7 = *((sl + 0x2c));
    0x00031d7e adds r7, 1                                        |     r7++;
    0x00031d80 str.w r7, [sl, 0x2c]                              |     __asm ("str.w r7, [sl, 0x2c]");
    0x00031d84 b 0x31c7a                                         |     goto label_5;
                                                                 | label_22:
    0x00031d86 ldrb.w r3, [sl, 0x14]                             |     r3 = *((sl + 0x14));
    0x00031d8a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00031d8c beq.w 0x31f00                                     |         goto label_29;
                                                                 |     }
    0x00031d90 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00031d92 cmp r3, 1                                         |     
    0x00031d94 it eq                                             |     
                                                                 |     if (r3 == 1) {
    0x00031d96 moveq r3, sl                                      |         r3 = sl;
                                                                 |         goto label_30;
                                                                 |     }
                                                                 |     if (r3 == 1) {
                                                                 | label_30:
    0x00031d98 beq.w 0x31c12                                     |         goto label_0;
                                                                 |     }
    0x00031d9c b 0x31c16                                         |     goto label_6;
                                                                 | label_20:
    0x00031d9e ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00031da0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00031da2 beq.w 0x31bf4                                     |         goto label_1;
                                                                 |     }
    0x00031da6 ldrb.w r3, [sl, 0x13]                             |     r3 = *((sl + 0x13));
    0x00031daa cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00031dac bhi.w 0x31bf4                                     |         goto label_1;
                                                                 |     }
    0x00031db0 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00031db2 adds r3, 0x26                                     |     r3 += 0x26;
    0x00031db4 strb.w r2, [sl, 0x13]                             |     *((sl + 0x13)) = r2;
    0x00031db8 str.w r1, [sl, r3, lsl 2]                         |     __asm ("str.w r1, [sl, r3, lsl 2]");
    0x00031dbc b 0x31bf4                                         |     goto label_1;
                                                                 | label_28:
    0x00031dbe ldr r3, [r0]                                      |     r3 = *(r0);
    0x00031dc0 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00031dc2 lsls r4, r3, 0x1c                                 |     r4 = r3 << 0x1c;
    0x00031dc4 itt pl                                            |     
                                                                 |     if (r4 < r3) {
    0x00031dc6 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r4 < r3) {
    0x00031dc8 strbpl r3, [r0, 0x17]                             |         *((r0 + 0x17)) = r3;
                                                                 |     }
    0x00031dca b 0x31d52                                         |     goto label_7;
                                                                 | label_27:
    0x00031dcc add.w r1, r2, r2, lsl 2                           |     r1 = r2 + (r2 << 2);
    0x00031dd0 ldr r2, [r6, 0x68]                                |     r2 = *((r6 + 0x68));
    0x00031dd2 cmp r4, 0                                         |     
    0x00031dd4 it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00031dd6 addlt r4, r3, -1                                  |         r4 = r3 + -1;
                                                                 |     }
    0x00031dda add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00031dde add.w r1, r2, r1, lsl 2                           |     r1 = r2 + (r1 << 2);
    0x00031de2 add.w r2, r2, r4, lsl 2                           |     r2 += (r4 << 2);
    0x00031de6 str r3, [r1, 8]                                   |     *((r1 + 8)) = r3;
    0x00031de8 b 0x31d2e                                         |     goto label_8;
                                                                 | label_25:
    0x00031dea mov r3, r8                                        |     r3 = r8;
    0x00031dec mov r2, r7                                        |     r2 = r7;
    0x00031dee movs r1, 0xc                                      |     r1 = 0xc;
    0x00031df0 mov r0, r6                                        |     r0 = r6;
    0x00031df2 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00031df6 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00031dfa mov r4, r0                                        |     r4 = r0;
    0x00031dfc b 0x31cd2                                         |     goto label_9;
                                                                 | label_18:
    0x00031dfe ldr r2, [r5]                                      |     r2 = *(r5);
    0x00031e00 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00031e02 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00031e04 cmp r2, r1                                        |     
    0x00031e06 ite ne                                            |     
                                                                 |     if (r2 == r1) {
    0x00031e08 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != r1) {
    0x00031e0a andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00031e0e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031e10 bne 0x31ef6                                       |         goto label_31;
                                                                 |     }
    0x00031e12 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00031e14 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00031e18 bl 0x319d4                                        |     fcn_000319d4 (r0, r1);
    0x00031e1c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00031e1e movs r1, 0x60                                     |     r1 = 0x60;
    0x00031e20 ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x00031e22 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00031e24 mov r0, r6                                        |     r0 = r6;
    0x00031e26 str r3, [sp]                                      |     *(sp) = r3;
    0x00031e28 mov r3, r7                                        |     r3 = r7;
    0x00031e2a mov r2, r4                                        |     r2 = r4;
    0x00031e2c str r7, [sp, 8]                                   |     var_8h = r7;
    0x00031e2e bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00031e32 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00031e34 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00031e36 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00031e38 mov r0, r6                                        |     r0 = r6;
    0x00031e3a str r7, [sp, 4]                                   |     var_4h = r7;
    0x00031e3c str r4, [sp]                                      |     *(sp) = r4;
    0x00031e3e bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00031e42 b 0x31be2                                         |     goto label_10;
                                                                 | label_19:
    0x00031e44 ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x00031e46 lsl.w fp, r7, 1                                   |     
    0x00031e4a str r7, [sp, 0x3c]                                |     var_3ch = r7;
    0x00031e4c movs r4, 0                                        |     r4 = 0;
    0x00031e4e add r3, r7                                        |     r3 += r7;
    0x00031e50 ldr r7, [sp, 0x38]                                |     r7 = var_38h;
    0x00031e52 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00031e56 add.w r3, sb, 1                                   |     r3 = sb + 1;
    0x00031e5a str.w sl, [sp, 0x38]                              |     __asm ("str.w sl, [var_38h]");
    0x00031e5e str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00031e60 ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
    0x00031e64 b 0x31e68                                         |     
                                                                 |     while (r4 != fp) {
    0x00031e66 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00031e68 ldr r3, [r0, 0x1c]                                |         r3 = *((r0 + 0x1c));
    0x00031e6a ldr r1, [r7, 4]!                                  |         r1 = *((r7 += 4));
    0x00031e6c subs r4, r0, 4                                    |         r4 = r0 - 4;
    0x00031e6e eor r3, r3, 0x20                                  |         r3 ^= 0x20;
    0x00031e72 ubfx r2, r1, 0xf, 1                               |         r2 = (r1 >> 0xf) & ((1 << 1) - 1);
    0x00031e76 ubfx r3, r3, 5, 1                                 |         r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x00031e7a orrs r2, r3                                       |         r2 |= r3;
    0x00031e7c sxth r1, r1                                       |         __asm ("sxth r1, r1");
                                                                 |         if (r2 == r3) {
    0x00031e7e bne 0x31e86                                       |             
    0x00031e80 bl 0xf6c8                                         |             r0 = fcn_0000f6c8 (r0, r1);
    0x00031e84 mov r1, r0                                        |             r1 = r0;
                                                                 |         }
    0x00031e86 ldr.w r0, [sl, 0xc]                               |         r0 = *((sl + 0xc));
    0x00031e8a adds r1, 1                                        |         r1++;
    0x00031e8c ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x00031e90 add.w r2, r1, sb                                  |         r2 = r1 + sb;
    0x00031e94 ldrsh r1, [r3, r4]                                |         r1 = *((r3 + r4));
    0x00031e96 ldr r3, [r0, 0x1c]                                |         r3 = *((r0 + 0x1c));
    0x00031e98 eor r3, r3, 0x20                                  |         r3 ^= 0x20;
    0x00031e9c ubfx r3, r3, 5, 1                                 |         r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x00031ea0 orrs.w r3, r3, r1, lsr 31                         |         r3 |= (r1 >> 31);
    0x00031ea4 it ne                                             |         
                                                                 |         if (r3 == r3) {
    0x00031ea6 movne r0, r1                                      |             r0 = r1;
                                                                 |         }
                                                                 |         if (r3 == r3) {
    0x00031ea8 bne 0x31eb6                                       |             
    0x00031eaa strd r1, r2, [sp, 0x1c]                           |             __asm ("strd r1, r2, [var_1ch]");
    0x00031eae bl 0xf6c8                                         |             fcn_0000f6c8 (r0, r1);
    0x00031eb2 ldrd r1, r2, [sp, 0x1c]                           |             __asm ("ldrd r1, r2, [var_1ch]");
                                                                 |         }
    0x00031eb6 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00031eb8 ldrsh.w r3, [r3, 0x20]                            |         r3 = *((r3 + 0x20));
    0x00031ebc cmp r3, r1                                        |         
    0x00031ebe mov.w r1, 0x34                                    |         r1 = 0x34;
    0x00031ec2 itet ne                                           |         
                                                                 |         if (r3 == r1) {
    0x00031ec4 ldrne r3, [sp, 0x34]                              |             r3 = var_34h;
                                                                 |         }
                                                                 |         if (r3 != r1) {
    0x00031ec6 moveq r0, sb                                      |             r0 = sb;
                                                                 |         }
                                                                 |         if (r3 == r1) {
    0x00031ec8 addne r0, r0, r3                                  |             r0 += r3;
                                                                 |         }
    0x00031eca mov r3, r8                                        |         r3 = r8;
    0x00031ecc str r0, [sp]                                      |         *(sp) = r0;
    0x00031ece mov r0, r6                                        |         r0 = r6;
    0x00031ed0 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00031ed4 ldr r3, [r6, 0x6c]                                |         r3 = *((r6 + 0x6c));
    0x00031ed6 cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x00031ed8 ble 0x31eec                                       |             
    0x00031eda ldr r2, [r6, 0x68]                                |             r2 = *((r6 + 0x68));
    0x00031edc add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x00031ee0 add.w r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
    0x00031ee4 mov.w r3, 0x10                                    |             r3 = 0x10;
    0x00031ee8 strh r3, [r2, -0x12]                              |             *((r2 - 0x12)) = r3;
                                                                 |         }
    0x00031eec adds r4, 2                                        |         r4 += 2;
    0x00031eee cmp r4, fp                                        |         
    0x00031ef0 bne 0x31e66                                       |         
                                                                 |     }
    0x00031ef2 ldrd sl, r7, [sp, 0x38]                           |     __asm ("ldrd sl, r7, [var_38h]");
                                                                 | label_31:
    0x00031ef6 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00031ef8 mov r0, r6                                        |     r0 = r6;
    0x00031efa bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00031efe b 0x31bac                                         |     goto label_11;
                                                                 | label_29:
    0x00031f00 mov.w r2, -1                                      |     r2 = -1;
    0x00031f04 movs r1, 4                                        |     r1 = 4;
    0x00031f06 strd r2, r1, [sp]                                 |     __asm ("strd r2, r1, [sp]");
    0x00031f0a mov r0, sl                                        |     r0 = sl;
    0x00031f0c movs r2, 2                                        |     r2 = 2;
    0x00031f0e movw r1, 0x313                                    |     r1 = 0x313;
    0x00031f12 bl 0x2abf0                                        |     fcn_0002abf0 (r0, r1, r2, r3, r4, r5);
    0x00031f16 b 0x31c24                                         |     goto label_12;
                                                                 | label_26:
    0x00031f18 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00031f1a mov r2, sb                                        |     r2 = sb;
    0x00031f1c movs r1, 0x35                                     |     r1 = 0x35;
    0x00031f1e mov r0, r6                                        |     r0 = r6;
    0x00031f20 str r7, [sp]                                      |     *(sp) = r7;
    0x00031f22 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00031f26 ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x00031f28 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00031f2a ble.w 0x31ce8                                     |         goto label_13;
                                                                 |     }
    0x00031f2e ldr r2, [r6, 0x68]                                |     r2 = *((r6 + 0x68));
    0x00031f30 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00031f34 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x00031f38 movs r3, 0x90                                     |     r3 = 0x90;
    0x00031f3a strh r3, [r2, -0x12]                              |     *((r2 - 0x12)) = r3;
    0x00031f3e b 0x31ce8                                         |     goto label_13;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x31f44 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00031f44 ()                                      | void fcn_00031f44 (int16_t arg1, uint32_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int32_t var_28h_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00031f44 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00031f48 mov r8, r0                                        |     r8 = r0;
    0x00031f4a ldrb r2, [r0, 9]                                  |     r2 = *((r0 + 9));
    0x00031f4c sub sp, 0x34                                      |     
    0x00031f4e ldr r3, [r0, 0x38]                                |     r3 = *((r0 + 0x38));
    0x00031f50 ldrh r6, [r0, 0x18]                               |     r6 = *((r0 + 0x18));
    0x00031f52 add.w sb, r2, 7                                   |     sb = r2 + 7;
    0x00031f56 ldrh r5, [r0, 0x12]                               |     r5 = *((r0 + 0x12));
    0x00031f58 ldr r0, [r0, 0x34]                                |     r0 = *((r0 + 0x34));
    0x00031f5a ldrb.w r4, [r3, sb]                               |     r4 = *((r3 + sb));
    0x00031f5e ldr.w ip, [r0, 0x28]                              |     ip = *((r0 + 0x28));
    0x00031f62 lsls r0, r6, 1                                    |     r0 = r6 << 1;
    0x00031f64 cmp r4, r1                                        |     
    0x00031f66 add.w r7, r0, r5                                  |     r7 = r0 + r5;
    0x00031f6a add.w r4, r3, r2                                  |     r4 = r3 + r2;
    0x00031f6e str r7, [sp, 0x24]                                |     var_24h = r7;
                                                                 |     if (r4 <= r1) {
    0x00031f70 bgt 0x31f88                                       |         
    0x00031f72 ldrb r1, [r4, 1]                                  |         r1 = *((r4 + 1));
    0x00031f74 sub.w r2, ip, 3                                   |         r2 = ip - 3;
    0x00031f78 ldrb r7, [r4, 2]                                  |         r7 = *((r4 + 2));
    0x00031f7a orr.w r7, r7, r1, lsl 8                           |         r7 |= (r1 << 8);
    0x00031f7e cmp r2, r7                                        |         
                                                                 |         if (r2 <= r7) {
    0x00031f80 ble.w 0x32136                                     |             goto label_7;
                                                                 |         }
    0x00031f84 cmp r7, 0                                         |         
                                                                 |         if (r7 != 0) {
    0x00031f86 bne 0x32072                                       |             goto label_8;
                                                                 |         }
                                                                 |     }
                                                                 | label_2:
    0x00031f88 ldrb r2, [r4, 5]                                  |     r2 = *((r4 + 5));
    0x00031f8a sub.w lr, ip, 4                                   |     lr = ip - 4;
    0x00031f8e ldrb r1, [r4, 6]                                  |     r1 = *((r4 + 6));
    0x00031f90 orr.w fp, r1, r2, lsl 8                           |     
    0x00031f94 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00031f96 beq.w 0x3223c                                     |         goto label_9;
                                                                 |     }
    0x00031f9a add r5, r3                                        |     r5 += r3;
    0x00031f9c str r3, [sp, 8]                                   |     var_8h = r3;
    0x00031f9e adds r2, r0, r5                                   |     r2 = r0 + r5;
    0x00031fa0 mov r6, ip                                        |     r6 = ip;
    0x00031fa2 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00031fa4 sub.w r2, ip, fp                                  |     r2 = ip - fp;
    0x00031fa8 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00031faa add.w r2, r3, fp                                  |     r2 = r3 + fp;
    0x00031fae mov.w sl, 0                                       |     sl = 0;
    0x00031fb2 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00031fb4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00031fb6 strd lr, ip, [sp, 0xc]                            |     __asm ("strd lr, ip, [var_ch]");
    0x00031fba strd sb, r4, [sp, 0x28]                           |     __asm ("strd sb, r4, [var_28h]");
    0x00031fbe b 0x31fd4                                         |     
                                                                 |     while (sl != 0) {
                                                                 | label_1:
    0x00031fc0 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00031fc2 mov r2, r7                                        |         r2 = r7;
    0x00031fc4 mov r1, sb                                        |         r1 = sb;
    0x00031fc6 adds r0, r3, r6                                   |         r0 = r3 + r6;
    0x00031fc8 blx 0x9e2c                                        |         fcn_00009e2c ();
                                                                 | label_0:
    0x00031fcc ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00031fce cmp r3, r5                                        |         
                                                                 |         if (r3 == r5) {
    0x00031fd0 beq.w 0x3217a                                     |             goto label_10;
                                                                 |         }
    0x00031fd4 ldrh r4, [r5]                                     |         r4 = *(r5);
    0x00031fd6 mov r0, r8                                        |         r0 = r8;
    0x00031fd8 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00031fda rev16 r4, r4                                      |         __asm ("rev16 r4, r4");
    0x00031fdc uxth r4, r4                                       |         r4 = (int16_t) r4;
    0x00031fde add.w sb, r3, r4                                  |         sb = r3 + r4;
    0x00031fe2 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00031fe4 cmp r3, r4                                        |         
    0x00031fe6 ite ge                                            |         
                                                                 |         if (r3 < r4) {
    0x00031fe8 movge r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r3 >= r4) {
    0x00031fea movlt r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x00031fec cmp fp, r4                                        |         
    0x00031fee it gt                                             |         
                                                                 |         if (fp <= r4) {
    0x00031ff0 orrgt r2, r2, 1                                   |             r2 |= 1;
                                                                 |         }
    0x00031ff4 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00031ff6 bne.w 0x32158                                     |             goto label_11;
                                                                 |         }
    0x00031ffa ldr.w r2, [r8, 0x4c]                              |         r2 = *((r8 + 0x4c));
    0x00031ffe mov r1, sb                                        |         r1 = sb;
    0x00032000 blx r2                                            |         r0 = uint32_t (*r2)(uint32_t, uint32_t) (r1, r2);
    0x00032002 subs r6, r6, r0                                   |         r6 -= r0;
    0x00032004 mov r7, r0                                        |         r7 = r0;
    0x00032006 cmp fp, r6                                        |         
    0x00032008 asr.w r1, r6, 8                                   |         r1 = r6 >> 8;
    0x0003200c add.w r2, r4, r0                                  |         r2 = r4 + r0;
                                                                 |         if (fp > r6) {
    0x00032010 bgt 0x3204a                                       |             goto label_12;
                                                                 |         }
    0x00032012 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00032014 cmp r2, r3                                        |         
                                                                 |         if (r2 > r3) {
    0x00032016 bgt 0x3204a                                       |             goto label_12;
                                                                 |         }
    0x00032018 strb r1, [r5]                                     |         *(r5) = r1;
    0x0003201a adds r5, 2                                        |         r5 += 2;
    0x0003201c strb r6, [r5, -0x1]                               |         *((r5 - 0x1)) = r6;
    0x00032020 cmp.w sl, 0                                       |         
    0x00032024 bne 0x31fc0                                       |         
                                                                 |     }
    0x00032026 cmp r4, r6                                        |     
    0x00032028 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
                                                                 |     if (r4 == r6) {
    0x0003202a beq 0x31fcc                                       |         goto label_0;
                                                                 |     }
    0x0003202c ldr.w r3, [r8, 0x34]                              |     r3 = *((r8 + 0x34));
    0x00032030 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00032032 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00032034 ldr.w sl, [r3, 0xf0]                              |     sl = *((r3 + 0xf0));
    0x00032038 add.w r0, sl, fp                                  |     r0 = sl + fp;
    0x0003203c add.w sb, sl, r4                                  |     sb = sl + r4;
    0x00032040 str.w sl, [sp, 8]                                 |     __asm ("str.w sl, [var_8h]");
    0x00032044 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00032048 b 0x31fc0                                         |     goto label_1;
                                                                 | label_12:
    0x0003204a blx 0xa230                                        |     fcn_0000a230 ();
    0x0003204e ldr r2, [pc, 0x270]                               |     
    0x00032050 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00032054 ldr r1, [pc, 0x26c]                               |     
    0x00032056 movw r3, 0xc92                                    |     
    0x0003205a movt r3, 1                                        |     r3 = 0x10c92;
    0x0003205e movs r0, 0xb                                      |     r0 = 0xb;
    0x00032060 add r2, pc                                        |     r2 = 0x64326;
    0x00032062 str r4, [sp]                                      |     *(sp) = r4;
    0x00032064 add r1, pc                                        |     r1 = 0x6432c;
    0x00032066 blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 | label_4:
    0x0003206a movs r0, 0xb                                      |     r0 = 0xb;
    0x0003206c add sp, 0x34                                      |     
    0x0003206e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_8:
    0x00032072 adds r1, r3, r7                                   |     r1 = r3 + r7;
    0x00032074 ldrb.w lr, [r3, r7]                               |     
    0x00032078 ldrb.w sl, [r1, 1]                                |     sl = *((r1 + 1));
    0x0003207c orr.w sl, sl, lr, lsl 8                           |     sl |= (lr << 8);
    0x00032080 cmp r2, sl                                        |     
                                                                 |     if (r2 <= sl) {
    0x00032082 ble.w 0x3221a                                     |         goto label_13;
                                                                 |     }
    0x00032086 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0003208a beq 0x320a2                                       |         goto label_14;
                                                                 |     }
    0x0003208c ldrb.w r2, [r3, sl]                               |     r2 = *((r3 + sl));
    0x00032090 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00032092 bne.w 0x31f88                                     |         goto label_2;
                                                                 |     }
    0x00032096 add.w r2, r3, sl                                  |     r2 = r3 + sl;
    0x0003209a ldrb r2, [r2, 1]                                  |     r2 = *((r2 + 1));
    0x0003209c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0003209e bne.w 0x31f88                                     |         goto label_2;
                                                                 |     }
                                                                 | label_14:
    0x000320a2 ldrb r2, [r4, 5]                                  |     r2 = *((r4 + 5));
    0x000320a4 ldrb.w fp, [r4, 6]                                |     fp = *((r4 + 6));
    0x000320a8 ldrb r0, [r1, 2]                                  |     r0 = *((r1 + 2));
    0x000320aa orr.w r6, fp, r2, lsl 8                           |     r6 = fp | (r2 << 8);
    0x000320ae ldrb r2, [r1, 3]                                  |     r2 = *((r1 + 3));
    0x000320b0 cmp r7, r6                                        |     
    0x000320b2 orr.w fp, r2, r0, lsl 8                           |     
                                                                 |     if (r7 <= r6) {
    0x000320b6 ble.w 0x32240                                     |         goto label_15;
                                                                 |     }
    0x000320ba add.w r1, r7, fp                                  |     r1 = r7 + fp;
    0x000320be cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x000320c2 bne.w 0x321d6                                     |         goto label_16;
                                                                 |     }
    0x000320c6 cmp ip, r1                                        |     
    0x000320c8 it ge                                             |     
                                                                 |     if (ip < r1) {
    0x000320ca strge sl, [sp, 8]                                 |         var_8h = sl;
                                                                 |     }
                                                                 |     if (ip < r1) {
    0x000320ce blt.w 0x3227a                                     |         goto label_17;
                                                                 |     }
                                                                 | label_6:
    0x000320d2 mov r1, r6                                        |     r1 = r6;
    0x000320d4 add r6, fp                                        |     r6 += fp;
    0x000320d6 subs r2, r7, r1                                   |     r2 = r7 - r1;
    0x000320d8 adds r0, r3, r6                                   |     r0 = r3 + r6;
    0x000320da adds r1, r3, r1                                   |     r1 = r3 + r1;
    0x000320dc str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000320de blx 0x9928                                        |     fcn_00009928 ();
    0x000320e2 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000320e4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000320e6 add r5, r3                                        |     r5 += r3;
    0x000320e8 add.w ip, r3, r2                                  |     
    0x000320ec cmp ip, r5                                        |     
                                                                 |     if (ip < r5) {
    0x000320ee bls.w 0x32212                                     |         goto label_18;
                                                                 |     }
    0x000320f2 adds r1, r5, 2                                    |     r1 = r5 + 2;
    0x000320f4 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000320f6 mov r0, r1                                        |     r0 = r1;
    0x000320f8 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000320fa b 0x32116                                         |     
                                                                 |     while (r7 > r2) {
    0x000320fc asr.w r2, lr, 8                                   |         r2 = lr >> 8;
    0x00032100 strb r2, [r0, -0x2]                               |         *((r0 - 0x2)) = r2;
    0x00032104 strb.w lr, [r5, 1]                                |         
                                                                 | label_3:
    0x00032108 cmp ip, r1                                        |         
    0x0003210a mov r5, r1                                        |         r5 = r1;
    0x0003210c add.w r0, r0, 2                                   |         r0 += 2;
    0x00032110 add.w r1, r1, 2                                   |         r1 += 2;
                                                                 |         if (ip < r1) {
    0x00032114 bls 0x32210                                       |             goto label_19;
                                                                 |         }
    0x00032116 ldrh r2, [r5]                                     |         r2 = *(r5);
    0x00032118 rev16 r2, r2                                      |         __asm ("rev16 r2, r2");
    0x0003211a uxth r2, r2                                       |         r2 = (int16_t) r2;
    0x0003211c cmp r7, r2                                        |         
    0x0003211e add.w lr, fp, r2                                  |         lr = fp + r2;
    0x00032122 bgt 0x320fc                                       |         
                                                                 |     }
    0x00032124 cmp sl, r2                                        |     
    0x00032126 add r2, r3                                        |     r2 += r3;
    0x00032128 ittt gt                                           |     
                                                                 |     if (sl > r2) {
    0x0003212a asrgt lr, r2, 8                                   |         __asm ("asrgt lr, r2, 8");
                                                                 |     }
                                                                 |     if (sl <= r2) {
    0x0003212e strbgt lr, [r0, -0x2]                             |         
                                                                 |     }
                                                                 |     if (sl > r2) {
    0x00032132 strb r2, [r5, 1]                                  |         *((r5 + 1)) = r2;
                                                                 |     }
    0x00032134 b 0x32108                                         |     goto label_3;
                                                                 | label_7:
    0x00032136 blx 0xa230                                        |     fcn_0000a230 ();
    0x0003213a ldr r2, [pc, 0x18c]                               |     
    0x0003213c add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00032140 ldr r1, [pc, 0x188]                               |     
    0x00032142 movw r3, 0xc5b                                    |     
    0x00032146 movt r3, 1                                        |     r3 = 0x10c5b;
    0x0003214a movs r0, 0xb                                      |     r0 = 0xb;
    0x0003214c add r2, pc                                        |     r2 = 0x6441a;
    0x0003214e str r4, [sp]                                      |     *(sp) = r4;
    0x00032150 add r1, pc                                        |     r1 = 0x64420;
    0x00032152 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00032156 b 0x3206a                                         |     goto label_4;
                                                                 | label_11:
    0x00032158 blx 0xa230                                        |     fcn_0000a230 ();
    0x0003215c ldr r2, [pc, 0x170]                               |     
    0x0003215e add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00032162 ldr r1, [pc, 0x170]                               |     
    0x00032164 movw r3, 0xc8c                                    |     
    0x00032168 movt r3, 1                                        |     r3 = 0x10c8c;
    0x0003216c movs r0, 0xb                                      |     r0 = 0xb;
    0x0003216e add r2, pc                                        |     r2 = 0x64442;
    0x00032170 str r4, [sp]                                      |     *(sp) = r4;
    0x00032172 add r1, pc                                        |     r1 = 0x6444c;
    0x00032174 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00032178 b 0x3206a                                         |     goto label_4;
                                                                 | label_10:
    0x0003217a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003217c ldrd sb, r4, [sp, 0x28]                           |     __asm ("ldrd sb, r4, [var_28h]");
                                                                 | label_5:
    0x00032180 mov r2, r6                                        |     r2 = r6;
    0x00032182 movs r1, 0                                        |     r1 = 0;
    0x00032184 strb.w r1, [r3, sb]                               |     *((r3 + sb)) = r1;
                                                                 |     do {
    0x00032188 ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x0003218a ldr.w r1, [r8, 0x14]                              |         r1 = *((r8 + 0x14));
    0x0003218e subs r2, r2, r0                                   |         r2 -= r0;
    0x00032190 cmp r2, r1                                        |         
                                                                 |         if (r2 != r1) {
    0x00032192 beq 0x321b6                                       |             
    0x00032194 blx 0xa230                                        |             fcn_0000a230 ();
    0x00032198 ldr r2, [pc, 0x13c]                               |             
    0x0003219a add.w r4, r0, 0x14                                |             r4 = r0 + 0x14;
    0x0003219e ldr r1, [pc, 0x13c]                               |             
    0x000321a0 movw r3, 0xca5                                    |             
    0x000321a4 movt r3, 1                                        |             r3 = 0x10ca5;
    0x000321a8 movs r0, 0xb                                      |             r0 = 0xb;
    0x000321aa add r2, pc                                        |             r2 = 0x64486;
    0x000321ac str r4, [sp]                                      |             *(sp) = r4;
    0x000321ae add r1, pc                                        |             r1 = 0x64490;
    0x000321b0 blx 0x9f00                                        |             fcn_00009f00 ();
    0x000321b4 b 0x3206a                                         |             goto label_4;
                                                                 |         }
    0x000321b6 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x000321b8 asrs r1, r6, 8                                    |         r1 = r6 >> 8;
    0x000321ba movs r5, 0                                        |         r5 = 0;
    0x000321bc strb r6, [r4, 6]                                  |         *((r4 + 6)) = r6;
    0x000321be strb r1, [r4, 5]                                  |         *((r4 + 5)) = r1;
    0x000321c0 mov r1, r5                                        |         r1 = r5;
    0x000321c2 adds r0, r3, r2                                   |         r0 = r3 + r2;
    0x000321c4 strh.w r5, [r4, 1]                                |         *((r4 + 1)) = r5;
    0x000321c8 subs r2, r6, r2                                   |         r2 = r6 - r2;
    0x000321ca blx 0x97d4                                        |         fcn_000097d4 ();
    0x000321ce mov r0, r5                                        |         r0 = r5;
    0x000321d0 add sp, 0x34                                      |         
    0x000321d2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_16:
    0x000321d6 cmp sl, r1                                        |         
                                                                 |         if (sl < r1) {
    0x000321d8 blt 0x3229c                                       |             goto label_20;
                                                                 |         }
    0x000321da add.w r2, r3, sl                                  |         r2 = r3 + sl;
    0x000321de ldrb r0, [r2, 2]                                  |         r0 = *((r2 + 2));
    0x000321e0 ldrb r2, [r2, 3]                                  |         r2 = *((r2 + 3));
    0x000321e2 invalid                                           |         
    0x000321e4 movs r2, 0                                        |         r2 = 0;
    0x000321e6 str r2, [sp, 8]                                   |         var_8h = r2;
    0x000321e8 add r2, sl                                        |         r2 += sl;
    0x000321ea cmp r2, ip                                        |         
                                                                 |         if (r2 <= ip) {
    0x000321ec ble 0x32262                                       |             goto label_21;
                                                                 |         }
    0x000321ee blx 0xa230                                        |         fcn_0000a230 ();
    0x000321f2 ldr r2, [pc, 0xec]                                |         
    0x000321f4 add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x000321f8 ldr r1, [pc, 0xe8]                                |         
    0x000321fa movw r3, 0xc6b                                    |         
    0x000321fe movt r3, 1                                        |         r3 = 0x10c6b;
    0x00032202 movs r0, 0xb                                      |         r0 = 0xb;
    0x00032204 add r2, pc                                        |         r2 = 0x644ea;
    0x00032206 str r4, [sp]                                      |         *(sp) = r4;
    0x00032208 add r1, pc                                        |         r1 = 0x644f0;
    0x0003220a blx 0x9f00                                        |         fcn_00009f00 ();
    0x0003220e b 0x3206a                                         |         goto label_4;
                                                                 | label_19:
    0x00032210 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
                                                                 | label_18:
    0x00032212 ldrb.w r2, [r3, sb]                               |         r2 = *((r3 + sb));
    0x00032216 add r2, r6                                        |         r2 += r6;
    0x00032218 b 0x32188                                         |         
                                                                 |     } while (1);
                                                                 | label_13:
    0x0003221a blx 0xa230                                        |     fcn_0000a230 ();
    0x0003221e ldr r2, [pc, 0xc8]                                |     
    0x00032220 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00032224 ldr r1, [pc, 0xc4]                                |     
    0x00032226 movw r3, 0xc5e                                    |     
    0x0003222a movt r3, 1                                        |     r3 = 0x10c5e;
    0x0003222e movs r0, 0xb                                      |     r0 = 0xb;
    0x00032230 add r2, pc                                        |     r2 = 0x6451e;
    0x00032232 str r4, [sp]                                      |     *(sp) = r4;
    0x00032234 add r1, pc                                        |     r1 = 0x64524;
    0x00032236 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0003223a b 0x3206a                                         |     goto label_4;
                                                                 | label_9:
    0x0003223c mov r6, ip                                        |     r6 = ip;
    0x0003223e b 0x32180                                         |     goto label_5;
                                                                 | label_15:
    0x00032240 blx 0xa230                                        |     fcn_0000a230 ();
    0x00032244 ldr r2, [pc, 0xa8]                                |     
    0x00032246 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x0003224a ldr r1, [pc, 0xa8]                                |     
    0x0003224c movw r3, 0xc66                                    |     
    0x00032250 movt r3, 1                                        |     r3 = 0x10c66;
    0x00032254 movs r0, 0xb                                      |     r0 = 0xb;
    0x00032256 add r2, pc                                        |     r2 = 0x6454a;
    0x00032258 str r4, [sp]                                      |     *(sp) = r4;
    0x0003225a add r1, pc                                        |     r1 = 0x64554;
    0x0003225c blx 0x9f00                                        |     fcn_00009f00 ();
    0x00032260 b 0x3206a                                         |     goto label_4;
                                                                 | label_21:
    0x00032262 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00032264 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00032266 adds r0, r2, r1                                   |     r0 = r2 + r1;
    0x00032268 add fp, r2                                        |     
    0x0003226a add r0, r3                                        |     r0 += r3;
    0x0003226c sub.w r2, sl, r1                                  |     r2 = sl - r1;
    0x00032270 add r1, r3                                        |     r1 += r3;
    0x00032272 blx 0x9928                                        |     fcn_00009928 ();
    0x00032276 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00032278 b 0x320d2                                         |     goto label_6;
                                                                 | label_17:
    0x0003227a blx 0xa230                                        |     fcn_0000a230 ();
    0x0003227e ldr r2, [pc, 0x78]                                |     
    0x00032280 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00032284 ldr r1, [pc, 0x74]                                |     
    0x00032286 movw r3, 0xc6f                                    |     
    0x0003228a movt r3, 1                                        |     r3 = 0x10c6f;
    0x0003228e movs r0, 0xb                                      |     r0 = 0xb;
    0x00032290 add r2, pc                                        |     r2 = 0x6458e;
    0x00032292 str r4, [sp]                                      |     *(sp) = r4;
    0x00032294 add r1, pc                                        |     r1 = 0x64594;
    0x00032296 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0003229a b 0x3206a                                         |     goto label_4;
                                                                 | label_20:
    0x0003229c blx 0xa230                                        |     fcn_0000a230 ();
    0x000322a0 ldr r2, [pc, 0x5c]                                |     
    0x000322a2 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x000322a6 ldr r1, [pc, 0x5c]                                |     
    0x000322a8 movw r3, 0xc69                                    |     
    0x000322ac movt r3, 1                                        |     r3 = 0x10c69;
    0x000322b0 movs r0, 0xb                                      |     r0 = 0xb;
    0x000322b2 add r2, pc                                        |     r2 = 0x645b6;
    0x000322b4 str r4, [sp]                                      |     *(sp) = r4;
    0x000322b6 add r1, pc                                        |     r1 = 0x645c0;
    0x000322b8 blx 0x9f00                                        |     fcn_00009f00 ();
    0x000322bc b 0x3206a                                         |     goto label_4;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x32308 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00032308 ()                                      | void fcn_00032308 (int16_t arg_60h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00032308 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003230c sub sp, 0x3c                                      |     
    0x0003230e mov r8, r3                                        |     r8 = r3;
    0x00032310 ldr.w sb, [r0, 0xec]                              |     sb = *(arg_60hxec);
    0x00032314 ldr r3, [sp, 0x60]                                |     r3 = *(arg_60h);
    0x00032316 ldr.w sl, [r0]                                    |     sl = *(r0);
    0x0003231a str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0003231c str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0003231e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00032322 beq.w 0x32510                                     |         goto label_17;
                                                                 |     }
    0x00032326 ldrb.w r3, [r0, 0xd0]                             |     r3 = *(arg_60hxd0);
    0x0003232a mov r7, r0                                        |     r7 = r0;
    0x0003232c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0003232e beq.w 0x32510                                     |         goto label_17;
                                                                 |     }
    0x00032332 mov r5, r2                                        |     r5 = r2;
    0x00032334 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00032336 beq.w 0x3259a                                     |         goto label_20;
                                                                 |     }
    0x0003233a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003233c ldr r6, [r3]                                      |     r6 = *(r3);
    0x0003233e cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00032342 beq.w 0x325bc                                     |         goto label_21;
                                                                 |     }
    0x00032346 ldr.w ip, [r8]                                    |     ip = *(r8);
    0x0003234a cmp ip, r6                                        |     
                                                                 |     if (ip != r6) {
    0x0003234c bne.w 0x3251e                                     |         goto label_22;
                                                                 |     }
    0x00032350 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00032352 add.w r3, r3, ip, lsl 3                           |     r3 += (ip << 3);
    0x00032356 add.w fp, r3, 0x25                                |     
    0x0003235a movs r3, 0                                        |     r3 = 0;
    0x0003235c cmp ip, r3                                        |     
                                                                 |     if (ip <= r3) {
    0x0003235e ble 0x323ac                                       |         goto label_9;
                                                                 |     }
                                                                 | label_8:
    0x00032360 movs r4, 0                                        |     r4 = 0;
    0x00032362 strd r7, r5, [sp, 8]                              |     __asm ("strd r7, r5, [var_8h]");
    0x00032366 str r6, [sp, 4]                                   |     var_4h = r6;
    0x00032368 mov r7, fp                                        |     r7 = fp;
    0x0003236a mov r6, r4                                        |     r6 = r4;
    0x0003236c mov fp, r8                                        |     
    0x0003236e mov r4, r8                                        |     r4 = r8;
    0x00032370 mov r5, ip                                        |     r5 = ip;
    0x00032372 mov r8, r3                                        |     r8 = r3;
                                                                 |     do {
    0x00032374 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x00032376 mov.w ip, 1                                       |         
                                                                 |         if (r0 != 0) {
    0x0003237a cbz r0, 0x3238a                                   |             
    0x0003237c blx 0x9e8c                                        |             r0 = fcn_00009e8c ();
    0x00032380 bic ip, r0, 0xc0000000                            |             ip = BIT_MASK (r0, 0xc0000000);
    0x00032384 movs r0, 0                                        |             r0 = 0;
    0x00032386 add.w ip, ip, 1                                   |             
                                                                 |         }
    0x0003238a adds.w ip, ip, r7                                 |         
    0x0003238e add.w r6, r6, 1                                   |         r6++;
    0x00032392 adc.w r8, r0, r8                                  |         __asm ("adc.w r8, r0, r8");
    0x00032396 cmp r6, r5                                        |         
    0x00032398 mov r7, ip                                        |         r7 = ip;
    0x0003239a add.w r4, r4, 0x10                                |         r4 += 0x10;
    0x0003239e bne 0x32374                                       |         
                                                                 |     } while (r6 != r5);
    0x000323a0 ldr r6, [sp, 4]                                   |     r6 = var_4h;
    0x000323a2 mov r3, r8                                        |     r3 = r8;
    0x000323a4 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x000323a6 mov r8, fp                                        |     r8 = fp;
    0x000323a8 ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x000323aa mov fp, ip                                        |     
                                                                 | label_9:
    0x000323ac cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000323b0 beq.w 0x3258e                                     |         goto label_23;
                                                                 |     }
    0x000323b4 mov r2, fp                                        |     r2 = fp;
    0x000323b6 mov r0, sl                                        |     r0 = sl;
    0x000323b8 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x000323bc mov r4, r0                                        |     r4 = r0;
                                                                 | label_6:
    0x000323be cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000323c0 beq.w 0x32510                                     |         goto label_17;
                                                                 |     }
    0x000323c4 mov r2, fp                                        |     r2 = fp;
    0x000323c6 movs r1, 0                                        |     r1 = 0;
    0x000323c8 mov r0, r4                                        |     r0 = r4;
    0x000323ca blx 0x97d4                                        |     fcn_000097d4 ();
    0x000323ce ldr.w r3, [sb, 0x30]                              |     r3 = *((sb + 0x30));
    0x000323d2 str.w sb, [r4]                                    |     __asm ("str.w sb, [r4]");
    0x000323d6 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x000323d8 add.w r3, r4, r6, lsl 3                           |     r3 = r4 + (r6 << 3);
    0x000323dc adds r3, 0x24                                     |     r3 += 0x24;
    0x000323de str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000323e0 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x000323e2 ldrb.w r3, [r7, 0xd0]                             |     r3 = *((r7 + 0xd0));
    0x000323e6 cmp r3, 3                                         |     
    0x000323e8 it ne                                             |     
                                                                 |     if (r3 != 3) {
    0x000323ea cmpne r3, 1                                       |         __asm ("cmpne r3, 1");
                                                                 |     }
                                                                 |     if (r3 > 3) {
    0x000323ec bhi.w 0x3267c                                     |         goto label_24;
                                                                 |     }
                                                                 | label_16:
    0x000323f0 ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x000323f4 ldrd r1, r2, [r5]                                 |     __asm ("ldrd r1, r2, [r5]");
    0x000323f8 mov r0, fp                                        |     r0 = fp;
    0x000323fa blx 0x9e2c                                        |     fcn_00009e2c ();
    0x000323fe ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00032400 movs r3, 0                                        |     r3 = 0;
    0x00032402 mov r0, fp                                        |     r0 = fp;
    0x00032404 strb.w r3, [fp, r2]                               |     *((fp + r2)) = r3;
    0x00032408 bl 0xa4e0                                         |     fcn_0000a4e0 (r0);
    0x0003240c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003240e ldr.w ip, [r5, 4]                                 |     ip = *((r5 + 4));
    0x00032412 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x00032414 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032416 beq.w 0x32660                                     |         goto label_25;
                                                                 |     }
    0x0003241a cmp r6, 0                                         |     
    0x0003241c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r6 <= 0) {
    0x00032420 ble 0x324e6                                       |         goto label_10;
                                                                 |     }
    0x00032422 ldrsh.w r5, [sb, 0x22]                            |     r5 = *((sb + 0x22));
    0x00032426 lsls r2, r6, 1                                    |     r2 = r6 << 1;
    0x00032428 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0003242a str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x0003242c add.w r2, r4, 0x24                                |     r2 = r4 + 0x24;
    0x00032430 cmp r5, 0                                         |     
    0x00032432 mov fp, r2                                        |     
    0x00032434 ldr r1, [r1, 0xc]                                 |     r1 = *((r1 + 0xc));
    0x00032436 str r2, [sp, 0x24]                                |     var_24h = r2;
                                                                 |     if (r5 <= 0) {
    0x00032438 ble 0x324ba                                       |         goto label_19;
                                                                 |     }
    0x0003243a ldr.w lr, [pc, 0x294]                             |     
    0x0003243e mov r0, r3                                        |     r0 = r3;
    0x00032440 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032442 mov r2, r0                                        |     r2 = r0;
    0x00032444 ldr.w r6, [sb, 4]                                 |     r6 = *((sb + 4));
    0x00032448 str.w sb, [sp, 0x34]                              |     __asm ("str.w sb, [var_34h]");
    0x0003244c add lr, pc                                        |     lr = 0x64b22;
    0x0003244e mov sb, r4                                        |     sb = r4;
    0x00032450 mov r4, r7                                        |     r4 = r7;
    0x00032452 adds r3, 0xc                                      |     r3 += 0xc;
    0x00032454 str.w ip, [sp, 0x30]                              |     __asm ("str.w ip, [var_30h]");
    0x00032458 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003245a str.w fp, [sp, 0x14]                              |     __asm ("str.w fp, [var_14h]");
                                                                 | label_3:
    0x0003245e mov fp, sl                                        |     
    0x00032460 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00032462 mov sl, sb                                        |     sl = sb;
    0x00032464 mov r2, r1                                        |     r2 = r1;
    0x00032466 movs r3, 0                                        |     r3 = 0;
    0x00032468 add.w ip, r1, -1                                  |     
    0x0003246c str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003246e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00032470 str.w ip, [sp, 0xc]                               |     __asm ("str.w ip, [var_ch]");
                                                                 | label_0:
    0x00032474 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00032476 ldr.w sb, [sp, 0xc]                               |     sb = var_ch;
    0x0003247a ldr.w r7, [r6, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r7 = *((r6 + offset_0));
    0x0003247e subs r7, 1                                        |     r7--;
                                                                 |     do {
                                                                 | label_2:
    0x00032480 ldrb r3, [r7, 1]!                                 |         r3 = *((r7 += 1));
    0x00032484 ldrb r1, [sb, 1]!                                 |         r1 = *((sb += 1));
    0x00032488 add.w ip, lr, r3                                  |         
    0x0003248c cmp r3, r1                                        |         
    0x0003248e add.w r0, lr, r1                                  |         r0 = lr + r1;
                                                                 |         if (r3 == r1) {
    0x00032492 beq 0x3253c                                       |             goto label_26;
                                                                 |         }
    0x00032494 ldrb.w r3, [ip, 0x140]                            |         r3 = *((ip + 0x140));
    0x00032498 ldrb.w r1, [r0, 0x140]                            |         r1 = *((r0 + 0x140));
    0x0003249c cmp r3, r1                                        |         
    0x0003249e beq 0x32480                                       |         
                                                                 |     } while (r3 == r1);
    0x000324a0 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000324a2 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x000324a4 adds r3, 1                                        |     r3++;
    0x000324a6 cmp r5, r3                                        |     
    0x000324a8 add.w r1, r1, 3                                   |     r1 += 3;
    0x000324ac str r3, [sp, 8]                                   |     var_8h = r3;
    0x000324ae str r1, [sp, 4]                                   |     var_4h = r1;
                                                                 |     if (r5 != r3) {
    0x000324b0 bne 0x32474                                       |         goto label_0;
                                                                 |     }
    0x000324b2 mov r7, r4                                        |     r7 = r4;
    0x000324b4 mov r1, r2                                        |     r1 = r2;
    0x000324b6 mov r4, sl                                        |     r4 = sl;
    0x000324b8 mov sl, fp                                        |     sl = fp;
                                                                 | label_19:
    0x000324ba mov r2, r1                                        |     r2 = r1;
    0x000324bc ldr r1, [pc, 0x214]                               |     
    0x000324be mov r0, r7                                        |     r0 = r7;
    0x000324c0 add r1, pc                                        |     r1 = 0x64b98;
    0x000324c2 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x000324c6 mov r1, r4                                        |     r1 = r4;
    0x000324c8 mov r0, sl                                        |     r0 = sl;
    0x000324ca bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
                                                                 |     do {
    0x000324ce ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x000324d0 mov r0, sl                                        |         r0 = sl;
    0x000324d2 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 | label_7:
    0x000324d6 cmp.w r8, 0                                       |         
                                                                 |         if (r8 != 0) {
    0x000324da bne 0x3252e                                       |             goto label_18;
                                                                 |         }
                                                                 | label_1:
    0x000324dc add sp, 0x3c                                      |         
    0x000324de pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_11:
    0x000324e2 ldrd r4, r8, [sp, 0xc]                            |         __asm ("ldrd r4, r8, [var_ch]");
                                                                 | label_10:
    0x000324e6 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000324e8 mov r2, r4                                        |         r2 = r4;
    0x000324ea ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x000324ec strb r3, [r4, 0x19]                               |         *((r4 + 0x19)) = r3;
    0x000324ee asrs r3, r3, 8                                    |         r3 >>= 8;
    0x000324f0 strb r3, [r4, 0x1a]                               |         *((r4 + 0x1a)) = r3;
    0x000324f2 movs r3, 0                                        |         r3 = 0;
    0x000324f4 strb r3, [r4, 0x18]                               |         *((r4 + 0x18)) = r3;
    0x000324f6 ldr.w r0, [sb, 0x3c]                              |         r0 = *((sb + 0x3c));
    0x000324fa adds r0, 0x38                                     |         r0 += 0x38;
    0x000324fc bl 0x147a8                                        |         r0 = fcn_000147a8 (r0, r1, r2, r3, r4);
    0x00032500 cmp r0, r4                                        |         
                                                                 |         if (r0 == r4) {
    0x00032502 beq.w 0x32694                                     |             goto label_27;
                                                                 |         }
                                                                 |         if (r0 != 0) {
    0x00032506 cbz r0, 0x3250c                                   |             
    0x00032508 str r0, [r4, 0xc]                                 |             *((r4 + 0xc)) = r0;
    0x0003250a str r4, [r0, 0x10]                                |             *((r0 + 0x10)) = r4;
                                                                 |         }
    0x0003250c str.w r4, [sb, 0x30]                              |         __asm ("str.w r4, [sb, 0x30]");
                                                                 | label_17:
    0x00032510 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00032512 cmp r3, 0                                         |         
    0x00032514 bne 0x324ce                                       |         
                                                                 |     } while (r3 != 0);
    0x00032516 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0003251a beq 0x324dc                                       |         goto label_1;
                                                                 |     }
    0x0003251c b 0x3252e                                         |     goto label_18;
                                                                 | label_22:
    0x0003251e ldr r1, [pc, 0x1b8]                               |     
    0x00032520 add r1, pc                                        |     r1 = 0x64bfe;
    0x00032522 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00032526 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00032528 mov r0, sl                                        |     r0 = sl;
    0x0003252a bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
                                                                 | label_18:
    0x0003252e mov r1, r8                                        |     r1 = r8;
    0x00032530 mov r0, sl                                        |     r0 = sl;
    0x00032532 add sp, 0x3c                                      |     
    0x00032534 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00032538 b.w 0x16c98                                       |     void (*0x16c98)() ();
                                                                 | label_26:
    0x0003253c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003253e bne 0x32480                                       |         goto label_2;
                                                                 |     }
    0x00032540 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00032542 mov r1, r2                                        |     r1 = r2;
    0x00032544 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00032546 mov sb, sl                                        |     sb = sl;
    0x00032548 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003254a mov sl, fp                                        |     sl = fp;
    0x0003254c cmp r0, r5                                        |     
    0x0003254e str.w r0, [r3, r2, lsl 2]                         |     __asm ("str.w r0, [r3, r2, lsl 2]");
                                                                 |     if (r0 >= r5) {
    0x00032552 bge.w 0x326c8                                     |         goto label_28;
                                                                 |     }
    0x00032556 ldrb.w r3, [r4, 0xd0]                             |     r3 = *((r4 + 0xd0));
    0x0003255a cmp r3, 1                                         |     
    0x0003255c bhi 0x32574                                       |     
                                                                 |     while (1) {
                                                                 | label_4:
    0x0003255e ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00032560 adds r2, 2                                        |         r2 += 2;
    0x00032562 adds r3, 8                                        |         r3 += 8;
    0x00032564 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x00032566 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00032568 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0003256a beq 0x325ca                                       |             goto label_29;
                                                                 |         }
    0x0003256c ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0003256e ldr.w r1, [r3, r2, lsl 3]                         |         offset_1 = r2 << 3;
                                                                 |         r1 = *((r3 + offset_1));
    0x00032572 b 0x3245e                                         |         goto label_3;
    0x00032574 ldr.w r0, [r4, 0x10c]                             |         r0 = *((r4 + 0x10c));
                                                                 |         if (r0 != 0) {
    0x00032578 cbnz r0, 0x32582                                  |             goto label_30;
                                                                 |         }
    0x0003257a b 0x3255e                                         |         
                                                                 |     }
                                                                 | label_5:
    0x0003257c ldr r0, [r0, 0xc]                                 |     r0 = *((r0 + 0xc));
    0x0003257e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00032580 beq 0x3255e                                       |         goto label_4;
                                                                 |     }
                                                                 | label_30:
    0x00032582 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00032584 cmp r3, r1                                        |     
                                                                 |     if (r3 != r1) {
    0x00032586 bne 0x3257c                                       |         goto label_5;
                                                                 |     }
    0x00032588 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003258a str r3, [r0]                                      |     *(r0) = r3;
    0x0003258c b 0x3255e                                         |     goto label_4;
                                                                 | label_23:
    0x0003258e mov r1, r3                                        |     r1 = r3;
    0x00032590 mov r0, fp                                        |     r0 = fp;
    0x00032592 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x00032596 mov r4, r0                                        |     r4 = r0;
    0x00032598 b 0x323be                                         |     goto label_6;
                                                                 | label_20:
    0x0003259a ldrsh.w r3, [sb, 0x22]                            |     r3 = *((sb + 0x22));
    0x0003259e subs r3, 1                                        |     r3--;
                                                                 |     if (r3 < 1) {
    0x000325a0 bmi 0x324d6                                       |         goto label_7;
                                                                 |     }
    0x000325a2 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000325a6 beq 0x32688                                       |         goto label_31;
                                                                 |     }
    0x000325a8 ldr.w r6, [r8]                                    |     r6 = *(r8);
    0x000325ac cmp r6, 1                                         |     
                                                                 |     if (r6 != 1) {
    0x000325ae bne 0x326b0                                       |         goto label_32;
                                                                 |     }
    0x000325b0 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000325b2 mov ip, r6                                        |     
    0x000325b4 add.w fp, r3, 0x2d                                |     
    0x000325b8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000325ba b 0x32360                                         |     goto label_8;
                                                                 | label_21:
    0x000325bc ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000325be add.w r3, r3, r6, lsl 3                           |     r3 += (r6 << 3);
    0x000325c2 add.w fp, r3, 0x25                                |     
    0x000325c6 mov r3, r8                                        |     r3 = r8;
    0x000325c8 b 0x323ac                                         |     goto label_9;
                                                                 | label_29:
    0x000325ca mov r7, r4                                        |     r7 = r4;
    0x000325cc ldr.w ip, [sp, 0x30]                              |     ip = var_30h;
    0x000325d0 mov r4, sb                                        |     r4 = sb;
    0x000325d2 ldr.w sb, [sp, 0x34]                              |     sb = var_34h;
    0x000325d6 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000325da beq 0x324e6                                       |         goto label_10;
                                                                 |     }
                                                                 | label_15:
    0x000325dc ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000325de add.w r5, ip, 1                                   |     r5 = ip + 1;
    0x000325e2 movs r6, 0                                        |     r6 = 0;
    0x000325e4 strd r4, r8, [sp, 0xc]                            |     __asm ("strd r4, r8, [var_ch]");
    0x000325e8 add r3, r5                                        |     r3 += r5;
    0x000325ea mov r5, r3                                        |     r5 = r3;
    0x000325ec add.w r3, r8, 0xc                                 |     r3 = r8 + 0xc;
    0x000325f0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000325f2 add.w r3, r4, 0x28                                |     r3 = r4 + 0x28;
    0x000325f6 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000325f8 b 0x32616                                         |     goto label_33;
                                                                 | label_12:
    0x000325fa mov r0, r5                                        |     r0 = r5;
    0x000325fc mov r1, r8                                        |     r1 = r8;
    0x000325fe blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00032602 mov.w r3, 0                                       |     r3 = 0;
    0x00032606 adds r6, 2                                        |     r6 += 2;
    0x00032608 strb.w r3, [fp]                                   |     *(fp) = r3;
    0x0003260c add r5, r4                                        |     r5 += r4;
    0x0003260e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00032610 cmp r6, r3                                        |     
                                                                 |     if (r6 == r3) {
    0x00032612 beq.w 0x324e2                                     |         goto label_11;
                                                                 |     }
                                                                 | label_33:
    0x00032616 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00032618 ldr.w r8, [r3, r6, lsl 3]                         |     offset_2 = r6 << 3;
                                                                 |     r8 = *((r3 + offset_2));
    0x0003261c cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00032620 beq 0x32658                                       |         goto label_34;
                                                                 |     }
    0x00032622 mov r0, r8                                        |     r0 = r8;
    0x00032624 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00032628 bic r2, r0, 0xc0000000                            |     r2 = BIT_MASK (r0, 0xc0000000);
    0x0003262c add.w fp, r5, r2                                  |     
    0x00032630 adds r4, r2, 1                                    |     r4 = r2 + 1;
                                                                 | label_14:
    0x00032632 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00032634 str.w r5, [r3, r6, lsl 2]                         |     __asm ("str.w r5, [r3, r6, lsl 2]");
    0x00032638 ldrb.w r0, [r7, 0xd0]                             |     r0 = *((r7 + 0xd0));
    0x0003263c cmp r0, 1                                         |     
                                                                 |     if (r0 < 1) {
    0x0003263e bls 0x325fa                                       |         goto label_12;
                                                                 |     }
    0x00032640 ldr.w r0, [r7, 0x10c]                             |     r0 = *((r7 + 0x10c));
                                                                 |     if (r0 != 0) {
    0x00032644 cbnz r0, 0x3264e                                  |         goto label_35;
                                                                 |     }
    0x00032646 b 0x325fa                                         |     goto label_12;
                                                                 | label_13:
    0x00032648 ldr r0, [r0, 0xc]                                 |     r0 = *((r0 + 0xc));
    0x0003264a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003264c beq 0x325fa                                       |         goto label_12;
                                                                 |     }
                                                                 | label_35:
    0x0003264e ldr r3, [r0]                                      |     r3 = *(r0);
    0x00032650 cmp r8, r3                                        |     
                                                                 |     if (r8 != r3) {
    0x00032652 bne 0x32648                                       |         goto label_13;
                                                                 |     }
    0x00032654 str r5, [r0]                                      |     *(r0) = r5;
    0x00032656 b 0x325fa                                         |     goto label_12;
                                                                 | label_34:
    0x00032658 mov fp, r5                                        |     
    0x0003265a movs r4, 1                                        |     r4 = 1;
    0x0003265c mov r2, r8                                        |     r2 = r8;
    0x0003265e b 0x32632                                         |     goto label_14;
                                                                 | label_25:
    0x00032660 ldrsh.w r3, [sb, 0x22]                            |     r3 = *((sb + 0x22));
    0x00032664 subs r3, 1                                        |     r3--;
    0x00032666 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x00032668 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0003266c beq.w 0x324e6                                     |         goto label_10;
                                                                 |     }
    0x00032670 cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x00032672 ble.w 0x324e6                                     |         goto label_10;
                                                                 |     }
    0x00032676 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x00032678 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0003267a b 0x325dc                                         |     goto label_15;
                                                                 | label_24:
    0x0003267c ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x0003267e mov r2, r5                                        |     r2 = r5;
    0x00032680 mov r0, r7                                        |     r0 = r7;
    0x00032682 bl 0x1ee7c                                        |     fcn_0001ee7c (r0, r1, r2);
    0x00032686 b 0x323f0                                         |     goto label_16;
                                                                 | label_31:
    0x00032688 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0003268a movs r6, 1                                        |     r6 = 1;
    0x0003268c add.w fp, r3, 0x2d                                |     
    0x00032690 mov r3, r8                                        |     r3 = r8;
    0x00032692 b 0x323ac                                         |     goto label_9;
                                                                 | label_27:
    0x00032694 ldrb.w r3, [sl, 0x57]                             |     r3 = *((sl + 0x57));
                                                                 |     if (r3 == 0) {
    0x00032698 cbnz r3, 0x326a6                                  |         
    0x0003269a ldrb.w r3, [sl, 0x58]                             |         r3 = *((sl + 0x58));
                                                                 |         if (r3 != 0) {
    0x0003269e cbnz r3, 0x326a6                                  |             goto label_36;
                                                                 |         }
    0x000326a0 mov r0, sl                                        |         r0 = sl;
    0x000326a2 bl 0x1d600                                        |         fcn_0001d600 (r0);
                                                                 |     }
                                                                 | label_36:
    0x000326a6 mov r1, r4                                        |     r1 = r4;
    0x000326a8 mov r0, sl                                        |     r0 = sl;
    0x000326aa bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x000326ae b 0x32510                                         |     goto label_17;
                                                                 | label_32:
    0x000326b0 ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x000326b4 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x000326b8 ldr r1, [pc, 0x20]                                |     
    0x000326ba ldr.w r2, [r2, r3, lsl 2]                         |     offset_3 = r3 << 2;
                                                                 |     r2 = *((r2 + offset_3));
    0x000326be mov r3, r5                                        |     r3 = r5;
    0x000326c0 add r1, pc                                        |     r1 = 0x64da0;
    0x000326c2 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x000326c6 b 0x3252e                                         |     goto label_18;
                                                                 | label_28:
    0x000326c8 mov r7, r4                                        |     r7 = r4;
    0x000326ca mov r4, sb                                        |     r4 = sb;
    0x000326cc b 0x324ba                                         |     goto label_19;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x326e0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000326e0 ()                                      | void fcn_000326e0 (int16_t arg_60h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int32_t var_18h_2;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000326e0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000326e4 mov r8, r2                                        |     r8 = r2;
    0x000326e6 ldr r2, [pc, 0x2dc]                               |     
    0x000326e8 mov r7, r3                                        |     r7 = r3;
    0x000326ea sub sp, 0x3c                                      |     
    0x000326ec mov r4, r0                                        |     r4 = r0;
    0x000326ee ldr r3, [pc, 0x2d8]                               |     r3 = *(0x329ca);
    0x000326f0 mov r6, r1                                        |     r6 = r1;
    0x000326f2 add r2, pc                                        |     r2 = 0x650bc;
    0x000326f4 ldr.w sb, [sp, 0x60]                              |     sb = *(arg_60h);
    0x000326f8 ldrd sl, fp, [r1, 0x2c]                           |     __asm ("ldrd sl, fp, [r1, 0x2c]");
    0x000326fc ldr r3, [r2, r3]                                  |     
    0x000326fe movs r2, 0                                        |     r2 = 0;
    0x00032700 ldr r3, [r3]                                      |     r3 = *(0x650bc);
    0x00032702 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00032704 mov.w r3, 0                                       |     r3 = 0;
    0x00032708 ldr.w r3, [r0, 0x190]                             |     r3 = *((r0 + 0x190));
    0x0003270c str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 |     if (r3 != 0) {
    0x0003270e cbnz r3, 0x32716                                  |         goto label_10;
                                                                 |     }
    0x00032710 b 0x3274c                                         |     goto label_11;
                                                                 |     do {
    0x00032712 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
                                                                 |         if (r3 == 0) {
    0x00032714 cbz r3, 0x3274c                                   |             goto label_11;
                                                                 |         }
                                                                 | label_10:
    0x00032716 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x00032718 cmp r2, r6                                        |         
    0x0003271a bne 0x32712                                       |         
                                                                 |     } while (r2 != r6);
    0x0003271c ldr r1, [pc, 0x2ac]                               |     
    0x0003271e movs r7, 6                                        |     r7 = 6;
    0x00032720 ldr r2, [r6]                                      |     r2 = *(r6);
    0x00032722 mov r0, r4                                        |     r0 = r4;
    0x00032724 add r1, pc                                        |     r1 = 0x650f4;
    0x00032726 bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x0003272a str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
                                                                 | label_4:
    0x0003272e ldr r2, [pc, 0x2a0]                               |     
    0x00032730 ldr r3, [pc, 0x294]                               |     r3 = *(0x329c8);
    0x00032732 add r2, pc                                        |     r2 = 0x65108;
    0x00032734 ldr r3, [r2, r3]                                  |     r3 = *(0x65108);
    0x00032736 ldr r2, [r3]                                      |     r2 = *(0x65108);
    0x00032738 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0003273a eors r2, r3                                       |     r2 ^= r3;
    0x0003273c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00032740 bne.w 0x329c0                                     |         goto label_12;
                                                                 |     }
    0x00032744 mov r0, r7                                        |     r0 = r7;
    0x00032746 add sp, 0x3c                                      |     
    0x00032748 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_11:
    0x0003274c ldr r1, [r6]                                      |     r1 = *(r6);
    0x0003274e mov r0, r4                                        |     r0 = r4;
    0x00032750 bl 0x1e948                                        |     fcn_0001e948 (r0, r1);
    0x00032754 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x00032756 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00032758 beq.w 0x32984                                     |         goto label_13;
                                                                 |     }
    0x0003275c movs r0, 0x1c                                     |     r0 = 0x1c;
    0x0003275e movs r1, 0                                        |     r1 = 0;
    0x00032760 bl 0x18ae0                                        |     r0 = fcn_00018ae0 (r0);
    0x00032764 mov r5, r0                                        |     r5 = r0;
    0x00032766 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00032768 beq.w 0x3296a                                     |         goto label_14;
                                                                 |     }
    0x0003276c movs r3, 1                                        |     r3 = 1;
    0x0003276e strd r4, r8, [r0]                                 |     __asm ("strd r4, r8, [r0]");
    0x00032772 strb r3, [r0, 0x11]                               |     *((r0 + 0x11)) = r3;
    0x00032774 ldr r0, [r6, 0x3c]                                |     r0 = *((r6 + 0x3c));
    0x00032776 ldr r2, [r4, 0x10]                                |     r2 = *((r4 + 0x10));
    0x00032778 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003277a beq.w 0x329ba                                     |         goto label_15;
                                                                 |     }
    0x0003277e ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00032780 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x00032782 beq 0x32794                                       |         goto label_9;
                                                                 |     }
    0x00032784 add.w r3, r2, 0x10                                |     r3 = r2 + 0x10;
                                                                 |     do {
    0x00032788 mov r2, r3                                        |         r2 = r3;
    0x0003278a adds r3, 0x10                                     |         r3 += 0x10;
    0x0003278c ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x00032790 cmp r0, r1                                        |         
    0x00032792 bne 0x32788                                       |         
                                                                 |     } while (r0 != r1);
                                                                 | label_9:
    0x00032794 ldr r0, [r2]                                      |     r0 = *(r2);
    0x00032796 mov r3, fp                                        |     r3 = fp;
    0x00032798 ldr r1, [r6, 0x30]                                |     r1 = *((r6 + 0x30));
    0x0003279a mov r2, sl                                        |     r2 = sl;
    0x0003279c str r5, [sp, 0x24]                                |     var_24h = r5;
    0x0003279e str r0, [r1, 4]                                   |     *((r1 + 4)) = r0;
    0x000327a0 movs r0, 0                                        |     r0 = 0;
    0x000327a2 ldr.w r1, [r4, 0x190]                             |     r1 = *((r4 + 0x190));
    0x000327a6 str r0, [sp, 0x30]                                |     x = r0;
    0x000327a8 mov r0, r4                                        |     r0 = r4;
    0x000327aa str r6, [sp, 0x28]                                |     var_28h = r6;
    0x000327ac str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x000327ae add r1, sp, 0x24                                  |     r1 += var_24h;
    0x000327b0 str.w r1, [r4, 0x190]                             |     __asm ("str.w r1, aav.0x000000ff");
    0x000327b4 add r1, sp, 0x20                                  |     r1 += var_20h;
    0x000327b6 str r1, [sp, 4]                                   |     var_4h = r1;
    0x000327b8 add.w r1, r5, 8                                   |     r1 = r5 + 8;
    0x000327bc str r1, [sp]                                      |     *(sp) = r1;
    0x000327be ldr.w r1, [r8, 0xc]                               |     r1 = *((r8 + 0xc));
    0x000327c2 blx r7                                            |     uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000327c4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000327c6 cmp r0, 7                                         |     
    0x000327c8 mov r7, r0                                        |     r7 = r0;
    0x000327ca str.w r3, [r4, 0x190]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 |     if (r0 == 7) {
    0x000327ce beq.w 0x3291c                                     |         goto label_16;
                                                                 |     }
    0x000327d2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000327d4 bne.w 0x32922                                     |         goto label_6;
                                                                 |     }
    0x000327d8 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000327da cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000327dc beq.w 0x32942                                     |         goto label_8;
                                                                 |     }
    0x000327e0 str r0, [r3]                                      |     *(r3) = r0;
    0x000327e2 str r0, [r3, 4]                                   |     *((r3 + 4)) = r0;
    0x000327e4 str r0, [r3, 8]                                   |     *((r3 + 8)) = r0;
    0x000327e6 ldr.w r3, [r8, 8]                                 |     r3 = *((r8 + 8));
    0x000327ea ldr r0, [sp, 0x30]                                |     r0 = x;
    0x000327ec ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x000327ee ldr.w r1, [r8]                                    |     r1 = *(r8);
    0x000327f2 adds r3, 1                                        |     r3++;
    0x000327f4 str r1, [r2]                                      |     *(r2) = r1;
    0x000327f6 str.w r3, [r8, 8]                                 |     __asm ("str.w r3, [r8, 8]");
    0x000327fa movs r3, 1                                        |     r3 = 1;
    0x000327fc str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x000327fe cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00032800 beq.w 0x329a0                                     |         goto label_17;
                                                                 |     }
    0x00032804 ldr r3, [r6, 0x34]                                |     r3 = *((r6 + 0x34));
    0x00032806 str r3, [r5, 0x18]                                |     *((r5 + 0x18)) = r3;
    0x00032808 str r5, [r6, 0x34]                                |     *((r6 + 0x34)) = r5;
    0x0003280a ldrsh.w r5, [r6, 0x22]                            |     r5 = *((r6 + 0x22));
    0x0003280e cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00032810 ble.w 0x32942                                     |         goto label_8;
                                                                 |     }
    0x00032814 ldr r3, [pc, 0x1bc]                               |     
    0x00032816 mov sl, r7                                        |     sl = r7;
    0x00032818 ldr.w r8, [pc, 0x1bc]                             |     
    0x0003281c mov sb, r7                                        |     sb = r7;
    0x0003281e strd r7, r4, [sp, 0x18]                           |     __asm ("strd r7, r4, [var_18h]");
    0x00032822 mov r4, r6                                        |     r4 = r6;
    0x00032824 add r3, pc                                        |     r3 = 0x651fc;
    0x00032826 mov r6, r7                                        |     r6 = r7;
    0x00032828 add r8, pc                                        |     r8 = 0x65204;
    0x0003282a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0003282c b 0x32852                                         |     
                                                                 |     while (r2 >= r0) {
    0x0003282e ldrb r3, [r3, 4]                                  |         r3 = *((r3 + 4));
    0x00032830 cmp r3, 0xf                                       |         
                                                                 |         if (r3 >= 0xf) {
    0x00032832 bls 0x32840                                       |             
    0x00032834 ldr r2, [sp, 0x14]                                |             r2 = var_14h;
    0x00032836 lsrs r3, r3, 4                                    |             r3 >>= 4;
    0x00032838 subs r3, 1                                        |             r3--;
    0x0003283a ldr.w r3, [r2, r3, lsl 2]                         |             offset_0 = r3 << 2;
                                                                 |             r3 = *((r2 + offset_0));
                                                                 |             if (r3 != 0) {
    0x0003283e cbnz r3, 0x3286c                                  |                 goto label_18;
                                                                 |             }
                                                                 |         }
                                                                 | label_0:
    0x00032840 ldr r3, [r4, 0x1c]                                |         r3 = *((r4 + 0x1c));
    0x00032842 orrs r3, r6                                       |         r3 |= r6;
                                                                 | label_3:
    0x00032844 add.w sl, sl, 1                                   |         sl++;
    0x00032848 add.w sb, sb, 0xc                                 |         sb += 0xc;
    0x0003284c cmp r5, sl                                        |         
    0x0003284e str r3, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r3;
                                                                 |         if (r5 <= sl) {
    0x00032850 ble 0x32952                                       |             goto label_19;
                                                                 |         }
    0x00032852 ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x00032854 add.w r3, r1, sb                                  |         r3 = r1 + sb;
    0x00032858 ldrh r0, [r3, 0xa]                                |         r0 = *((r3 + 0xa));
    0x0003285a lsls r2, r0, 0x1d                                 |         r2 = r0 << 0x1d;
    0x0003285c bpl 0x3282e                                       |         
                                                                 |     }
    0x0003285e ldr.w r7, [r1, sb]                                |     r7 = *((r1 + sb));
    0x00032862 mov r0, r7                                        |     r0 = r7;
    0x00032864 blx 0x9e8c                                        |     fcn_00009e8c ();
    0x00032868 adds r0, 1                                        |     r0++;
    0x0003286a adds r3, r7, r0                                   |     r3 = r7 + r0;
                                                                 | label_18:
    0x0003286c mov r0, r3                                        |     r0 = r3;
    0x0003286e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00032870 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00032874 bics fp, r0, 0xc0000000                           |     __asm ("bics fp, r0, aav.0x000000ff");
                                                                 |     if (r3 == r7) {
    0x00032878 beq 0x32840                                       |         goto label_0;
                                                                 |     }
    0x0003287a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003287c movs r7, 0                                        |     r7 = 0;
    0x0003287e mov r5, r3                                        |     r5 = r3;
    0x00032880 b 0x32892                                         |     goto label_20;
                                                                 | label_1:
    0x00032882 ldrb r2, [r5, -0x1]                               |     r2 = *((r5 - 0x1));
    0x00032886 cmp r2, 0x20                                      |     
                                                                 |     if (r2 == 0x20) {
    0x00032888 beq 0x328a4                                       |         goto label_21;
                                                                 |     }
                                                                 |     do {
                                                                 | label_2:
    0x0003288a adds r7, 1                                        |         r7++;
    0x0003288c adds r5, 1                                        |         r5++;
    0x0003288e cmp r7, fp                                        |         
                                                                 |         if (r7 == fp) {
    0x00032890 beq 0x3294c                                       |             goto label_22;
                                                                 |         }
                                                                 | label_20:
    0x00032892 movs r2, 6                                        |         r2 = 6;
    0x00032894 mov r1, r5                                        |         r1 = r5;
    0x00032896 mov r0, r8                                        |         r0 = r8;
    0x00032898 blx 0x9890                                        |         r0 = fcn_00009890 ();
    0x0003289c cmp r0, 0                                         |         
    0x0003289e bne 0x3288a                                       |         
                                                                 |     } while (r0 != 0);
    0x000328a0 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000328a2 bne 0x32882                                       |         goto label_1;
                                                                 |     }
                                                                 | label_21:
    0x000328a4 ldrb r2, [r5, 6]                                  |     r2 = *((r5 + 6));
    0x000328a6 tst.w r2, 0xdf                                    |     
                                                                 |     if ((r2 & 0xdf) != 0) {
    0x000328aa bne 0x3288a                                       |         goto label_2;
                                                                 |     }
    0x000328ac cmp fp, r7                                        |     
    0x000328ae ldr r3, [sp, 0x10]                                |     r3 = var_10h;
                                                                 |     if (fp <= r7) {
    0x000328b0 ble 0x3294c                                       |         goto label_22;
                                                                 |     }
    0x000328b2 adds r6, r3, r7                                   |     r6 = r3 + r7;
    0x000328b4 ldrb r1, [r6, 6]                                  |     r1 = *((r6 + 6));
    0x000328b6 cmp r1, 0                                         |     
    0x000328b8 ite eq                                            |     
                                                                 |     if (r1 != 0) {
    0x000328ba moveq ip, 6                                       |         
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x000328be mov.w ip, 7                                       |         
                                                                 |     }
    0x000328c2 add.w r1, ip, r7                                  |     r1 = ip + r7;
    0x000328c6 cmp fp, r1                                        |     
    0x000328c8 itttt ge                                          |     
                                                                 |     if (fp < r1) {
    0x000328ca addge r1, r1, -1                                  |         r1 += -1;
                                                                 |     }
                                                                 |     if (fp < r1) {
    0x000328ce addge r0, r7, -1                                  |         r0 = r7 + -1;
                                                                 |     }
                                                                 |     if (fp >= r1) {
    0x000328d2 adds r5, r3, r1                                   |         r5 = r3 + r1;
                                                                 |     }
                                                                 |     if (fp >= r1) {
    0x000328d4 adds r0, r0, r3                                   |         r0 += r3;
                                                                 |     }
                                                                 |     if (r0 < r0) {
    0x000328d6 blt 0x328ec                                       |         goto label_23;
                                                                 |     }
                                                                 |     do {
    0x000328d8 mov r2, r0                                        |         r2 = r0;
    0x000328da ldrb r1, [r5, 1]!                                 |         r1 = *((r5 += 1));
    0x000328de adds r2, 2                                        |         r2 += 2;
    0x000328e0 subs r2, r2, r3                                   |         r2 -= r3;
    0x000328e2 add r2, ip                                        |         r2 += ip;
    0x000328e4 strb r1, [r0, 1]!                                 |         *((r0 += 1)) = r1;
    0x000328e8 cmp fp, r2                                        |         
    0x000328ea bge 0x328d8                                       |         
                                                                 |     } while (fp >= r2);
                                                                 | label_23:
    0x000328ec ldrb r3, [r3, r7]                                 |     r3 = *((r3 + r7));
    0x000328ee cmp r7, 0                                         |     
    0x000328f0 clz r3, r3                                        |     r3 &= r3;
    0x000328f4 lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x000328f8 it eq                                             |     
                                                                 |     if (r7 != 0) {
    0x000328fa moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000328fc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000328fe bne 0x32998                                       |         goto label_24;
                                                                 |     }
                                                                 | label_7:
    0x00032900 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x00032902 mov.w r6, 0x400                                   |     r6 = 0x400;
    0x00032906 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00032908 ldrsh.w r5, [r4, 0x22]                            |     r5 = *((r4 + 0x22));
    0x0003290c add r1, sb                                        |     r1 += sb;
    0x0003290e ldrh r0, [r1, 0xa]                                |     r0 = *((r1 + 0xa));
    0x00032910 orr r3, r3, 2                                     |     r3 |= 2;
    0x00032914 orr r0, r0, 2                                     |     r0 |= 2;
    0x00032918 strh r0, [r1, 0xa]                                |     *((r1 + 0xa)) = r0;
    0x0003291a b 0x32844                                         |     goto label_3;
                                                                 | label_16:
    0x0003291c ldrb.w r3, [r4, 0x57]                             |     r3 = *((r4 + 0x57));
                                                                 |     if (r3 == 0) {
    0x00032920 cbz r3, 0x32988                                   |         goto label_25;
                                                                 |     }
                                                                 | label_6:
    0x00032922 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
                                                                 |     if (r2 == 0) {
    0x00032924 cbz r2, 0x32958                                   |         goto label_26;
                                                                 |     }
    0x00032926 ldr r1, [pc, 0xb4]                                |     
    0x00032928 mov r0, r4                                        |     r0 = r4;
    0x0003292a add r1, pc                                        |     r1 = 0x6530c;
    0x0003292c bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00032930 str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00032934 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00032936 blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_5:
    0x0003293a mov r1, r5                                        |     r1 = r5;
    0x0003293c mov r0, r4                                        |     r0 = r4;
    0x0003293e bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
                                                                 |     do {
                                                                 | label_8:
    0x00032942 ldr r1, [sp, 0xc]                                 |         r1 = var_ch;
    0x00032944 mov r0, r4                                        |         r0 = r4;
    0x00032946 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x0003294a b 0x3272e                                         |         goto label_4;
                                                                 | label_22:
    0x0003294c ldrsh.w r5, [r4, 0x22]                            |         r5 = *((r4 + 0x22));
    0x00032950 b 0x32840                                         |         goto label_0;
                                                                 | label_19:
    0x00032952 ldrd r7, r4, [sp, 0x18]                           |         __asm ("ldrd r7, r4, [var_18h]");
    0x00032956 b 0x32942                                         |         
                                                                 |     } while (1);
                                                                 | label_26:
    0x00032958 ldr r1, [pc, 0x84]                                |     
    0x0003295a mov r0, r4                                        |     r0 = r4;
    0x0003295c ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0003295e add r1, pc                                        |     r1 = 0x65342;
    0x00032960 bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00032964 str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00032968 b 0x3293a                                         |     goto label_5;
                                                                 | label_14:
    0x0003296a ldrb.w r3, [r4, 0x57]                             |     r3 = *((r4 + 0x57));
                                                                 |     if (r3 == 0) {
    0x0003296e cbnz r3, 0x3297c                                  |         
    0x00032970 ldrb.w r3, [r4, 0x58]                             |         r3 = *((r4 + 0x58));
                                                                 |         if (r3 != 0) {
    0x00032974 cbnz r3, 0x3297c                                  |             goto label_27;
                                                                 |         }
    0x00032976 mov r0, r4                                        |         r0 = r4;
    0x00032978 bl 0x1d600                                        |         fcn_0001d600 (r0);
                                                                 |     }
                                                                 | label_27:
    0x0003297c ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0003297e mov r0, r4                                        |     r0 = r4;
    0x00032980 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
                                                                 | label_13:
    0x00032984 movs r7, 7                                        |     r7 = 7;
    0x00032986 b 0x3272e                                         |     goto label_4;
                                                                 | label_25:
    0x00032988 ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x0003298c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003298e bne 0x32922                                       |         goto label_6;
                                                                 |     }
    0x00032990 mov r0, r4                                        |     r0 = r4;
    0x00032992 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x00032996 b 0x32922                                         |     goto label_6;
                                                                 | label_24:
    0x00032998 movs r3, 0                                        |     r3 = 0;
    0x0003299a strb r3, [r6, -0x1]                               |     *((r6 - 0x1)) = r3;
    0x0003299e b 0x32900                                         |     goto label_7;
                                                                 | label_17:
    0x000329a0 ldr r1, [pc, 0x40]                                |     
    0x000329a2 mov r0, r4                                        |     r0 = r4;
    0x000329a4 ldr r2, [r6]                                      |     r2 = *(r6);
    0x000329a6 mov r7, r3                                        |     r7 = r3;
    0x000329a8 add r1, pc                                        |     r1 = 0x65390;
    0x000329aa bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x000329ae str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x000329b2 mov r0, r5                                        |     r0 = r5;
    0x000329b4 bl 0x13fec                                        |     fcn_00013fec (r0);
    0x000329b8 b 0x32942                                         |     goto label_8;
                                                                 | label_15:
    0x000329ba sub.w r2, r2, 0x80000                             |     r2 -= 0x80000;
    0x000329be b 0x32794                                         |     goto label_9;
                                                                 | label_12:
    0x000329c0 blx 0x9b44                                        |     fcn_00009b44 ();
    0x000329c4 b 0x321e4                                         |     return void (*0x321e4)() ();
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x32b2c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.00032b2c ()                                      | void fcn_00032b2c (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_3ah;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00032b2c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00032b30 mov sb, r1                                        |     sb = r1;
    0x00032b32 ldr r1, [pc, 0x31c]                               |     
    0x00032b34 mov r7, r3                                        |     r7 = r3;
    0x00032b36 mov sl, r2                                        |     sl = r2;
    0x00032b38 mov fp, r0                                        |     
    0x00032b3a ldr r3, [pc, 0x318]                               |     r3 = *(0x32e56);
    0x00032b3c add r1, pc                                        |     r1 = 0x65992;
    0x00032b3e vpush {d8, d9}                                    |     __asm ("vpush {d8, d9}");
    0x00032b42 sub sp, 0x5c                                      |     
    0x00032b44 ldr r5, [r2, 4]                                   |     r5 = *((r2 + 4));
    0x00032b46 ldr r3, [r1, r3]                                  |     
    0x00032b48 ldr r3, [r3]                                      |     r3 = *(0x65992);
    0x00032b4a str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00032b4c mov.w r3, 0                                       |     r3 = 0;
    0x00032b50 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00032b52 beq 0x32bd6                                       |         goto label_18;
                                                                 |     }
    0x00032b54 ldrb.w r3, [sb, 1]                                |     r3 = *((sb + 1));
    0x00032b58 cmp r3, 0x7f                                      |     
    0x00032b5a str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     if (r3 > 0x7f) {
    0x00032b5c bhi.w 0x32f54                                     |         goto label_19;
                                                                 |     }
    0x00032b60 ldrb.w r1, [sb]                                   |     r1 = *(sb);
    0x00032b64 movs r6, 2                                        |     r6 = 2;
    0x00032b66 str r1, [sp, 0x20]                                |     var_20h = r1;
                                                                 | label_10:
    0x00032b68 ldr r0, [pc, 0x2ec]                               |     
    0x00032b6a add r0, pc                                        |     r0 = 0x659c6;
    0x00032b6c add r3, r0                                        |     r3 += r0;
    0x00032b6e ldrb.w r3, [r3, 0xcd8]                            |     r3 = *((r3 + 0xcd8));
                                                                 | label_11:
    0x00032b72 add.w r8, r1, r3                                  |     r8 = r1 + r3;
    0x00032b76 adds r5, 0x28                                     |     r5 += 0x28;
                                                                 |     do {
    0x00032b78 cmp fp, r8                                        |         
                                                                 |         if (fp <= r8) {
    0x00032b7a blo 0x32bfa                                       |             goto label_20;
                                                                 |         }
                                                                 | label_0:
    0x00032b7c ldr r3, [pc, 0x2dc]                               |         
    0x00032b7e adds r7, 1                                        |         r7++;
    0x00032b80 vldr d9, [pc, 0x2bc]                              |         __asm ("vldr d9, aav.0x000000ff");
    0x00032b84 adds r5, 0x28                                     |         r5 += 0x28;
    0x00032b86 add r3, pc                                        |         r3 = 0x659e6;
    0x00032b88 str r3, [sp, 0x14]                                |         var_14h = r3;
                                                                 | label_6:
    0x00032b8a ldrh r3, [r5, -0x18]                              |         r3 = *((r5 - 0x18));
    0x00032b8e sub.w r2, r5, 0x28                                |         r2 = r5 - 0x28;
    0x00032b92 ldrb.w r4, [sb, r6]                               |         r4 = *((sb + r6));
    0x00032b96 add.w r0, sb, r6                                  |         r0 = sb + r6;
    0x00032b9a str r2, [sp, 0x10]                                |         var_10h = r2;
    0x00032b9c subs r2, r7, 1                                    |         r2 = r7 - 1;
    0x00032b9e tst.w r3, 0x24                                    |         
    0x00032ba2 str r2, [sp, 0xc]                                 |         var_ch = r2;
    0x00032ba4 str r4, [sp, 0x24]                                |         var_24h = r4;
                                                                 |         if ((r3 & 0x24) == 0) {
    0x00032ba6 beq 0x32c40                                       |             goto label_21;
                                                                 |         }
    0x00032ba8 cmp r4, 9                                         |         
                                                                 |         if (r4 > 9) {
    0x00032baa bhi.w 0x32cb2                                     |             goto label_4;
                                                                 |         }
    0x00032bae cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00032bb0 beq.w 0x32d00                                     |             goto label_3;
                                                                 |         }
    0x00032bb4 cmp r4, 7                                         |         
    0x00032bb6 add.w r0, sb, r8                                  |         r0 = sb + r8;
                                                                 |         if (r4 == 7) {
    0x00032bba beq.w 0x32ce2                                     |             goto label_22;
                                                                 |         }
    0x00032bbe subs r3, r4, 1                                    |         r3 = r4 - 1;
    0x00032bc0 cmp r3, 5                                         |         
                                                                 |         if (r3 > 5) {
    0x00032bc2 bhi.w 0x32fec                                     |             goto label_23;
                                                                 |         }
                                                                 |         /* switch table (7 cases) at 0x32bca */
    0x00032bc6 tbh [pc, r3, lsl 1]                               |         __asm ("tbh [pc, r3, lsl 1]");
                                                                 | label_18:
    0x00032bd6 ldrb.w r8, [sb]                                   |         r8 = *(sb);
    0x00032bda cmp.w r8, 0x7f                                    |         
    0x00032bde str.w r8, [sp, 0x20]                              |         __asm ("str.w r8, [var_20h]");
    0x00032be2 it ls                                             |         
                                                                 |         if (r8 > 127) {
    0x00032be4 movls r6, 1                                       |             r6 = 1;
                                                                 |         }
    0x00032be6 bls 0x32b78                                       |         
                                                                 |     } while (r8 < 127);
    0x00032be8 add r1, sp, 0x20                                  |     r1 += var_20h;
    0x00032bea mov r0, sb                                        |     r0 = sb;
    0x00032bec bl 0xf2a0                                         |     fcn_0000f2a0 (r0, r1);
    0x00032bf0 ldr.w r8, [sp, 0x20]                              |     r8 = var_20h;
    0x00032bf4 mov r6, r0                                        |     r6 = r0;
    0x00032bf6 cmp fp, r8                                        |     
                                                                 |     if (fp >= r8) {
    0x00032bf8 bhs 0x32b7c                                       |         goto label_0;
                                                                 |     }
                                                                 | label_20:
    0x00032bfa blx 0xa230                                        |     fcn_0000a230 ();
    0x00032bfe ldr r2, [pc, 0x260]                               |     
    0x00032c00 adds r0, 0x14                                     |     r0 += 0x14;
    0x00032c02 ldr r1, [pc, 0x260]                               |     
    0x00032c04 movw r3, 0x4e6d                                   |     r3 = 0x4e6d;
    0x00032c08 add r2, pc                                        |     r2 = 0x65a6e;
    0x00032c0a add r1, pc                                        |     r1 = 0x65a74;
                                                                 | label_16:
    0x00032c0c str r0, [sp]                                      |     *(sp) = r0;
    0x00032c0e movt r3, 1                                        |     r3 = (r3 & 0xFFFF) | 0x10000;
    0x00032c12 movs r0, 0xb                                      |     r0 = 0xb;
    0x00032c14 blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 | label_14:
    0x00032c18 movs r0, 0                                        |     r0 = 0;
    0x00032c1a movs r3, 0xb                                      |     r3 = 0xb;
    0x00032c1c strb.w r3, [sl, 0x17]                             |     *((sl + 0x17)) = r3;
                                                                 |     do {
                                                                 | label_1:
    0x00032c20 ldr r2, [pc, 0x244]                               |         
    0x00032c22 ldr r3, [pc, 0x230]                               |         r3 = *(0x32e56);
    0x00032c24 add r2, pc                                        |         r2 = 0x65a90;
    0x00032c26 ldr r3, [r2, r3]                                  |         r3 = *(0x65a90);
    0x00032c28 ldr r2, [r3]                                      |         r2 = *(0x65a90);
    0x00032c2a ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00032c2c eors r2, r3                                       |         r2 ^= r3;
    0x00032c2e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00032c32 bne.w 0x32fe8                                     |             goto label_24;
                                                                 |         }
    0x00032c36 add sp, 0x5c                                      |         
    0x00032c38 vpop {d8, d9}                                     |         __asm ("vpop {d8, d9}");
    0x00032c3c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_21:
    0x00032c40 lsls r1, r3, 0x1c                                 |         r1 = r3 << 0x1c;
                                                                 |         if (r1 >= r3) {
    0x00032c42 bpl 0x32d14                                       |             goto label_25;
                                                                 |         }
    0x00032c44 cmp r4, 9                                         |         
                                                                 |         if (r4 <= 9) {
    0x00032c46 bhi 0x32cb2                                       |             
    0x00032c48 cmp r4, 0                                         |             
                                                                 |             if (r4 == 0) {
    0x00032c4a beq 0x32d00                                       |                 goto label_3;
                                                                 |             }
    0x00032c4c add r2, sp, 0x28                                  |             r2 += var_28h;
    0x00032c4e mov r1, r4                                        |             r1 = r4;
    0x00032c50 add.w r0, sb, r8                                  |             r0 = sb + r8;
    0x00032c54 bl 0xd71c                                         |             fcn_0000d71c (r0, r1, r2);
    0x00032c58 cmp r4, 7                                         |             
                                                                 |             if (r4 == 7) {
    0x00032c5a beq.w 0x32f3c                                     |                 goto label_26;
                                                                 |             }
    0x00032c5e vldr d8, [r5, -0x28]                              |             __asm ("vldr d8, [r5, -0x28]");
    0x00032c62 vcmpe.f64 d8, d9                                  |             __asm ("vcmpe.f64 d8, d9");
    0x00032c66 vmrs apsr_nzcv, fpscr                             |             __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |             if (r4 < 7) {
    0x00032c6a bmi 0x32cb2                                       |                 goto label_4;
                                                                 |             }
    0x00032c6c vldr d16, [pc, 0x1d8]                             |             __asm ("vldr d16, aav.0x000000ff");
    0x00032c70 vcmpe.f64 d8, d16                                 |             __asm ("vcmpe.f64 d8, d16");
    0x00032c74 vmrs apsr_nzcv, fpscr                             |             __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |             if (r4 >= 7) {
    0x00032c78 bge 0x32d00                                       |                 goto label_3;
                                                                 |             }
    0x00032c7a ldr r3, [sp, 0x28]                                |             r3 = var_28h;
    0x00032c7c vmov r0, r1, d8                                   |             __asm ("vmov r0, r1, d8");
    0x00032c80 ldr r4, [sp, 0x2c]                                |             r4 = var_2ch;
    0x00032c82 str r3, [sp, 0x18]                                |             var_18h = r3;
    0x00032c84 bl 0x8cb28                                        |             fcn_0008cb28 (r0, r1);
    0x00032c88 ldr r3, [sp, 0x18]                                |             r3 = var_18h;
    0x00032c8a cmp r3, r0                                        |             
    0x00032c8c sbcs.w r2, r4, r1                                 |             __asm ("sbcs.w r2, r4, r1");
                                                                 |             if (r3 < r0) {
    0x00032c90 blt 0x32d00                                       |                 goto label_3;
                                                                 |             }
    0x00032c92 cmp r0, r3                                        |             
    0x00032c94 sbcs r1, r4                                       |             __asm ("sbcs r1, r4");
                                                                 |             if (r0 < r3) {
    0x00032c96 blt 0x32cb2                                       |                 goto label_4;
                                                                 |             }
    0x00032c98 mov r0, r3                                        |             r0 = r3;
    0x00032c9a mov r1, r4                                        |             r1 = r4;
    0x00032c9c bl 0x8c7d4                                        |             r0 = fcn_0008c7d4 (r0, r1, r2);
    0x00032ca0 vmov d16, r0, r1                                  |             __asm ("vmov d16, r0, r1");
    0x00032ca4 vcmpe.f64 d8, d16                                 |             __asm ("vcmpe.f64 d8, d16");
    0x00032ca8 vmrs apsr_nzcv, fpscr                             |             __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |             if (r0 > r3) {
    0x00032cac bgt 0x32d00                                       |                 goto label_3;
                                                                 |             }
                                                                 |             if (r0 >= r3) {
    0x00032cae bpl.w 0x32e8a                                     |                 goto label_9;
                                                                 |             }
                                                                 |         }
                                                                 | label_4:
    0x00032cb2 ldr.w r4, [sl]                                    |         r4 = *(sl);
    0x00032cb6 movs r0, 1                                        |         r0 = 1;
    0x00032cb8 ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x00032cba ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00032cbc ldrb r3, [r3, r2]                                 |         r3 = *((r3 + r2));
    0x00032cbe cmp r3, 0                                         |         
    0x00032cc0 beq 0x32c20                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_2:
    0x00032cc2 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x00032cc4 bpl 0x32cde                                       |         goto label_27;
                                                                 |     }
    0x00032cc6 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00032cc8 and r3, r3, 1                                     |     r3 &= 1;
    0x00032ccc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00032cce beq.w 0x32fa2                                     |         goto label_28;
                                                                 |     }
    0x00032cd2 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00032cd4 ldrh r2, [r2, 0x10]                               |     r2 = *((r2 + 0x10));
    0x00032cd6 and r2, r2, 1                                     |     r2 &= 1;
                                                                 | label_13:
    0x00032cda cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00032cdc beq 0x32c20                                       |         goto label_1;
                                                                 |     }
                                                                 | label_27:
    0x00032cde rsbs r0, r0, 0                                    |     r0 -= ;
    0x00032ce0 b 0x32c20                                         |     goto label_1;
                                                                 | label_22:
    0x00032ce2 mov r1, r4                                        |     r1 = r4;
    0x00032ce4 add r2, sp, 0x28                                  |     r2 += var_28h;
    0x00032ce6 bl 0xd6e4                                         |     fcn_0000d6e4 (r0, r1, r2);
    0x00032cea vldr d16, [pc, 0x154]                             |     __asm ("vldr d16, aav.0x000000ff");
    0x00032cee vldr d8, [sp, 0x28]                               |     __asm ("vldr d8, [sp, 0x28]");
    0x00032cf2 ldrd r3, r4, [r5, -0x28]                          |     __asm ("ldrd r3, r4, [r5, -0x28]");
    0x00032cf6 vcmpe.f64 d8, d16                                 |     __asm ("vcmpe.f64 d8, d16");
    0x00032cfa vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r3 >= r2) {
    0x00032cfe bpl 0x32df4                                       |         goto label_29;
                                                                 |     }
                                                                 | label_3:
    0x00032d00 ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x00032d04 mov.w r0, -1                                      |     r0 = -1;
                                                                 | label_15:
    0x00032d08 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00032d0a ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00032d0c ldrb r3, [r3, r2]                                 |     r3 = *((r3 + r2));
    0x00032d0e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032d10 beq 0x32c20                                       |         goto label_1;
                                                                 |     }
    0x00032d12 b 0x32cc2                                         |     goto label_2;
                                                                 | label_25:
    0x00032d14 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x00032d16 bpl 0x32daa                                       |         goto label_30;
                                                                 |     }
    0x00032d18 cmp r4, 0x7f                                      |     
                                                                 |     if (r4 > 0x7f) {
    0x00032d1a bhi.w 0x32f32                                     |         goto label_31;
                                                                 |     }
                                                                 | label_8:
    0x00032d1e cmp r4, 0xb                                       |     
                                                                 |     if (r4 < 0xb) {
    0x00032d20 bls 0x32d00                                       |         goto label_3;
                                                                 |     }
    0x00032d22 lsls r1, r4, 0x1f                                 |     r1 = r4 << 0x1f;
                                                                 |     if (r1 >= r4) {
    0x00032d24 bpl 0x32cb2                                       |         goto label_4;
                                                                 |     }
    0x00032d26 subs r4, 0xc                                      |     r4 -= 0xc;
    0x00032d28 lsrs r4, r4, 1                                    |     r4 >>= 1;
    0x00032d2a add.w r3, r4, r8                                  |     r3 = r4 + r8;
    0x00032d2e str r4, [sp, 0x34]                                |     var_34h = r4;
    0x00032d30 cmp fp, r3                                        |     
                                                                 |     if (fp <= r3) {
    0x00032d32 blo.w 0x32fa6                                     |         goto label_32;
                                                                 |     }
    0x00032d36 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00032d3a ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00032d3c ldrh r2, [r3, 8]                                  |     r2 = *((r3 + 8));
    0x00032d3e cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x00032d40 ble.w 0x32fa6                                     |         goto label_32;
                                                                 |     }
    0x00032d44 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00032d46 add.w r0, sb, r8                                  |     r0 = sb + r8;
    0x00032d4a add.w r2, r3, r2, lsl 2                           |     r2 = r3 + (r2 << 2);
    0x00032d4e ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x00032d50 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00032d52 beq.w 0x32f12                                     |         goto label_33;
                                                                 |     }
    0x00032d56 ldrb r1, [r3, 4]                                  |     r1 = *((r3 + 4));
    0x00032d58 strb.w r1, [sp, 0x3a]                             |     var_3ah = r1;
    0x00032d5c ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00032d5e ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00032d60 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00032d62 add r0, sp, 0x28                                  |     r0 += var_28h;
    0x00032d64 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00032d66 movs r3, 2                                        |     r3 = 2;
    0x00032d68 strh.w r3, [sp, 0x38]                             |     var_38h = r3;
    0x00032d6c add.w r3, sl, 0x17                                |     r3 = sl + 0x17;
    0x00032d70 bl 0x24d94                                        |     r0 = fcn_00024d94 (r0, r1, r2, r3);
                                                                 | label_5:
    0x00032d74 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032d76 bne.w 0x32fca                                     |         goto label_34;
                                                                 |     }
    0x00032d7a ldrh.w r3, [sl, 0x14]                             |     r3 = *((sl + 0x14));
    0x00032d7e cmp r3, r7                                        |     
                                                                 |     if (r3 == r7) {
    0x00032d80 beq.w 0x32f06                                     |         goto label_35;
                                                                 |     }
    0x00032d84 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00032d86 cmp r3, 0x7f                                      |     
                                                                 |     if (r3 < 0x7f) {
    0x00032d88 bls.w 0x32e94                                     |         goto label_17;
                                                                 |     }
    0x00032d8c sub.w r2, r3, 0xc                                 |     r2 = r3 - 0xc;
    0x00032d90 lsrs r3, r3, 7                                    |     r3 >>= 7;
    0x00032d92 add.w r8, r8, r2, lsr 1                           |     r8 += (r2 >> 1);
    0x00032d96 movs r2, 1                                        |     r2 = 1;
                                                                 |     do {
    0x00032d98 lsrs r3, r3, 7                                    |         r3 >>= 7;
    0x00032d9a adds r2, 1                                        |         r2++;
    0x00032d9c orr.w r3, r3, r0, lsl 25                          |         r3 |= (r0 << 25);
    0x00032da0 lsrs r0, r0, 7                                    |         r0 >>= 7;
    0x00032da2 orrs.w r1, r3, r0                                 |         r1 = r3 | r0;
    0x00032da6 bne 0x32d98                                       |         
                                                                 |     } while (r1 != r3);
    0x00032da8 b 0x32ea0                                         |     goto label_36;
                                                                 | label_30:
    0x00032daa lsls r2, r3, 0x1b                                 |     r2 = r3 << 0x1b;
                                                                 |     if (r2 >= r3) {
    0x00032dac bpl.w 0x32ef8                                     |         goto label_37;
                                                                 |     }
    0x00032db0 cmp r4, 0x7f                                      |     
                                                                 |     if (r4 > 0x7f) {
    0x00032db2 bhi.w 0x32f74                                     |         goto label_38;
                                                                 |     }
                                                                 | label_12:
    0x00032db6 cmp r4, 0xb                                       |     
                                                                 |     if (r4 < 0xb) {
    0x00032db8 bls 0x32d00                                       |         goto label_3;
                                                                 |     }
    0x00032dba lsls r0, r4, 0x1f                                 |     r0 = r4 << 0x1f;
                                                                 |     if (r0 < r4) {
    0x00032dbc bmi 0x32d00                                       |         goto label_3;
                                                                 |     }
    0x00032dbe subs r4, 0xc                                      |     r4 -= 0xc;
    0x00032dc0 lsrs r4, r4, 1                                    |     r4 >>= 1;
    0x00032dc2 add.w r2, r4, r8                                  |     r2 = r4 + r8;
    0x00032dc6 cmp fp, r2                                        |     
                                                                 |     if (fp <= r2) {
    0x00032dc8 blo.w 0x32fd0                                     |         goto label_39;
                                                                 |     }
    0x00032dcc lsls r1, r3, 0x15                                 |     r1 = r3 << 0x15;
                                                                 |     if (r1 < r3) {
    0x00032dce bmi.w 0x32f82                                     |         goto label_40;
                                                                 |     }
    0x00032dd2 ldrd r1, r3, [r5, -0x20]                          |     __asm ("ldrd r1, r3, [r5, -0x20]");
    0x00032dd6 add.w r0, sb, r8                                  |     r0 = sb + r8;
    0x00032dda cmp r3, r4                                        |     
    0x00032ddc mov r2, r3                                        |     r2 = r3;
    0x00032dde it ge                                             |     
                                                                 |     if (r3 < r4) {
    0x00032de0 movge r2, r4                                      |         r2 = r4;
                                                                 |     }
    0x00032de2 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032de4 blx 0xa0b4                                        |     fcn_0000a0b4 ();
    0x00032de8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032dea cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032dec bne.w 0x32fca                                     |         goto label_34;
                                                                 |     }
    0x00032df0 subs r0, r4, r3                                   |     r0 = r4 - r3;
    0x00032df2 b 0x32d74                                         |     goto label_5;
                                                                 | label_29:
    0x00032df4 vldr d16, [pc, 0x50]                              |     __asm ("vldr d16, aav.0x000000ff");
    0x00032df8 vcmpe.f64 d8, d16                                 |     __asm ("vcmpe.f64 d8, d16");
    0x00032dfc vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r0 >= r4) {
    0x00032e00 bge.w 0x32cb2                                     |         goto label_4;
                                                                 |     }
    0x00032e04 vmov r0, r1, d8                                   |     __asm ("vmov r0, r1, d8");
    0x00032e08 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032e0a bl 0x8cb28                                        |     fcn_0008cb28 (r0, r1);
    0x00032e0e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032e10 cmp r3, r0                                        |     
    0x00032e12 sbcs.w r2, r4, r1                                 |     __asm ("sbcs.w r2, r4, r1");
                                                                 |     if (r3 < r0) {
    0x00032e16 blt.w 0x32cb2                                     |         goto label_4;
                                                                 |     }
    0x00032e1a cmp r0, r3                                        |     
    0x00032e1c sbcs r1, r4                                       |     __asm ("sbcs r1, r4");
                                                                 |     if (r0 < r3) {
    0x00032e1e blt.w 0x32d00                                     |         goto label_3;
                                                                 |     }
    0x00032e22 mov r0, r3                                        |     r0 = r3;
    0x00032e24 mov r1, r4                                        |     r1 = r4;
    0x00032e26 bl 0x8c7d4                                        |     r0 = fcn_0008c7d4 (r0, r1, r2);
    0x00032e2a vmov d16, r0, r1                                  |     __asm ("vmov d16, r0, r1");
    0x00032e2e vcmpe.f64 d8, d16                                 |     __asm ("vcmpe.f64 d8, d16");
    0x00032e32 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r0 > r3) {
    0x00032e36 bgt.w 0x32cb2                                     |         goto label_4;
                                                                 |     }
                                                                 |     if (r0 < r3) {
    0x00032e3a bmi.w 0x32d00                                     |         goto label_3;
                                                                 |     }
    0x00032e3e b 0x32e8a                                         |     goto label_9;
    0x00032e6c ldr r3, [r0]                                      |     r3 = *(r0);
    0x00032e6e ldr r4, [r0, 4]                                   |     r4 = *((r0 + 4));
    0x00032e70 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00032e72 rev r4, r4                                        |     r4 = SWAP32 (r4);
                                                                 | label_7:
    0x00032e74 ldrd r1, r2, [r5, -0x28]                          |     __asm ("ldrd r1, r2, [r5, -0x28]");
    0x00032e78 cmp r4, r1                                        |     
    0x00032e7a sbcs.w r0, r3, r2                                 |     __asm ("sbcs.w r0, r3, r2");
                                                                 |     if (r4 < r1) {
    0x00032e7e blt.w 0x32d00                                     |         goto label_3;
                                                                 |     }
    0x00032e82 cmp r1, r4                                        |     
    0x00032e84 sbcs r2, r3                                       |     __asm ("sbcs r2, r3");
                                                                 |     if (r1 < r4) {
    0x00032e86 blt.w 0x32cb2                                     |         goto label_4;
                                                                 |     }
                                                                 | label_9:
    0x00032e8a ldrh.w r3, [sl, 0x14]                             |     r3 = *((sl + 0x14));
    0x00032e8e cmp r3, r7                                        |     
                                                                 |     if (r3 == r7) {
    0x00032e90 beq 0x32f06                                       |         goto label_35;
                                                                 |     }
    0x00032e92 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
                                                                 | label_17:
    0x00032e94 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00032e96 add r3, r2                                        |     r3 += r2;
    0x00032e98 movs r2, 1                                        |     r2 = 1;
    0x00032e9a ldrb.w r3, [r3, 0xcd8]                            |     r3 = *((r3 + 0xcd8));
    0x00032e9e add r8, r3                                        |     r8 += r3;
                                                                 | label_36:
    0x00032ea0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00032ea2 add r6, r2                                        |     r6 += r2;
    0x00032ea4 adds r7, 1                                        |     r7++;
    0x00032ea6 adds r5, 0x28                                     |     r5 += 0x28;
    0x00032ea8 cmp fp, r8                                        |     
    0x00032eaa it hs                                             |     
                                                                 |     if (fp < r8) {
    0x00032eac cmphs r3, r6                                      |         __asm ("cmphs r3, r6");
                                                                 |         goto label_41;
                                                                 |     }
                                                                 |     if (fp > r8) {
                                                                 | label_41:
    0x00032eae bhi.w 0x32b8a                                     |         goto label_6;
                                                                 |     }
    0x00032eb2 b 0x32f06                                         |     goto label_35;
    0x00032eb4 ldrsb.w r2, [r0]                                  |     r2 = *(r0);
    0x00032eb8 ldrb r3, [r0, 1]                                  |     r3 = *((r0 + 1));
    0x00032eba ldr.w r4, [r0, 2]                                 |     r4 = *((r0 + 2));
    0x00032ebe orr.w r3, r3, r2, lsl 8                           |     r3 |= (r2 << 8);
    0x00032ec2 rev r4, r4                                        |     r4 = SWAP32 (r4);
    0x00032ec4 b 0x32e74                                         |     goto label_7;
    0x00032ec6 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00032ec8 rev r4, r4                                        |     r4 = SWAP32 (r4);
    0x00032eca asrs r3, r4, 0x1f                                 |     r3 = r4 >> 0x1f;
    0x00032ecc b 0x32e74                                         |     goto label_7;
    0x00032ece ldrh.w r3, [r0, 1]                                |     r3 = *((r0 + 1));
    0x00032ed2 ldrsb.w r2, [r0]                                  |     r2 = *(r0);
    0x00032ed6 rev16 r4, r3                                      |     __asm ("rev16 r4, r3");
    0x00032ed8 uxth r4, r4                                       |     r4 = (int16_t) r4;
    0x00032eda orr.w r4, r4, r2, lsl 16                          |     r4 |= (r2 << 16);
    0x00032ede asrs r3, r4, 0x1f                                 |     r3 = r4 >> 0x1f;
    0x00032ee0 b 0x32e74                                         |     goto label_7;
    0x00032ee2 ldrsb.w r3, [r0]                                  |     r3 = *(r0);
    0x00032ee6 ldrb r4, [r0, 1]                                  |     r4 = *((r0 + 1));
    0x00032ee8 orr.w r4, r4, r3, lsl 8                           |     r4 |= (r3 << 8);
    0x00032eec asrs r3, r4, 0x1f                                 |     r3 = r4 >> 0x1f;
    0x00032eee b 0x32e74                                         |     goto label_7;
    0x00032ef0 ldrsb.w r4, [r0]                                  |     r4 = *(r0);
    0x00032ef4 asrs r3, r4, 0x1f                                 |     r3 = r4 >> 0x1f;
    0x00032ef6 b 0x32e74                                         |     goto label_7;
                                                                 | label_37:
    0x00032ef8 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00032efa bne.w 0x32cb2                                     |         goto label_4;
                                                                 |     }
    0x00032efe ldrh.w r3, [sl, 0x14]                             |     r3 = *((sl + 0x14));
    0x00032f02 cmp r3, r7                                        |     
                                                                 |     if (r3 != r7) {
    0x00032f04 bne 0x32fe4                                       |         goto label_42;
                                                                 |     }
                                                                 | label_35:
    0x00032f06 movs r3, 1                                        |     r3 = 1;
    0x00032f08 ldrsb.w r0, [sl, 0x16]                            |     r0 = *((sl + 0x16));
    0x00032f0c strb.w r3, [sl, 0x1a]                             |     *((sl + 0x1a)) = r3;
    0x00032f10 b 0x32c20                                         |     goto label_1;
                                                                 | label_33:
    0x00032f12 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00032f14 ldrd r1, r3, [r5, -0x20]                          |     __asm ("ldrd r1, r3, [r5, -0x20]");
    0x00032f18 cmp r3, r4                                        |     
    0x00032f1a mov r2, r3                                        |     r2 = r3;
    0x00032f1c it ge                                             |     
                                                                 |     if (r3 < r4) {
    0x00032f1e movge r2, r4                                      |         r2 = r4;
                                                                 |     }
    0x00032f20 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032f22 blx 0xa0b4                                        |     fcn_0000a0b4 ();
    0x00032f26 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00032f28 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032f2a bne 0x32fc6                                       |         goto label_43;
                                                                 |     }
    0x00032f2c ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00032f2e subs r0, r4, r2                                   |     r0 = r4 - r2;
    0x00032f30 b 0x32d74                                         |     goto label_5;
                                                                 | label_31:
    0x00032f32 add r1, sp, 0x24                                  |     r1 += var_24h;
    0x00032f34 bl 0xf2a0                                         |     fcn_0000f2a0 (r0, r1);
    0x00032f38 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00032f3a b 0x32d1e                                         |     goto label_8;
                                                                 | label_26:
    0x00032f3c vldr d17, [sp, 0x28]                              |     __asm ("vldr d17, [sp, 0x28]");
    0x00032f40 vldr d16, [r5, -0x28]                             |     __asm ("vldr d16, [r5, -0x28]");
    0x00032f44 vcmpe.f64 d17, d16                                |     __asm ("vcmpe.f64 d17, d16");
    0x00032f48 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r0 < r4) {
    0x00032f4c bmi.w 0x32d00                                     |         goto label_3;
                                                                 |     }
                                                                 |     if (r0 <= r4) {
    0x00032f50 ble 0x32e8a                                       |         goto label_9;
                                                                 |     }
    0x00032f52 b 0x32cb2                                         |     goto label_4;
                                                                 | label_19:
    0x00032f54 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x00032f56 add.w r0, sb, 1                                   |     r0 = sb + 1;
    0x00032f5a bl 0xf2a0                                         |     fcn_0000f2a0 (r0, r1);
    0x00032f5e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00032f60 adds r6, r0, 1                                    |     r6 = r0 + 1;
    0x00032f62 ldrb.w r1, [sb]                                   |     r1 = *(sb);
    0x00032f66 cmp r3, 0x7f                                      |     
    0x00032f68 str r1, [sp, 0x20]                                |     var_20h = r1;
                                                                 |     if (r3 < 0x7f) {
    0x00032f6a bls.w 0x32b68                                     |         goto label_10;
                                                                 |     }
    0x00032f6e subs r3, 0xc                                      |     r3 -= 0xc;
    0x00032f70 lsrs r3, r3, 1                                    |     r3 >>= 1;
    0x00032f72 b 0x32b72                                         |     goto label_11;
                                                                 | label_38:
    0x00032f74 add r1, sp, 0x24                                  |     r1 += var_24h;
    0x00032f76 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032f78 bl 0xf2a0                                         |     fcn_0000f2a0 (r0, r1);
    0x00032f7c ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00032f7e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032f80 b 0x32db6                                         |     goto label_12;
                                                                 |     if (r4 == 0) {
                                                                 | label_40:
    0x00032f82 cbz r4, 0x32f9a                                   |         goto label_44;
                                                                 |     }
    0x00032f84 add.w r3, sb, r8                                  |     r3 = sb + r8;
    0x00032f88 adds r1, r4, r3                                   |     r1 = r4 + r3;
    0x00032f8a b 0x32f90                                         |     
                                                                 |     while (r2 == 0) {
    0x00032f8c cmp r3, r1                                        |         
                                                                 |         if (r3 == r1) {
    0x00032f8e beq 0x32f9a                                       |             goto label_44;
                                                                 |         }
    0x00032f90 ldrb r2, [r3], 1                                  |         r2 = *(r3);
                                                                 |         r3++;
    0x00032f94 cmp r2, 0                                         |         
    0x00032f96 beq 0x32f8c                                       |         
                                                                 |     }
    0x00032f98 b 0x32cb2                                         |     goto label_4;
                                                                 | label_44:
    0x00032f9a ldr r0, [r5, -0x28]                               |     r0 = *((r5 - 0x28));
    0x00032f9e subs r0, r4, r0                                   |     r0 = r4 - r0;
    0x00032fa0 b 0x32d74                                         |     goto label_5;
                                                                 | label_28:
    0x00032fa2 movs r2, 1                                        |     r2 = 1;
    0x00032fa4 b 0x32cda                                         |     goto label_13;
                                                                 | label_32:
    0x00032fa6 blx 0xa230                                        |     fcn_0000a230 ();
    0x00032faa ldr r2, [pc, 0x48]                                |     
    0x00032fac adds r0, 0x14                                     |     r0 += 0x14;
    0x00032fae ldr r1, [pc, 0x48]                                |     
    0x00032fb0 movw r3, 0x4eba                                   |     
    0x00032fb4 str r0, [sp]                                      |     *(sp) = r0;
    0x00032fb6 movt r3, 1                                        |     r3 = 0x14eba;
    0x00032fba add r2, pc                                        |     r2 = 0x65fb4;
    0x00032fbc movs r0, 0xb                                      |     r0 = 0xb;
    0x00032fbe add r1, pc                                        |     r1 = 0x65fbc;
    0x00032fc0 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00032fc4 b 0x32c18                                         |     goto label_14;
                                                                 | label_43:
    0x00032fc6 mov r4, r3                                        |     r4 = r3;
    0x00032fc8 b 0x32d08                                         |     goto label_15;
                                                                 | label_34:
    0x00032fca ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x00032fce b 0x32d08                                         |     goto label_15;
                                                                 | label_39:
    0x00032fd0 blx 0xa230                                        |     fcn_0000a230 ();
    0x00032fd4 ldr r2, [pc, 0x24]                                |     
    0x00032fd6 adds r0, 0x14                                     |     r0 += 0x14;
    0x00032fd8 ldr r1, [pc, 0x24]                                |     
    0x00032fda movw r3, 0x4ed8                                   |     r3 = 0x4ed8;
    0x00032fde add r2, pc                                        |     r2 = 0x65fde;
    0x00032fe0 add r1, pc                                        |     r1 = 0x65fe4;
    0x00032fe2 b 0x32c0c                                         |     goto label_16;
                                                                 | label_42:
    0x00032fe4 mov r3, r4                                        |     r3 = r4;
    0x00032fe6 b 0x32e94                                         |     goto label_17;
                                                                 | label_24:
    0x00032fe8 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_23:
    0x00032fec subs r4, 8                                        |     r4 -= 8;
    0x00032fee movs r3, 0                                        |     r3 = 0;
    0x00032ff0 b 0x32e74                                         |     goto label_7;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x33454).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x33abc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00033abc ()                                      | void fcn_00033abc (int16_t arg_0h, int16_t arg_4h, int16_t arg_10h, arithmetic x, int16_t arg_1ch, int16_t arg_20h, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_58h, int16_t arg_50h, int16_t arg_54h, int16_t arg_5ch, uint32_t arg1, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     uint32_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00033abc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00033ac0 sub sp, 0x24                                      |     
    0x00033ac2 ldr.w fp, [sp, 0x54]                              |     fp = *(arg_54h);
    0x00033ac6 mov r1, r0                                        |     r1 = r0;
    0x00033ac8 mov.w lr, 0                                       |     lr = 0;
    0x00033acc ldr r4, [r1, 8]                                   |     r4 = *((r1 + 8));
    0x00033ace ldr.w sl, [r1, 4]                                 |     sl = *((r1 + 4));
    0x00033ad2 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00033ad4 ldr.w r1, [fp, 0x10]                              |     r1 = *(arg_10h);
    0x00033ad8 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00033ada ldr.w r5, [fp]                                    |     r5 = *(fp);
    0x00033ade str r1, [sp, 8]                                   |     var_8h = r1;
    0x00033ae0 ldr r1, [r0]                                      |     r1 = *(r0);
    0x00033ae2 ldrb.w ip, [r4, 0x10]                             |     ip = *((r4 + 0x10));
    0x00033ae6 cmp r5, lr                                        |     
    0x00033ae8 ldrd r6, r7, [sp, 0x48]                           |     __asm ("ldrd r6, r7, [arg_0h]");
    0x00033aec str r1, [sp, 4]                                   |     var_4h = r1;
    0x00033aee ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x00033af0 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00033af2 ldr r1, [sp, 0x5c]                                |     r1 = *(arg_5ch);
    0x00033af4 str.w lr, [r1]                                    |     __asm ("str.w lr, [r1]");
    0x00033af8 strd r2, r3, [r4]                                 |     __asm ("strd r2, r3, [r4]");
    0x00033afc ldrh.w r3, [sp, 0x50]                             |     r3 = *(arg_50h);
    0x00033b00 ldr.w r2, [fp, 4]                                 |     r2 = *(arg_4h);
    0x00033b04 str r3, [sp]                                      |     *(sp) = r3;
    0x00033b06 ldrh.w r3, [sp, 0x58]                             |     r3 = *(arg_10h);
    0x00033b0a str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     if (r5 <= lr) {
    0x00033b0c ble 0x33b6a                                       |         goto label_19;
                                                                 |     }
    0x00033b0e ldr.w sb, [sl, 0x18]                              |     sb = *((sl + 0x18));
    0x00033b12 mov r1, lr                                        |     r1 = lr;
    0x00033b14 strd ip, sl, [sp, 0x10]                           |     __asm ("strd ip, sl, [var_10h]");
    0x00033b18 mov r8, lr                                        |     r8 = lr;
    0x00033b1a mov sl, r6                                        |     sl = r6;
    0x00033b1c b 0x33b26                                         |     
                                                                 |     while (ip != r0) {
                                                                 | label_0:
    0x00033b1e adds r1, 1                                        |         r1++;
    0x00033b20 adds r2, 0xc                                      |         r2 += 0xc;
    0x00033b22 cmp r5, r1                                        |         
                                                                 |         if (r5 == r1) {
    0x00033b24 beq 0x33b66                                       |             goto label_20;
                                                                 |         }
                                                                 | label_1:
    0x00033b26 ldr r3, [r2, 8]                                   |         r3 = *((r2 + 8));
    0x00033b28 strb.w r8, [r2, 5]                                |         *((r2 + 5)) = r8;
    0x00033b2c add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00033b30 add.w r3, sb, r3, lsl 4                           |         r3 = sb + (r3 << 4);
    0x00033b34 ldrd r6, r0, [r3, 0x20]                           |         __asm ("ldrd r6, r0, [r3, 0x20]");
    0x00033b38 and.w lr, sl, r6                                  |         lr = sl & r6;
    0x00033b3c and.w ip, r7, r0                                  |         
    0x00033b40 cmp ip, r0                                        |         
    0x00033b42 it eq                                             |         
                                                                 |         if (ip == r0) {
    0x00033b44 cmpeq lr, r6                                      |             __asm ("cmpeq lr, r6");
                                                                 |         }
    0x00033b46 bne 0x33b1e                                       |         
                                                                 |     }
    0x00033b48 ldrh r0, [r3, 0xc]                                |     r0 = *((r3 + 0xc));
    0x00033b4a ldr r6, [sp]                                      |     r6 = *(sp);
    0x00033b4c tst r6, r0                                        |     
                                                                 |     if ((r6 & r0) != 0) {
    0x00033b4e bne 0x33b1e                                       |         goto label_0;
                                                                 |     }
    0x00033b50 ldr r0, [sp, 0x60]                                |     r0 = *(x);
    0x00033b52 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00033b54 beq 0x33c3c                                       |         goto label_21;
                                                                 |     }
                                                                 | label_2:
    0x00033b56 adds r1, 1                                        |     r1++;
    0x00033b58 mov.w r3, 1                                       |     r3 = 1;
    0x00033b5c cmp r5, r1                                        |     
    0x00033b5e strb r3, [r2, 5]                                  |     *((r2 + 5)) = r3;
    0x00033b60 add.w r2, r2, 0xc                                 |     r2 += 0xc;
                                                                 |     if (r5 != r1) {
    0x00033b64 bne 0x33b26                                       |         goto label_1;
                                                                 |     }
                                                                 | label_20:
    0x00033b66 ldrd ip, sl, [sp, 0x10]                           |     __asm ("ldrd ip, sl, [var_10h]");
                                                                 | label_19:
    0x00033b6a lsl.w r3, ip, 6                                   |     r3 = ip << 6;
    0x00033b6e lsls r2, r5, 3                                    |     r2 = r5 << 3;
    0x00033b70 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00033b72 movs r1, 0                                        |     r1 = 0;
    0x00033b74 mov r6, r3                                        |     r6 = r3;
    0x00033b76 str r3, [sp]                                      |     *(sp) = r3;
    0x00033b78 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00033b7c ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00033b7e add r2, r6                                        |     r2 += r6;
    0x00033b80 addw r7, pc, 0x47c                                |     __asm ("addw r7, pc, aav.0x000000ff");
    0x00033b84 ldrd r6, r7, [r7]                                 |     __asm ("ldrd r6, r7, [r7]");
    0x00033b88 ldr r3, [r2, 0x18]                                |     r3 = *((r2 + 0x18));
    0x00033b8a ldrd r0, r1, [r2, 0x38]                           |     __asm ("ldrd r0, r1, [r2, 0x38]");
    0x00033b8e movs r2, 0                                        |     r2 = 0;
    0x00033b90 ldr r3, [r3, 0x34]                                |     r3 = *((r3 + 0x34));
    0x00033b92 strd r2, r2, [fp, 0x14]                           |     __asm ("strd r2, r2, [fp, 0x14]");
    0x00033b96 str.w r2, [fp, 0x20]                              |     __asm ("str.w r2, [arg_20h]");
    0x00033b9a str.w r2, [fp, 0x38]                              |     __asm ("str.w r2, [arg_38h]");
    0x00033b9e str.w r2, [fp, 0x58]                              |     __asm ("str.w r2, [arg_58h]");
    0x00033ba2 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x00033ba4 strd r0, r1, [fp, 0x40]                           |     __asm ("strd r0, r1, [fp, 0x40]");
    0x00033ba8 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00033baa strd r6, r7, [fp, 0x28]                           |     __asm ("strd r6, r7, [fp, 0x28]");
    0x00033bae movs r6, 0x19                                     |     r6 = 0x19;
    0x00033bb0 movs r7, 0                                        |     r7 = 0;
    0x00033bb2 strd r6, r7, [fp, 0x30]                           |     __asm ("strd r6, r7, [fp, 0x30]");
                                                                 |     if (r3 != 0) {
    0x00033bb6 cbnz r3, 0x33bc2                                  |         goto label_22;
                                                                 |     }
    0x00033bb8 b 0x33ff2                                         |     goto label_23;
                                                                 |     do {
    0x00033bba ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00033bbc cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00033bbe beq.w 0x33ff2                                     |             goto label_23;
                                                                 |         }
                                                                 | label_22:
    0x00033bc2 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00033bc4 cmp r1, r2                                        |         
    0x00033bc6 bne 0x33bba                                       |         
                                                                 |     } while (r1 != r2);
    0x00033bc8 ldr.w r8, [r3, 8]                                 |     r8 = *((r3 + 8));
    0x00033bcc ldr r3, [r1, 0x38]                                |     r3 = *((r1 + 0x38));
    0x00033bce mov r0, r8                                        |     r0 = r8;
    0x00033bd0 adds r3, 1                                        |     r3++;
    0x00033bd2 str r3, [r1, 0x38]                                |     *((r1 + 0x38)) = r3;
    0x00033bd4 mov r1, fp                                        |     r1 = fp;
    0x00033bd6 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00033bda ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00033bdc blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00033bde ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00033be0 cmp r0, 0                                         |     
    0x00033be2 it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x00033be4 cmpne r0, 0x13                                    |         __asm ("cmpne r0, 0x13");
                                                                 |     }
    0x00033be6 mov r6, r0                                        |     r6 = r0;
    0x00033be8 ite ne                                            |     
                                                                 |     if (r0 == 0) {
    0x00033bea movne r7, 1                                       |         r7 = 1;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x00033bec moveq r7, 0                                       |         r7 = 0;
                                                                 |     }
    0x00033bee ldr r2, [r3]                                      |     r2 = *(r3);
    0x00033bf0 ldr r3, [r2, 0x38]                                |     r3 = *((r2 + 0x38));
    0x00033bf2 add.w r3, r3, -1                                  |     r3 += -1;
    0x00033bf6 str r3, [r2, 0x38]                                |     *((r2 + 0x38)) = r3;
                                                                 |     if (r0 == 0) {
    0x00033bf8 beq 0x33c2a                                       |         goto label_24;
                                                                 |     }
    0x00033bfa cmp r0, 7                                         |     
                                                                 |     if (r0 == 7) {
    0x00033bfc beq.w 0x33dca                                     |         goto label_25;
                                                                 |     }
    0x00033c00 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x00033c04 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00033c06 beq.w 0x33d9a                                     |         goto label_26;
                                                                 |     }
    0x00033c0a ldr r1, [pc, 0x3fc]                               |     
    0x00033c0c ldr r0, [sp, 4]                                   |     r0 = var_4h;
    0x00033c0e add r1, pc                                        |     r1 = 0x67c1c;
    0x00033c10 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_11:
    0x00033c14 ldr.w r0, [r8, 8]                                 |     r0 = *((r8 + 8));
    0x00033c18 blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_12:
    0x00033c1c movs r3, 0                                        |     r3 = 0;
    0x00033c1e str.w r3, [r8, 8]                                 |     __asm ("str.w r3, [r8, 8]");
                                                                 |     do {
                                                                 | label_10:
    0x00033c22 mov r0, r6                                        |         r0 = r6;
    0x00033c24 add sp, 0x24                                      |         
    0x00033c26 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_24:
    0x00033c2a ldr.w r0, [r8, 8]                                 |         r0 = *((r8 + 8));
    0x00033c2e blx 0x9c24                                        |         fcn_00009c24 ();
    0x00033c32 str.w r7, [r8, 8]                                 |         __asm ("str.w r7, [r8, 8]");
                                                                 |         if (r6 == 0) {
    0x00033c36 cbz r6, 0x33c46                                   |             goto label_27;
                                                                 |         }
                                                                 | label_5:
    0x00033c38 movs r6, 0                                        |         r6 = 0;
    0x00033c3a b 0x33c22                                         |         
                                                                 |     } while (1);
                                                                 | label_21:
    0x00033c3c ldrb r3, [r3, 0xf]                                |     r3 = *((r3 + 0xf));
    0x00033c3e subs r3, 0x49                                     |     r3 -= 0x49;
    0x00033c40 cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x00033c42 bhi 0x33b56                                       |         goto label_2;
                                                                 |     }
    0x00033c44 b 0x33b1e                                         |     goto label_0;
                                                                 | label_27:
    0x00033c46 ldr r0, [r4, 0x34]                                |     r0 = *((r4 + 0x34));
    0x00033c48 lsls r2, r5, 2                                    |     r2 = r5 << 2;
    0x00033c4a mov r1, r6                                        |     r1 = r6;
    0x00033c4c blx 0x97d4                                        |     fcn_000097d4 ();
    0x00033c50 cmp r5, 0                                         |     
    0x00033c52 str r6, [r4, 0x18]                                |     *((r4 + 0x18)) = r6;
    0x00033c54 str r6, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r6;
    0x00033c56 str r6, [r4, 0x20]                                |     *((r4 + 0x20)) = r6;
    0x00033c58 str r6, [r4, 0x24]                                |     *((r4 + 0x24)) = r6;
    0x00033c5a ldr.w lr, [fp, 4]                                 |     
                                                                 |     if (r5 <= 0) {
    0x00033c5e ble.w 0x33e3e                                     |         goto label_28;
                                                                 |     }
    0x00033c62 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00033c64 mov r7, r6                                        |     r7 = r6;
    0x00033c66 mov.w sb, -1                                      |     sb = -1;
    0x00033c6a str r6, [sp, 8]                                   |     var_8h = r6;
    0x00033c6c add.w ip, r3, 4                                   |     
    0x00033c70 b 0x33ca8                                         |     goto label_29;
                                                                 | label_3:
    0x00033c72 movs r1, 0                                        |     r1 = 0;
    0x00033c74 movs r0, 1                                        |     r0 = 1;
    0x00033c76 str.w r1, [fp, 0x20]                              |     __asm ("str.w r1, [arg_20h]");
    0x00033c7a ldr.w r1, [fp, 0x38]                              |     r1 = *(arg_38h);
    0x00033c7e bic r1, r1, 1                                     |     r1 = BIT_MASK (r1, 1);
    0x00033c82 str.w r1, [fp, 0x38]                              |     __asm ("str.w r1, [arg_38h]");
    0x00033c86 ldr r1, [sp, 0x5c]                                |     r1 = *(arg_5ch);
    0x00033c88 str r0, [r1]                                      |     *(r1) = r0;
    0x00033c8a ldrb r3, [r3, 0xf]                                |     r3 = *((r3 + 0xf));
    0x00033c8c subs r3, 0x49                                     |     r3 -= 0x49;
    0x00033c8e cmp r3, r0                                        |     
                                                                 |     if (r3 < r0) {
    0x00033c90 bls 0x33d30                                       |         goto label_30;
                                                                 |     }
                                                                 | label_4:
    0x00033c92 cmp sb, r2                                        |     
    0x00033c94 it lt                                             |     
    0x00033c96 movlt sb, r2                                      |     sb = r2;
                                                                 |     while (r2 < 1) {
    0x00033c98 adds r7, 1                                        |         r7++;
    0x00033c9a add.w lr, lr, 0xc                                 |         lr += 0xc;
    0x00033c9e cmp r5, r7                                        |         
    0x00033ca0 add.w ip, ip, 8                                   |         
                                                                 |         if (r5 == r7) {
    0x00033ca4 beq.w 0x33dee                                     |             goto label_31;
                                                                 |         }
                                                                 | label_29:
    0x00033ca8 ldr r2, [ip, -0x4]                                |         r2 = *((ip - 0x4));
    0x00033cac subs r2, 1                                        |         r2--;
    0x00033cae bmi 0x33c98                                       |         
                                                                 |     }
    0x00033cb0 ldr.w r3, [lr, 8]                                 |     r3 = *((lr + 8));
    0x00033cb4 lsrs r1, r3, 0x1f                                 |     r1 = r3 >> 0x1f;
    0x00033cb6 cmp r5, r2                                        |     
    0x00033cb8 it le                                             |     
                                                                 |     if (r5 > r2) {
    0x00033cba orrle r1, r1, 1                                   |         r1 |= 1;
                                                                 |     }
    0x00033cbe cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00033cc0 bne 0x33d82                                       |         goto label_32;
                                                                 |     }
    0x00033cc2 ldr.w r1, [sl, 0xc]                               |     r1 = *((sl + 0xc));
    0x00033cc6 cmp r1, r3                                        |     
                                                                 |     if (r1 <= r3) {
    0x00033cc8 ble 0x33d82                                       |         goto label_32;
                                                                 |     }
    0x00033cca ldr.w r8, [r4, 0x34]                              |     r8 = *((r4 + 0x34));
    0x00033cce ldr.w r1, [r8, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r1 = *((r8 + offset_0));
    0x00033cd2 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00033cd4 bne 0x33d82                                       |         goto label_32;
                                                                 |     }
    0x00033cd6 ldrb.w r1, [lr, 5]                                |     r1 = *((lr + 5));
    0x00033cda cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00033cdc beq 0x33d82                                       |         goto label_32;
                                                                 |     }
    0x00033cde ldr.w r1, [sl, 0x18]                              |     r1 = *((sl + 0x18));
    0x00033ce2 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00033ce6 add.w r3, r1, r3, lsl 4                           |     r3 = r1 + (r3 << 4);
    0x00033cea ldrd r0, r1, [r4]                                 |     __asm ("ldrd r0, r1, [r4]");
    0x00033cee ldr r6, [r3, 0x20]                                |     r6 = *((r3 + 0x20));
    0x00033cf0 orrs r0, r6                                       |     r0 |= r6;
    0x00033cf2 ldr r6, [r3, 0x24]                                |     r6 = *((r3 + 0x24));
    0x00033cf4 str r0, [r4]                                      |     *(r4) = r0;
    0x00033cf6 orrs r1, r6                                       |     r1 |= r6;
    0x00033cf8 str r1, [r4, 4]                                   |     *((r4 + 4)) = r1;
    0x00033cfa str.w r3, [r8, r2, lsl 2]                         |     __asm ("str.w r3, [r8, r2, lsl 2]");
    0x00033cfe ldrb.w r1, [ip]                                   |     r1 = *(ip);
                                                                 |     if (r1 != 0) {
    0x00033d02 cbz r1, 0x33d16                                   |         
    0x00033d04 cmp r7, 0xf                                       |         
    0x00033d06 ldrb r1, [r3, 0xf]                                |         r1 = *((r3 + 0xf));
                                                                 |         if (r7 <= 0xf) {
    0x00033d08 ble 0x33d42                                       |             goto label_33;
                                                                 |         }
    0x00033d0a cmp r1, 0x4a                                      |         
    0x00033d0c ittt eq                                           |         
                                                                 |         if (r1 != 0x4a) {
    0x00033d0e ldrbeq r1, [r4, 0x1c]                             |             r1 = *((r4 + 0x1c));
                                                                 |         }
                                                                 |         if (r1 != 0x4a) {
    0x00033d10 orreq r1, r1, 2                                   |             r1 |= 2;
                                                                 |         }
                                                                 |         if (r1 != 0x4a) {
    0x00033d14 strb r1, [r4, 0x1c]                               |             *((r4 + 0x1c)) = r1;
                                                                 |             goto label_34;
                                                                 |         }
                                                                 |     }
                                                                 | label_34:
    0x00033d16 cmp r7, 0x1f                                      |     
                                                                 |     if (r7 <= 0x1f) {
    0x00033d18 ble 0x33d62                                       |         goto label_8;
                                                                 |     }
                                                                 | label_6:
    0x00033d1a ldrh r1, [r3, 0xc]                                |     r1 = *((r3 + 0xc));
    0x00033d1c lsls r1, r1, 0x1f                                 |     r1 <<= 0x1f;
                                                                 |     if (r1 < r1) {
    0x00033d1e bmi 0x33c72                                       |         goto label_3;
                                                                 |     }
                                                                 | label_7:
    0x00033d20 ldrb r3, [r3, 0xf]                                |     r3 = *((r3 + 0xf));
    0x00033d22 subs r3, 0x49                                     |     r3 -= 0x49;
    0x00033d24 cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x00033d26 bhi 0x33c92                                       |         goto label_4;
                                                                 |     }
    0x00033d28 ldr r3, [sp, 0x5c]                                |     r3 = *(arg_5ch);
    0x00033d2a ldr r3, [r3]                                      |     r3 = *(r3);
    0x00033d2c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033d2e beq 0x33c92                                       |         goto label_4;
                                                                 |     }
                                                                 | label_30:
    0x00033d30 ldr.w r3, [fp, 0x1c]                              |     r3 = *(arg_1ch);
    0x00033d34 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00033d36 bne.w 0x33fa8                                     |         goto label_35;
                                                                 |     }
                                                                 | label_17:
    0x00033d3a ldr r2, [sp, 0x60]                                |     r2 = *(x);
    0x00033d3c movs r3, 1                                        |     r3 = 1;
    0x00033d3e str r3, [r2]                                      |     *(r2) = r3;
    0x00033d40 b 0x33c38                                         |     goto label_5;
                                                                 | label_33:
    0x00033d42 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00033d44 asrs r0, r7                                       |     r0 >>= r7;
    0x00033d46 lsls r0, r0, 0x1f                                 |     r0 <<= 0x1f;
                                                                 |     if (r0 < r0) {
    0x00033d48 bmi 0x33d7c                                       |         goto label_36;
                                                                 |     }
    0x00033d4a ldrh r6, [r4, 0x1e]                               |     r6 = *((r4 + 0x1e));
    0x00033d4c movs r0, 1                                        |     r0 = 1;
    0x00033d4e lsls r0, r2                                       |     r0 <<= r2;
    0x00033d50 cmp r1, 0x4a                                      |     
    0x00033d52 orr.w r0, r0, r6                                  |     r0 |= r6;
    0x00033d56 strh r0, [r4, 0x1e]                               |     *((r4 + 0x1e)) = r0;
                                                                 |     if (r1 == 0x4a) {
    0x00033d58 bne 0x33d62                                       |         
                                                                 | label_9:
    0x00033d5a ldrb r1, [r4, 0x1c]                               |         r1 = *((r4 + 0x1c));
    0x00033d5c orr r1, r1, 2                                     |         r1 |= 2;
    0x00033d60 strb r1, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r1;
                                                                 |     }
                                                                 | label_8:
    0x00033d62 ldr.w r1, [fp, 0x58]                              |     r1 = *(arg_58h);
    0x00033d66 movs r6, 1                                        |     r6 = 1;
    0x00033d68 lsl.w r0, r6, r7                                  |     r0 = r6 << r7;
    0x00033d6c tst r0, r1                                        |     
                                                                 |     if ((r0 & r1) == 0) {
    0x00033d6e beq 0x33d1a                                       |         goto label_6;
                                                                 |     }
    0x00033d70 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x00033d72 lsl.w r0, r6, r2                                  |     r0 = r6 << r2;
    0x00033d76 orrs r1, r0                                       |     r1 |= r0;
    0x00033d78 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x00033d7a b 0x33d20                                         |     goto label_7;
                                                                 | label_36:
    0x00033d7c cmp r1, 0x4a                                      |     
                                                                 |     if (r1 != 0x4a) {
    0x00033d7e bne 0x33d62                                       |         goto label_8;
                                                                 |     }
    0x00033d80 b 0x33d5a                                         |     goto label_9;
                                                                 | label_32:
    0x00033d82 ldr r2, [sp]                                      |     r2 = *(sp);
    0x00033d84 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00033d86 ldr r1, [pc, 0x284]                               |     
    0x00033d88 ldr r0, [sp, 4]                                   |     r0 = var_4h;
    0x00033d8a add r3, r2                                        |     r3 += r2;
    0x00033d8c ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00033d8e add r1, pc                                        |     r1 = 0x67da0;
    0x00033d90 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00033d92 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_13:
    0x00033d96 movs r6, 1                                        |     r6 = 1;
    0x00033d98 b 0x33c22                                         |     goto label_10;
                                                                 | label_26:
    0x00033d9a cmp r0, 0x65                                      |     
                                                                 |     if (r0 == 0x65) {
    0x00033d9c beq.w 0x33f2a                                     |         goto label_37;
                                                                 |     }
    0x00033da0 cmp.w r0, 0x204                                   |     
                                                                 |     if (r0 == 0x204) {
    0x00033da4 beq.w 0x33f24                                     |         goto label_38;
                                                                 |     }
    0x00033da8 cmp r0, 0x64                                      |     
                                                                 |     if (r0 == 0x64) {
    0x00033daa beq.w 0x33f1e                                     |         goto label_39;
                                                                 |     }
    0x00033dae uxtb r3, r0                                       |     r3 = (int8_t) r0;
    0x00033db0 cmp r3, 0x1c                                      |     
                                                                 |     if (r3 > 0x1c) {
    0x00033db2 bgt 0x33e26                                       |         goto label_40;
                                                                 |     }
    0x00033db4 ldr r2, [pc, 0x258]                               |     
    0x00033db6 add r2, pc                                        |     r2 = 0x67dca;
    0x00033db8 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x00033dbc ldr.w r2, [r3, 0x220]                             |     r2 = *((r3 + 0x220));
    0x00033dc0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00033dc2 bne 0x33e2a                                       |         goto label_14;
                                                                 |     }
    0x00033dc4 ldr r2, [pc, 0x24c]                               |     
    0x00033dc6 add r2, pc                                        |     r2 = 0x67dde;
    0x00033dc8 b 0x33e2a                                         |     goto label_14;
                                                                 | label_25:
    0x00033dca ldrb.w r3, [r2, 0x57]                             |     r3 = *((r2 + 0x57));
    0x00033dce cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00033dd0 bne.w 0x33c14                                     |         goto label_11;
                                                                 |     }
    0x00033dd4 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x00033dd8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00033dda bne.w 0x33c14                                     |         goto label_11;
                                                                 |     }
    0x00033dde mov r0, r2                                        |     r0 = r2;
    0x00033de0 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x00033de4 ldr.w r0, [r8, 8]                                 |     r0 = *((r8 + 8));
    0x00033de8 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00033dec b 0x33c1c                                         |     goto label_12;
                                                                 | label_31:
    0x00033dee cmp.w sb, -1                                      |     
    0x00033df2 add.w r3, sb, 1                                   |     r3 = sb + 1;
    0x00033df6 ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x00033df8 strh r3, [r4, 0x2c]                               |     *((r4 + 0x2c)) = r3;
                                                                 |     if (sb == -1) {
    0x00033dfa beq 0x33e40                                       |         goto label_41;
                                                                 |     }
    0x00033dfc ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x00033dfe subs r3, 4                                        |     r3 -= 4;
    0x00033e00 b 0x33e08                                         |     
                                                                 |     while (r2 != 0) {
    0x00033e02 adds r6, 1                                        |         r6++;
    0x00033e04 cmp sb, r6                                        |         
                                                                 |         if (sb < r6) {
    0x00033e06 blt 0x33e40                                       |             goto label_41;
                                                                 |         }
    0x00033e08 ldr r2, [r3, 4]!                                  |         r2 = *((r3 += 4));
    0x00033e0c cmp r2, 0                                         |         
    0x00033e0e bne 0x33e02                                       |         
                                                                 |     }
    0x00033e10 ldr r2, [sp]                                      |     r2 = *(sp);
    0x00033e12 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00033e14 ldr r1, [pc, 0x200]                               |     
    0x00033e16 ldr r0, [sp, 4]                                   |     r0 = var_4h;
    0x00033e18 add r3, r2                                        |     r3 += r2;
    0x00033e1a ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00033e1c add r1, pc                                        |     r1 = 0x67e38;
    0x00033e1e ldr r2, [r3]                                      |     r2 = *(r3);
    0x00033e20 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00033e24 b 0x33d96                                         |     goto label_13;
                                                                 | label_40:
    0x00033e26 ldr r2, [pc, 0x1f4]                               |     
    0x00033e28 add r2, pc                                        |     r2 = 0x67e4a;
                                                                 | label_14:
    0x00033e2a ldr r1, [pc, 0x1f4]                               |     
    0x00033e2c ldr r0, [sp, 4]                                   |     r0 = var_4h;
    0x00033e2e add r1, pc                                        |     r1 = 0x67e54;
    0x00033e30 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00033e34 ldr.w r0, [r8, 8]                                 |     r0 = *((r8 + 8));
    0x00033e38 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00033e3c b 0x33c1c                                         |     goto label_12;
                                                                 | label_28:
    0x00033e3e strh r6, [r4, 0x2c]                               |     *((r4 + 0x2c)) = r6;
                                                                 | label_41:
    0x00033e40 ldr.w r1, [fp, 0x1c]                              |     r1 = *(arg_1ch);
    0x00033e44 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00033e46 ldr.w r2, [fp, 0x14]                              |     r2 = *(arg_5ch);
    0x00033e4a bfi r3, r1, 0, 1                                  |     value_1 = BIT_MASK (0, 1);
                                                                 |     value_2 = r1 & value_1;
                                                                 |     value_1 = ~value_1;
                                                                 |     r3 &= value_1;
                                                                 |     r3 |= value_2;
    0x00033e4e movs r1, 0                                        |     r1 = 0;
    0x00033e50 strb r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00033e52 ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x00033e56 str r2, [r4, 0x18]                                |     *((r4 + 0x18)) = r2;
    0x00033e58 ldr.w r2, [fp, 0x18]                              |     r2 = *(x);
    0x00033e5c str.w r1, [fp, 0x1c]                              |     __asm ("str.w r1, [arg_1ch]");
    0x00033e60 str r2, [r4, 0x20]                                |     *((r4 + 0x20)) = r2;
                                                                 |     if (r3 != 0) {
    0x00033e62 cbz r3, 0x33e68                                   |         
    0x00033e64 ldrsb.w r3, [fp, 8]                               |         r3 = *(arg_50h);
                                                                 |     }
    0x00033e68 vldr d7, [fp, 0x28]                               |     __asm ("vldr d7, [fp, 0x28]");
    0x00033e6c movs r5, 0                                        |     r5 = 0;
    0x00033e6e vmov.f64 d16, 1.000000e+00                        |     __asm ("vmov.f64 d16, 1");
    0x00033e72 strb r3, [r4, 0x1d]                               |     *((r4 + 0x1d)) = r3;
    0x00033e74 strh r5, [r4, 0x12]                               |     *((r4 + 0x12)) = r5;
    0x00033e76 vcmpe.f64 d7, d16                                 |     __asm ("vcmpe.f64 d7, d16");
    0x00033e7a vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r5 >= 0) {
    0x00033e7e bls 0x33ea0                                       |         
    0x00033e80 vldr d16, [pc, 0x174]                             |         __asm ("vldr d16, aav.0x000000ff");
    0x00033e84 vcmpe.f64 d7, d16                                 |         __asm ("vcmpe.f64 d7, d16");
    0x00033e88 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |         if (r5 < 0) {
    0x00033e8c bls 0x33f62                                       |             goto label_42;
                                                                 |         }
    0x00033e8e vmov r3, s15                                      |         __asm ("vmov r3, s15");
    0x00033e92 lsrs r3, r3, 0x14                                 |         r3 >>= 0x14;
    0x00033e94 subw r3, r3, 0x3fe                                |         __asm ("subw r3, r3, aav.0x000000ff");
    0x00033e98 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00033e9c lsls r5, r3, 1                                    |         r5 = r3 << 1;
    0x00033e9e sxth r5, r5                                       |         __asm ("sxth r5, r5");
                                                                 |     }
                                                                 | label_16:
    0x00033ea0 ldr.w r3, [fp, 0x30]                              |     r3 = *(arg_30h);
    0x00033ea4 ldr.w r0, [fp, 0x34]                              |     r0 = *(arg_34h);
    0x00033ea8 strh r5, [r4, 0x14]                               |     *((r4 + 0x14)) = r5;
    0x00033eaa cmp r3, 8                                         |     
    0x00033eac sbcs r2, r0, 0                                    |     __asm ("sbcs r2, r0, 0");
                                                                 |     if (r3 >= 8) {
    0x00033eb0 bhs 0x33f30                                       |         goto label_43;
                                                                 |     }
    0x00033eb2 cmp r3, 2                                         |     
    0x00033eb4 sbcs r2, r0, 0                                    |     __asm ("sbcs r2, r0, 0");
    0x00033eb8 it lo                                             |     
                                                                 |     if (r3 >= 2) {
    0x00033eba movlo r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 > 2) {
    0x00033ebc blo 0x33ee6                                       |         
    0x00033ebe adds r2, r3, r3                                   |         r2 = r3 + r3;
    0x00033ec0 adcs r0, r0                                       |         __asm ("adcs r0, r0");
    0x00033ec2 cmp r2, 8                                         |         
    0x00033ec4 sbcs r0, r0, 0                                    |         __asm ("sbcs r0, r0, 0");
                                                                 |         if (r2 >= 8) {
    0x00033ec8 bhs.w 0x33fea                                     |             goto label_44;
                                                                 |         }
    0x00033ecc lsls r2, r3, 2                                    |         r2 = r3 << 2;
    0x00033ece movs r3, 0x14                                     |         r3 = 0x14;
                                                                 | label_15:
    0x00033ed0 ldr r1, [pc, 0x150]                               |         
    0x00033ed2 and r2, r2, 7                                     |         r2 &= 7;
    0x00033ed6 subs r3, 0xa                                      |         r3 -= 0xa;
    0x00033ed8 add r1, pc                                        |         r1 = 0x67f00;
    0x00033eda add.w r2, r1, r2, lsl 1                           |         r2 = r1 + (r2 << 1);
    0x00033ede ldrh.w r2, [r2, 0xd58]                            |         r2 = *((r2 + 0xd58));
    0x00033ee2 add r3, r2                                        |         r3 += r2;
    0x00033ee4 sxth r3, r3                                       |         __asm ("sxth r3, r3");
                                                                 |     }
    0x00033ee6 ldr.w r2, [fp, 0x38]                              |     r2 = *(arg_38h);
    0x00033eea mov r1, r4                                        |     r1 = r4;
    0x00033eec strh r3, [r4, 0x16]                               |     *((r4 + 0x16)) = r3;
    0x00033eee ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00033ef0 lsls r2, r2, 0x1f                                 |     r2 <<= 0x1f;
    0x00033ef2 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00033ef4 ite mi                                            |     
                                                                 |     if (r2 >= r2) {
    0x00033ef6 orrmi r3, r3, 0x1000                              |         r3 |= 0x1000;
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x00033efa bic r3, r3, 0x1000                                |         r3 = BIT_MASK (r3, 0x1000);
                                                                 |     }
    0x00033efe str r3, [r4, 0x28]                                |     *((r4 + 0x28)) = r3;
    0x00033f00 bl 0x1d914                                        |     fcn_0001d914 (r0, r1);
    0x00033f04 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00033f06 mov r6, r0                                        |     r6 = r0;
    0x00033f08 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 >= r3) {
    0x00033f0a bpl.w 0x33c22                                     |         goto label_10;
                                                                 |     }
    0x00033f0e ldr r0, [r4, 0x20]                                |     r0 = *((r4 + 0x20));
    0x00033f10 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00033f14 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00033f16 bfc r3, 0, 1                                      |     value_3 = BIT_MASK (1, );
                                                                 |     value_3 = ~value_3;
                                                                 |     r3 &= value_3;
    0x00033f1a strb r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00033f1c b 0x33c22                                         |     goto label_10;
                                                                 | label_39:
    0x00033f1e ldr r2, [pc, 0x108]                               |     
    0x00033f20 add r2, pc                                        |     r2 = 0x67f4e;
    0x00033f22 b 0x33e2a                                         |     goto label_14;
                                                                 | label_38:
    0x00033f24 ldr r2, [pc, 0x104]                               |     
    0x00033f26 add r2, pc                                        |     r2 = 0x67f56;
    0x00033f28 b 0x33e2a                                         |     goto label_14;
                                                                 | label_37:
    0x00033f2a ldr r2, [pc, 0x104]                               |     
    0x00033f2c add r2, pc                                        |     r2 = 0x67f62;
    0x00033f2e b 0x33e2a                                         |     goto label_14;
                                                                 | label_43:
    0x00033f30 clz r1, r0                                        |     r1 &= r0;
                                                                 |     if (r0 == 0) {
    0x00033f34 cbnz r0, 0x33f3c                                  |         
    0x00033f36 clz r1, r3                                        |         r1 &= r3;
    0x00033f3a adds r1, 0x20                                     |         r1 += 0x20;
                                                                 |     }
    0x00033f3c rsb.w r1, r1, 0x3c                                |     r1 = 0x3c - r1;
    0x00033f40 lsr.w r2, r3, r1                                  |     r2 = r3 >> r1;
    0x00033f44 add.w r3, r1, r1, lsl 2                           |     r3 = r1 + (r1 << 2);
    0x00033f48 rsb.w r5, r1, 0x20                                |     r5 = 0x20 - r1;
    0x00033f4c lsls r3, r3, 1                                    |     r3 <<= 1;
    0x00033f4e lsl.w r5, r0, r5                                  |     r5 = r0 << r5;
    0x00033f52 subs r1, 0x20                                     |     r1 -= 0x20;
    0x00033f54 lsr.w r1, r0, r1                                  |     r1 = r0 >> r1;
    0x00033f58 adds r3, 0x28                                     |     r3 += 0x28;
    0x00033f5a orrs r2, r5                                       |     r2 |= r5;
    0x00033f5c uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00033f5e orrs r2, r1                                       |     r2 |= r1;
    0x00033f60 b 0x33ed0                                         |     goto label_15;
                                                                 | label_42:
    0x00033f62 vmov r0, r1, d7                                   |     __asm ("vmov r0, r1, d7");
    0x00033f66 bl 0x8cb58                                        |     r0 = fcn_0008cb58 (r0, r1);
    0x00033f6a mov r3, r0                                        |     r3 = r0;
    0x00033f6c mov r0, r1                                        |     r0 = r1;
    0x00033f6e cmp r3, 8                                         |     
    0x00033f70 sbcs r2, r1, 0                                    |     __asm ("sbcs r2, r1, 0");
                                                                 |     if (r3 >= 8) {
    0x00033f74 bhs 0x33fb8                                       |         goto label_45;
                                                                 |     }
    0x00033f76 cmp r3, 2                                         |     
    0x00033f78 sbcs r2, r1, 0                                    |     __asm ("sbcs r2, r1, 0");
                                                                 |     if (r3 <= 2) {
    0x00033f7c blo 0x33ea0                                       |         goto label_16;
                                                                 |     }
    0x00033f7e adds r1, r3, r3                                   |     r1 = r3 + r3;
    0x00033f80 adcs r0, r0                                       |     __asm ("adcs r0, r0");
    0x00033f82 cmp r1, 8                                         |     
    0x00033f84 sbcs r0, r0, 0                                    |     __asm ("sbcs r0, r0, 0");
                                                                 |     if (r1 >= 8) {
    0x00033f88 bhs 0x33fee                                       |         goto label_46;
                                                                 |     }
    0x00033f8a lsls r1, r3, 2                                    |     r1 = r3 << 2;
    0x00033f8c movs r3, 0x14                                     |     r3 = 0x14;
                                                                 |     do {
                                                                 | label_18:
    0x00033f8e sub.w r5, r3, 0xa                                 |         r5 = r3 - 0xa;
    0x00033f92 ldr r3, [pc, 0xa0]                                |         
    0x00033f94 and r1, r1, 7                                     |         r1 &= 7;
    0x00033f98 add r3, pc                                        |         r3 = 0x67fd2;
    0x00033f9a add.w r3, r3, r1, lsl 1                           |         r3 += (r1 << 1);
    0x00033f9e ldrh.w r3, [r3, 0xd58]                            |         r3 = *((r3 + 0xd58));
    0x00033fa2 add r5, r3                                        |         r5 += r3;
    0x00033fa4 sxth r5, r5                                       |         __asm ("sxth r5, r5");
    0x00033fa6 b 0x33ea0                                         |         goto label_16;
                                                                 | label_35:
    0x00033fa8 ldr.w r0, [fp, 0x18]                              |         r0 = *(x);
    0x00033fac blx 0x9c24                                        |         fcn_00009c24 ();
    0x00033fb0 movs r3, 0                                        |         r3 = 0;
    0x00033fb2 strd r3, r3, [fp, 0x18]                           |         __asm ("strd r3, r3, [fp, 0x18]");
    0x00033fb6 b 0x33d3a                                         |         goto label_17;
                                                                 | label_45:
    0x00033fb8 clz r2, r1                                        |         r2 &= r1;
                                                                 |         if (r1 == 0) {
    0x00033fbc cbnz r1, 0x33fc4                                  |             
    0x00033fbe clz r2, r3                                        |             r2 &= r3;
    0x00033fc2 adds r2, 0x20                                     |             r2 += 0x20;
                                                                 |         }
    0x00033fc4 rsb.w r2, r2, 0x3c                                |         r2 = 0x3c - r2;
    0x00033fc8 lsr.w r1, r3, r2                                  |         r1 = r3 >> r2;
    0x00033fcc add.w r3, r2, r2, lsl 2                           |         r3 = r2 + (r2 << 2);
    0x00033fd0 rsb.w r5, r2, 0x20                                |         r5 = 0x20 - r2;
    0x00033fd4 lsls r3, r3, 1                                    |         r3 <<= 1;
    0x00033fd6 lsl.w r5, r0, r5                                  |         r5 = r0 << r5;
    0x00033fda subs r2, 0x20                                     |         r2 -= 0x20;
    0x00033fdc lsr.w r2, r0, r2                                  |         r2 = r0 >> r2;
    0x00033fe0 adds r3, 0x28                                     |         r3 += 0x28;
    0x00033fe2 orrs r1, r5                                       |         r1 |= r5;
    0x00033fe4 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00033fe6 orrs r1, r2                                       |         r1 |= r2;
    0x00033fe8 b 0x33f8e                                         |         
                                                                 |     } while (1);
                                                                 | label_44:
    0x00033fea movs r3, 0x1e                                     |     r3 = 0x1e;
    0x00033fec b 0x33ed0                                         |     goto label_15;
                                                                 | label_46:
    0x00033fee movs r3, 0x1e                                     |     r3 = 0x1e;
    0x00033ff0 b 0x33f8e                                         |     goto label_18;
                                                                 | label_23:
    0x00033ff2 movs r3, 0                                        |     r3 = 0;
    0x00033ff4 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00033ff6 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x34038 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00034038 ()                                      | void fcn_00034038 (int16_t arg_0h, int16_t arg_4h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg_54h, int16_t arg_58h, int16_t arg_c0h, int16_t arg1, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int32_t var_74h;
                                                                 |     int32_t var_74h_2;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00034038 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003403c mov r4, r0                                        |     r4 = r0;
    0x0003403e vpush {d8}                                        |     __asm ("vpush {d8}");
    0x00034042 sub sp, 0x94                                      |     
    0x00034044 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00034046 ldr.w r0, [pc, 0x7a0]                             |     r0 = *(0x000347e8);
    0x0003404a ldr.w r1, [pc, 0x7a0]                             |     
    0x0003404e ldrd r6, r7, [sp, 0xc0]                           |     __asm ("ldrd r6, r7, [arg_c0h]");
    0x00034052 add r0, pc                                        |     r0 += pc;
    0x00034054 ldr r1, [r0, r1]                                  |     r1 = *((r0 + r1));
    0x00034056 ldr r1, [r1]                                      |     r1 = *(0x347ee);
    0x00034058 str r1, [sp, 0x8c]                                |     var_8ch = r1;
    0x0003405a mov.w r1, 0                                       |     r1 = 0;
    0x0003405e strd r2, r3, [sp, 0x2c]                           |     __asm ("strd r2, r3, [var_2ch]");
    0x00034062 mov r3, r4                                        |     r3 = r4;
    0x00034064 ldr r4, [r4, 8]                                   |     r4 = *((r4 + 8));
    0x00034066 ldrd r1, r0, [r3]                                 |     __asm ("ldrd r1, r0, [r3]");
    0x0003406a movs r2, 0                                        |     r2 = 0;
    0x0003406c str r2, [sp, 0x6c]                                |     var_6ch = r2;
    0x0003406e ldrb r3, [r4, 0x10]                               |     r3 = *((r4 + 0x10));
    0x00034070 ldr r5, [r0, 0xc]                                 |     r5 = *((r0 + 0xc));
    0x00034072 str r0, [sp, 0x38]                                |     var_38h = r0;
    0x00034074 ldr.w sl, [r1, 4]                                 |     sl = *((r1 + 4));
    0x00034078 lsl.w r8, r3, 6                                   |     r8 = r3 << 6;
    0x0003407c mov r3, r0                                        |     r3 = r0;
    0x0003407e ldr r0, [r1]                                      |     r0 = *(r1);
    0x00034080 cmp r5, r2                                        |     
    0x00034082 add.w ip, sl, r8                                  |     
    0x00034086 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00034088 str r4, [sp, 0x40]                                |     var_40h = r4;
    0x0003408a str r0, [sp, 0x24]                                |     var_24h = r0;
    0x0003408c ldr r0, [r1, 8]                                   |     r0 = *((r1 + 8));
    0x0003408e str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00034090 ldr.w r0, [ip, 0x18]                              |     r0 = *((ip + 0x18));
    0x00034094 str r0, [sp, 0x44]                                |     var_44h = r0;
                                                                 |     if (r5 <= r2) {
    0x00034096 ble.w 0x34766                                     |         goto label_23;
                                                                 |     }
    0x0003409a ldr.w r4, [ip, 0x30]                              |     r4 = *((ip + 0x30));
    0x0003409e adds r3, 0x30                                     |     r3 += 0x30;
    0x000340a0 mov lr, r2                                        |     lr = r2;
    0x000340a2 str r1, [sp, 0x28]                                |     var_28h = r1;
    0x000340a4 str.w ip, [sp, 0x20]                              |     __asm ("str.w ip, [var_20h]");
                                                                 |     do {
    0x000340a8 ldr r1, [r3, -0x1c]                               |         r1 = *((r3 - 0x1c));
    0x000340ac movw r0, 0xffbf                                   |         r0 = 0xffbf;
    0x000340b0 ldrh ip, [r3, -0x26]                              |         ip = *((r3 - 0x26));
    0x000340b4 cmp r1, r4                                        |         
    0x000340b6 and.w r0, ip, r0                                  |         r0 = ip & r0;
    0x000340ba strh r0, [r3, -0x26]                              |         *((r3 - 0x26)) = r0;
                                                                 |         if (r1 == r4) {
    0x000340be bne 0x34116                                       |             
    0x000340c0 ldr r1, [r3, -0x10]                               |             r1 = *((r3 - 0x10));
    0x000340c4 and.w sb, r6, r1                                  |             sb = r6 & r1;
    0x000340c8 ldr r1, [r3, -0xc]                                |             r1 = *((r3 - 0xc));
    0x000340cc and.w fp, r7, r1                                  |             
    0x000340d0 orrs.w fp, sb, fp                                 |             
                                                                 |             if (fp != sb) {
    0x000340d4 bne 0x34116                                       |                 goto label_24;
                                                                 |             }
    0x000340d6 ldrh sb, [r3, -0x24]                              |             sb = *((r3 - 0x24));
    0x000340da bic sb, sb, 0x800                                 |             sb = BIT_MASK (sb, 0x800);
    0x000340de cmp.w sb, 0                                       |             
                                                                 |             if (sb == 0) {
    0x000340e2 beq 0x34116                                       |                 goto label_24;
                                                                 |             }
    0x000340e4 tst.w ip, 0x80                                    |             
                                                                 |             if ((ip & 0x80) != 0) {
    0x000340e8 bne 0x34116                                       |                 goto label_24;
                                                                 |             }
    0x000340ea ldr r1, [sp, 0x20]                                |             r1 = var_20h;
    0x000340ec ldrb.w ip, [r1, 0x2c]                             |             ip = *((r1 + 0x2c));
    0x000340f0 tst.w ip, 0x58                                    |             
                                                                 |             if ((ip & 0x58) != 0) {
    0x000340f4 beq 0x3410a                                       |                 
    0x000340f6 ldr ip, [r3, -0x30]                               |                 ip = *((r3 - 0x30));
    0x000340fa ldr.w r1, [ip, 4]                                 |                 r1 = *((ip + 4));
    0x000340fe lsls r1, r1, 0x1e                                 |                 r1 <<= 0x1e;
                                                                 |                 if (r1 == r1) {
    0x00034100 beq 0x34116                                       |                     goto label_24;
                                                                 |                 }
    0x00034102 ldr.w ip, [ip, 0x24]                              |                 ip = *((ip + 0x24));
    0x00034106 cmp r4, ip                                        |                 
                                                                 |                 if (r4 != ip) {
    0x00034108 bne 0x34116                                       |                     goto label_24;
                                                                 |                 }
                                                                 |             }
    0x0003410a add.w lr, lr, 1                                   |             lr++;
    0x0003410e orr r0, r0, 0x40                                  |             r0 |= 0x40;
    0x00034112 strh r0, [r3, -0x26]                              |             *((r3 - 0x26)) = r0;
                                                                 |         }
                                                                 | label_24:
    0x00034116 adds r2, 1                                        |         r2++;
    0x00034118 adds r3, 0x30                                     |         r3 += 0x30;
    0x0003411a cmp r2, r5                                        |         
    0x0003411c bne 0x340a8                                       |         
                                                                 |     } while (r2 != r5);
    0x0003411e add.w r7, lr, lr, lsl 1                           |     r7 = lr + (lr << 1);
    0x00034122 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00034124 mov r4, lr                                        |     r4 = lr;
    0x00034126 lsls r7, r7, 3                                    |     r7 <<= 3;
    0x00034128 add.w r3, r7, 0x60                                |     r3 = r7 + 0x60;
    0x0003412c str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 | label_19:
    0x0003412e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00034130 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00034132 beq 0x34202                                       |         goto label_25;
                                                                 |     }
    0x00034134 ldr r5, [r3]                                      |     r5 = *(r3);
    0x00034136 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00034138 ble.w 0x347dc                                     |         goto label_26;
                                                                 |     }
    0x0003413c ldr.w r7, [pc, 0x6b0]                             |     r7 = *(0x000347f0);
    0x00034140 mov.w sb, 0                                       |     sb = 0;
    0x00034144 ldr.w r2, [pc, 0x6ac]                             |     r2 = *(0x000347f4);
    0x00034148 mov fp, sb                                        |     
    0x0003414a mov r6, r3                                        |     r6 = r3;
    0x0003414c mov sb, r1                                        |     sb = r1;
    0x0003414e add r7, pc                                        |     r7 += pc;
    0x00034150 str r4, [sp, 0x48]                                |     var_48h = r4;
    0x00034152 add r2, pc                                        |     r2 += pc;
    0x00034154 str r2, [sp, 0x28]                                |     var_28h = r2;
                                                                 | label_5:
    0x00034156 ldr r4, [r6, 8]                                   |     r4 = *((r6 + 8));
    0x00034158 mov.w r3, 1                                       |     r3 = 1;
    0x0003415c strh.w r3, [sp, 0x84]                             |     x = r3;
    0x00034160 movs r0, 0                                        |     r0 = 0;
    0x00034162 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00034164 str r0, [sp, 0x88]                                |     var_88h = r0;
    0x00034166 strd r3, r7, [sp, 0x74]                           |     __asm ("strd r3, r7, [var_74h]");
    0x0003416a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0003416c beq.w 0x34332                                     |         goto label_27;
                                                                 |     }
    0x00034170 mov r1, r4                                        |     r1 = r4;
    0x00034172 add r0, sp, 0x70                                  |     r0 += var_70h;
    0x00034174 bl 0x2cd88                                        |     fcn_0002cd88 (r0, r1);
    0x00034178 ldrh.w r0, [sp, 0x84]                             |     r0 = x;
    0x0003417c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003417e bne.w 0x34332                                     |         goto label_27;
                                                                 |     }
    0x00034180 strh r0, [r3, 6]                                  |     *((r3 + 6)) = r0;
    0x00034182 ldrb r0, [r6, 0x10]                               |     r0 = *((r6 + 0x10));
    0x00034184 lsls r3, r0, 0x1e                                 |     r3 = r0 << 0x1e;
                                                                 |     if (r3 < r0) {
    0x00034186 bmi 0x341f6                                       |         goto label_4;
                                                                 |     }
    0x00034188 ldrb r0, [r4]                                     |     r0 = *(r4);
    0x0003418a cmp r0, 0xa7                                      |     
                                                                 |     if (r0 == 0xa7) {
    0x0003418c beq.w 0x34324                                     |         goto label_28;
                                                                 |     }
    0x00034190 cmp r0, 0x71                                      |     
                                                                 |     if (r0 != 0x71) {
    0x00034192 bne 0x341f6                                       |         goto label_4;
                                                                 |     }
    0x00034194 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00034196 ldrb r0, [r3]                                     |     r0 = *(r3);
    0x00034198 cmp r0, 0xa7                                      |     
                                                                 |     if (r0 != 0xa7) {
    0x0003419a bne 0x341f6                                       |         goto label_4;
                                                                 |     }
    0x0003419c add.w r0, sl, r8                                  |     r0 = sl + r8;
    0x000341a0 ldr r2, [r0, 0x30]                                |     r2 = *((r0 + 0x30));
    0x000341a2 ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x000341a4 cmp r0, r2                                        |     
                                                                 |     if (r0 != r2) {
    0x000341a6 bne 0x341f6                                       |         goto label_4;
                                                                 |     }
    0x000341a8 ldrsh.w r0, [r3, 0x20]                            |     r0 = *((r3 + 0x20));
    0x000341ac cmp r0, 0                                         |     
    0x000341ae strh r0, [r4, 0x20]                               |     *((r4 + 0x20)) = r0;
                                                                 |     if (r0 < 0) {
    0x000341b0 blt.w 0x34332                                     |         goto label_27;
                                                                 |     }
    0x000341b4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000341b6 add.w ip, r0, r0, lsl 1                           |     
    0x000341ba ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000341bc ldr.w r0, [r3, ip, lsl 2]                         |     offset_0 = ip << 2;
                                                                 |     r0 = *((r3 + offset_0));
    0x000341c0 add.w lr, r3, ip, lsl 2                           |     lr = r3 + (ip << 2);
    0x000341c4 ldrh.w lr, [lr, 0xa]                              |     
    0x000341c8 tst.w lr, 0x200                                   |     
                                                                 |     if ((lr & 0x200) == 0) {
    0x000341cc beq.w 0x3475c                                     |         goto label_29;
                                                                 |     }
    0x000341d0 ldrb r3, [r0]                                     |     r3 = *(r0);
                                                                 |     if (r3 == 0) {
    0x000341d2 cbz r3, 0x341dc                                   |         goto label_30;
                                                                 |     }
                                                                 |     do {
    0x000341d4 ldrb r3, [r0, 1]!                                 |         r3 = *((r0 += 1));
    0x000341d8 cmp r3, 0                                         |         
    0x000341da bne 0x341d4                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_30:
    0x000341dc tst.w lr, 4                                       |     
                                                                 |     if ((lr & 4) != 0) {
    0x000341e0 bne.w 0x34310                                     |         goto label_3;
                                                                 |     }
                                                                 | label_2:
    0x000341e4 add.w ip, r0, 1                                   |     
                                                                 | label_18:
    0x000341e8 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x000341ea mov r1, ip                                        |     r1 = ip;
    0x000341ec blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x000341f0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000341f2 beq.w 0x34332                                     |         goto label_27;
                                                                 |     }
                                                                 | label_4:
    0x000341f6 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x000341f8 mov r1, sb                                        |     r1 = sb;
    0x000341fa mov sb, fp                                        |     sb = fp;
                                                                 | label_22:
    0x000341fc cmp r5, sb                                        |     
                                                                 |     if (r5 == sb) {
    0x000341fe beq.w 0x34342                                     |         goto label_31;
                                                                 |     }
                                                                 | label_25:
    0x00034202 mov.w r8, 0                                       |     r8 = 0;
    0x00034206 mov r6, r8                                        |     r6 = r8;
    0x00034208 mov r5, r8                                        |     r5 = r8;
                                                                 | label_6:
    0x0003420a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003420c ldr r0, [r3]                                      |     r0 = *(r3);
    0x0003420e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00034210 beq.w 0x3436e                                     |         goto label_32;
                                                                 |     }
                                                                 | label_7:
    0x00034214 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00034216 movs r3, 0                                        |     r3 = 0;
    0x00034218 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0003421c mov fp, r0                                        |     
    0x0003421e cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00034222 beq.w 0x34380                                     |         goto label_33;
                                                                 |     }
                                                                 | label_8:
    0x00034226 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00034228 movs r1, 0                                        |     r1 = 0;
    0x0003422a mov r0, fp                                        |     r0 = fp;
    0x0003422c blx 0x97d4                                        |     fcn_000097d4 ();
    0x00034230 str.w r6, [fp, 0x50]                              |     __asm ("str.w r6, [arg_50h]");
    0x00034234 add.w r6, fp, r4, lsl 2                           |     r6 = fp + (r4 << 2);
    0x00034238 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0003423a add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x0003423e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00034240 adds r6, 0x5c                                     |     r6 += 0x5c;
    0x00034242 add.w sl, r6, r4, lsl 2                           |     sl = r6 + (r4 << 2);
    0x00034246 str.w r6, [fp, 4]                                 |     __asm ("str.w r6, [arg_4h]");
    0x0003424a ldr r7, [r2, 0xc]                                 |     r7 = *((r2 + 0xc));
    0x0003424c str.w r3, [fp, 0x4c]                              |     __asm ("str.w r3, [arg_4ch]");
    0x00034250 add.w r3, sl, r8                                  |     r3 = sl + r8;
    0x00034254 strd sl, r3, [fp, 0xc]                            |     __asm ("strd sl, r3, [fp, 0xc]");
    0x00034258 movs r3, 0                                        |     r3 = 0;
    0x0003425a cmp r7, r3                                        |     
    0x0003425c str.w r2, [fp, 0x48]                              |     __asm ("str.w r2, [arg_48h]");
    0x00034260 it le                                             |     
                                                                 |     if (r7 > r3) {
    0x00034262 movle sb, r3                                      |         sb = r3;
                                                                 |     }
    0x00034264 ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x00034266 str.w r3, [fp, 0x54]                              |     __asm ("str.w r3, [arg_54h]");
    0x0003426a it le                                             |     
                                                                 |     if (r7 > r3) {
    0x0003426c strle r3, [sp, 0x28]                              |         var_28h = r3;
                                                                 |     }
                                                                 |     if (r7 <= r3) {
    0x0003426e ble.w 0x343ac                                     |         goto label_34;
                                                                 |     }
    0x00034272 mov sb, r3                                        |     sb = r3;
    0x00034274 adds r2, 0x30                                     |     r2 += 0x30;
    0x00034276 mov r0, r3                                        |     r0 = r3;
    0x00034278 mov.w lr, 0x48                                    |     lr = 0x48;
    0x0003427c mov.w r8, 2                                       |     r8 = 2;
    0x00034280 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00034282 str r5, [sp, 0x20]                                |     var_20h = r5;
    0x00034284 b 0x342c6                                         |     goto label_35;
                                                                 | label_0:
    0x00034286 cmp r1, 0x40                                      |     
                                                                 |     if (r1 == 0x40) {
    0x00034288 beq.w 0x343a2                                     |         goto label_36;
                                                                 |     }
    0x0003428c tst.w ip, 0x180                                   |     
                                                                 |     if ((ip & 0x180) != 0) {
    0x00034290 bne 0x34392                                       |         goto label_37;
                                                                 |     }
    0x00034292 tst.w ip, 0x3c                                    |     
    0x00034296 strb r1, [r3, 4]                                  |     *((r3 + 4)) = r1;
                                                                 |     if ((ip & 0x3c) != 0) {
    0x00034298 beq 0x342ba                                       |         
    0x0003429a ldr r4, [r2, -0x30]                               |         r4 = *((r2 - 0x30));
    0x0003429e ldr.w ip, [r4, 0x10]                              |         ip = *((r4 + 0x10));
    0x000342a2 ldrb.w r4, [ip]                                   |         r4 = *(ip);
    0x000342a6 cmp r4, 0xb0                                      |         
    0x000342a8 it eq                                             |         
                                                                 |         if (r4 != 0xb0) {
    0x000342aa ldrbeq r4, [ip, 2]                                |             r4 = *((ip + 2));
                                                                 |         }
    0x000342ae cmp r4, 0xb1                                      |         
                                                                 |         if (r4 == 0xb1) {
    0x000342b0 beq.w 0x346ce                                     |             goto label_38;
                                                                 |         }
    0x000342b4 cmp r4, 0x8a                                      |         
                                                                 |         if (r4 == 0x8a) {
    0x000342b6 beq.w 0x34696                                     |             goto label_39;
                                                                 |         }
                                                                 |     }
                                                                 | label_1:
    0x000342ba add.w sb, sb, 1                                   |     sb++;
                                                                 |     do {
    0x000342be adds r0, 1                                        |         r0++;
    0x000342c0 adds r2, 0x30                                     |         r2 += 0x30;
    0x000342c2 cmp r0, r7                                        |         
                                                                 |         if (r0 == r7) {
    0x000342c4 beq 0x343aa                                       |             goto label_40;
                                                                 |         }
                                                                 | label_35:
    0x000342c6 ldrh r4, [r2, -0x26]                              |         r4 = *((r2 - 0x26));
    0x000342ca lsls r5, r4, 0x19                                 |         r5 = r4 << 0x19;
    0x000342cc bpl 0x342be                                       |         
                                                                 |     } while (r5 >= r4);
    0x000342ce ldrh ip, [r2, -0x24]                              |     ip = *((r2 - 0x24));
    0x000342d2 add.w r3, sb, sb, lsl 1                           |     r3 = sb + (sb << 1);
    0x000342d6 ldr r1, [r2, -0x18]                               |     r1 = *((r2 - 0x18));
    0x000342da str.w r1, [r6, r3, lsl 2]                         |     __asm ("str.w r1, [r6, r3, lsl 2]");
    0x000342de ubfx r1, ip, 0, 0xe                               |     r1 = (ip >> 0) & ((1 << 0xe) - 1);
    0x000342e2 add.w r3, r6, r3, lsl 2                           |     r3 = r6 + (r3 << 2);
    0x000342e6 cmp r1, 1                                         |     
    0x000342e8 str r0, [r3, 8]                                   |     *((r3 + 8)) = r0;
                                                                 |     if (r1 != 1) {
    0x000342ea bne 0x34286                                       |         goto label_0;
                                                                 |     }
    0x000342ec lsls r4, r4, 0x10                                 |     r4 <<= 0x10;
    0x000342ee itt mi                                            |     
                                                                 |     if (r4 >= r4) {
    0x000342f0 movmi r1, 2                                       |         r1 = 2;
                                                                 |     }
                                                                 |     if (r4 < r4) {
    0x000342f2 strbmi r1, [r3, 4]                                |         *((r3 + 4)) = r1;
                                                                 |         goto label_41;
                                                                 |     }
                                                                 |     if (r4 < r4) {
                                                                 | label_41:
    0x000342f4 bmi 0x342ba                                       |         goto label_1;
                                                                 |     }
    0x000342f6 ldr.w r4, [fp, 0x54]                              |     r4 = *(arg_54h);
    0x000342fa cmp.w sb, 0x1f                                    |     
    0x000342fe itt le                                            |     
                                                                 |     if (sb > 0x1f) {
    0x00034300 lslle r1, r1, sb                                  |         r1 <<= sb;
                                                                 |     }
                                                                 |     if (sb <= 0x1f) {
    0x00034304 orrs r4, r1                                       |         r4 |= r1;
                                                                 |     }
    0x00034306 str.w r4, [fp, 0x54]                              |     __asm ("str.w r4, [arg_54h]");
    0x0003430a strb.w r8, [r3, 4]                                |     *((r3 + 4)) = r8;
    0x0003430e b 0x342ba                                         |     goto label_1;
                                                                 | label_3:
    0x00034310 ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x00034314 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00034316 beq.w 0x341e4                                     |         goto label_2;
                                                                 |     }
    0x0003431a ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x0003431e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00034320 bne 0x34310                                       |         goto label_3;
                                                                 |     }
    0x00034322 b 0x341e4                                         |     goto label_2;
                                                                 | label_28:
    0x00034324 add.w r1, sl, r8                                  |     r1 = sl + r8;
    0x00034328 ldr r0, [r4, 0x1c]                                |     r0 = *((r4 + 0x1c));
    0x0003432a ldr r1, [r1, 0x30]                                |     r1 = *((r1 + 0x30));
    0x0003432c cmp r0, r1                                        |     
                                                                 |     if (r0 != r1) {
    0x0003432e bne.w 0x341f6                                     |         goto label_4;
                                                                 |     }
                                                                 | label_27:
    0x00034332 add.w fp, fp, 1                                   |     
    0x00034336 adds r6, 0x10                                     |     r6 += 0x10;
    0x00034338 cmp r5, fp                                        |     
                                                                 |     if (r5 != fp) {
    0x0003433a bne.w 0x34156                                     |         goto label_5;
                                                                 |     }
    0x0003433e ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x00034340 mov r1, sb                                        |     r1 = sb;
                                                                 | label_31:
    0x00034342 ldrh r6, [r1, 0x2c]                               |     r6 = *((r1 + 0x2c));
    0x00034344 lsl.w r8, r5, 3                                   |     r8 = r5 << 3;
    0x00034348 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003434a lsls r7, r6, 0x18                                 |     r7 = r6 << 0x18;
    0x0003434c add r3, r8                                        |     r3 += r8;
    0x0003434e it pl                                             |     
                                                                 |     if (r7 >= r6) {
    0x00034350 ubfxpl r6, r6, 6, 1                               |         __asm ("ubfxpl r6, r6, 6, 1");
                                                                 |     }
    0x00034354 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (r7 >= r6) {
    0x00034356 bpl.w 0x3420a                                     |         goto label_6;
                                                                 |     }
    0x0003435a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003435c tst.w r6, 0x200                                   |     
    0x00034360 ite eq                                            |     
                                                                 |     if ((r6 & 0x200) != 0) {
    0x00034362 moveq r6, 2                                       |         r6 = 2;
                                                                 |     }
                                                                 |     if ((r6 & 0x200) == 0) {
    0x00034364 movne r6, 3                                       |         r6 = 3;
                                                                 |     }
    0x00034366 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00034368 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003436a bne.w 0x34214                                     |         goto label_7;
                                                                 |     }
                                                                 | label_32:
    0x0003436e mov r1, r0                                        |     r1 = r0;
    0x00034370 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00034372 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x00034376 mov fp, r0                                        |     
    0x00034378 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x0003437c bne.w 0x34226                                     |         goto label_8;
                                                                 |     }
                                                                 | label_33:
    0x00034380 ldr.w r1, [pc, 0x474]                             |     r1 = *(0x000347f8);
    0x00034384 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00034386 add r1, pc                                        |     r1 += pc;
    0x00034388 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_17:
    0x0003438c mov.w r8, 7                                       |     r8 = 7;
    0x00034390 b 0x34674                                         |     goto label_42;
                                                                 | label_37:
    0x00034392 cmp.w r1, 0x100                                   |     
    0x00034396 itet eq                                           |     
                                                                 |     if (r1 != 0x100) {
    0x00034398 moveq r1, 0x47                                    |         r1 = 0x47;
                                                                 |     }
                                                                 |     if (r1 == 0x100) {
    0x0003439a strbne lr, [r3, 4]                                |         
                                                                 |     }
                                                                 |     if (r1 == 0x100) {
    0x0003439e strb r1, [r3, 4]                                  |         *((r3 + 4)) = r1;
                                                                 |     }
    0x000343a0 b 0x342ba                                         |     goto label_1;
                                                                 | label_36:
    0x000343a2 ldrb r1, [r2, -0x21]                              |     r1 = *((r2 - 0x21));
    0x000343a6 strb r1, [r3, 4]                                  |     *((r3 + 4)) = r1;
    0x000343a8 b 0x342ba                                         |     goto label_1;
                                                                 | label_40:
    0x000343aa ldr r5, [sp, 0x20]                                |     r5 = var_20h;
                                                                 | label_34:
    0x000343ac str.w sb, [fp]                                    |     __asm ("str.w sb, [fp]");
    0x000343b0 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000343b2 beq.w 0x3476e                                     |         goto label_43;
                                                                 |     }
    0x000343b6 ldr.w r4, [pc, 0x444]                             |     r4 = *(0x000347fc);
    0x000343ba movs r7, 0                                        |     r7 = 0;
    0x000343bc ldr.w r3, [pc, 0x440]                             |     r3 = *(0x00034800);
    0x000343c0 mov sb, r7                                        |     sb = r7;
    0x000343c2 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x000343c4 mov.w r8, 1                                       |     r8 = 1;
    0x000343c8 add r4, pc                                        |     r4 += pc;
    0x000343ca str.w fp, [sp, 0x3c]                              |     __asm ("str.w fp, [var_3ch]");
    0x000343ce mov fp, sl                                        |     
    0x000343d0 mov sl, r4                                        |     sl = r4;
    0x000343d2 add r3, pc                                        |     r3 += pc;
    0x000343d4 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     do {
    0x000343d6 ldr r4, [r6, 8]                                   |         r4 = *((r6 + 8));
    0x000343d8 movs r1, 0                                        |         r1 = 0;
    0x000343da ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x000343dc strh.w r8, [sp, 0x84]                             |         x = r8;
    0x000343e0 str r1, [sp, 0x88]                                |         var_88h = r1;
    0x000343e2 strd r3, sl, [sp, 0x74]                           |         __asm ("strd r3, sl, [var_74h]");
                                                                 |         if (r4 != 0) {
    0x000343e6 cbz r4, 0x3440c                                   |             
    0x000343e8 mov r1, r4                                        |             r1 = r4;
    0x000343ea add r0, sp, 0x70                                  |             r0 += var_70h;
    0x000343ec bl 0x2cd88                                        |             fcn_0002cd88 (r0, r1);
    0x000343f0 ldrh.w r1, [sp, 0x84]                             |             r1 = x;
                                                                 |             if (r1 != 0) {
    0x000343f4 cbnz r1, 0x3440c                                  |                 goto label_44;
                                                                 |             }
    0x000343f6 ldrsh.w r1, [r4, 0x20]                            |             r1 = *((r4 + 0x20));
    0x000343fa add.w r0, fp, r7, lsl 3                           |             r0 = fp + (r7 << 3);
    0x000343fe str.w r1, [fp, r7, lsl 3]                         |             __asm ("str.w r1, [fp, r7, lsl 3]");
    0x00034402 adds r7, 1                                        |             r7++;
    0x00034404 ldrb r1, [r6, 0x10]                               |             r1 = *((r6 + 0x10));
    0x00034406 and r1, r1, 1                                     |             r1 &= 1;
    0x0003440a strb r1, [r0, 4]                                  |             *((r0 + 4)) = r1;
                                                                 |         }
                                                                 | label_44:
    0x0003440c add.w sb, sb, 1                                   |         sb++;
    0x00034410 adds r6, 0x10                                     |         r6 += 0x10;
    0x00034412 cmp r5, sb                                        |         
    0x00034414 bne 0x343d6                                       |         
                                                                 |     } while (r5 != sb);
    0x00034416 ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x0003441a ldr.w sb, [fp]                                    |     sb = *(fp);
                                                                 | label_20:
    0x0003441e ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00034420 movs r5, 0                                        |     r5 = 0;
    0x00034422 str.w r7, [fp, 8]                                 |     __asm ("str.w r7, [arg_c0h]");
    0x00034426 mov r2, sb                                        |     r2 = sb;
    0x00034428 ldrb r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0003442a strh r5, [r1, 0x12]                               |     *((r1 + 0x12)) = r5;
    0x0003442c strh r5, [r1, 0x2c]                               |     *((r1 + 0x2c)) = r5;
    0x0003442e bfi r3, r5, 0, 1                                  |     value_1 = BIT_MASK (0, 1);
                                                                 |     value_2 = r5 & value_1;
                                                                 |     value_1 = ~value_1;
                                                                 |     r3 &= value_1;
                                                                 |     r3 |= value_2;
    0x00034432 strb r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x00034434 mov.w r3, 0x400                                   |     r3 = 0x400;
    0x00034438 str r3, [r1, 0x28]                                |     *((r1 + 0x28)) = r3;
    0x0003443a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003443c ldr r0, [r3]                                      |     r0 = *(r3);
    0x0003443e bl 0x1d8cc                                        |     r0 = fcn_0001d8cc (r0, r1, r2);
    0x00034442 mov r4, r0                                        |     r4 = r0;
    0x00034444 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00034446 bne.w 0x34706                                     |         goto label_45;
                                                                 |     }
    0x0003444a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003444c vmov.i8 d8, 0xff                                  |     __asm ("vmov.i8 d8, 0xff");
    0x00034450 str r0, [sp, 8]                                   |     var_8h = r0;
    0x00034452 strd fp, r3, [sp, 0xc]                            |     __asm ("strd fp, r3, [var_ch]");
    0x00034456 add r3, sp, 0x6c                                  |     r3 += var_6ch;
    0x00034458 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003445a add r3, sp, 0x70                                  |     r3 += var_70h;
    0x0003445c str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0003445e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00034460 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00034462 ldrd r2, r3, [sp, 0x2c]                           |     __asm ("ldrd r2, r3, [var_2ch]");
    0x00034466 vstr d8, [sp]                                     |     __asm ("vstr d8, [sp]");
    0x0003446a bl 0x33abc                                        |     fcn_00033abc (r0, r1, r2, r3, r4, r5, r6);
    0x0003446e ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00034470 mov r8, r0                                        |     r8 = r0;
    0x00034472 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00034474 bne.w 0x345f2                                     |         goto label_46;
                                                                 |     }
    0x00034478 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0003447c bne.w 0x34618                                     |         goto label_14;
                                                                 |     }
                                                                 | label_10:
    0x00034480 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00034482 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00034484 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00034486 mvns r6, r1                                       |     r6 = ~r1;
    0x00034488 bic.w r0, r3, r1                                  |     r0 = BIT_MASK (r3, r1);
    0x0003448c ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0003448e ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00034490 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00034492 bic.w r5, r3, r2                                  |     r5 = BIT_MASK (r3, r2);
    0x00034496 mvns r7, r2                                       |     r7 = ~r2;
    0x00034498 orrs.w r2, r0, r5                                 |     r2 = r0 | r5;
    0x0003449c ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0003449e str r5, [sp, 0x44]                                |     var_44h = r5;
                                                                 |     if (r2 != r0) {
    0x000344a0 bne.w 0x346fa                                     |         goto label_47;
                                                                 |     }
    0x000344a4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000344a6 beq.w 0x34618                                     |         goto label_14;
                                                                 |     }
                                                                 | label_15:
    0x000344aa ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000344ac vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x000344b0 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x000344b2 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000344b4 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000344b6 vstr d16, [sp]                                    |     __asm ("vstr d16, [sp]");
    0x000344ba strd fp, r3, [sp, 0xc]                            |     __asm ("strd fp, r3, [var_ch]");
    0x000344be movs r3, 0                                        |     r3 = 0;
    0x000344c0 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000344c2 movs r3, 1                                        |     r3 = 1;
    0x000344c4 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000344c6 ldrd r2, r3, [sp, 0x2c]                           |     __asm ("ldrd r2, r3, [var_2ch]");
    0x000344ca bl 0x33abc                                        |     fcn_00033abc (r0, r1, r2, r3, r4, r5, r6);
    0x000344ce ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000344d0 ldr r3, [r2]                                      |     r3 = *(r2);
    0x000344d2 and.w r1, r6, r3                                  |     r1 = r6 & r3;
    0x000344d6 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000344d8 str r1, [sp, 0x48]                                |     var_48h = r1;
    0x000344da ands r3, r7                                       |     r3 &= r7;
    0x000344dc str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x000344de orrs r3, r1                                       |     r3 |= r1;
    0x000344e0 ite eq                                            |     
                                                                 |     if (r3 != r1) {
    0x000344e2 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 == r1) {
    0x000344e4 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000344e6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000344e8 bne.w 0x346f6                                     |         goto label_48;
                                                                 |     }
                                                                 | label_16:
    0x000344ec cmp.w sb, 0                                       |     
                                                                 |     if (sb <= 0) {
    0x000344f0 ble.w 0x34772                                     |         goto label_49;
                                                                 |     }
    0x000344f4 add.w sb, sb, sb, lsl 1                           |     sb += (sb << 1);
    0x000344f8 movs r0, 0                                        |     r0 = 0;
    0x000344fa mov lr, r0                                        |     lr = r0;
    0x000344fc ldr.w sl, [fp, 4]                                 |     sl = *(arg_4h);
    0x00034500 lsl.w r2, sb, 2                                   |     r2 = sb << 2;
    0x00034504 str.w fp, [sp, 0x50]                              |     __asm ("str.w fp, [var_50h]");
    0x00034508 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0003450a str r2, [sp, 0x58]                                |     var_58h = r2;
    0x0003450c ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0003450e ldr.w fp, [sp, 0x40]                              |     fp = var_40h;
    0x00034512 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00034514 ldr.w sb, [r2, 0x18]                              |     sb = *((r2 + 0x18));
    0x00034518 str r4, [sp, 0x40]                                |     var_40h = r4;
    0x0003451a str.w r8, [sp, 0x64]                              |     __asm ("str.w r8, [var_64h]");
                                                                 | label_9:
    0x0003451e ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00034520 mov.w r5, -1                                      |     r5 = -1;
    0x00034524 mov r1, sl                                        |     r1 = sl;
    0x00034526 mov r8, r5                                        |     r8 = r5;
    0x00034528 str.w fp, [sp, 0x20]                              |     __asm ("str.w fp, [var_20h]");
    0x0003452c add.w ip, sl, r3                                  |     
                                                                 |     do {
    0x00034530 ldr r3, [r1, 8]                                   |         r3 = *((r1 + 8));
    0x00034532 adds r1, 0xc                                      |         r1 += 0xc;
    0x00034534 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00034538 add.w r3, sb, r3, lsl 4                           |         r3 = sb + (r3 << 4);
    0x0003453c ldrd r2, r3, [r3, 0x20]                           |         __asm ("ldrd r2, r3, [r3, 0x20]");
    0x00034540 ands r2, r6                                       |         r2 &= r6;
    0x00034542 ands r3, r7                                       |         r3 &= r7;
    0x00034544 cmp r2, r5                                        |         
    0x00034546 sbcs.w r4, r3, r8                                 |         __asm ("sbcs.w r4, r3, r8");
    0x0003454a ite lo                                            |         
                                                                 |         if (r2 >= r5) {
    0x0003454c movlo r4, 1                                       |             r4 = 1;
                                                                 |         }
                                                                 |         if (r2 < r5) {
    0x0003454e movhs r4, 0                                       |             r4 = 0;
                                                                 |         }
    0x00034550 cmp r0, r2                                        |         
    0x00034552 and r4, r4, 1                                     |         r4 &= 1;
    0x00034556 sbcs.w fp, lr, r3                                 |         __asm ("sbcs.w fp, lr, r3");
    0x0003455a it hs                                             |         
                                                                 |         if (r0 < r2) {
    0x0003455c movhs r4, 0                                       |             r4 = 0;
                                                                 |         }
    0x0003455e cmp r4, 0                                         |         
    0x00034560 itt ne                                            |         
                                                                 |         if (r4 == 0) {
    0x00034562 movne r5, r2                                      |             r5 = r2;
                                                                 |         }
                                                                 |         if (r4 == 0) {
    0x00034564 movne r8, r3                                      |             r8 = r3;
                                                                 |         }
    0x00034566 cmp r1, ip                                        |         
    0x00034568 bne 0x34530                                       |         
                                                                 |     } while (r1 != ip);
    0x0003456a cmp.w r8, -1                                      |     
    0x0003456e it eq                                             |     
                                                                 |     if (r8 == -1) {
    0x00034570 cmpeq r5, -1                                      |         __asm ("cmpeq r5, -1");
                                                                 |     }
    0x00034574 ldr.w fp, [sp, 0x20]                              |     fp = var_20h;
                                                                 |     if (r8 == -1) {
    0x00034578 beq.w 0x347ca                                     |         goto label_50;
                                                                 |     }
    0x0003457c ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0003457e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00034580 cmp r8, r2                                        |     
    0x00034582 it eq                                             |     
                                                                 |     if (r8 == r2) {
    0x00034584 cmpeq r5, r3                                      |         __asm ("cmpeq r5, r3");
                                                                 |     }
    0x00034586 ldrd r3, r1, [sp, 0x48]                           |     __asm ("ldrd r3, r1, [var_48h]");
    0x0003458a ite eq                                            |     
                                                                 |     if (r8 != r2) {
    0x0003458c moveq r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r8 == r2) {
    0x0003458e movne r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00034590 cmp r8, r1                                        |     
    0x00034592 it eq                                             |     
                                                                 |     if (r8 == r1) {
    0x00034594 cmpeq r5, r3                                      |         __asm ("cmpeq r5, r3");
                                                                 |     }
    0x00034596 it eq                                             |     
                                                                 |     if (r8 != r1) {
    0x00034598 orreq r2, r2, 1                                   |         r2 |= 1;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x0003459c cbnz r2, 0x345ec                                  |         
    0x0003459e ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x000345a0 ldr r4, [sp, 0x2c]                                |         r4 = var_2ch;
    0x000345a2 ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x000345a4 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x000345a6 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x000345a8 str r2, [sp, 0x18]                                |         var_18h = r2;
    0x000345aa mov sb, r1                                        |         sb = r1;
    0x000345ac str r2, [sp, 8]                                   |         var_8h = r2;
    0x000345ae orr.w r2, r5, r4                                  |         r2 = r5 | r4;
    0x000345b2 str r3, [sp, 0x10]                                |         var_10h = r3;
    0x000345b4 ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x000345b6 str r2, [sp]                                      |         *(sp) = r2;
    0x000345b8 orr.w r2, r8, r1                                  |         r2 = r8 | r1;
    0x000345bc str r2, [sp, 4]                                   |         var_4h = r2;
    0x000345be mov r2, r4                                        |         r2 = r4;
    0x000345c0 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x000345c2 mov r3, r1                                        |         r3 = r1;
    0x000345c4 ldr r0, [sp, 0x34]                                |         r0 = var_34h;
    0x000345c6 bl 0x33abc                                        |         fcn_00033abc (r0, r1, r2, r3, r4, r5, r6);
    0x000345ca ldrd r1, r2, [fp]                                 |         __asm ("ldrd r1, r2, [fp]");
    0x000345ce mov r3, sb                                        |         r3 = sb;
    0x000345d0 cmp r2, r3                                        |         
    0x000345d2 it eq                                             |         
                                                                 |         if (r2 == r3) {
    0x000345d4 cmpeq r1, r4                                      |             __asm ("cmpeq r1, r4");
                                                                 |         }
                                                                 |         if (r2 == r3) {
    0x000345d6 beq.w 0x346e0                                     |             goto label_51;
                                                                 |         }
    0x000345da cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000345dc bne.w 0x346f0                                     |             goto label_52;
                                                                 |         }
                                                                 | label_13:
    0x000345e0 ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x000345e2 ldr.w sb, [r3, 0x18]                              |         sb = *((r3 + 0x18));
    0x000345e6 ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x000345e8 ldr.w sl, [r3, 4]                                 |         sl = *((r3 + 4));
                                                                 |     }
    0x000345ec mov r0, r5                                        |     r0 = r5;
    0x000345ee mov lr, r8                                        |     lr = r8;
    0x000345f0 b 0x3451e                                         |     goto label_9;
                                                                 | label_46:
    0x000345f2 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000345f4 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x000345f6 str r4, [sp, 0x18]                                |     var_18h = r4;
    0x000345f8 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000345fa ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000345fc str r4, [sp, 8]                                   |     var_8h = r4;
    0x000345fe vstr d8, [sp]                                     |     __asm ("vstr d8, [sp]");
    0x00034602 strd fp, r3, [sp, 0xc]                            |     __asm ("strd fp, r3, [var_ch]");
    0x00034606 ldrd r2, r3, [sp, 0x2c]                           |     __asm ("ldrd r2, r3, [var_2ch]");
    0x0003460a bl 0x33abc                                        |     r0 = fcn_00033abc (r0, r1, r2, r3, r4, r5, r6);
    0x0003460e mov r8, r0                                        |     r8 = r0;
    0x00034610 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00034614 beq.w 0x34480                                     |         goto label_10;
                                                                 |     }
                                                                 | label_14:
    0x00034618 ldr.w r3, [fp, 0x1c]                              |     r3 = *(arg_1ch);
    0x0003461c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003461e bne 0x346d6                                       |         goto label_53;
                                                                 |     }
                                                                 | label_12:
    0x00034620 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00034624 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00034626 cmp r3, 0                                         |     
    0x00034628 it gt                                             |     
                                                                 |     if (r3 <= 0) {
    0x0003462a movgt sb, 0x9000                                  |         sb = 0x9000;
                                                                 |     }
    0x0003462e ldr.w sl, [r2]                                    |     sl = *(r2);
    0x00034632 ittt gt                                           |     
                                                                 |     if (r3 > 0) {
    0x00034634 movtgt sb, 0xffff                                 |         __asm ("movtgt sb, aav.0x000000ff");
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00034638 addgt r6, fp, 0x58                                |         r6 += arg_58h;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0003463c movs r7, 0                                        |         r7 = 0;
                                                                 |     }
                                                                 |     if (r7 <= 0) {
    0x0003463e ble 0x3466c                                       |         goto label_54;
                                                                 |     }
                                                                 |     do {
    0x00034640 ldr r5, [r6, 4]!                                  |         r5 = *((r6 += 4));
                                                                 |         if (r5 != 0) {
    0x00034644 cbz r5, 0x34664                                   |             
    0x00034646 ldrh r3, [r5, 0x10]                               |             r3 = *((r5 + 0x10));
    0x00034648 tst.w sb, r3                                      |             
                                                                 |             if ((sb & r3) == 0) {
    0x0003464c bne 0x34652                                       |                 
    0x0003464e ldr r3, [r5, 0x18]                                |                 r3 = *((r5 + 0x18));
                                                                 |                 if (r3 == 0) {
    0x00034650 cbz r3, 0x34658                                   |                     goto label_55;
                                                                 |                 }
                                                                 |             }
    0x00034652 mov r0, r5                                        |             r0 = r5;
    0x00034654 bl 0x13c18                                        |             fcn_00013c18 (r0);
                                                                 | label_55:
    0x00034658 ldr r0, [r5, 0x14]                                |             r0 = *((r5 + 0x14));
    0x0003465a mov r1, r5                                        |             r1 = r5;
    0x0003465c bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
    0x00034660 ldr.w r3, [fp]                                    |             r3 = *(fp);
                                                                 |         }
    0x00034664 adds r4, 1                                        |         r4++;
    0x00034666 str r7, [r6]                                      |         *(r6) = r7;
    0x00034668 cmp r4, r3                                        |         
    0x0003466a blt 0x34640                                       |         
                                                                 |     } while (r4 < r3);
                                                                 | label_54:
    0x0003466c mov r1, fp                                        |     r1 = fp;
    0x0003466e mov r0, sl                                        |     r0 = sl;
    0x00034670 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
                                                                 | label_42:
    0x00034674 ldr r2, [pc, 0x18c]                               |     
    0x00034676 ldr r3, [pc, 0x174]                               |     r3 = *(0x347ee);
    0x00034678 add r2, pc                                        |     r2 = 0x68e80;
    0x0003467a ldr r3, [r2, r3]                                  |     r3 = *(0x68e80);
    0x0003467c ldr r2, [r3]                                      |     r2 = *(0x68e80);
    0x0003467e ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00034680 eors r2, r3                                       |     r2 ^= r3;
    0x00034682 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00034686 bne.w 0x347e2                                     |         goto label_56;
                                                                 |     }
    0x0003468a mov r0, r8                                        |     r0 = r8;
    0x0003468c add sp, 0x94                                      |     
    0x0003468e vpop {d8}                                         |     __asm ("vpop {d8}");
    0x00034692 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_39:
    0x00034696 ldr.w r4, [ip, 0x14]                              |     r4 = *((ip + 0x14));
    0x0003469a ldr r4, [r4, 0x1c]                                |     r4 = *((r4 + 0x1c));
    0x0003469c ldr r4, [r4]                                      |     r4 = *(r4);
                                                                 | label_11:
    0x0003469e cmp r4, 1                                         |     
                                                                 |     if (r4 <= 1) {
    0x000346a0 ble.w 0x342ba                                     |         goto label_1;
                                                                 |     }
    0x000346a4 cmp.w sb, 0xf                                     |     
                                                                 |     if (sb <= 0xf) {
    0x000346a8 bgt 0x346b8                                       |         
    0x000346aa ldr r5, [sp, 0x28]                                |         r5 = var_28h;
    0x000346ac movs r4, 1                                        |         r4 = 1;
    0x000346ae lsl.w r4, r4, sb                                  |         r4 <<= sb;
    0x000346b2 orrs r5, r4                                       |         r5 |= r4;
    0x000346b4 uxth r4, r5                                       |         r4 = (int16_t) r5;
    0x000346b6 str r4, [sp, 0x28]                                |         var_28h = r4;
                                                                 |     }
    0x000346b8 cmp r1, 0x10                                      |     
    0x000346ba itt eq                                            |     
                                                                 |     if (r1 != 0x10) {
    0x000346bc moveq r1, 8                                       |         r1 = 8;
                                                                 |     }
                                                                 |     if (r1 == 0x10) {
    0x000346be strbeq r1, [r3, 4]                                |         *((r3 + 4)) = r1;
                                                                 |         goto label_57;
                                                                 |     }
                                                                 |     if (r1 == 0x10) {
                                                                 | label_57:
    0x000346c0 beq.w 0x342ba                                     |         goto label_1;
                                                                 |     }
    0x000346c4 cmp r1, 4                                         |     
    0x000346c6 itt eq                                            |     
                                                                 |     if (r1 != 4) {
    0x000346c8 moveq r1, 0x20                                    |         r1 = 0x20;
                                                                 |     }
                                                                 |     if (r1 != 4) {
    0x000346ca strbeq r1, [r3, 4]                                |         *((r3 + 4)) = r1;
                                                                 |     }
    0x000346cc b 0x342ba                                         |     goto label_1;
                                                                 | label_38:
    0x000346ce ldr.w r4, [ip, 0x14]                              |     r4 = *((ip + 0x14));
    0x000346d2 ldr r4, [r4]                                      |     r4 = *(r4);
    0x000346d4 b 0x3469e                                         |     goto label_11;
                                                                 | label_53:
    0x000346d6 ldr.w r0, [fp, 0x18]                              |     r0 = *(arg_18h);
    0x000346da blx 0x9c24                                        |     fcn_00009c24 ();
    0x000346de b 0x34620                                         |     goto label_12;
                                                                 | label_51:
    0x000346e0 ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x000346e2 movs r3, 1                                        |     r3 = 1;
                                                                 |     if (r2 == 0) {
    0x000346e4 cbnz r2, 0x346e8                                  |         
    0x000346e6 str r3, [sp, 0x60]                                |         var_60h = r3;
                                                                 |     }
    0x000346e8 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x000346ea cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000346ec beq.w 0x345e0                                     |         goto label_13;
                                                                 |     }
                                                                 | label_52:
    0x000346f0 ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x000346f4 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
                                                                 | label_48:
    0x000346f6 mov r8, r0                                        |     r8 = r0;
    0x000346f8 b 0x34618                                         |     goto label_14;
                                                                 | label_47:
    0x000346fa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000346fc bne.w 0x344aa                                     |         goto label_15;
                                                                 |     }
    0x00034700 strd r8, r8, [sp, 0x48]                           |     __asm ("strd r8, r8, [var_48h]");
    0x00034704 b 0x344ec                                         |     goto label_16;
                                                                 | label_45:
    0x00034706 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0003470a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0003470c cmp r3, r5                                        |     
    0x0003470e it gt                                             |     
                                                                 |     if (r3 <= r5) {
    0x00034710 movgt r8, 0x9000                                  |         r8 = 0x9000;
                                                                 |     }
    0x00034714 ldr.w sb, [r2]                                    |     sb = *(r2);
    0x00034718 ittt gt                                           |     
                                                                 |     if (r3 <= r5) {
    0x0003471a addgt r6, fp, 0x58                                |         r6 += arg_58h;
                                                                 |     }
                                                                 |     if (r3 > r5) {
    0x0003471e movtgt r8, 0xffff                                 |         __asm ("movtgt r8, aav.0x000000ff");
                                                                 |     }
                                                                 |     if (r3 > r5) {
    0x00034722 mov r7, r5                                        |         r7 = r5;
                                                                 |     }
                                                                 |     if (r3 <= r5) {
    0x00034724 ble 0x34752                                       |         goto label_58;
                                                                 |     }
                                                                 |     do {
    0x00034726 ldr r4, [r6, 4]!                                  |         r4 = *((r6 += 4));
                                                                 |         if (r4 != 0) {
    0x0003472a cbz r4, 0x3474a                                   |             
    0x0003472c ldrh r3, [r4, 0x10]                               |             r3 = *((r4 + 0x10));
    0x0003472e tst.w r8, r3                                      |             
                                                                 |             if ((r8 & r3) == 0) {
    0x00034732 bne 0x34738                                       |                 
    0x00034734 ldr r3, [r4, 0x18]                                |                 r3 = *((r4 + 0x18));
                                                                 |                 if (r3 == 0) {
    0x00034736 cbz r3, 0x3473e                                   |                     goto label_59;
                                                                 |                 }
                                                                 |             }
    0x00034738 mov r0, r4                                        |             r0 = r4;
    0x0003473a bl 0x13c18                                        |             fcn_00013c18 (r0);
                                                                 | label_59:
    0x0003473e ldr r0, [r4, 0x14]                                |             r0 = *((r4 + 0x14));
    0x00034740 mov r1, r4                                        |             r1 = r4;
    0x00034742 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
    0x00034746 ldr.w r3, [fp]                                    |             r3 = *(fp);
                                                                 |         }
    0x0003474a adds r5, 1                                        |         r5++;
    0x0003474c str r7, [r6]                                      |         *(r6) = r7;
    0x0003474e cmp r5, r3                                        |         
    0x00034750 blt 0x34726                                       |         
                                                                 |     } while (r5 < r3);
                                                                 | label_58:
    0x00034752 mov r1, fp                                        |     r1 = fp;
    0x00034754 mov r0, sb                                        |     r0 = sb;
    0x00034756 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0003475a b 0x3438c                                         |     goto label_17;
                                                                 | label_29:
    0x0003475c ldr r0, [pc, 0xa8]                                |     
    0x0003475e add r0, pc                                        |     r0 = 0x68f6a;
    0x00034760 addw ip, r0, 0xeec                                |     __asm ("addw ip, r0, aav.0x000000ff");
    0x00034764 b 0x341e8                                         |     goto label_18;
                                                                 | label_23:
    0x00034766 movs r3, 0x60                                     |     r3 = 0x60;
    0x00034768 mov r4, r2                                        |     r4 = r2;
    0x0003476a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003476c b 0x3412e                                         |     goto label_19;
                                                                 | label_43:
    0x0003476e mov r7, r5                                        |     r7 = r5;
    0x00034770 b 0x3441e                                         |     goto label_20;
                                                                 | label_49:
    0x00034772 mov r5, r3                                        |     r5 = r3;
                                                                 |     if (r3 != 0) {
                                                                 | label_21:
    0x00034774 cbnz r3, 0x3479c                                  |         goto label_60;
                                                                 |     }
    0x00034776 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00034778 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003477a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003477c ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003477e ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00034780 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00034782 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00034784 str r2, [sp]                                      |     *(sp) = r2;
    0x00034786 strd fp, r3, [sp, 0xc]                            |     __asm ("strd fp, r3, [var_ch]");
    0x0003478a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003478c str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003478e bl 0x33abc                                        |     fcn_00033abc (r0, r1, r2, r3, r4, r5, r6);
    0x00034792 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00034794 mov r8, r0                                        |     r8 = r0;
    0x00034796 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00034798 beq.w 0x34618                                     |         goto label_14;
                                                                 |     }
                                                                 | label_60:
    0x0003479c orrs.w r5, r8, r5                                 |     r5 = r8 | r5;
                                                                 |     if (r5 != r8) {
    0x000347a0 bne.w 0x34618                                     |         goto label_14;
                                                                 |     }
    0x000347a4 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000347a6 movs r1, 1                                        |     r1 = 1;
    0x000347a8 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x000347aa str r5, [sp, 0x18]                                |     var_18h = r5;
    0x000347ac str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000347ae ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000347b0 str.w fp, [sp, 0xc]                               |     __asm ("str.w fp, [var_ch]");
    0x000347b4 str r1, [sp, 8]                                   |     var_8h = r1;
    0x000347b6 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000347b8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000347ba mov r2, r3                                        |     r2 = r3;
    0x000347bc str r3, [sp]                                      |     *(sp) = r3;
    0x000347be ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000347c0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000347c2 bl 0x33abc                                        |     r0 = fcn_00033abc (r0, r1, r2, r3, r4, r5, r6);
    0x000347c6 mov r8, r0                                        |     r8 = r0;
    0x000347c8 b 0x34618                                         |     goto label_14;
                                                                 | label_50:
    0x000347ca ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x000347cc ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x000347d0 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x000347d2 mov r5, r3                                        |     r5 = r3;
    0x000347d4 ldr.w r8, [sp, 0x64]                              |     r8 = var_64h;
    0x000347d8 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000347da b 0x34774                                         |     goto label_21;
                                                                 | label_26:
    0x000347dc mov.w sb, 0                                       |     sb = 0;
    0x000347e0 b 0x341fc                                         |     goto label_22;
                                                                 | label_56:
    0x000347e2 blx 0x9b44                                        |     fcn_00009b44 ();
    0x000347e6 nop                                               |     
    0x000347e8 ldm r2, {r1, r2, r3, r5, r7}                      |     r1 = *(r2);
                                                                 |     r2 = *((r2 + 4));
                                                                 |     r3 = *((r2 + 8));
                                                                 |     r5 = *((r2 + 12));
                                                                 |     r7 = *((r2 + 16));
    0x000347ea movs r6, r0                                       |     r6 = r0;
    0x000347ec lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x000347ee movs r0, r0                                       |     
    0x000347f0 ldrb r3, [r7, 0x19]                               |     r3 = *((r7 + 0x19));
    0x000347f2 invalid                                           |     
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3480c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0003480c ()                                  | void fcn_0003480c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     int16_t var_18h;
                                                             |     int32_t var_18h_2;
                                                             |     int16_t var_ch;
                                                             |     arithmetic x;
                                                             |     int16_t var_14h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
                                                             |     if (? >= ?) {
    0x0003480c ldrbmi lr, [r0, sp, lsr 18]!                  |         
                                                             |     }
    0x00034810 mov r5, r2                                    |     r5 = r2;
    0x00034812 ldr r2, [pc, 0x2a8]                           |     
    0x00034814 mov r8, r3                                    |     r8 = r3;
    0x00034816 sub sp, 0x18                                  |     
    0x00034818 mov r4, r1                                    |     r4 = r1;
    0x0003481a ldr r3, [pc, 0x2a4]                           |     r3 = *(0x34ac2);
    0x0003481c mov r6, r0                                    |     r6 = r0;
    0x0003481e add r2, pc                                    |     r2 = 0x692e0;
    0x00034820 ldr r3, [r2, r3]                              |     
    0x00034822 ldr r3, [r3]                                  |     r3 = *(0x692e0);
    0x00034824 str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00034826 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r0 != 0) {
    0x0003482a cbz r0, 0x34834                               |         
    0x0003482c ldrb r3, [r1]                                 |         r3 = *(r1);
    0x0003482e cmp r3, 0x9c                                  |         
                                                             |         if (r3 == 0x9c) {
    0x00034830 beq.w 0x3498e                                 |             goto label_17;
                                                             |         }
                                                             |     }
                                                             | label_4:
    0x00034834 ldr r7, [r4, 4]                               |     r7 = *((r4 + 4));
    0x00034836 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00034838 orr.w sb, r7, r3                              |     sb = r7 | r3;
    0x0003483c tst.w sb, 0x800                               |     
                                                             |     if ((sb & 0x800) == 0) {
    0x00034840 beq 0x34870                                   |         goto label_18;
                                                             |     }
    0x00034842 ands r7, r3                                   |     r7 &= r3;
    0x00034844 lsls r3, r7, 0x14                             |     r3 = r7 << 0x14;
                                                             |     if (r3 >= r7) {
    0x00034846 bpl 0x34882                                   |         goto label_0;
                                                             |     }
    0x00034848 ldr r0, [r4, 8]                               |     r0 = *((r4 + 8));
    0x0003484a ldr r3, [r5, 8]                               |     r3 = *((r5 + 8));
    0x0003484c subs r0, r0, r3                               |     r0 -= r3;
    0x0003484e it ne                                         |     
                                                             |     if (r0 == r0) {
    0x00034850 movne r0, 1                                   |         r0 = 1;
                                                             |     }
    0x00034852 lsls r0, r0, 1                                |     r0 <<= 1;
                                                             |     do {
                                                             | label_1:
    0x00034854 ldr r2, [pc, 0x26c]                           |         
    0x00034856 ldr r3, [pc, 0x268]                           |         r3 = *(0x34ac2);
    0x00034858 add r2, pc                                    |         r2 = 0x69320;
    0x0003485a ldr r3, [r2, r3]                              |         r3 = *(0x69320);
    0x0003485c ldr r2, [r3]                                  |         r2 = *(0x69320);
    0x0003485e ldr r3, [sp, 0x14]                            |         r3 = var_14h;
    0x00034860 eors r2, r3                                   |         r2 ^= r3;
    0x00034862 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x00034866 bne.w 0x34ab6                                 |             goto label_19;
                                                             |         }
    0x0003486a add sp, 0x18                                  |         
    0x0003486c pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_18:
    0x00034870 ldrb r2, [r4]                                 |         r2 = *(r4);
    0x00034872 ldrb r0, [r5]                                 |         r0 = *(r5);
    0x00034874 cmp r2, r0                                    |         
                                                             |         if (r2 == r0) {
    0x00034876 beq 0x3489e                                   |             goto label_20;
                                                             |         }
    0x00034878 cmp r2, 0x71                                  |         
                                                             |         if (r2 == 0x71) {
    0x0003487a beq.w 0x34a0c                                 |             goto label_21;
                                                             |         }
                                                             | label_2:
    0x0003487e cmp r0, 0x71                                  |         
                                                             |         if (r0 == 0x71) {
    0x00034880 beq 0x34886                                   |             goto label_22;
                                                             |         }
                                                             | label_0:
    0x00034882 movs r0, 2                                    |         r0 = 2;
    0x00034884 b 0x34854                                     |         
                                                             |     } while (1);
                                                             | label_22:
    0x00034886 ldr r2, [r5, 0xc]                             |     r2 = *((r5 + 0xc));
    0x00034888 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x0003488a beq 0x34882                                   |         goto label_0;
                                                             |     }
    0x0003488c mov r3, r8                                    |     r3 = r8;
    0x0003488e mov r1, r4                                    |     r1 = r4;
    0x00034890 mov r0, r6                                    |     r0 = r6;
    0x00034892 bl 0x3480c                                    |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x00034896 cmp r0, 1                                     |     
                                                             |     if (r0 > 1) {
    0x00034898 bgt 0x34882                                   |         goto label_0;
                                                             |     }
                                                             | label_5:
    0x0003489a movs r0, 1                                    |     r0 = 1;
    0x0003489c b 0x34854                                     |     goto label_1;
                                                             | label_20:
    0x0003489e cmp r2, 0x47                                  |     
                                                             |     if (r2 == 0x47) {
    0x000348a0 beq 0x3487e                                   |         goto label_2;
                                                             |     }
    0x000348a2 ldr r0, [r4, 8]                               |     r0 = *((r4 + 8));
                                                             |     if (r0 == 0) {
    0x000348a4 cbz r0, 0x348c0                               |         goto label_3;
                                                             |     }
    0x000348a6 cmp r2, 0x79                                  |     
                                                             |     if (r2 == 0x79) {
    0x000348a8 beq.w 0x34a08                                 |         goto label_23;
                                                             |     }
                                                             |     if (r2 > 0x79) {
    0x000348ac bhi 0x34968                                   |         goto label_24;
                                                             |     }
    0x000348ae cmp r2, 0x71                                  |     
                                                             |     if (r2 != 0x71) {
    0x000348b0 bne 0x34970                                   |         goto label_25;
                                                             |     }
    0x000348b2 ldr r1, [r5, 8]                               |     r1 = *((r5 + 8));
    0x000348b4 blx 0x9754                                    |     r0 = fcn_00009754 ();
    0x000348b8 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000348ba bne 0x34882                                   |         goto label_0;
                                                             |     }
                                                             | label_8:
    0x000348bc ldr r7, [r4, 4]                               |     r7 = *((r4 + 4));
    0x000348be ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
                                                             | label_3:
    0x000348c0 eors r7, r3                                   |     r7 ^= r3;
    0x000348c2 movw r3, 0x404                                |     r3 = 0x404;
    0x000348c6 tst r7, r3                                    |     
                                                             |     if ((r7 & r3) != 0) {
    0x000348c8 bne 0x34882                                   |         goto label_0;
                                                             |     }
    0x000348ca tst.w sb, 0x10000                             |     
                                                             |     if ((sb & 0x10000) != 0) {
    0x000348ce bne.w 0x34a08                                 |         goto label_23;
                                                             |     }
    0x000348d2 tst.w sb, 0x1000                              |     
                                                             |     if ((sb & 0x1000) != 0) {
    0x000348d6 bne 0x34882                                   |         goto label_0;
                                                             |     }
    0x000348d8 tst.w sb, 0x20                                |     
                                                             |     if ((sb & 0x20) != 0) {
    0x000348dc bne 0x348f8                                   |         goto label_11;
                                                             |     }
    0x000348de ldr r1, [r4, 0xc]                             |     r1 = *((r4 + 0xc));
    0x000348e0 ldr r2, [r5, 0xc]                             |     r2 = *((r5 + 0xc));
    0x000348e2 cmp r2, 0                                     |     
    0x000348e4 it ne                                         |     
                                                             |     if (r2 != 0) {
    0x000348e6 cmpne r1, 0                                   |         __asm ("cmpne r1, 0");
                                                             |     }
                                                             |     if (r2 == 0) {
    0x000348e8 beq.w 0x34aae                                 |         goto label_26;
                                                             |     }
    0x000348ec mov r3, r8                                    |     r3 = r8;
    0x000348ee mov r0, r6                                    |     r0 = r6;
    0x000348f0 bl 0x3480c                                    |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x000348f4 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x000348f6 bne 0x34882                                   |         goto label_0;
                                                             |     }
                                                             | label_11:
    0x000348f8 ldr r1, [r4, 0x10]                            |     r1 = *((r4 + 0x10));
    0x000348fa ldr r2, [r5, 0x10]                            |     r2 = *((r5 + 0x10));
    0x000348fc cmp r2, 0                                     |     
    0x000348fe it ne                                         |     
                                                             |     if (r2 != 0) {
    0x00034900 cmpne r1, 0                                   |         __asm ("cmpne r1, 0");
                                                             |     }
                                                             |     if (r2 == 0) {
    0x00034902 beq.w 0x34aa6                                 |         goto label_27;
                                                             |     }
    0x00034906 mov r0, r6                                    |     r0 = r6;
    0x00034908 mov r3, r8                                    |     r3 = r8;
    0x0003490a bl 0x3480c                                    |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x0003490e cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00034910 bne 0x34882                                   |         goto label_0;
                                                             |     }
                                                             | label_10:
    0x00034912 ldr r1, [r5, 0x14]                            |     r1 = *((r5 + 0x14));
    0x00034914 mov r2, r8                                    |     r2 = r8;
    0x00034916 ldr r0, [r4, 0x14]                            |     r0 = *((r4 + 0x14));
    0x00034918 bl 0x35844                                    |     r0 = fcn_00035844 (r0, r1, r2);
    0x0003491c cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0003491e bne 0x34882                                   |         goto label_0;
                                                             |     }
    0x00034920 ldrb r3, [r4]                                 |     r3 = *(r4);
    0x00034922 cmp r3, 0x75                                  |     
    0x00034924 it ne                                         |     
                                                             |     if (r3 != 0x75) {
    0x00034926 cmpne r3, 0xaa                                |         __asm ("cmpne r3, 0xaa");
                                                             |     }
                                                             |     if (r3 == 0x75) {
    0x00034928 beq 0x34a08                                   |         goto label_23;
                                                             |     }
    0x0003492a tst.w sb, 0x4000                              |     
                                                             |     if ((sb & 0x4000) != 0) {
    0x0003492e bne 0x34a08                                   |         goto label_23;
                                                             |     }
    0x00034930 ldrsh.w r1, [r4, 0x20]                        |     r1 = *((r4 + 0x20));
    0x00034934 ldrsh.w r2, [r5, 0x20]                        |     r2 = *((r5 + 0x20));
    0x00034938 cmp r1, r2                                    |     
                                                             |     if (r1 != r2) {
    0x0003493a bne 0x34882                                   |         goto label_0;
                                                             |     }
    0x0003493c ldrb r2, [r4, 2]                              |     r2 = *((r4 + 2));
    0x0003493e ldrb r1, [r5, 2]                              |     r1 = *((r5 + 2));
    0x00034940 subs r2, r2, r1                               |     r2 -= r1;
    0x00034942 it ne                                         |     
                                                             |     if (r2 == r2) {
    0x00034944 movne r2, 1                                   |         r2 = 1;
                                                             |     }
    0x00034946 cmp r3, 0xaf                                  |     
    0x00034948 it ne                                         |     
                                                             |     if (r3 == 0xaf) {
    0x0003494a movne r2, 0                                   |         r2 = 0;
                                                             |     }
    0x0003494c cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x0003494e bne 0x34882                                   |         goto label_0;
                                                             |     }
    0x00034950 cmp r3, 0x31                                  |     
                                                             |     if (r3 == 0x31) {
    0x00034952 beq 0x34a08                                   |         goto label_23;
                                                             |     }
    0x00034954 ldr r0, [r4, 0x1c]                            |     r0 = *((r4 + 0x1c));
    0x00034956 ldr r3, [r5, 0x1c]                            |     r3 = *((r5 + 0x1c));
    0x00034958 cmp r3, r0                                    |     
    0x0003495a it ne                                         |     
                                                             |     if (r3 != r0) {
    0x0003495c cmpne r8, r0                                  |         __asm ("cmpne r8, r0");
                                                             |     }
    0x0003495e ite ne                                        |     
                                                             |     if (r3 == r0) {
    0x00034960 movne r0, 1                                   |         r0 = 1;
                                                             |     }
                                                             |     if (r3 != r0) {
    0x00034962 moveq r0, 0                                   |         r0 = 0;
                                                             |     }
    0x00034964 lsls r0, r0, 1                                |     r0 <<= 1;
    0x00034966 b 0x34854                                     |     goto label_1;
                                                             | label_24:
    0x00034968 and r1, r2, 0xfb                              |     r1 = r2 & 0xfb;
    0x0003496c cmp r1, 0xa8                                  |     
                                                             |     if (r1 == 0xa8) {
    0x0003496e beq 0x34a36                                   |         goto label_28;
                                                             |     }
                                                             | label_25:
    0x00034970 ldr r1, [r5, 8]                               |     r1 = *((r5 + 8));
    0x00034972 adds r2, 0x59                                 |     r2 += 0x59;
    0x00034974 and r2, r2, 0xfd                              |     r2 &= 0xfd;
    0x00034978 cmp r1, 0                                     |     
    0x0003497a it ne                                         |     
                                                             |     if (r1 == 0) {
    0x0003497c cmpne r2, 0                                   |         __asm ("cmpne r2, 0");
                                                             |         goto label_29;
                                                             |     }
                                                             |     if (r1 == 0) {
                                                             | label_29:
    0x0003497e beq 0x348c0                                   |         goto label_3;
                                                             |     }
    0x00034980 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00034982 blx 0x9fb0                                    |     fcn_00009fb0 ();
    0x00034986 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00034988 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0003498a beq 0x348c0                                   |         goto label_3;
                                                             |     }
    0x0003498c b 0x34882                                     |     goto label_0;
                                                             | label_17:
    0x0003498e movs r3, 0                                    |     r3 = 0;
    0x00034990 ldr r0, [r0]                                  |     r0 = *(r0);
    0x00034992 str r3, [sp, 0x10]                            |     x = r3;
    0x00034994 cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x00034996 beq.w 0x34834                                 |         goto label_4;
                                                             |     }
    0x0003499a add r3, sp, 0x10                              |     r3 += x;
    0x0003499c movs r2, 1                                    |     r2 = 1;
    0x0003499e str r3, [sp]                                  |     *(sp) = r3;
    0x000349a0 mov r1, r5                                    |     r1 = r5;
    0x000349a2 movs r3, 0x41                                 |     r3 = 0x41;
    0x000349a4 bl 0x30528                                    |     fcn_00030528 (r0, r1, r2, r3, r4);
    0x000349a8 ldr r3, [sp, 0x10]                            |     r3 = x;
    0x000349aa cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x000349ac beq.w 0x34834                                 |         goto label_4;
                                                             |     }
    0x000349b0 ldrsh.w r1, [r4, 0x20]                        |     r1 = *((r4 + 0x20));
    0x000349b4 ldr r2, [r6, 8]                               |     r2 = *((r6 + 8));
    0x000349b6 cmp r1, 0x1f                                  |     
    0x000349b8 ldr.w r3, [r2, 0xd8]                          |     r3 = *((r2 + 0xd8));
    0x000349bc ittte le                                      |     
                                                             |     if (r1 > 0x1f) {
    0x000349be movle r0, 1                                   |         r0 = 1;
                                                             |     }
                                                             |     if (r1 > 0x1f) {
    0x000349c0 addle r7, r1, -1                              |         r7 = r1 + -1;
                                                             |     }
                                                             |     if (r1 <= 0x1f) {
    0x000349c4 lslgt r0, r7                                  |         r0 <<= r7;
                                                             |     }
                                                             |     if (r1 > 0x1f) {
    0x000349c6 orr r3, r3, 0x80000000                        |         r3 |= 0x80000000;
                                                             |     }
    0x000349ca it le                                         |     
                                                             |     if (r1 > 0x1f) {
    0x000349cc orrle r3, r0                                  |         r3 |= r0;
                                                             |     }
    0x000349ce ldr.w r0, [r6, 0xe4]                          |     r0 = *((r6 + 0xe4));
    0x000349d2 str.w r3, [r2, 0xd8]                          |     __asm ("str.w r3, [r2, 0xd8]");
    0x000349d6 bl 0x1f73c                                    |     r0 = fcn_0001f73c (r0, r1);
    0x000349da mov r7, r0                                    |     r7 = r0;
                                                             |     if (r0 == 0) {
    0x000349dc cbz r0, 0x34a28                               |         goto label_30;
                                                             |     }
    0x000349de blx 0x9bd8                                    |     r0 = fcn_00009bd8 ();
    0x000349e2 cmp r0, 3                                     |     
                                                             |     if (r0 == 3) {
    0x000349e4 beq 0x34a9e                                   |         goto label_31;
                                                             |     }
                                                             | label_9:
    0x000349e6 ldr r1, [sp, 0x10]                            |     r1 = x;
    0x000349e8 movs r2, 0                                    |     r2 = 0;
    0x000349ea mov r0, r7                                    |     r0 = r7;
    0x000349ec bl 0x24ee4                                    |     r0 = fcn_00024ee4 (r0, r1, r2);
    0x000349f0 mov sb, r0                                    |     sb = r0;
    0x000349f2 ldr r0, [sp, 0x10]                            |     r0 = x;
                                                             |     if (r0 != 0) {
    0x000349f4 cbz r0, 0x349fa                               |         
    0x000349f6 bl 0x1874c                                    |         fcn_0001874c (r0);
                                                             |     }
    0x000349fa mov r0, r7                                    |     r0 = r7;
    0x000349fc bl 0x1874c                                    |     fcn_0001874c (r0);
    0x00034a00 cmp.w sb, 0                                   |     
                                                             |     if (sb != 0) {
    0x00034a04 bne.w 0x34834                                 |         goto label_4;
                                                             |     }
                                                             | label_23:
    0x00034a08 movs r0, 0                                    |     r0 = 0;
    0x00034a0a b 0x34854                                     |     goto label_1;
                                                             | label_21:
    0x00034a0c ldr r1, [r4, 0xc]                             |     r1 = *((r4 + 0xc));
    0x00034a0e cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00034a10 beq.w 0x3487e                                 |         goto label_2;
                                                             |     }
    0x00034a14 mov r3, r8                                    |     r3 = r8;
    0x00034a16 mov r2, r5                                    |     r2 = r5;
    0x00034a18 mov r0, r6                                    |     r0 = r6;
    0x00034a1a bl 0x3480c                                    |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x00034a1e cmp r0, 1                                     |     
                                                             |     if (r0 <= 1) {
    0x00034a20 ble.w 0x3489a                                 |         goto label_5;
                                                             |     }
    0x00034a24 ldrb r0, [r5]                                 |     r0 = *(r5);
    0x00034a26 b 0x3487e                                     |     goto label_2;
                                                             | label_30:
    0x00034a28 ldr r0, [sp, 0x10]                            |     r0 = x;
    0x00034a2a cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00034a2c beq.w 0x34834                                 |         goto label_4;
                                                             |     }
    0x00034a30 bl 0x1874c                                    |     fcn_0001874c (r0);
    0x00034a34 b 0x34834                                     |     goto label_4;
                                                             | label_28:
    0x00034a36 ldr r2, [r5, 8]                               |     r2 = *((r5 + 8));
    0x00034a38 subs r0, 1                                    |     r0--;
    0x00034a3a ldr.w lr, [pc, 0x8c]                          |     
    0x00034a3e add.w ip, r2, -1                              |     
    0x00034a42 add lr, pc                                    |     lr += pc;
                                                             | label_7:
    0x00034a44 ldrb r2, [r0, 1]!                             |     r2 = *((r0 += 1));
    0x00034a48 ldrb r1, [ip, 1]!                             |     r1 = *((ip += 1));
    0x00034a4c cmp r2, r1                                    |     
                                                             |     if (r2 == r1) {
    0x00034a4e beq 0x34a6e                                   |         goto label_32;
                                                             |     }
                                                             | label_6:
    0x00034a50 add r2, lr                                    |     r2 += lr;
    0x00034a52 add r1, lr                                    |     r1 += lr;
    0x00034a54 ldrb.w sl, [r2, 0x140]                        |     sl = *((r2 + 0x140));
    0x00034a58 ldrb.w r2, [r1, 0x140]                        |     r2 = *((r1 + 0x140));
    0x00034a5c cmp sl, r2                                    |     
                                                             |     if (sl != r2) {
    0x00034a5e bne.w 0x34882                                 |         goto label_0;
                                                             |     }
    0x00034a62 ldrb r2, [r0, 1]!                             |     r2 = *((r0 += 1));
    0x00034a66 ldrb r1, [ip, 1]!                             |     r1 = *((ip += 1));
    0x00034a6a cmp r2, r1                                    |     
                                                             |     if (r2 != r1) {
    0x00034a6c bne 0x34a50                                   |         goto label_6;
                                                             |     }
                                                             | label_32:
    0x00034a6e cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00034a70 bne 0x34a44                                   |         goto label_7;
                                                             |     }
    0x00034a72 ubfx r1, r7, 0x18, 1                          |     r1 = (r7 >> 0x18) & ((1 << 1) - 1);
    0x00034a76 ubfx r2, r3, 0x18, 1                          |     r2 = (r3 >> 0x18) & ((1 << 1) - 1);
    0x00034a7a cmp r1, r2                                    |     
    0x00034a7c and r0, r7, 0x1000000                         |     r0 = r7 & 0x1000000;
                                                             |     if (r1 != r2) {
    0x00034a80 bne.w 0x34882                                 |         goto label_0;
                                                             |     }
    0x00034a84 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00034a86 beq.w 0x348c0                                 |         goto label_3;
                                                             |     }
    0x00034a8a ldr r2, [r5, 0x2c]                            |     r2 = *((r5 + 0x2c));
    0x00034a8c movs r3, 1                                    |     r3 = 1;
    0x00034a8e ldr r1, [r4, 0x2c]                            |     r1 = *((r4 + 0x2c));
    0x00034a90 mov r0, r6                                    |     r0 = r6;
    0x00034a92 bl 0x37a10                                    |     r0 = fcn_00037a10 (r0, r1, r2, r3);
    0x00034a96 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00034a98 beq.w 0x348bc                                 |         goto label_8;
                                                             |     }
    0x00034a9c b 0x34882                                     |     goto label_0;
                                                             | label_31:
    0x00034a9e mov r0, r7                                    |     r0 = r7;
    0x00034aa0 blx 0x9688                                    |     fcn_00009688 ();
    0x00034aa4 b 0x349e6                                     |     goto label_9;
                                                             | label_27:
    0x00034aa6 cmp r1, r2                                    |     
                                                             |     if (r1 != r2) {
    0x00034aa8 bne.w 0x34882                                 |         goto label_0;
                                                             |     }
    0x00034aac b 0x34912                                     |     goto label_10;
                                                             | label_26:
    0x00034aae cmp r1, r2                                    |     
                                                             |     if (r1 != r2) {
    0x00034ab0 bne.w 0x34882                                 |         goto label_0;
                                                             |     }
    0x00034ab4 b 0x348f8                                     |     goto label_11;
                                                             | label_19:
    0x00034ab6 blx 0x9b44                                    |     fcn_00009b44 ();
    0x00034aba nop                                           |     
    0x00034abc stm r2!, {r1, r5, r6, r7}                     |     *(r2!) = r1;
                                                             |     *((r2! + 4)) = r5;
                                                             |     *((r2! + 8)) = r6;
                                                             |     *((r2! + 12)) = r7;
    0x00034abe movs r6, r0                                   |     r6 = r0;
    0x00034ac0 lsls r0, r1, 0x13                             |     r0 = r1 << 0x13;
    0x00034ac2 movs r0, r0                                   |     
    0x00034ac4 stm r2!, {r3, r5, r7}                         |     *(r2!) = r3;
                                                             |     *((r2! + 4)) = r5;
                                                             |     *((r2! + 8)) = r7;
    0x00034ac6 movs r6, r0                                   |     r6 = r0;
    0x00034ac8 movs r2, 0xd2                                 |     r2 = 0xd2;
    0x00034aca movs r6, r0                                   |     r6 = r0;
    0x00034acc cmp r2, 2                                     |     
    0x00034ace push.w {r4, r5, r6, r7, r8, lr}               |     
    0x00034ad2 sbcs r1, r3, 0                                |     __asm ("sbcs r1, r3, 0");
    0x00034ad6 ldrd r8, r6, [sp, 0x18]                       |     __asm ("ldrd r8, r6, [var_18h]");
    0x00034ada mov.w r4, 0                                   |     r4 = 0;
                                                             |     if (r2 <= 2) {
    0x00034ade blo 0x34af0                                   |         goto label_33;
                                                             |     }
                                                             |     do {
    0x00034ae0 lsrs r2, r2, 1                                |         r2 >>= 1;
    0x00034ae2 adds r4, 1                                    |         r4++;
    0x00034ae4 orr.w r2, r2, r3, lsl 31                      |         r2 |= (r3 << 31);
    0x00034ae8 lsrs r3, r3, 1                                |         r3 >>= 1;
    0x00034aea subs r1, r2, 1                                |         r1 = r2 - 1;
    0x00034aec orrs r1, r3                                   |         r1 |= r3;
    0x00034aee bne 0x34ae0                                   |         
                                                             |     } while (r1 != r3);
                                                             | label_33:
    0x00034af0 add.w r3, r0, r4, lsl 6                       |     r3 = r0 + (r4 << 6);
    0x00034af4 ldr r2, [r3, 0x18]                            |     r2 = *((r3 + 0x18));
    0x00034af6 ldr r7, [r3, 0x30]                            |     r7 = *((r3 + 0x30));
    0x00034af8 ldr r5, [r2, 8]                               |     r5 = *((r2 + 8));
    0x00034afa cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x00034afc beq 0x34b78                                   |         goto label_34;
                                                             |     }
                                                             | label_14:
    0x00034afe ldr r3, [r5, 0x28]                            |     r3 = *((r5 + 0x28));
    0x00034b00 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00034b02 beq 0x34b72                                   |         goto label_35;
                                                             |     }
    0x00034b04 ldrh.w ip, [r5, 0x32]                         |     ip = *((r5 + 0x32));
    0x00034b08 cmp.w ip, 0                                   |     
                                                             |     if (ip == 0) {
    0x00034b0c beq 0x34b72                                   |         goto label_35;
                                                             |     }
    0x00034b0e movs r4, 0                                    |     r4 = 0;
    0x00034b10 b 0x34b18                                     |     
                                                             |     while (r3 != 2) {
                                                             | label_12:
    0x00034b12 adds r4, 1                                    |         r4++;
    0x00034b14 cmp ip, r4                                    |         
                                                             |         if (ip <= r4) {
    0x00034b16 ble 0x34b72                                   |             goto label_35;
                                                             |         }
                                                             | label_13:
    0x00034b18 ldr r3, [r5, 4]                               |         r3 = *((r5 + 4));
    0x00034b1a ldrsh.w r3, [r3, r4, lsl 1]                   |         offset_0 = r4 << 1;
                                                             |         r3 = *((r3 + offset_0));
    0x00034b1e adds r3, 2                                    |         r3 += 2;
    0x00034b20 bne 0x34b12                                   |         
                                                             |     }
    0x00034b22 ldr r3, [r5, 0x28]                            |     r3 = *((r5 + 0x28));
    0x00034b24 mov r1, r6                                    |     r1 = r6;
    0x00034b26 add.w r3, r3, r4, lsl 4                       |     r3 += (r4 << 4);
    0x00034b2a ldr r2, [r3, 8]                               |     r2 = *((r3 + 8));
                                                             |     if (r6 != 0) {
    0x00034b2c cbnz r6, 0x34b3c                              |         goto label_36;
                                                             |     }
    0x00034b2e b 0x34b96                                     |     goto label_37;
                                                             |     do {
    0x00034b30 lsls r0, r3, 0xc                              |         r0 = r3 << 0xc;
    0x00034b32 itet mi                                       |         
                                                             |         if (r0 >= r3) {
    0x00034b34 ldrmi r3, [r1, 0x14]                          |             r3 = *((r1 + 0x14));
                                                             |         }
                                                             |         if (r0 < r3) {
    0x00034b36 ldrpl r1, [r1, 0xc]                           |             r1 = *((r1 + 0xc));
                                                             |         }
                                                             |         if (r0 >= r3) {
    0x00034b38 ldrmi r1, [r3, 8]                             |             r1 = *((r3 + 8));
                                                             |         }
                                                             |         if (r1 == 0) {
    0x00034b3a cbz r1, 0x34b7e                               |             goto label_38;
                                                             |         }
                                                             | label_36:
    0x00034b3c ldr r3, [r1, 4]                               |         r3 = *((r1 + 4));
    0x00034b3e tst.w r3, 0x82000                             |         
    0x00034b42 bne 0x34b30                                   |         
                                                             |     } while ((r3 & 0x82000) != 0);
                                                             |     if (r2 != 0) {
    0x00034b44 cbnz r2, 0x34b54                              |         goto label_15;
                                                             |     }
    0x00034b46 b 0x34b12                                     |     goto label_12;
                                                             |     do {
    0x00034b48 lsls r3, r3, 0xc                              |         r3 <<= 0xc;
    0x00034b4a itet mi                                       |         
                                                             |         if (r3 >= r3) {
    0x00034b4c ldrmi r3, [r2, 0x14]                          |             r3 = *((r2 + 0x14));
                                                             |         }
                                                             |         if (r3 < r3) {
    0x00034b4e ldrpl r2, [r2, 0xc]                           |             r2 = *((r2 + 0xc));
                                                             |         }
                                                             |         if (r3 >= r3) {
    0x00034b50 ldrmi r2, [r3, 8]                             |             r2 = *((r3 + 8));
                                                             |         }
                                                             |         if (r2 == 0) {
    0x00034b52 cbz r2, 0x34b90                               |             goto label_39;
                                                             |         }
                                                             | label_15:
    0x00034b54 ldr r3, [r2, 4]                               |         r3 = *((r2 + 4));
    0x00034b56 ands r0, r3, 0x82000                          |         r0 = r3 & 0x82000;
    0x00034b5a bne 0x34b48                                   |         
                                                             |     } while (r0 != r3);
    0x00034b5c cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x00034b5e beq 0x34b12                                   |         goto label_12;
                                                             |     }
    0x00034b60 mov r3, r7                                    |     r3 = r7;
    0x00034b62 bl 0x3480c                                    |     r0 = fcn_0003480c (r0, r1, r2, r3);
                                                             |     if (r0 == 0) {
    0x00034b66 cbz r0, 0x34b82                               |         goto label_16;
                                                             |     }
    0x00034b68 ldrh.w ip, [r5, 0x32]                         |     ip = *((r5 + 0x32));
    0x00034b6c adds r4, 1                                    |     r4++;
    0x00034b6e cmp ip, r4                                    |     
                                                             |     if (ip > r4) {
    0x00034b70 bgt 0x34b18                                   |         goto label_13;
                                                             |     }
                                                             | label_35:
    0x00034b72 ldr r5, [r5, 0x14]                            |     r5 = *((r5 + 0x14));
    0x00034b74 cmp r5, 0                                     |     
                                                             |     if (r5 != 0) {
    0x00034b76 bne 0x34afe                                   |         goto label_14;
                                                             |     }
                                                             | label_34:
    0x00034b78 movs r0, 0                                    |     r0 = 0;
    0x00034b7a pop.w {r4, r5, r6, r7, r8, pc}                |     
                                                             | label_38:
    0x00034b7e cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00034b80 bne 0x34b54                                   |         goto label_15;
                                                             |     }
                                                             | label_16:
    0x00034b82 mvn r3, 1                                     |     r3 = ~1;
    0x00034b86 movs r0, 1                                    |     r0 = 1;
    0x00034b88 strd r7, r3, [r8]                             |     __asm ("strd r7, r3, [r8]");
    0x00034b8c pop.w {r4, r5, r6, r7, r8, pc}                |     
                                                             | label_39:
    0x00034b90 cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x00034b92 bne 0x34b12                                   |         goto label_12;
                                                             |     }
    0x00034b94 b 0x34b82                                     |     goto label_16;
                                                             | label_37:
    0x00034b96 cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00034b98 bne 0x34b54                                   |         goto label_15;
                                                             |     }
    0x00034b9a b 0x34b82                                     |     goto label_16;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x35c00 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00035c00 ()                                      | void fcn_00035c00 (int16_t arg_0h, int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
    0x00035c00 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00035c04 mov r7, r0                                        |     r7 = r0;
    0x00035c06 ldr r5, [r0, 0x10]                                |     r5 = *(arg_0hx10);
    0x00035c08 sub sp, 0xc                                       |     
    0x00035c0a ldr.w sb, [r0, 4]                                 |     sb = *((r0 + 4));
    0x00035c0e ldrb r3, [r0, 0x19]                               |     r3 = *(arg_0hx19);
                                                                 | label_4:
    0x00035c10 add.w r2, r7, r3, lsl 2                           |     r2 = r7 + (r3 << 2);
    0x00035c14 adds r3, 0x23                                     |     r3 += 0x23;
    0x00035c16 ldrsh.w r8, [r7, r3, lsl 1]                       |     offset_0 = r3 << 1;
                                                                 |     r8 = *((r7 + offset_0));
    0x00035c1a ldr r6, [r2, 0x18]                                |     r6 = *((r2 + 0x18));
                                                                 | label_3:
    0x00035c1c ldr.w r2, [sb, 0xc]                               |     r2 = *((sb + 0xc));
    0x00035c20 ldr.w r4, [sb, 0x18]                              |     r4 = *((sb + 0x18));
    0x00035c24 cmp r5, r2                                        |     
                                                                 |     if (r5 >= r2) {
    0x00035c26 bge 0x35cee                                       |         goto label_14;
                                                                 |     }
    0x00035c28 adds r5, 1                                        |     r5++;
    0x00035c2a add.w r3, r5, r5, lsl 1                           |     r3 = r5 + (r5 << 1);
    0x00035c2e add.w r4, r4, r3, lsl 4                           |     r4 += (r3 << 4);
    0x00035c32 b 0x35c3e                                         |     
                                                                 |     while (r3 != r6) {
                                                                 | label_0:
    0x00035c34 cmp r2, r5                                        |         
    0x00035c36 add.w r4, r4, 0x30                                |         r4 += 0x30;
                                                                 |         if (r2 <= r5) {
    0x00035c3a ble 0x35cee                                       |             goto label_14;
                                                                 |         }
                                                                 | label_2:
    0x00035c3c adds r5, 1                                        |         r5++;
    0x00035c3e ldr r3, [r4, -0x1c]                               |         r3 = *((r4 - 0x1c));
    0x00035c42 cmp r3, r6                                        |         
    0x00035c44 bne 0x35c34                                       |         
                                                                 |     }
    0x00035c46 ldr r3, [r4, -0x18]                               |     r3 = *((r4 - 0x18));
    0x00035c4a cmp r3, r8                                        |     
                                                                 |     if (r3 != r8) {
    0x00035c4c bne 0x35c34                                       |         goto label_0;
                                                                 |     }
    0x00035c4e cmn.w r8, 2                                       |     
                                                                 |     if (r8 == 2) {
    0x00035c52 beq 0x35d10                                       |         goto label_15;
                                                                 |     }
                                                                 | label_1:
    0x00035c54 ldrb r3, [r7, 0x19]                               |     r3 = *((r7 + 0x19));
    0x00035c56 cmp r3, 1                                         |     
                                                                 |     if (r3 >= 1) {
    0x00035c58 bls 0x35c64                                       |         
    0x00035c5a ldr r3, [r4, -0x30]                               |         r3 = *((r4 - 0x30));
    0x00035c5e ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00035c60 lsls r1, r3, 0x1f                                 |         r1 = r3 << 0x1f;
                                                                 |         if (r1 < r3) {
    0x00035c62 bmi 0x35ce4                                       |             goto label_9;
                                                                 |         }
                                                                 |     }
    0x00035c64 ldrh r1, [r4, -0x24]                              |     r1 = *((r4 - 0x24));
    0x00035c68 lsls r2, r1, 0x14                                 |     r2 = r1 << 0x14;
                                                                 |     if (r2 < r1) {
    0x00035c6a bpl 0x35c72                                       |         
    0x00035c6c ldrb r0, [r7, 0x1a]                               |         r0 = *((r7 + 0x1a));
    0x00035c6e cmp r0, 0xa                                       |         
                                                                 |         if (r0 < 0xa) {
    0x00035c70 bls 0x35d3c                                       |             goto label_16;
                                                                 |         }
                                                                 |     }
                                                                 | label_6:
    0x00035c72 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00035c74 tst r1, r3                                        |     
                                                                 |     if ((r1 & r3) == 0) {
    0x00035c76 beq 0x35ce4                                       |         goto label_9;
                                                                 |     }
    0x00035c78 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
                                                                 |     if (r3 != 0) {
    0x00035c7a cbz r3, 0x35c82                                   |         
    0x00035c7c lsls r0, r1, 0x17                                 |         r0 = r1 << 0x17;
                                                                 |         if (r0 >= r1) {
    0x00035c7e bpl.w 0x35dae                                     |             goto label_17;
                                                                 |         }
                                                                 |     }
                                                                 | label_11:
    0x00035c82 tst.w r1, 0x82                                    |     
                                                                 |     if ((r1 & 0x82) != 0) {
    0x00035c86 beq 0x35caa                                       |         
    0x00035c88 ldr r3, [r4, -0x30]                               |         r3 = *((r4 - 0x30));
    0x00035c8c ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
                                                                 |         if (r3 == 0) {
    0x00035c8e cbz r3, 0x35caa                                   |             goto label_18;
                                                                 |         }
    0x00035c90 ldrb r2, [r3]                                     |         r2 = *(r3);
    0x00035c92 cmp r2, 0xa7                                      |         
                                                                 |         if (r2 != 0xa7) {
    0x00035c94 bne 0x35caa                                       |             goto label_18;
                                                                 |         }
    0x00035c96 ldr r1, [r3, 0x1c]                                |         r1 = *((r3 + 0x1c));
    0x00035c98 ldr r2, [r7, 0x1c]                                |         r2 = *((r7 + 0x1c));
    0x00035c9a cmp r1, r2                                        |         
                                                                 |         if (r1 != r2) {
    0x00035c9c bne 0x35caa                                       |             goto label_18;
                                                                 |         }
    0x00035c9e ldrsh.w r2, [r3, 0x20]                            |         r2 = *((r3 + 0x20));
    0x00035ca2 ldrsh.w r3, [r7, 0x48]                            |         r3 = *((r7 + 0x48));
    0x00035ca6 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x00035ca8 beq 0x35ce4                                       |             goto label_9;
                                                                 |         }
                                                                 |     }
                                                                 | label_18:
    0x00035caa sub.w r0, r4, 0x30                                |     r0 = r4 - 0x30;
    0x00035cae str.w sb, [r7, 4]                                 |     __asm ("str.w sb, [r7, 4]");
    0x00035cb2 str r5, [r7, 0x10]                                |     *((r7 + 0x10)) = r5;
                                                                 | label_13:
    0x00035cb4 add sp, 0xc                                       |     
    0x00035cb6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 |     do {
    0x00035cba lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
    0x00035cbc itet mi                                           |         
                                                                 |         if (r0 >= r0) {
    0x00035cbe ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x00035cc0 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x00035cc2 ldrmi r3, [r3, 8]                                 |             r3 = *((r3 + 8));
                                                                 |         }
    0x00035cc4 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00035cc6 beq.w 0x35e16                                     |             goto label_19;
                                                                 |         }
                                                                 | label_5:
    0x00035cca ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x00035ccc ands ip, r0, 0x82000                              |         
    0x00035cd0 bne 0x35cba                                       |         
                                                                 |     } while (ip != r0);
    0x00035cd2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00035cd4 beq 0x35c34                                       |         goto label_0;
                                                                 |     }
    0x00035cd6 mov r2, r3                                        |     r2 = r3;
    0x00035cd8 mov r0, ip                                        |     r0 = ip;
    0x00035cda mov r3, r6                                        |     r3 = r6;
    0x00035cdc bl 0x3480c                                        |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x00035ce0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00035ce2 beq 0x35c54                                       |         goto label_1;
                                                                 |     }
                                                                 | label_9:
    0x00035ce4 ldr.w r2, [sb, 0xc]                               |     r2 = *((sb + 0xc));
    0x00035ce8 adds r4, 0x30                                     |     r4 += 0x30;
    0x00035cea cmp r2, r5                                        |     
                                                                 |     if (r2 > r5) {
    0x00035cec bgt 0x35c3c                                       |         goto label_2;
                                                                 |     }
                                                                 | label_14:
    0x00035cee ldr.w sb, [sb, 4]                                 |     sb = *((sb + 4));
    0x00035cf2 movs r5, 0                                        |     r5 = 0;
    0x00035cf4 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00035cf8 bne 0x35c1c                                       |         goto label_3;
                                                                 |     }
    0x00035cfa ldrb r3, [r7, 0x19]                               |     r3 = *((r7 + 0x19));
    0x00035cfc ldrb r2, [r7, 0x1a]                               |     r2 = *((r7 + 0x1a));
    0x00035cfe cmp r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00035d00 bls.w 0x35e50                                     |         goto label_20;
                                                                 |     }
    0x00035d04 adds r3, 1                                        |     r3++;
    0x00035d06 ldr.w sb, [r7]                                    |     sb = *(r7);
    0x00035d0a uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00035d0c strb r3, [r7, 0x19]                               |     *((r7 + 0x19)) = r3;
    0x00035d0e b 0x35c10                                         |     goto label_4;
                                                                 | label_15:
    0x00035d10 ldr r3, [r4, -0x30]                               |     r3 = *((r4 - 0x30));
    0x00035d14 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x00035d16 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
                                                                 |     if (r1 != 0) {
    0x00035d18 cbnz r1, 0x35d28                                  |         goto label_21;
                                                                 |     }
    0x00035d1a b 0x35d36                                         |     goto label_22;
                                                                 |     do {
    0x00035d1c lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
    0x00035d1e itet mi                                           |         
                                                                 |         if (r0 >= r0) {
    0x00035d20 ldrmi r1, [r1, 0x14]                              |             r1 = *((r1 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x00035d22 ldrpl r1, [r1, 0xc]                               |             r1 = *((r1 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x00035d24 ldrmi r1, [r1, 8]                                 |             r1 = *((r1 + 8));
                                                                 |         }
                                                                 |         if (r1 == 0) {
    0x00035d26 cbz r1, 0x35d36                                   |             goto label_22;
                                                                 |         }
                                                                 | label_21:
    0x00035d28 ldr r0, [r1, 4]                                   |         r0 = *((r1 + 4));
    0x00035d2a tst.w r0, 0x82000                                 |         
    0x00035d2e bne 0x35d1c                                       |         
                                                                 |     } while ((r0 & 0x82000) != 0);
    0x00035d30 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00035d32 bne 0x35cca                                       |         goto label_5;
                                                                 |     }
    0x00035d34 b 0x35c34                                         |     goto label_0;
                                                                 | label_22:
    0x00035d36 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00035d38 bne 0x35cca                                       |         goto label_5;
                                                                 |     }
    0x00035d3a b 0x35c54                                         |     goto label_1;
                                                                 | label_16:
    0x00035d3c ldr r3, [r4, -0x30]                               |     r3 = *((r4 - 0x30));
    0x00035d40 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
                                                                 |     if (r2 != 0) {
    0x00035d42 cbnz r2, 0x35d54                                  |         goto label_23;
                                                                 |     }
    0x00035d44 b 0x35c72                                         |     goto label_6;
                                                                 | label_7:
    0x00035d46 lsls r3, r3, 0xc                                  |     r3 <<= 0xc;
    0x00035d48 itet mi                                           |     
                                                                 |     if (r3 >= r3) {
    0x00035d4a ldrmi r3, [r2, 0x14]                              |         r3 = *((r2 + 0x14));
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00035d4c ldrpl r2, [r2, 0xc]                               |         r2 = *((r2 + 0xc));
                                                                 |     }
                                                                 |     if (r3 >= r3) {
    0x00035d4e ldrmi r2, [r3, 8]                                 |         r2 = *((r3 + 8));
                                                                 |     }
    0x00035d50 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00035d52 beq 0x35c72                                       |         goto label_6;
                                                                 |     }
                                                                 | label_23:
    0x00035d54 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00035d56 tst.w r3, 0x82000                                 |     
                                                                 |     if ((r3 & 0x82000) != 0) {
    0x00035d5a bne 0x35d46                                       |         goto label_7;
                                                                 |     }
    0x00035d5c ldrb.w ip, [r2]                                   |     ip = *(r2);
    0x00035d60 cmp.w ip, 0xa7                                    |     
                                                                 |     if (ip != 0xa7) {
    0x00035d64 bne 0x35c72                                       |         goto label_6;
                                                                 |     }
    0x00035d66 ands r3, r3, 0x20                                 |     r3 &= 0x20;
                                                                 |     if (r3 != r3) {
    0x00035d6a bne 0x35c72                                       |         goto label_6;
                                                                 |     }
    0x00035d6c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00035d6e beq 0x35e4a                                       |         goto label_24;
                                                                 |     }
    0x00035d70 mov sl, r3                                        |     sl = r3;
    0x00035d72 add.w r3, r7, 0x48                                |     r3 = r7 + 0x48;
    0x00035d76 strd r1, r3, [sp]                                 |     __asm ("strd r1, r3, [sp]");
    0x00035d7a add.w ip, r7, 0x18                                |     
    0x00035d7e ldr.w lr, [r2, 0x1c]                              |     
    0x00035d82 mov r3, sl                                        |     r3 = sl;
    0x00035d84 ldr.w fp, [sp, 4]                                 |     fp = var_4h;
    0x00035d88 b 0x35d90                                         |     
                                                                 |     while (r1 != lr) {
                                                                 | label_8:
    0x00035d8a adds r3, 1                                        |         r3++;
    0x00035d8c cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00035d8e beq 0x35e28                                       |             goto label_25;
                                                                 |         }
    0x00035d90 ldr r1, [ip, 4]!                                  |         r1 = *((ip += 4));
    0x00035d94 cmp r1, lr                                        |         
    0x00035d96 bne 0x35d8a                                       |         
                                                                 |     }
    0x00035d98 ldrsh.w sl, [fp, r3, lsl 1]                       |     offset_1 = r3 << 1;
                                                                 |     sl = *((fp + offset_1));
    0x00035d9c ldrsh.w r1, [r2, 0x20]                            |     r1 = *((r2 + 0x20));
    0x00035da0 cmp sl, r1                                        |     
                                                                 |     if (sl != r1) {
    0x00035da2 bne 0x35d8a                                       |         goto label_8;
                                                                 |     }
    0x00035da4 cmp r0, r3                                        |     
    0x00035da6 ldr r1, [sp]                                      |     r1 = *(sp);
                                                                 |     if (r0 != r3) {
    0x00035da8 bne.w 0x35c72                                     |         goto label_6;
                                                                 |     }
    0x00035dac b 0x35e2a                                         |     goto label_26;
                                                                 | label_17:
    0x00035dae ldr sl, [r4, -0x30]                               |     sl = *((r4 - 0x30));
    0x00035db2 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00035db6 ldrb r1, [r7, 0x18]                               |     r1 = *((r7 + 0x18));
    0x00035db8 mov r0, sl                                        |     r0 = sl;
    0x00035dba ldr.w fp, [r3]                                    |     fp = *(r3);
    0x00035dbe bl 0x153f8                                        |     r0 = fcn_000153f8 (r0, r1);
    0x00035dc2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00035dc4 beq 0x35ce4                                       |         goto label_9;
                                                                 |     }
    0x00035dc6 ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x00035dca mov r0, fp                                        |     r0 = fp;
    0x00035dcc ldr.w r3, [sl, 0xc]                               |     r3 = *((sl + 0xc));
    0x00035dd0 lsls r2, r2, 0x15                                 |     r2 <<= 0x15;
    0x00035dd2 ittee mi                                          |     
                                                                 |     if (r2 >= r2) {
    0x00035dd4 ldrmi r1, [sl, 0x10]                              |         r1 = *((sl + 0x10));
                                                                 |     }
                                                                 |     if (r2 < r2) {
    0x00035dd8 movpl r2, r3                                      |         r2 = r3;
                                                                 |     }
                                                                 |     if (r2 < r2) {
    0x00035dda ldrpl r2, [sl, 0x10]                              |         r2 = *((sl + 0x10));
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x00035dde mov r1, r3                                        |         r1 = r3;
                                                                 |     }
    0x00035de0 bl 0x27f10                                        |     r0 = fcn_00027f10 (r0, r1, r2);
                                                                 |     if (r0 == 0) {
    0x00035de4 cbz r0, 0x35e42                                   |         goto label_27;
                                                                 |     }
                                                                 | label_12:
    0x00035de6 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00035de8 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x00035dea ldr.w ip, [pc, 0x68]                              |     ip = *(0x00035e54);
    0x00035dee subs r0, 1                                        |     r0--;
    0x00035df0 subs r1, 1                                        |     r1--;
    0x00035df2 add ip, pc                                        |     
                                                                 |     do {
                                                                 | label_10:
    0x00035df4 ldrb r3, [r0, 1]!                                 |         r3 = *((r0 += 1));
    0x00035df8 ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x00035dfc add.w sl, ip, r3                                  |         sl = ip + r3;
    0x00035e00 cmp r3, r2                                        |         
    0x00035e02 add.w lr, ip, r2                                  |         lr = ip + r2;
                                                                 |         if (r3 == r2) {
    0x00035e06 beq 0x35e1e                                       |             goto label_28;
                                                                 |         }
    0x00035e08 ldrb.w r2, [sl, 0x140]                            |         r2 = *((sl + 0x140));
    0x00035e0c ldrb.w r3, [lr, 0x140]                            |         r3 = *((lr + 0x140));
    0x00035e10 cmp r2, r3                                        |         
    0x00035e12 beq 0x35df4                                       |         
                                                                 |     } while (r2 == r3);
    0x00035e14 b 0x35ce4                                         |     goto label_9;
                                                                 | label_19:
    0x00035e16 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00035e18 bne.w 0x35c34                                     |         goto label_0;
                                                                 |     }
    0x00035e1c b 0x35c54                                         |     goto label_1;
                                                                 | label_28:
    0x00035e1e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00035e20 bne 0x35df4                                       |         goto label_10;
                                                                 |     }
    0x00035e22 ldrh r1, [r4, -0x24]                              |     r1 = *((r4 - 0x24));
    0x00035e26 b 0x35c82                                         |     goto label_11;
                                                                 | label_25:
    0x00035e28 ldr r1, [sp]                                      |     r1 = *(sp);
                                                                 |     do {
                                                                 | label_26:
    0x00035e2a ldrh r2, [r2, 0x20]                               |         r2 = *((r2 + 0x20));
    0x00035e2c add.w r3, r7, r0, lsl 2                           |         r3 = r7 + (r0 << 2);
    0x00035e30 str.w lr, [r3, 0x1c]                              |         __asm ("str.w lr, [r3, 0x1c]");
    0x00035e34 add.w r3, r0, 0x24                                |         r3 = r0 + 0x24;
    0x00035e38 adds r0, 1                                        |         r0++;
    0x00035e3a strh.w r2, [r7, r3, lsl 1]                        |         offset_2 = r3 << 1;
                                                                 |         *((r7 + offset_2)) = r2;
    0x00035e3e strb r0, [r7, 0x1a]                               |         *((r7 + 0x1a)) = r0;
    0x00035e40 b 0x35c72                                         |         goto label_6;
                                                                 | label_27:
    0x00035e42 ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00035e46 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00035e48 b 0x35de6                                         |         goto label_12;
                                                                 | label_24:
    0x00035e4a ldr.w lr, [r2, 0x1c]                              |         
    0x00035e4e b 0x35e2a                                         |         
                                                                 |     } while (1);
                                                                 | label_20:
    0x00035e50 mov r0, sb                                        |     r0 = sb;
    0x00035e52 b 0x35cb4                                         |     goto label_13;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x35fac */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00035fac ()                                      | void fcn_00035fac (int16_t arg_1h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_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_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_2;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_f0h;
                                                                 |     int16_t var_f8h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00035fac push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00035fb0 sub sp, 0xc4                                      |     
    0x00035fb2 str r2, [sp, 0x84]                                |     var_84h = r2;
    0x00035fb4 ldr.w r2, [pc, 0x82c]                             |     r2 = *(0x000367e4);
    0x00035fb8 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00035fba ldrh.w r4, [sp, 0xe8]                             |     r4 = var_0h;
    0x00035fbe ldr.w r3, [pc, 0x828]                             |     
    0x00035fc2 add r2, pc                                        |     r2 += pc;
    0x00035fc4 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00035fc6 str r4, [sp, 0x58]                                |     var_58h = r4;
    0x00035fc8 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x00035fca ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00035fcc ldr r2, [sp, 0xec]                                |     r2 = var_4h;
    0x00035fce ldr r3, [r3]                                      |     r3 = *(0x367ea);
    0x00035fd0 str r3, [sp, 0xbc]                                |     var_bch = r3;
    0x00035fd2 mov.w r3, 0                                       |     r3 = 0;
    0x00035fd6 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00035fd8 str r2, [sp, 0x9c]                                |     var_9ch = r2;
    0x00035fda ldr r2, [sp, 0xf0]                                |     r2 = var_f0h;
    0x00035fdc ldr r3, [r3]                                      |     r3 = *(r3);
    0x00035fde str r2, [sp, 0x98]                                |     var_98h = r2;
                                                                 |     if (r4 != 0) {
    0x00035fe0 cbz r4, 0x35fea                                   |         
    0x00035fe2 ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x00035fe4 lsls r4, r3, 0x19                                 |         r4 = r3 << 0x19;
                                                                 |         if (r4 < r3) {
    0x00035fe6 bmi.w 0x3621e                                     |             goto label_7;
                                                                 |         }
                                                                 |     }
    0x00035fea ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00035fec ldr r4, [r3]                                      |     r4 = *(r3);
    0x00035fee uxth r3, r4                                       |     r3 = (int16_t) r4;
    0x00035ff0 cmp r3, 0x3f                                      |     
                                                                 |     if (r3 > 0x3f) {
    0x00035ff2 bhi.w 0x3621e                                     |         goto label_7;
                                                                 |     }
    0x00035ff6 mov r6, r3                                        |     r6 = r3;
    0x00035ff8 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00035ffa sub.w r0, r6, 0x20                                |     r0 = r6 - 0x20;
    0x00035ffe movs r3, 1                                        |     r3 = 1;
    0x00036000 rsb.w r5, r6, 0x20                                |     r5 = 0x20 - r6;
    0x00036004 lsl.w r0, r3, r0                                  |     r0 = r3 << r0;
    0x00036008 lsr.w r5, r3, r5                                  |     r5 = r3 >> r5;
    0x0003600c lsls r3, r6                                       |     r3 <<= r6;
    0x0003600e orrs r0, r5                                       |     r0 |= r5;
    0x00036010 adds.w sb, r3, -1                                 |     sb = r3 + -1;
    0x00036014 adc r3, r0, -1                                    |     __asm ("adc r3, r0, -1");
    0x00036018 ldr r0, [sp, 0x70]                                |     r0 = var_70h;
    0x0003601a movw r1, 0x803                                    |     r1 = 0x803;
    0x0003601e movw r2, 0x183                                    |     r2 = 0x183;
    0x00036022 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00036024 tst r0, r1                                        |     
    0x00036026 it eq                                             |     
                                                                 |     if ((r0 & r1) != 0) {
    0x00036028 moveq r2, 0x182                                   |         r2 = 0x182;
                                                                 |     }
    0x0003602c orrs.w r3, sb, r3                                 |     r3 = sb | r3;
    0x00036030 str r2, [sp, 0x48]                                |     var_48h = r2;
                                                                 |     if (r3 == sb) {
    0x00036032 beq.w 0x366ca                                     |         goto label_36;
                                                                 |     }
    0x00036036 ldr.w r3, [pc, 0x7b4]                             |     r3 = *(0x000367ec);
    0x0003603a str.w sb, [sp, 0x6c]                              |     __asm ("str.w sb, [var_6ch_2]");
    0x0003603e str r4, [sp, 0x94]                                |     var_94h = r4;
    0x00036040 add r3, pc                                        |     r3 += pc;
    0x00036042 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x00036044 movs r3, 0                                        |     r3 = 0;
    0x00036046 mov r8, r3                                        |     r8 = r3;
    0x00036048 mov sl, r3                                        |     sl = r3;
    0x0003604a strd r3, r3, [sp, 0x7c]                           |     __asm ("strd r3, r3, [sp, 0x7c]");
    0x0003604e mov sb, r8                                        |     sb = r8;
    0x00036050 strd r3, r3, [sp, 0x4c]                           |     __asm ("strd r3, r3, [sp, 0x4c]");
    0x00036054 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00036056 and r2, r3, 0x80                                  |     r2 = r3 & 0x80;
    0x0003605a and r3, r3, 0x40                                  |     r3 &= 0x40;
    0x0003605e str r2, [sp, 0x54]                                |     var_54h = r2;
    0x00036060 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00036062 b 0x3608e                                         |     
                                                                 |     while (r0 < r3) {
                                                                 | label_3:
    0x00036064 ldr r2, [sp, 0x6c]                                |         r2 = var_6ch_2;
    0x00036066 add.w sb, sb, 1                                   |         sb++;
    0x0003606a ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x0003606c cmp r8, r2                                        |         
    0x0003606e sbcs.w r3, sl, r3                                 |         __asm ("sbcs.w r3, sl, r3");
                                                                 |         if (r8 >= r2) {
    0x00036072 bhs.w 0x367c6                                     |             goto label_37;
                                                                 |         }
    0x00036076 ldr r3, [sp, 0x58]                                |         r3 = var_58h;
    0x00036078 cmp r3, sb                                        |         
                                                                 |         if (r3 < sb) {
    0x0003607a blt.w 0x367d8                                     |             goto label_38;
                                                                 |         }
    0x0003607e ldr r3, [r1, 8]                                   |         r3 = *((r1 + 8));
    0x00036080 ldr r2, [sp, 0x4c]                                |         r2 = var_4ch;
    0x00036082 orrs r2, r3                                       |         r2 |= r3;
    0x00036084 ldr r3, [r1, 0xc]                                 |         r3 = *((r1 + 0xc));
    0x00036086 str r2, [sp, 0x4c]                                |         var_4ch = r2;
    0x00036088 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x0003608a orrs r2, r3                                       |         r2 |= r3;
    0x0003608c str r2, [sp, 0x50]                                |         var_50h = r2;
    0x0003608e ldr r3, [sp, 0x58]                                |         r3 = var_58h;
    0x00036090 cmp r3, sb                                        |         
                                                                 |         if (r3 <= sb) {
    0x00036092 ble.w 0x366a2                                     |             goto label_39;
                                                                 |         }
    0x00036096 ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00036098 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0003609a ldr.w r1, [r3, sb, lsl 2]                         |         offset_0 = sb << 2;
                                                                 |         r1 = *((r3 + offset_0));
    0x0003609e ldr r3, [sp, 0x70]                                |         r3 = var_70h;
    0x000360a0 lsls r0, r3, 0x14                                 |         r0 = r3 << 0x14;
    0x000360a2 bmi 0x36064                                       |         
                                                                 |     }
    0x000360a4 ldr r2, [r1, 0x28]                                |     r2 = *((r1 + 0x28));
    0x000360a6 ands r3, r2, 0x400                                |     r3 = r2 & 0x400;
                                                                 |     if (r3 != r2) {
    0x000360aa bne.w 0x366ae                                     |         goto label_40;
                                                                 |     }
                                                                 | label_28:
    0x000360ae ldr r0, [sp, 0x54]                                |     r0 = var_54h;
                                                                 |     if (r0 != 0) {
    0x000360b0 cbz r0, 0x360b4                                   |         
    0x000360b2 strh r3, [r1, 0x1e]                               |         *((r1 + 0x1e)) = r3;
                                                                 |     }
    0x000360b4 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000360b6 ldrb r0, [r1, 0x10]                               |     r0 = *((r1 + 0x10));
    0x000360b8 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000360ba add.w r3, r3, r0, lsl 6                           |     r3 += (r0 << 6);
    0x000360be ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x000360c0 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000360c2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000360c4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000360c6 beq.w 0x362c4                                     |         goto label_41;
                                                                 |     }
    0x000360ca ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x000360cc movs r5, 0                                        |     r5 = 0;
    0x000360ce mov fp, r8                                        |     
    0x000360d0 strd r1, sb, [sp, 0x10]                           |     __asm ("strd r1, sb, [sp, 0x10]");
                                                                 | label_0:
    0x000360d4 rsb.w sb, r5, 0x20                                |     sb = 0x20 - r5;
    0x000360d8 lsr.w r2, fp, r5                                  |     r2 = fp >> r5;
    0x000360dc lsl.w r1, sl, sb                                  |     r1 = sl << sb;
    0x000360e0 sub.w r8, r5, 0x20                                |     r8 = r5 - 0x20;
    0x000360e4 orrs r2, r1                                       |     r2 |= r1;
    0x000360e6 lsr.w r1, sl, r8                                  |     r1 = sl >> r8;
    0x000360ea orrs r2, r1                                       |     r2 |= r1;
    0x000360ec lsls r1, r2, 0x1f                                 |     r1 = r2 << 0x1f;
                                                                 |     if (r1 < r2) {
    0x000360ee bmi 0x3611e                                       |         goto label_6;
                                                                 |     }
    0x000360f0 ldr r4, [r7, 8]                                   |     r4 = *((r7 + 8));
                                                                 |     if (r4 != 0) {
    0x000360f2 cbnz r4, 0x36102                                  |         goto label_42;
                                                                 |     }
    0x000360f4 b 0x3611e                                         |     goto label_6;
                                                                 |     do {
    0x000360f6 lsls r2, r2, 0xc                                  |         r2 <<= 0xc;
    0x000360f8 itet mi                                           |         
                                                                 |         if (r2 >= r2) {
    0x000360fa ldrmi r2, [r4, 0x14]                              |             r2 = *((r4 + 0x14));
                                                                 |         }
                                                                 |         if (r2 < r2) {
    0x000360fc ldrpl r4, [r4, 0xc]                               |             r4 = *((r4 + 0xc));
                                                                 |         }
                                                                 |         if (r2 >= r2) {
    0x000360fe ldrmi r4, [r2, 8]                                 |             r4 = *((r2 + 8));
                                                                 |         }
                                                                 |         if (r4 == 0) {
    0x00036100 cbz r4, 0x3611e                                   |             goto label_6;
                                                                 |         }
                                                                 | label_42:
    0x00036102 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00036104 tst.w r2, 0x82000                                 |         
    0x00036108 bne 0x360f6                                       |         
                                                                 |     } while ((r2 & 0x82000) != 0);
    0x0003610a ldrb r6, [r4]                                     |     r6 = *(r4);
    0x0003610c adds r6, 0x59                                     |     r6 += 0x59;
    0x0003610e ands r6, r6, 0xfd                                 |     r6 &= 0xfd;
                                                                 |     if (r6 == r6) {
    0x00036112 bne 0x3611e                                       |         
    0x00036114 ldr r2, [r4, 0x1c]                                |         r2 = *((r4 + 0x1c));
    0x00036116 ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x00036118 cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0003611a beq.w 0x36262                                     |             goto label_43;
                                                                 |         }
                                                                 |     }
                                                                 | label_6:
    0x0003611e adds r5, 1                                        |     r5++;
    0x00036120 adds r7, 0x10                                     |     r7 += 0x10;
    0x00036122 cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x00036124 bne 0x360d4                                       |         goto label_0;
                                                                 |     }
    0x00036126 ldrd r1, sb, [sp, 0x10]                           |     __asm ("ldrd r1, sb, [var_10h]");
    0x0003612a mov r8, fp                                        |     r8 = fp;
    0x0003612c ldr r2, [r1, 0x28]                                |     r2 = *((r1 + 0x28));
    0x0003612e lsls r6, r2, 0x13                                 |     r6 = r2 << 0x13;
                                                                 |     if (r6 >= r2) {
    0x00036130 bpl.w 0x362ca                                     |         goto label_44;
                                                                 |     }
    0x00036134 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x00036136 ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x00036138 orrs r2, r3                                       |     r2 |= r3;
    0x0003613a ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x0003613c str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x0003613e ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x00036140 orrs r2, r3                                       |     r2 |= r3;
    0x00036142 str r2, [sp, 0x80]                                |     var_80h = r2;
                                                                 | label_12:
    0x00036144 ldr.w r3, [pc, 0x6a8]                             |     r3 = *(0x000367f0);
    0x00036148 movs r5, 0                                        |     r5 = 0;
    0x0003614a str.w sb, [sp, 0x20]                              |     __asm ("str.w sb, [var_20h]");
    0x0003614e mov.w fp, 1                                       |     
    0x00036152 ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x00036154 mov sb, r8                                        |     sb = r8;
    0x00036156 add r3, pc                                        |     r3 += pc;
    0x00036158 str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0003615a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0003615c b 0x3618c                                         |     goto label_2;
                                                                 | label_1:
    0x0003615e mov r1, r3                                        |     r1 = r3;
    0x00036160 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00036162 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00036164 add.w r0, r3, 0x1f8                               |     r0 = r3 + 0x1f8;
    0x00036168 bl 0x182e4                                        |     r0 = fcn_000182e4 (r0, r1);
    0x0003616c orrs.w ip, r0, r1                                 |     
                                                                 |     if (ip == r0) {
    0x00036170 beq 0x36240                                       |         goto label_45;
                                                                 |     }
    0x00036172 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x00036174 bic.w r0, r0, r3                                  |     r0 = BIT_MASK (r0, r3);
    0x00036178 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x0003617a bic.w r1, r1, r3                                  |     r1 = BIT_MASK (r1, r3);
    0x0003617e orrs r0, r1                                       |     r0 |= r1;
                                                                 |     if (r0 == r1) {
    0x00036180 beq 0x361b0                                       |         goto label_5;
                                                                 |     }
                                                                 |     do {
                                                                 | label_4:
    0x00036182 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00036184 adds r5, 1                                        |         r5++;
    0x00036186 adds r7, 0x10                                     |         r7 += 0x10;
    0x00036188 cmp r3, r5                                        |         
                                                                 |         if (r3 == r5) {
    0x0003618a beq 0x361d2                                       |             goto label_46;
                                                                 |         }
                                                                 | label_2:
    0x0003618c rsb.w r8, r5, 0x20                                |         r8 = 0x20 - r5;
    0x00036190 lsr.w r4, sb, r5                                  |         r4 = sb >> r5;
    0x00036194 lsl.w r3, sl, r8                                  |         r3 = sl << r8;
    0x00036198 sub.w r6, r5, 0x20                                |         r6 = r5 - 0x20;
    0x0003619c orrs r4, r3                                       |         r4 |= r3;
    0x0003619e lsr.w r3, sl, r6                                  |         r3 = sl >> r6;
    0x000361a2 orrs r4, r3                                       |         r4 |= r3;
    0x000361a4 ands r4, r4, 1                                    |         r4 &= 1;
    0x000361a8 bne 0x36182                                       |         
                                                                 |     } while (r4 != r4);
    0x000361aa ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x000361ac cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000361ae bne 0x3615e                                       |         goto label_1;
                                                                 |     }
                                                                 | label_5:
    0x000361b0 lsl.w r3, fp, r6                                  |     r3 = fp << r6;
    0x000361b4 lsr.w r8, fp, r8                                  |     r8 = fp >> r8;
    0x000361b8 orr.w r3, r3, r8                                  |     r3 |= r8;
    0x000361bc adds r7, 0x10                                     |     r7 += 0x10;
    0x000361be orr.w sl, r3, sl                                  |     sl = r3 | sl;
    0x000361c2 lsl.w r3, fp, r5                                  |     r3 = fp << r5;
    0x000361c6 adds r5, 1                                        |     r5++;
    0x000361c8 orr.w sb, r3, sb                                  |     sb = r3 | sb;
    0x000361cc ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000361ce cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x000361d0 bne 0x3618c                                       |         goto label_2;
                                                                 |     }
                                                                 | label_46:
    0x000361d2 mov r8, sb                                        |     r8 = sb;
    0x000361d4 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x000361d6 ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x000361da b 0x36064                                         |     goto label_3;
                                                                 | label_9:
    0x000361dc ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000361de movs r0, 1                                        |     r0 = 1;
    0x000361e0 rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x000361e4 subs r2, 0x21                                     |     r2 -= 0x21;
    0x000361e6 lsl.w r2, r0, r2                                  |     r2 = r0 << r2;
    0x000361ea b 0x361f8                                         |     
                                                                 |     while (r3 != 1) {
    0x000361ec sub.w r2, r3, 0x20                                |         r2 = r3 - 0x20;
    0x000361f0 rsb.w r1, r3, 0x20                                |         r1 = 0x20 - r3;
    0x000361f4 lsl.w r2, r0, r2                                  |         r2 = r0 << r2;
    0x000361f8 lsr.w r1, r0, r1                                  |         r1 = r0 >> r1;
    0x000361fc orrs r2, r1                                       |         r2 |= r1;
    0x000361fe lsl.w r1, r0, r3                                  |         r1 = r0 << r3;
    0x00036202 subs r1, 1                                        |         r1--;
    0x00036204 adc r2, r2, -1                                    |         __asm ("adc r2, r2, -1");
    0x00036208 and.w r5, r8, r1                                  |         r5 = r8 & r1;
    0x0003620c and.w r4, sl, r2                                  |         r4 = sl & r2;
    0x00036210 cmp r4, r2                                        |         
    0x00036212 it eq                                             |         
                                                                 |         if (r4 == r2) {
    0x00036214 cmpeq r5, r1                                      |             __asm ("cmpeq r5, r1");
                                                                 |         }
                                                                 |         if (r4 == r2) {
    0x00036216 beq.w 0x364b2                                     |             goto label_47;
                                                                 |         }
    0x0003621a subs r3, 1                                        |         r3--;
    0x0003621c bne 0x361ec                                       |         
                                                                 |     }
                                                                 | label_7:
    0x0003621e movs r0, 0                                        |     r0 = 0;
                                                                 | label_10:
    0x00036220 ldr.w r2, [pc, 0x5d0]                             |     
    0x00036224 ldr.w r3, [pc, 0x5c0]                             |     r3 = *(0x367e8);
    0x00036228 add r2, pc                                        |     r2 = 0x6ca20;
    0x0003622a ldr r3, [r2, r3]                                  |     r3 = *(0x6ca20);
    0x0003622c ldr r2, [r3]                                      |     r2 = *(0x6ca20);
    0x0003622e ldr r3, [sp, 0xbc]                                |     r3 = var_bch;
    0x00036230 eors r2, r3                                       |     r2 ^= r3;
    0x00036232 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00036236 bne.w 0x367de                                     |         goto label_48;
                                                                 |     }
    0x0003623a add sp, 0xc4                                      |     
    0x0003623c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_45:
    0x00036240 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00036242 add r0, sp, 0xa0                                  |     r0 += var_a0h;
    0x00036244 str r4, [sp, 0xb8]                                |     var_b8h = r4;
    0x00036246 strh.w fp, [sp, 0xb4]                             |     var_b4h = fp;
    0x0003624a mov r1, r3                                        |     r1 = r3;
    0x0003624c ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x0003624e str r3, [sp, 0xa4]                                |     var_a4h = r3;
    0x00036250 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00036252 str r3, [sp, 0xa8]                                |     var_a8h = r3;
    0x00036254 bl 0x2cd88                                        |     fcn_0002cd88 (r0, r1);
    0x00036258 ldrh.w r3, [sp, 0xb4]                             |     r3 = var_b4h;
    0x0003625c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003625e beq 0x36182                                       |         goto label_4;
                                                                 |     }
    0x00036260 b 0x361b0                                         |     goto label_5;
                                                                 | label_43:
    0x00036262 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00036264 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00036266 ldrsh.w r2, [r4, 0x20]                            |     r2 = *((r4 + 0x20));
    0x0003626a str r6, [sp, 0xc]                                 |     var_ch_2 = r6;
    0x0003626c str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003626e ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00036270 mvns r1, r3                                       |     r1 = ~r3;
    0x00036272 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00036274 str r1, [sp]                                      |     *(sp) = r1;
    0x00036276 mvns r1, r3                                       |     r1 = ~r3;
    0x00036278 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003627a str r1, [sp, 4]                                   |     var_4h_2 = r1;
    0x0003627c ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0003627e add.w r0, r3, 0x58                                |     r0 = r3 + 0x58;
    0x00036282 bl 0x35f10                                        |     fcn_00035f10 (r0, r1, r2, r3, r4, r5, r6);
    0x00036286 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00036288 mov r2, r0                                        |     r2 = r0;
    0x0003628a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003628c beq.w 0x3611e                                     |         goto label_6;
                                                                 |     }
    0x00036290 ldrh r1, [r0, 0xc]                                |     r1 = *((r0 + 0xc));
    0x00036292 cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x00036294 beq.w 0x36786                                     |         goto label_49;
                                                                 |     }
    0x00036298 tst.w r1, 0x82                                    |     
    0x0003629c str r0, [sp, 0x18]                                |     var_18h = r0;
                                                                 |     if ((r1 & 0x82) != 0) {
    0x0003629e beq 0x362aa                                       |         
    0x000362a0 ldrsh.w r1, [r4, 0x20]                            |         r1 = *((r4 + 0x20));
    0x000362a4 cmp r1, 0                                         |         
                                                                 |         if (r1 >= 0) {
    0x000362a6 bge.w 0x3670c                                     |             goto label_50;
                                                                 |         }
                                                                 |     }
                                                                 | label_33:
    0x000362aa movs r2, 1                                        |     r2 = 1;
    0x000362ac lsl.w r1, r2, r8                                  |     r1 = r2 << r8;
    0x000362b0 lsr.w sb, r2, sb                                  |     sb = r2 >> sb;
    0x000362b4 lsls r2, r5                                       |     r2 <<= r5;
    0x000362b6 orr.w r1, r1, sb                                  |     r1 |= sb;
    0x000362ba orr.w sl, r1, sl                                  |     sl = r1 | sl;
    0x000362be orr.w fp, r2, fp                                  |     
    0x000362c2 b 0x3611e                                         |     goto label_6;
                                                                 | label_41:
    0x000362c4 lsls r3, r2, 0x13                                 |     r3 = r2 << 0x13;
                                                                 |     if (r3 < r2) {
    0x000362c6 bmi.w 0x367b4                                     |         goto label_51;
                                                                 |     }
                                                                 | label_44:
    0x000362ca lsls r5, r2, 0x17                                 |     r5 = r2 << 0x17;
                                                                 |     if (r5 < r2) {
    0x000362cc bmi.w 0x366f6                                     |         goto label_52;
                                                                 |     }
    0x000362d0 ldr.w lr, [r1, 0x20]                              |     
    0x000362d4 cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x000362d8 beq 0x3621e                                       |         goto label_7;
                                                                 |     }
    0x000362da ldrb.w r3, [lr, 0x37]                             |     r3 = *((lr + 0x37));
    0x000362de lsls r4, r3, 0x1d                                 |     r4 = r3 << 0x1d;
                                                                 |     if (r4 < r3) {
    0x000362e0 bmi 0x3621e                                       |         goto label_7;
                                                                 |     }
    0x000362e2 ldrb.w r3, [lr, 0x36]                             |     r3 = *((lr + 0x36));
    0x000362e6 ldrh.w r0, [lr, 0x34]                             |     r0 = *((lr + 0x34));
    0x000362ea ldrh.w r7, [lr, 0x32]                             |     r7 = *((lr + 0x32));
    0x000362ee str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000362f0 mov r4, r0                                        |     r4 = r0;
    0x000362f2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000362f4 beq.w 0x36704                                     |         goto label_53;
                                                                 |     }
    0x000362f8 eor r2, r2, 0x8000                                |     r2 ^= 0x8000;
    0x000362fc ubfx r3, r2, 0xf, 1                               |     r3 = (r2 >> 0xf) & ((1 << 1) - 1);
    0x00036300 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00036302 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00036304 beq.w 0x3648c                                     |         goto label_54;
                                                                 |     }
                                                                 | label_30:
    0x00036308 movs r3, 1                                        |     r3 = 1;
    0x0003630a sub.w r2, sb, 0x20                                |     r2 = sb - 0x20;
    0x0003630e lsl.w r2, r3, r2                                  |     r2 = r3 << r2;
    0x00036312 ldr.w r5, [pc, 0x4e4]                             |     
    0x00036316 mov.w fp, 0                                       |     
    0x0003631a str.w sb, [sp, 0x64]                              |     __asm ("str.w sb, [var_64h]");
    0x0003631e mov r0, r2                                        |     r0 = r2;
    0x00036320 rsb.w r2, sb, 0x20                                |     r2 = 0x20 - sb;
    0x00036324 lsr.w r2, r3, r2                                  |     r2 = r3 >> r2;
    0x00036328 lsl.w r3, r3, sb                                  |     r3 <<= sb;
    0x0003632c str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [var_28h]");
    0x00036330 orrs r2, r0                                       |     r2 |= r0;
    0x00036332 str r3, [sp, 0x88]                                |     var_88h = r3;
    0x00036334 add r5, pc                                        |     r5 = 0x6cb32;
    0x00036336 mov r3, r1                                        |     r3 = r1;
    0x00036338 mov ip, r4                                        |     
    0x0003633a mov sb, r8                                        |     sb = r8;
    0x0003633c str r2, [sp, 0x8c]                                |     var_8ch = r2;
    0x0003633e str.w fp, [sp, 0x78]                              |     __asm ("str.w fp, [var_78h]");
    0x00036342 str.w fp, [sp, 0x60]                              |     __asm ("str.w fp, [var_60h]");
    0x00036346 str r7, [sp, 0x68]                                |     var_68h = r7;
    0x00036348 b 0x3637a                                         |     
                                                                 |     while (r1 > fp) {
    0x0003634a ldrh r2, [r3, 0x2e]                               |         r2 = *((r3 + 0x2e));
    0x0003634c cmp r2, fp                                        |         
                                                                 |         if (r2 > fp) {
    0x0003634e bgt 0x36380                                       |             goto label_55;
                                                                 |         }
    0x00036350 ldr r2, [r3, 0x34]                                |         r2 = *((r3 + 0x34));
    0x00036352 ldr r6, [sp, 0x48]                                |         r6 = var_48h;
    0x00036354 ldr.w r4, [r2, fp, lsl 2]                         |         offset_1 = fp << 2;
                                                                 |         r4 = *((r2 + offset_1));
    0x00036358 add.w r2, r2, fp, lsl 2                           |         r2 += (fp << 2);
    0x0003635c ldrh r0, [r4, 0xc]                                |         r0 = *((r4 + 0xc));
    0x0003635e tst r6, r0                                        |         
                                                                 |         if ((r6 & r0) == 0) {
    0x00036360 beq.w 0x36636                                     |             goto label_56;
                                                                 |         }
    0x00036364 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00036366 tst.w r0, 0x180                                   |         
    0x0003636a add.w fp, fp, 1                                   |         
    0x0003636e it ne                                             |         
                                                                 |         if ((r0 & 0x180) == 0) {
    0x00036370 movne r2, 0                                       |             r2 = 0;
                                                                 |         }
    0x00036372 cmp ip, fp                                        |         
    0x00036374 str r2, [sp, 0x30]                                |         var_30h = r2;
                                                                 |         if (ip <= fp) {
    0x00036376 ble.w 0x365d0                                     |             goto label_57;
                                                                 |         }
                                                                 | label_17:
    0x0003637a ldrh r1, [r3, 0x18]                               |         r1 = *((r3 + 0x18));
    0x0003637c cmp r1, fp                                        |         
    0x0003637e bgt 0x3634a                                       |         
                                                                 |     }
                                                                 | label_55:
    0x00036380 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00036382 subs r2, 0                                        |     
    0x00036384 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x00036386 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00036388 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_21:
    0x0003638a cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x0003638e beq.w 0x36670                                     |         goto label_58;
                                                                 |     }
                                                                 | label_23:
    0x00036392 ldr.w r2, [lr, 4]                                 |     r2 = *((lr + 4));
    0x00036396 ldr.w r4, [lr, 0xc]                               |     r4 = *((lr + 0xc));
    0x0003639a ldrsh.w r0, [r2, fp, lsl 1]                       |     offset_2 = fp << 1;
                                                                 |     r0 = *((r2 + offset_2));
    0x0003639e ldr.w r2, [lr, 0x1c]                              |     r2 = *((lr + 0x1c));
    0x000363a2 ldrsh.w r6, [r4, 0x20]                            |     r6 = *((r4 + 0x20));
    0x000363a6 ldrb.w r2, [r2, fp]                               |     r2 = *((r2 + fp));
    0x000363aa cmp r6, r0                                        |     
    0x000363ac and r2, r2, 1                                     |     r2 &= 1;
                                                                 |     if (r6 == r0) {
    0x000363b0 beq.w 0x36692                                     |         goto label_59;
                                                                 |     }
    0x000363b4 ldr r6, [sp, 0x30]                                |     r6 = var_30h;
    0x000363b6 str r0, [sp, 0x14]                                |     var_14h = r0;
                                                                 |     if (r6 != 0) {
    0x000363b8 cbz r6, 0x363da                                   |         
    0x000363ba cmp r0, 0                                         |         
                                                                 |         if (r0 < 0) {
    0x000363bc blt.w 0x366e4                                     |             goto label_60;
                                                                 |         }
    0x000363c0 cmp r1, fp                                        |         
                                                                 |         if (r1 > fp) {
    0x000363c2 bgt 0x363da                                       |             goto label_27;
                                                                 |         }
    0x000363c4 ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x000363c6 add.w r0, r0, r0, lsl 1                           |         r0 += (r0 << 1);
    0x000363ca add.w r1, r1, r0, lsl 2                           |         r1 += (r0 << 2);
    0x000363ce ldrb r1, [r1, 4]                                  |         r1 = *((r1 + 4));
    0x000363d0 ands r1, r1, 0xf                                  |         r1 &= 0xf;
    0x000363d4 it ne                                             |         
                                                                 |         if (r1 == r1) {
    0x000363d6 movne r1, 1                                       |             r1 = 1;
                                                                 |         }
    0x000363d8 str r1, [sp, 0x30]                                |         var_30h = r1;
                                                                 |     }
                                                                 | label_27:
    0x000363da ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x000363dc cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000363de beq.w 0x36680                                     |         goto label_61;
                                                                 |     }
                                                                 | label_24:
    0x000363e2 str.w fp, [sp, 0x18]                              |     __asm ("str.w fp, [var_18h]");
    0x000363e6 movs r4, 0                                        |     r4 = 0;
    0x000363e8 ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x000363ea ldr.w fp, [sp, 0x1c]                              |     fp = var_1ch;
    0x000363ee str r3, [sp, 0x38]                                |     var_38h = r3;
    0x000363f0 str.w lr, [sp, 0x24]                              |     __asm ("str.w lr, [var_24h]");
    0x000363f4 strd ip, r2, [sp, 0x40]                           |     __asm ("strd ip, r2, [sp, 0x40]");
                                                                 | label_8:
    0x000363f8 rsb.w r8, r4, 0x20                                |     r8 = 0x20 - r4;
    0x000363fc lsr.w r3, sb, r4                                  |     r3 = sb >> r4;
    0x00036400 lsl.w r2, sl, r8                                  |     r2 = sl << r8;
    0x00036404 sub.w r6, r4, 0x20                                |     r6 = r4 - 0x20;
    0x00036408 orrs r3, r2                                       |     r3 |= r2;
    0x0003640a lsr.w r2, sl, r6                                  |     r2 = sl >> r6;
    0x0003640e orrs r3, r2                                       |     r3 |= r2;
    0x00036410 lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
                                                                 |     if (r1 < r3) {
    0x00036412 bmi 0x364d6                                       |         goto label_62;
                                                                 |     }
    0x00036414 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x00036416 mov r3, r1                                        |     r3 = r1;
                                                                 |     if (r1 != 0) {
    0x00036418 cbnz r1, 0x3642a                                  |         goto label_63;
                                                                 |     }
    0x0003641a b 0x364d6                                         |     goto label_62;
                                                                 |     do {
    0x0003641c lsls r2, r2, 0xc                                  |         r2 <<= 0xc;
    0x0003641e itet mi                                           |         
                                                                 |         if (r2 >= r2) {
    0x00036420 ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r2 < r2) {
    0x00036422 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r2 >= r2) {
    0x00036424 ldrmi r3, [r3, 8]                                 |             r3 = *((r3 + 8));
                                                                 |         }
    0x00036426 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00036428 beq 0x364d6                                       |             goto label_62;
                                                                 |         }
                                                                 | label_63:
    0x0003642a ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x0003642c tst.w r2, 0x82000                                 |         
    0x00036430 bne 0x3641c                                       |         
                                                                 |     } while ((r2 & 0x82000) != 0);
    0x00036432 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00036434 adds r2, 1                                        |     r2++;
                                                                 |     if (r2 < 1) {
    0x00036436 blt.w 0x365da                                     |         goto label_64;
                                                                 |     }
    0x0003643a ldrb r2, [r3]                                     |     r2 = *(r3);
    0x0003643c adds r2, 0x59                                     |     r2 += 0x59;
    0x0003643e tst.w r2, 0xfd                                    |     
                                                                 |     if ((r2 & 0xfd) == 0) {
    0x00036442 bne 0x3644c                                       |         
    0x00036444 ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
    0x00036446 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00036448 cmp r2, r0                                        |         
                                                                 |         if (r2 == r0) {
    0x0003644a beq 0x364da                                       |             goto label_65;
                                                                 |         }
                                                                 |     }
                                                                 | label_14:
    0x0003644c ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0003644e tst.w r3, 0xc0                                    |     
    0x00036452 ite ne                                            |     
                                                                 |     if ((r3 & 0xc0) == 0) {
    0x00036454 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if ((r3 & 0xc0) != 0) {
    0x00036456 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 | label_13:
    0x00036458 adds r4, 1                                        |     r4++;
    0x0003645a adds r7, 0x10                                     |     r7 += 0x10;
    0x0003645c cmp fp, r4                                        |     
    0x0003645e ite le                                            |     
                                                                 |     if (fp > r4) {
    0x00036460 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (fp <= r4) {
    0x00036462 andgt r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00036466 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00036468 bne 0x363f8                                       |         goto label_8;
                                                                 |     }
    0x0003646a mov r8, sb                                        |     r8 = sb;
    0x0003646c ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x0003646e ldr r7, [sp, 0x68]                                |     r7 = var_68h;
    0x00036470 ldr.w fp, [sp, 0x18]                              |     fp = var_18h;
    0x00036474 ldr.w sb, [sp, 0x64]                              |     sb = var_64h;
                                                                 | label_25:
    0x00036478 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0003647c beq 0x364b6                                       |         goto label_66;
                                                                 |     }
    0x0003647e cmp r7, fp                                        |     
                                                                 |     if (r7 > fp) {
    0x00036480 bgt 0x364b6                                       |         goto label_66;
                                                                 |     }
                                                                 | label_18:
    0x00036482 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00036484 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00036486 orrs r3, r2                                       |     r3 |= r2;
    0x00036488 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0003648a str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 | label_54:
    0x0003648c ldr r3, [sp, 0x30]                                |     r3 = var_30h;
                                                                 |     if (r3 != 0) {
    0x0003648e cbnz r3, 0x364bc                                  |         goto label_67;
                                                                 |     }
                                                                 | label_11:
    0x00036490 ldr.w sb, [sp, 0x6c]                              |     sb = var_6ch_2;
    0x00036494 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x00036496 ldr r4, [sp, 0x94]                                |     r4 = var_94h;
    0x00036498 cmp sl, r2                                        |     
    0x0003649a it eq                                             |     
                                                                 |     if (sl == r2) {
    0x0003649c cmpeq r8, sb                                      |         __asm ("cmpeq r8, sb");
                                                                 |     }
                                                                 |     if (sl == r2) {
    0x0003649e beq.w 0x366ca                                     |         goto label_36;
                                                                 |     }
    0x000364a2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000364a4 subs r3, 1                                        |     r3--;
    0x000364a6 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000364a8 ble.w 0x3621e                                     |         goto label_7;
                                                                 |     }
    0x000364ac cmp r3, 0x3f                                      |     
                                                                 |     if (r3 <= 0x3f) {
    0x000364ae ble.w 0x361dc                                     |         goto label_9;
                                                                 |     }
                                                                 | label_47:
    0x000364b2 sxtb r0, r3                                       |     r0 = (int32_t) r3;
    0x000364b4 b 0x36220                                         |     goto label_10;
                                                                 | label_66:
    0x000364b6 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000364b8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000364ba beq 0x36490                                       |         goto label_11;
                                                                 |     }
                                                                 | label_67:
    0x000364bc ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x000364be ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x000364c0 orrs r2, r3                                       |     r2 |= r3;
    0x000364c2 ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x000364c4 str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x000364c6 ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x000364c8 orrs r2, r3                                       |     r2 |= r3;
    0x000364ca ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000364cc str r2, [sp, 0x80]                                |     var_80h = r2;
    0x000364ce cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000364d0 bne.w 0x36144                                     |         goto label_12;
                                                                 |     }
    0x000364d4 b 0x36064                                         |     goto label_3;
                                                                 | label_62:
    0x000364d6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000364d8 b 0x36458                                         |     goto label_13;
                                                                 | label_65:
    0x000364da ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x000364de ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000364e0 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x000364e2 bne 0x3644c                                       |         goto label_14;
                                                                 |     }
    0x000364e4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000364e6 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x000364e8 beq 0x3653a                                       |         goto label_68;
                                                                 |     }
                                                                 | label_19:
    0x000364ea ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000364ec ldr r3, [r3]                                      |     r3 = *(r3);
    0x000364ee mov r0, r3                                        |     r0 = r3;
    0x000364f0 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000364f2 bl 0x27e14                                        |     fcn_00027e14 (r0, r1);
    0x000364f6 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000364f8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000364fa beq.w 0x3668c                                     |         goto label_69;
                                                                 |     }
                                                                 | label_26:
    0x000364fe ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00036500 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00036502 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00036504 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00036506 subs r0, 1                                        |     r0--;
    0x00036508 ldr.w r1, [r3, r2, lsl 2]                         |     offset_3 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_3));
    0x0003650c subs r1, 1                                        |     r1--;
                                                                 | label_16:
    0x0003650e ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x00036512 ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x00036516 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00036518 beq 0x36536                                       |         goto label_70;
                                                                 |     }
                                                                 | label_15:
    0x0003651a add r3, r5                                        |     r3 += r5;
    0x0003651c add r2, r5                                        |     r2 += r5;
    0x0003651e ldrb.w ip, [r3, 0x140]                            |     ip = *((r3 + 0x140));
    0x00036522 ldrb.w r3, [r2, 0x140]                            |     r3 = *((r2 + 0x140));
    0x00036526 cmp ip, r3                                        |     
                                                                 |     if (ip != r3) {
    0x00036528 bne 0x3644c                                       |         goto label_14;
                                                                 |     }
    0x0003652a ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x0003652e ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x00036532 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00036534 bne 0x3651a                                       |         goto label_15;
                                                                 |     }
                                                                 | label_70:
    0x00036536 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00036538 bne 0x3650e                                       |         goto label_16;
                                                                 |     }
                                                                 | label_68:
    0x0003653a ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x0003653c ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0003653e ldr.w lr, [sp, 0x24]                              |     lr = var_24h;
    0x00036542 ldrd ip, r2, [sp, 0x40]                           |     __asm ("ldrd ip, r2, [var_40h]");
    0x00036546 ldr.w fp, [sp, 0x18]                              |     fp = var_18h;
                                                                 |     if (r1 != 0) {
    0x0003654a cbz r1, 0x36552                                   |         
    0x0003654c add.w r1, fp, 1                                   |         r1 += arg_1h;
    0x00036550 strh r1, [r3, 0x1e]                               |         *((r3 + 0x1e)) = r1;
                                                                 |     }
    0x00036552 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00036554 ldr r0, [sp, 0x5c]                                |     r0 = var_5ch;
    0x00036556 add.w r1, r1, r4, lsl 4                           |     r1 += (r4 << 4);
    0x0003655a ldrb r1, [r1, 0x10]                               |     r1 = *((r1 + 0x10));
                                                                 |     if (r0 == 0) {
    0x0003655c cbnz r0, 0x3658c                                  |         
    0x0003655e ldr r7, [sp, 0x60]                                |         r7 = var_60h;
    0x00036560 and r0, r1, 1                                     |         r0 = r1 & 1;
    0x00036564 cmp r7, 0                                         |         
                                                                 |         if (r7 != 0) {
    0x00036566 bne.w 0x366ce                                     |             goto label_71;
                                                                 |         }
    0x0003656a cmp r2, r0                                        |         
    0x0003656c eor.w r7, r2, r0                                  |         r7 = r2 ^ r0;
    0x00036570 str r7, [sp, 0x78]                                |         var_78h = r7;
                                                                 |         if (r2 == r0) {
    0x00036572 beq.w 0x366f0                                     |             goto label_72;
                                                                 |         }
    0x00036576 ldr r0, [sp, 0x98]                                |         r0 = var_98h;
    0x00036578 ldr r7, [sp, 0x88]                                |         r7 = var_88h;
    0x0003657a ldr r2, [r0]                                      |         r2 = *(r0);
    0x0003657c orrs r2, r7                                       |         r2 |= r7;
    0x0003657e ldr r7, [sp, 0x8c]                                |         r7 = var_8ch;
    0x00036580 str r2, [r0]                                      |         *(r0) = r2;
    0x00036582 ldr r2, [r0, 4]                                   |         r2 = *((r0 + 4));
    0x00036584 orrs r2, r7                                       |         r2 |= r7;
    0x00036586 str r2, [r0, 4]                                   |         *((r0 + 4)) = r2;
    0x00036588 movs r2, 1                                        |         r2 = 1;
    0x0003658a str r2, [sp, 0x60]                                |         var_60h = r2;
                                                                 |     }
                                                                 | label_29:
    0x0003658c lsls r2, r1, 0x1e                                 |     r2 = r1 << 0x1e;
                                                                 |     if (r2 < r1) {
    0x0003658e bpl 0x3659e                                       |         
    0x00036590 ldrh r2, [r3, 0x18]                               |         r2 = *((r3 + 0x18));
    0x00036592 cmp r2, fp                                        |         
                                                                 |         if (r2 != fp) {
    0x00036594 bne 0x36680                                       |             goto label_61;
                                                                 |         }
    0x00036596 ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x00036598 orr r2, r2, 0x80000                               |         r2 |= 0x80000;
    0x0003659c str r2, [r3, 0x28]                                |         *((r3 + 0x28)) = r2;
                                                                 |     }
    0x0003659e ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000365a0 add.w fp, fp, 1                                   |     
    0x000365a4 adds r2, 1                                        |     r2++;
    0x000365a6 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000365a8 it eq                                             |     
                                                                 |     if (r2 != 1) {
    0x000365aa moveq r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x000365ac cmp ip, fp                                        |     
    0x000365ae str r2, [sp, 0x28]                                |     var_28h = r2;
    0x000365b0 mov.w r2, 1                                       |     r2 = 1;
    0x000365b4 lsl.w r6, r2, r6                                  |     r6 = r2 << r6;
    0x000365b8 lsr.w r8, r2, r8                                  |     r8 = r2 >> r8;
    0x000365bc lsl.w r2, r2, r4                                  |     r2 <<= r4;
    0x000365c0 orr.w r6, r6, r8                                  |     r6 |= r8;
    0x000365c4 orr.w sb, r2, sb                                  |     sb = r2 | sb;
    0x000365c8 orr.w sl, r6, sl                                  |     sl = r6 | sl;
                                                                 |     if (ip > fp) {
    0x000365cc bgt.w 0x3637a                                     |         goto label_17;
                                                                 |     }
                                                                 | label_57:
    0x000365d0 mov r8, sb                                        |     r8 = sb;
    0x000365d2 mov r1, r3                                        |     r1 = r3;
    0x000365d4 ldr.w sb, [sp, 0x64]                              |     sb = var_64h;
    0x000365d8 b 0x36482                                         |     goto label_18;
                                                                 | label_64:
    0x000365da ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000365dc ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x000365de ldr r2, [r2, 0x28]                                |     r2 = *((r2 + 0x28));
    0x000365e0 add.w r2, r2, r0, lsl 4                           |     r2 += (r0 << 4);
    0x000365e4 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x000365e6 b 0x365f4                                         |     
                                                                 |     while ((r0 & 0x82000) != 0) {
    0x000365e8 lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
    0x000365ea itet mi                                           |         
                                                                 |         if (r0 >= r0) {
    0x000365ec ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x000365ee ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x000365f0 ldrmi r3, [r3, 8]                                 |             r3 = *((r3 + 8));
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x000365f2 cbz r3, 0x36630                                   |             goto label_73;
                                                                 |         }
    0x000365f4 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x000365f6 tst.w r0, 0x82000                                 |         
    0x000365fa bne 0x365e8                                       |         
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x000365fc cbnz r2, 0x3660e                                  |         goto label_20;
                                                                 |     }
    0x000365fe b 0x3644c                                         |     goto label_14;
                                                                 |     do {
    0x00036600 lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
    0x00036602 itet mi                                           |         
                                                                 |         if (r0 >= r0) {
    0x00036604 ldrmi r2, [r2, 0x14]                              |             r2 = *((r2 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x00036606 ldrpl r2, [r2, 0xc]                               |             r2 = *((r2 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x00036608 ldrmi r2, [r2, 8]                                 |             r2 = *((r2 + 8));
                                                                 |         }
    0x0003660a cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0003660c beq 0x3669a                                       |             goto label_74;
                                                                 |         }
                                                                 | label_20:
    0x0003660e ldr r0, [r2, 4]                                   |         r0 = *((r2 + 4));
    0x00036610 ands ip, r0, 0x82000                              |         
    0x00036614 bne 0x36600                                       |         
                                                                 |     } while (ip != r0);
    0x00036616 mov r0, ip                                        |     r0 = ip;
    0x00036618 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003661a beq.w 0x3644c                                     |         goto label_14;
                                                                 |     }
    0x0003661e mov r1, r3                                        |     r1 = r3;
    0x00036620 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00036622 bl 0x3480c                                        |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x00036626 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00036628 bne.w 0x3644c                                     |         goto label_14;
                                                                 |     }
    0x0003662c ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x0003662e b 0x364ea                                         |     goto label_19;
                                                                 | label_73:
    0x00036630 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00036632 bne 0x3660e                                       |         goto label_20;
                                                                 |     }
    0x00036634 b 0x364ea                                         |     goto label_19;
                                                                 | label_56:
    0x00036636 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00036638 subs r6, 0                                        |     
    0x0003663a it ne                                             |     
                                                                 |     if (r6 == 0) {
    0x0003663c movne r6, 1                                       |         r6 = 1;
                                                                 |     }
    0x0003663e lsls r0, r0, 0x1f                                 |     r0 <<= 0x1f;
    0x00036640 str r6, [sp, 0x10]                                |     var_10h = r6;
                                                                 |     if (r0 >= r0) {
    0x00036642 bpl.w 0x3638a                                     |         goto label_21;
                                                                 |     }
    0x00036646 add.w r0, fp, 1                                   |     r0 += arg_1h;
    0x0003664a ldr r6, [r4]                                      |     r6 = *(r4);
    0x0003664c cmp r1, r0                                        |     
                                                                 |     if (r1 > r0) {
    0x0003664e bgt 0x3665a                                       |         goto label_75;
                                                                 |     }
    0x00036650 b 0x3638a                                         |     goto label_21;
                                                                 | label_22:
    0x00036652 adds r0, 1                                        |     r0++;
    0x00036654 cmp r1, r0                                        |     
                                                                 |     if (r1 == r0) {
    0x00036656 beq.w 0x3638a                                     |         goto label_21;
                                                                 |     }
                                                                 | label_75:
    0x0003665a ldr r4, [r2, 4]!                                  |     r4 = *((r2 += 4));
    0x0003665e ldr r4, [r4]                                      |     r4 = *(r4);
    0x00036660 cmp r4, r6                                        |     
                                                                 |     if (r4 != r6) {
    0x00036662 bne 0x36652                                       |         goto label_22;
                                                                 |     }
    0x00036664 movs r2, 0                                        |     r2 = 0;
    0x00036666 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00036668 cmp.w lr, 0                                       |     
                                                                 |     if (lr != 0) {
    0x0003666c bne.w 0x36392                                     |         goto label_23;
                                                                 |     }
                                                                 | label_58:
    0x00036670 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00036672 mov.w r2, -1                                      |     r2 = -1;
    0x00036676 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00036678 mov r2, lr                                        |     r2 = lr;
    0x0003667a cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0003667c bne.w 0x363e2                                     |         goto label_24;
                                                                 |     }
                                                                 | label_61:
    0x00036680 mov r8, sb                                        |     r8 = sb;
    0x00036682 ldr r7, [sp, 0x68]                                |     r7 = var_68h;
    0x00036684 ldr.w sb, [sp, 0x64]                              |     sb = var_64h;
    0x00036688 mov r1, r3                                        |     r1 = r3;
    0x0003668a b 0x36478                                         |     goto label_25;
                                                                 | label_69:
    0x0003668c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003668e ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x00036690 b 0x364fe                                         |     goto label_26;
                                                                 | label_59:
    0x00036692 mov.w r1, -1                                      |     r1 = -1;
    0x00036696 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x00036698 b 0x363da                                         |     goto label_27;
                                                                 | label_74:
    0x0003669a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003669c bne.w 0x3644c                                     |         goto label_14;
                                                                 |     }
    0x000366a0 b 0x364ea                                         |     goto label_19;
                                                                 | label_39:
    0x000366a2 ldr r1, [sp, 0x9c]                                |     r1 = var_9ch;
    0x000366a4 ldr r2, [r1, 0x28]                                |     r2 = *((r1 + 0x28));
    0x000366a6 ands r3, r2, 0x400                                |     r3 = r2 & 0x400;
                                                                 |     if (r3 == r2) {
    0x000366aa beq.w 0x360ae                                     |         goto label_28;
                                                                 |     }
                                                                 | label_40:
    0x000366ae ldrsb.w r3, [r1, 0x1d]                            |     r3 = *((r1 + 0x1d));
    0x000366b2 ldr r4, [sp, 0x94]                                |     r4 = var_94h;
    0x000366b4 ldr.w sb, [sp, 0x6c]                              |     sb = var_6ch_2;
    0x000366b8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000366ba beq.w 0x367cc                                     |         goto label_76;
                                                                 |     }
    0x000366be ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x000366c0 and r3, r3, 0x280                                 |     r3 &= 0x280;
    0x000366c4 cmp r3, 0x80                                      |     
                                                                 |     if (r3 == 0x80) {
    0x000366c6 beq.w 0x367cc                                     |         goto label_76;
                                                                 |     }
                                                                 | label_36:
    0x000366ca sxtb r0, r4                                       |     r0 = (int32_t) r4;
    0x000366cc b 0x36220                                         |     goto label_10;
                                                                 | label_71:
    0x000366ce ldr r7, [sp, 0x78]                                |     r7 = var_78h;
    0x000366d0 eors r2, r7                                       |     r2 ^= r7;
    0x000366d2 cmp r2, r0                                        |     
                                                                 |     if (r2 == r0) {
    0x000366d4 beq.w 0x3658c                                     |         goto label_29;
                                                                 |     }
    0x000366d8 mov r8, sb                                        |     r8 = sb;
    0x000366da ldr r7, [sp, 0x68]                                |     r7 = var_68h;
    0x000366dc ldr.w sb, [sp, 0x64]                              |     sb = var_64h;
    0x000366e0 mov r1, r3                                        |     r1 = r3;
    0x000366e2 b 0x36478                                         |     goto label_25;
                                                                 | label_60:
    0x000366e4 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000366e6 adds r1, 2                                        |     r1 += 2;
    0x000366e8 it ne                                             |     
                                                                 |     if (r1 == 2) {
    0x000366ea movne r1, 1                                       |         r1 = 1;
                                                                 |     }
    0x000366ec str r1, [sp, 0x30]                                |     var_30h = r1;
    0x000366ee b 0x363da                                         |     goto label_27;
                                                                 | label_72:
    0x000366f0 movs r2, 1                                        |     r2 = 1;
    0x000366f2 str r2, [sp, 0x60]                                |     var_60h = r2;
    0x000366f4 b 0x3658c                                         |     goto label_29;
                                                                 | label_52:
    0x000366f6 movs r3, 1                                        |     r3 = 1;
    0x000366f8 mov.w lr, 0                                       |     lr = 0;
    0x000366fc mov r4, r3                                        |     r4 = r3;
    0x000366fe mov r7, lr                                        |     r7 = lr;
    0x00036700 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00036702 b 0x36308                                         |     goto label_30;
                                                                 | label_53:
    0x00036704 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00036706 bne.w 0x36308                                     |         goto label_30;
                                                                 |     }
    0x0003670a b 0x36490                                         |     goto label_11;
                                                                 | label_50:
    0x0003670c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0003670e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00036710 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x00036712 ldr r4, [r3]                                      |     r4 = *(r3);
    0x00036714 mov r0, r4                                        |     r0 = r4;
    0x00036716 bl 0x27e14                                        |     fcn_00027e14 (r0, r1);
    0x0003671a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003671c mov r6, r0                                        |     r6 = r0;
    0x0003671e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00036720 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00036722 beq 0x367ae                                       |         goto label_77;
                                                                 |     }
                                                                 | label_35:
    0x00036724 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00036726 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00036728 ldr.w ip, [r2, 4]                                 |     ip = *((r2 + 4));
    0x0003672c ldrd r1, r0, [r2, 0xc]                            |     __asm ("ldrd r1, r0, [r2, 0xc]");
    0x00036730 tst.w ip, 0x400                                   |     
    0x00036734 itet ne                                           |     
                                                                 |     if ((ip & 0x400) == 0) {
    0x00036736 movne r2, r1                                      |         r2 = r1;
                                                                 |     }
                                                                 |     if ((ip & 0x400) != 0) {
    0x00036738 moveq r2, r0                                      |         r2 = r0;
                                                                 |     }
                                                                 |     if ((ip & 0x400) == 0) {
    0x0003673a movne r1, r0                                      |         r1 = r0;
                                                                 |     }
    0x0003673c mov r0, r4                                        |     r0 = r4;
    0x0003673e bl 0x27f10                                        |     fcn_00027f10 (r0, r1, r2);
    0x00036742 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00036744 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00036746 beq.w 0x3611e                                     |         goto label_6;
                                                                 |     }
    0x0003674a ldr r4, [r6]                                      |     r4 = *(r6);
    0x0003674c ldr r0, [r0]                                      |     r0 = *(r0);
    0x0003674e ldr r6, [pc, 0xac]                                |     
    0x00036750 subs r4, 1                                        |     r4--;
    0x00036752 subs r0, 1                                        |     r0--;
    0x00036754 add r6, pc                                        |     r6 = 0x6cf56;
                                                                 | label_32:
    0x00036756 ldrb r2, [r4, 1]!                                 |     r2 = *((r4 += 1));
    0x0003675a ldrb r1, [r0, 1]!                                 |     r1 = *((r0 += 1));
    0x0003675e cmp r2, r1                                        |     
                                                                 |     if (r2 == r1) {
    0x00036760 beq 0x36780                                       |         goto label_78;
                                                                 |     }
                                                                 | label_31:
    0x00036762 add r2, r6                                        |     r2 += r6;
    0x00036764 add r1, r6                                        |     r1 += r6;
    0x00036766 ldrb.w ip, [r2, 0x140]                            |     ip = *((r2 + 0x140));
    0x0003676a ldrb.w r2, [r1, 0x140]                            |     r2 = *((r1 + 0x140));
    0x0003676e cmp ip, r2                                        |     
                                                                 |     if (ip != r2) {
    0x00036770 bne.w 0x3611e                                     |         goto label_6;
                                                                 |     }
    0x00036774 ldrb r2, [r4, 1]!                                 |     r2 = *((r4 += 1));
    0x00036778 ldrb r1, [r0, 1]!                                 |     r1 = *((r0 += 1));
    0x0003677c cmp r2, r1                                        |     
                                                                 |     if (r2 != r1) {
    0x0003677e bne 0x36762                                       |         goto label_31;
                                                                 |     }
                                                                 | label_78:
    0x00036780 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00036782 bne 0x36756                                       |         goto label_32;
                                                                 |     }
    0x00036784 b 0x362aa                                         |     goto label_33;
                                                                 | label_49:
    0x00036786 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00036788 ldrh r0, [r1, 0x2c]                               |     r0 = *((r1 + 0x2c));
    0x0003678a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003678c beq.w 0x3611e                                     |         goto label_6;
                                                                 |     }
    0x00036790 ldr r1, [r1, 0x34]                                |     r1 = *((r1 + 0x34));
    0x00036792 subs r1, 4                                        |     r1 -= 4;
    0x00036794 b 0x3679e                                         |     goto label_79;
                                                                 | label_34:
    0x00036796 adds r6, 1                                        |     r6++;
    0x00036798 cmp r6, r0                                        |     
                                                                 |     if (r6 == r0) {
    0x0003679a beq.w 0x3611e                                     |         goto label_6;
                                                                 |     }
                                                                 | label_79:
    0x0003679e ldr r4, [r1, 4]!                                  |     r4 = *((r1 += 4));
    0x000367a2 cmp r4, r2                                        |     
                                                                 |     if (r4 != r2) {
    0x000367a4 bne 0x36796                                       |         goto label_34;
                                                                 |     }
    0x000367a6 cmp r0, r6                                        |     
                                                                 |     if (r0 > r6) {
    0x000367a8 bgt.w 0x362aa                                     |         goto label_33;
                                                                 |     }
    0x000367ac b 0x3611e                                         |     goto label_6;
                                                                 | label_77:
    0x000367ae ldr r1, [r4]                                      |     r1 = *(r4);
    0x000367b0 ldr r6, [r1, 8]                                   |     r6 = *((r1 + 8));
    0x000367b2 b 0x36724                                         |     goto label_35;
                                                                 | label_51:
    0x000367b4 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x000367b6 ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x000367b8 orrs r2, r3                                       |     r2 |= r3;
    0x000367ba ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x000367bc str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x000367be ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x000367c0 orrs r2, r3                                       |     r2 |= r3;
    0x000367c2 str r2, [sp, 0x80]                                |     var_80h = r2;
    0x000367c4 b 0x36064                                         |     goto label_3;
                                                                 | label_37:
    0x000367c6 ldr r4, [sp, 0x94]                                |     r4 = var_94h;
    0x000367c8 ldr.w sb, [sp, 0x6c]                              |     sb = var_6ch_2;
                                                                 | label_76:
    0x000367cc ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x000367ce cmp sl, r2                                        |     
    0x000367d0 it eq                                             |     
                                                                 |     if (sl != r2) {
    0x000367d2 cmpeq r8, sb                                      |         __asm ("cmpeq r8, sb");
                                                                 |         goto label_80;
                                                                 |     }
                                                                 |     if (sl == r2) {
                                                                 | label_80:
    0x000367d4 beq.w 0x366ca                                     |         goto label_36;
                                                                 |     }
                                                                 | label_38:
    0x000367d8 mov.w r0, -1                                      |     r0 = -1;
    0x000367dc b 0x36220                                         |     goto label_10;
                                                                 | label_48:
    0x000367de blx 0x9b44                                        |     fcn_00009b44 ();
    0x000367e2 nop                                               |     
    0x000367e4 add r3, sp, 0xf8                                  |     r3 += var_f8h;
    0x000367e6 movs r6, r0                                       |     r6 = r0;
    0x000367e8 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x000367ea movs r0, r0                                       |     
    0x000367ec mov r5, r6                                        |     r5 = r6;
    0x000367ee invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x36800 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00036800 ()                                      | void fcn_00036800 (int16_t arg_0h, int16_t arg_88h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_2h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int32_t var_68h_2;
                                                                 |     int16_t var_70h;
                                                                 |     int32_t var_70h_2;
                                                                 |     int16_t var_78h;
                                                                 |     int32_t var_78h_2;
                                                                 |     int16_t var_84h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00036800 invalid                                           |     
    0x00036804 ldr.w r3, [pc, 0x700]                             |     
    0x00036808 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003680c vpush {d8}                                        |     __asm ("vpush {d8}");
    0x00036810 add r2, pc                                        |     r2 += pc;
    0x00036812 sub sp, 0x8c                                      |     
    0x00036814 ldrb.w sl, [r0, 0x30]                             |     sl = *(arg_0hx30);
    0x00036818 str r0, [sp, 0x20]                                |     var_20h = r0;
    0x0003681a ldr.w fp, [r0]                                    |     fp = *(r0);
    0x0003681e ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00036820 cmp.w sl, 1                                       |     
    0x00036824 it le                                             |     
                                                                 |     if (sl > 1) {
    0x00036826 movle r6, 1                                       |         r6 = 1;
                                                                 |     }
    0x00036828 ldr.w sb, [fp]                                    |     sb = *(fp);
    0x0003682c ldr r3, [r3]                                      |     r3 = *(0x36f08);
    0x0003682e str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00036830 mov.w r3, 0                                       |     r3 = 0;
    0x00036834 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x00036836 it le                                             |     
                                                                 |     if (sl > 1) {
    0x00036838 strle r6, [sp, 0x1c]                              |         var_1ch = r6;
                                                                 |     }
                                                                 |     if (sl > 1) {
    0x0003683a ble 0x36848                                       |         
    0x0003683c cmp.w sl, 2                                       |         
    0x00036840 ite ne                                            |         
                                                                 |         if (sl == 2) {
    0x00036842 movne r6, 0xa                                     |             r6 = 0xa;
                                                                 |         }
                                                                 |         if (sl != 2) {
    0x00036844 moveq r6, 5                                       |             r6 = 5;
                                                                 |         }
    0x00036846 str r6, [sp, 0x1c]                                |         var_1ch = r6;
                                                                 |     }
    0x00036848 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003684a mov r0, sb                                        |     r0 = sb;
    0x0003684c ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0003684e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00036850 cmp r2, 0                                         |     
    0x00036852 it ne                                             |     
                                                                 |     if (r2 != 0) {
    0x00036854 cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
    0x00036856 add.w r2, sl, 8                                   |     r2 = sl + 8;
    0x0003685a it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0003685c ldrne r3, [r3]                                    |         r3 = *(r3);
                                                                 |     }
    0x0003685e mul r2, r6, r2                                    |     r2 = r6 * r2;
    0x00036862 ittee eq                                          |     
                                                                 |     if (r2 != 0) {
    0x00036864 moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x00036866 streq r4, [sp, 0x28]                              |         var_28h = r4;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x00036868 strne r3, [sp, 0x28]                              |         var_28h = r3;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x0003686a lslne r4, r3, 1                                   |         r4 = r3 << 1;
                                                                 |     }
    0x0003686c add.w r2, r4, r2, lsl 3                           |     r2 = r4 + (r2 << 3);
    0x00036870 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x00036872 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00036876 mov r8, r0                                        |     r8 = r0;
    0x00036878 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003687a beq.w 0x36e9e                                     |         goto label_18;
                                                                 |     }
    0x0003687e lsls r6, r6, 5                                    |     r6 <<= 5;
    0x00036880 movs r2, 0x20                                     |     r2 = 0x20;
    0x00036882 movs r1, 0                                        |     r1 = 0;
    0x00036884 lsl.w r5, sl, 2                                   |     r5 = sl << 2;
    0x00036888 adds r7, r0, r6                                   |     r7 = r0 + r6;
    0x0003688a mov r0, r7                                        |     r0 = r7;
    0x0003688c add r6, r7                                        |     r6 += r7;
    0x0003688e blx 0x97d4                                        |     fcn_000097d4 ();
    0x00036892 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00036894 mov r2, r6                                        |     r2 = r6;
    0x00036896 lsls r0, r3, 1                                    |     r0 = r3 << 1;
    0x00036898 add.w r1, r8, r3, lsl 6                           |     r1 = r8 + (r3 << 6);
    0x0003689c mov r3, r8                                        |     r3 = r8;
                                                                 |     do {
    0x0003689e str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
    0x000368a0 adds r3, 0x20                                     |         r3 += 0x20;
    0x000368a2 cmp r3, r1                                        |         
    0x000368a4 add r2, r5                                        |         r2 += r5;
    0x000368a6 bne 0x3689e                                       |         
                                                                 |     } while (r3 != r1);
    0x000368a8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000368aa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000368ac bne.w 0x36d6c                                     |         goto label_19;
                                                                 |     }
    0x000368b0 ldr.w r3, [fp, 0x88]                              |     r3 = *(arg_88h);
    0x000368b4 cmp r3, 0x30                                      |     
    0x000368b6 it hs                                             |     
                                                                 |     if (r3 < 0x30) {
    0x000368b8 movhs r3, 0x30                                    |         r3 = 0x30;
                                                                 |     }
    0x000368ba strh r3, [r7, 0x10]                               |     *((r7 + 0x10)) = r3;
    0x000368bc cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000368c0 beq.w 0x36d92                                     |         goto label_20;
                                                                 |     }
    0x000368c4 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000368c6 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 | label_13:
    0x000368c8 ldrh.w r2, [sp, 0x50]                             |     r2 = var_50h;
    0x000368cc movs r4, 1                                        |     r4 = 1;
    0x000368ce movs r1, 0                                        |     r1 = 0;
    0x000368d0 vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x000368d4 str r1, [sp, 0x3c]                                |     var_3ch = r1;
    0x000368d6 sub.w r3, r2, 0xa                                 |     r3 = r2 - 0xa;
    0x000368da str r2, [sp, 0x60]                                |     var_60h = r2;
    0x000368dc sxth r3, r3                                       |     __asm ("sxth r3, r3");
    0x000368de mov r2, r1                                        |     r2 = r1;
    0x000368e0 str.w r8, [sp, 0x18]                              |     __asm ("str.w r8, [var_18h]");
    0x000368e4 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x000368e6 mov r3, r4                                        |     r3 = r4;
    0x000368e8 mov r4, r7                                        |     r4 = r7;
    0x000368ea mov r7, r3                                        |     r7 = r3;
    0x000368ec str r1, [sp, 0x34]                                |     var_34h = r1;
    0x000368ee str r1, [sp, 0x48]                                |     var_48h = r1;
    0x000368f0 strd fp, sb, [sp, 0x68]                           |     __asm ("strd fp, sb, [var_68h]");
    0x000368f4 str.w sl, [sp, 0x58]                              |     __asm ("str.w sl, [var_58h]");
    0x000368f8 strd r8, r5, [sp, 0x70]                           |     __asm ("strd r8, r5, [var_70h]");
                                                                 | label_8:
    0x000368fc cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000368fe beq.w 0x36b14                                     |         goto label_21;
                                                                 |     }
    0x00036902 lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x00036904 mov.w sl, 0                                       |     sl = 0;
    0x00036908 add.w r8, r4, 0x20                                |     r8 = r4 + 0x20;
    0x0003690c str r4, [sp, 0x5c]                                |     var_5ch = r4;
    0x0003690e str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00036910 mov r6, sl                                        |     r6 = sl;
    0x00036912 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00036914 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x00036916 str r7, [sp, 0x38]                                |     var_38h = r7;
    0x00036918 subs r3, 0x32                                     |     r3 -= 0x32;
    0x0003691a str r3, [sp, 0x54]                                |     var_54h = r3;
                                                                 | label_7:
    0x0003691c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003691e ldr r5, [r3, 0x40]                                |     r5 = *((r3 + 0x40));
    0x00036920 sub.w r3, r8, 0x20                                |     r3 = r8 - 0x20;
    0x00036924 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00036926 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00036928 beq.w 0x36b00                                     |         goto label_22;
                                                                 |     }
    0x0003692c str r6, [sp, 0x24]                                |     var_24h = r6;
    0x0003692e b 0x36938                                         |     
                                                                 |     while (r3 != r1) {
                                                                 | label_0:
    0x00036930 ldr r5, [r5, 0x38]                                |         r5 = *((r5 + 0x38));
    0x00036932 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00036934 beq.w 0x36afe                                     |             goto label_23;
                                                                 |         }
    0x00036938 ldrd r6, r7, [r8, -0x20]                          |         __asm ("ldrd r6, r7, [r8, -0x20]");
    0x0003693c ldr r2, [r5, 4]                                   |         r2 = *((r5 + 4));
    0x0003693e ldr r3, [r5]                                      |         r3 = *(r5);
    0x00036940 vstr d8, [sp, 0x78]                               |         __asm ("vstr d8, [sp, 0x78]");
    0x00036944 bic.w r1, r2, r7                                  |         r1 = BIT_MASK (r2, r7);
    0x00036948 ldrsb r2, [r8, -0xa]                              |         r2 = *((r8 - 0xa));
    0x0003694c bic.w r3, r3, r6                                  |         r3 = BIT_MASK (r3, r6);
    0x00036950 orrs r3, r1                                       |         r3 |= r1;
    0x00036952 bne 0x36930                                       |         
                                                                 |     }
    0x00036954 ldrd r0, r1, [r5, 8]                              |     __asm ("ldrd r0, r1, [r5, 8]");
    0x00036958 and.w r4, r6, r0                                  |     r4 = r6 & r0;
    0x0003695c and.w r3, r7, r1                                  |     r3 = r7 & r1;
    0x00036960 orrs r3, r4                                       |     r3 |= r4;
                                                                 |     if (r3 != r4) {
    0x00036962 bne 0x36930                                       |         goto label_0;
                                                                 |     }
    0x00036964 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00036966 ldrsh sb, [r8, -0x10]                             |     sb = *((r8 - 0x10));
    0x0003696a lsls r4, r3, 0x11                                 |     r4 = r3 << 0x11;
                                                                 |     if (r4 >= r3) {
    0x0003696c bpl 0x36974                                       |         goto label_24;
                                                                 |     }
    0x0003696e cmp.w sb, 2                                       |     
                                                                 |     if (sb <= 2) {
    0x00036972 ble 0x36930                                       |         goto label_0;
                                                                 |     }
                                                                 | label_24:
    0x00036974 orrs r7, r1                                       |     r7 |= r1;
    0x00036976 ldrh r1, [r5, 0x14]                               |     r1 = *((r5 + 0x14));
    0x00036978 uxth.w sb, sb                                     |     sb = (int16_t) sb;
    0x0003697c orrs r6, r0                                       |     r6 |= r0;
    0x0003697e ldrsh.w r0, [r5, 0x12]                            |     r0 = *((r5 + 0x12));
    0x00036982 add r1, sb                                        |     r1 += sb;
    0x00036984 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00036986 sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x00036988 bl 0xf330                                         |     fcn_0000f330 (r0, r1);
    0x0003698c ldrsh r1, [r8, -0xc]                              |     r1 = *((r8 - 0xc));
    0x00036990 bl 0xf330                                         |     fcn_0000f330 (r0, r1);
    0x00036994 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00036996 mov fp, r0                                        |     
    0x00036998 ldrh r3, [r5, 0x16]                               |     r3 = *((r5 + 0x16));
    0x0003699a cmp r2, 0                                         |     
    0x0003699c add sb, r3                                        |     sb += r3;
    0x0003699e sxth.w sb, sb                                     |     __asm ("sxth.w sb, sb");
                                                                 |     if (r2 < 0) {
    0x000369a2 blt 0x36a9a                                       |         goto label_25;
                                                                 |     }
    0x000369a4 ldrd r0, r1, [r8, -0x18]                          |     __asm ("ldrd r0, r1, [r8, -0x18]");
    0x000369a8 strd r0, r1, [sp, 0x78]                           |     __asm ("strd r0, r1, [var_78h]");
                                                                 | label_4:
    0x000369ac ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000369ae cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x000369b0 ble.w 0x36ab8                                     |         goto label_26;
                                                                 |     }
    0x000369b4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000369b6 ldrsh.w r4, [r3, r2, lsl 1]                       |     offset_0 = r2 << 1;
                                                                 |     r4 = *((r3 + offset_0));
    0x000369ba add.w r3, r3, r2, lsl 1                           |     r3 += (r2 << 1);
    0x000369be str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000369c0 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000369c2 beq.w 0x36b48                                     |         goto label_27;
                                                                 |     }
                                                                 | label_9:
    0x000369c6 mov r0, fp                                        |     r0 = fp;
    0x000369c8 mov r1, r4                                        |     r1 = r4;
    0x000369ca str r2, [sp, 0x14]                                |     var_14h = r2;
    0x000369cc bl 0xf330                                         |     fcn_0000f330 (r0, r1);
    0x000369d0 adds r0, 5                                        |     r0 += 5;
    0x000369d2 mov ip, fp                                        |     
    0x000369d4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000369d6 sxth.w fp, r0                                     |     __asm ("sxth.w fp, r0");
    0x000369da cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000369de beq 0x36ac6                                       |         goto label_28;
                                                                 |     }
                                                                 | label_5:
    0x000369e0 ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x000369e2 movs r0, 0                                        |     r0 = 0;
    0x000369e4 b 0x369ee                                         |     
                                                                 |     while (r7 != r3) {
                                                                 | label_1:
    0x000369e6 adds r0, 1                                        |         r0++;
    0x000369e8 adds r4, 0x20                                     |         r4 += 0x20;
    0x000369ea cmp r0, sl                                        |         
                                                                 |         if (r0 == sl) {
    0x000369ec beq 0x36ace                                       |             goto label_29;
                                                                 |         }
    0x000369ee ldrd r1, r3, [r4]                                 |         __asm ("ldrd r1, r3, [r4]");
    0x000369f2 cmp r7, r3                                        |         
    0x000369f4 it eq                                             |         
                                                                 |         if (r7 == r3) {
    0x000369f6 cmpeq r6, r1                                      |             __asm ("cmpeq r6, r1");
                                                                 |         }
    0x000369f8 bne 0x369e6                                       |         
                                                                 |     }
    0x000369fa ldrb r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x000369fc eors r3, r2                                       |     r3 ^= r2;
    0x000369fe lsls r3, r3, 0x18                                 |     r3 <<= 0x18;
                                                                 |     if (r3 < r3) {
    0x00036a00 bmi 0x369e6                                       |         goto label_1;
                                                                 |     }
    0x00036a02 cmp sl, r0                                        |     
                                                                 |     if (sl <= r0) {
    0x00036a04 ble 0x36ace                                       |         goto label_29;
                                                                 |     }
    0x00036a06 ldrsh.w r3, [r4, 0x12]                            |     r3 = *((r4 + 0x12));
    0x00036a0a cmp fp, r3                                        |     
                                                                 |     if (fp > r3) {
    0x00036a0c bgt 0x36930                                       |         goto label_0;
                                                                 |     }
                                                                 |     if (fp == r3) {
    0x00036a0e beq.w 0x36b2e                                     |         goto label_30;
                                                                 |     }
                                                                 | label_6:
    0x00036a12 ldrd r3, r0, [r8, -0x20]                          |     __asm ("ldrd r3, r0, [r8, -0x20]");
    0x00036a16 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x00036a18 ldrd r6, r7, [sp, 0x78]                           |     __asm ("ldrd r6, r7, [var_78h]");
    0x00036a1c orrs r3, r1                                       |     r3 |= r1;
    0x00036a1e ldr r1, [r5, 0xc]                                 |     r1 = *((r5 + 0xc));
    0x00036a20 strh.w sb, [r4, 0x10]                             |     *((r4 + 0x10)) = sb;
    0x00036a24 ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x00036a28 orrs r1, r0                                       |     r1 |= r0;
    0x00036a2a strb r2, [r4, 0x16]                               |     *((r4 + 0x16)) = r2;
    0x00036a2c str r3, [r4]                                      |     *(r4) = r3;
    0x00036a2e str r1, [r4, 4]                                   |     *((r4 + 4)) = r1;
    0x00036a30 mov r2, sb                                        |     r2 = sb;
    0x00036a32 ldr r1, [r8, -0x8]                                |     r1 = *((r8 - 0x8));
    0x00036a36 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00036a38 strh.w fp, [r4, 0x12]                             |     *((r4 + 0x12)) = fp;
    0x00036a3c strh.w ip, [r4, 0x14]                             |     *((r4 + 0x14)) = ip;
    0x00036a40 strd r6, r7, [r4, 8]                              |     __asm ("strd r6, r7, [r4, 8]");
    0x00036a44 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00036a48 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00036a4a str.w r5, [r3, sb]                                |     __asm ("str.w r5, [r3, sb]");
    0x00036a4e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00036a50 cmp r3, sl                                        |     
                                                                 |     if (r3 > sl) {
    0x00036a52 bgt.w 0x36930                                     |         goto label_0;
                                                                 |     }
    0x00036a56 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00036a58 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00036a5a ldrsh.w r0, [r3, 0x12]                            |     r0 = *((r3 + 0x12));
    0x00036a5e adds r3, 0x20                                     |     r3 += 0x20;
    0x00036a60 ldrsh r6, [r3, -0x10]                             |     r6 = *((r3 - 0x10));
    0x00036a64 cmp r4, 1                                         |     
    0x00036a66 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00036a68 str r6, [sp, 0x3c]                                |     var_3ch = r6;
                                                                 |     if (r4 == 1) {
    0x00036a6a beq.w 0x36c42                                     |         goto label_31;
                                                                 |     }
    0x00036a6e movs r7, 0                                        |     r7 = 0;
    0x00036a70 movs r2, 1                                        |     r2 = 1;
    0x00036a72 b 0x36a84                                         |     
                                                                 |     while (r1 > r0) {
    0x00036a74 ldrsh.w r6, [r3, 0x14]                            |         r6 = *((r3 + 0x14));
                                                                 | label_3:
    0x00036a78 mov r0, r1                                        |         r0 = r1;
    0x00036a7a mov r7, r2                                        |         r7 = r2;
                                                                 | label_2:
    0x00036a7c adds r2, 1                                        |         r2++;
    0x00036a7e adds r3, 0x20                                     |         r3 += 0x20;
    0x00036a80 cmp r4, r2                                        |         
                                                                 |         if (r4 == r2) {
    0x00036a82 beq 0x36b26                                       |             goto label_32;
                                                                 |         }
    0x00036a84 ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x00036a88 cmp r1, r0                                        |         
    0x00036a8a bgt 0x36a74                                       |         
                                                                 |     }
                                                                 |     if (r1 != r0) {
    0x00036a8c bne 0x36a7c                                       |         goto label_2;
                                                                 |     }
    0x00036a8e ldrsh.w ip, [r3, 0x14]                            |     ip = *((r3 + 0x14));
    0x00036a92 cmp ip, r6                                        |     
                                                                 |     if (ip <= r6) {
    0x00036a94 ble 0x36a7c                                       |         goto label_2;
                                                                 |     }
    0x00036a96 mov r6, ip                                        |     r6 = ip;
    0x00036a98 b 0x36a78                                         |     goto label_3;
                                                                 | label_25:
    0x00036a9a ldrh.w r3, [sp, 0x40]                             |     r3 = var_40h;
    0x00036a9e ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00036aa0 str r5, [sp, 4]                                   |     var_4h = r5;
    0x00036aa2 str r3, [sp]                                      |     *(sp) = r3;
    0x00036aa4 add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00036aa6 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00036aa8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00036aaa ldrh r3, [r0, 0x2c]                               |     r3 = *((r0 + 0x2c));
    0x00036aac ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x00036aae bl 0x35fac                                        |     r0 = fcn_00035fac (r0, r1, r2, r3, r4);
    0x00036ab2 subs r2, r0, 0                                    |     r2 = r0 - 0;
                                                                 |     if (r2 >= r0) {
    0x00036ab4 bge.w 0x369ac                                     |         goto label_4;
                                                                 |     }
                                                                 | label_26:
    0x00036ab8 sub.w ip, fp, 2                                   |     
    0x00036abc sxth.w ip, ip                                     |     __asm ("sxth.w ip, ip");
    0x00036ac0 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00036ac4 bne 0x369e0                                       |         goto label_5;
                                                                 |     }
                                                                 |     do {
                                                                 | label_28:
    0x00036ac6 mov r4, sl                                        |         r4 = sl;
    0x00036ac8 add.w sl, sl, 1                                   |         sl++;
    0x00036acc b 0x36af6                                         |         goto label_33;
                                                                 | label_29:
    0x00036ace ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00036ad0 cmp r3, sl                                        |         
    0x00036ad2 bgt 0x36ac6                                       |         
                                                                 |     } while (r3 > sl);
    0x00036ad4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00036ad6 cmp fp, r3                                        |     
                                                                 |     if (fp > r3) {
    0x00036ad8 bgt.w 0x36930                                     |         goto label_0;
                                                                 |     }
    0x00036adc ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00036ade ite eq                                            |     
                                                                 |     if (fp != r3) {
    0x00036ae0 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (fp == r3) {
    0x00036ae2 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00036ae4 cmp ip, r1                                        |     
    0x00036ae6 ite lt                                            |     
                                                                 |     if (ip >= r1) {
    0x00036ae8 movlt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (ip < r1) {
    0x00036aea andge r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00036aee cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00036af0 bne.w 0x36930                                     |         goto label_0;
                                                                 |     }
    0x00036af4 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
                                                                 | label_33:
    0x00036af6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00036af8 add.w r4, r3, r4, lsl 5                           |     r4 = r3 + (r4 << 5);
    0x00036afc b 0x36a12                                         |     goto label_6;
                                                                 | label_23:
    0x00036afe ldr r6, [sp, 0x24]                                |     r6 = var_24h;
                                                                 | label_22:
    0x00036b00 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00036b02 adds r6, 1                                        |     r6++;
    0x00036b04 add.w r8, r8, 0x20                                |     r8 += 0x20;
    0x00036b08 cmp r6, r3                                        |     
                                                                 |     if (r6 != r3) {
    0x00036b0a bne.w 0x3691c                                     |         goto label_7;
                                                                 |     }
    0x00036b0e ldr r4, [sp, 0x5c]                                |     r4 = var_5ch;
    0x00036b10 mov r7, sl                                        |     r7 = sl;
    0x00036b12 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
                                                                 | label_21:
    0x00036b14 ldr r1, [sp, 0x58]                                |     r1 = var_58h;
    0x00036b16 adds r2, 1                                        |     r2++;
    0x00036b18 mov r3, r4                                        |     r3 = r4;
    0x00036b1a ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00036b1c cmp r1, r2                                        |     
                                                                 |     if (r1 <= r2) {
    0x00036b1e ble.w 0x36c48                                     |         goto label_34;
                                                                 |     }
    0x00036b22 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00036b24 b 0x368fc                                         |     goto label_8;
                                                                 | label_32:
    0x00036b26 str r7, [sp, 0x48]                                |     var_48h = r7;
    0x00036b28 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00036b2a str r6, [sp, 0x3c]                                |     var_3ch = r6;
    0x00036b2c b 0x36930                                         |     goto label_0;
                                                                 | label_30:
    0x00036b2e ldrsh.w r3, [r4, 0x10]                            |     r3 = *((r4 + 0x10));
    0x00036b32 cmp sb, r3                                        |     
                                                                 |     if (sb > r3) {
    0x00036b34 bgt.w 0x36930                                     |         goto label_0;
                                                                 |     }
                                                                 |     if (sb != r3) {
    0x00036b38 bne.w 0x36a12                                     |         goto label_6;
                                                                 |     }
    0x00036b3c ldrsh.w r3, [r4, 0x14]                            |     r3 = *((r4 + 0x14));
    0x00036b40 cmp r3, ip                                        |     
                                                                 |     if (r3 > ip) {
    0x00036b42 bgt.w 0x36a12                                     |         goto label_6;
                                                                 |     }
    0x00036b46 b 0x36930                                         |     goto label_0;
                                                                 | label_27:
    0x00036b48 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00036b4a movs r0, 0x64                                     |     r0 = 0x64;
    0x00036b4c str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x00036b4e subs r3, r1, r2                                   |     r3 = r1 - r2;
    0x00036b50 mul r0, r3, r0                                    |     r0 = r3 * r0;
    0x00036b54 bl 0x8c208                                        |     r0 = fcn_0008c208 (r0, r1);
    0x00036b58 mov r3, r0                                        |     r3 = r0;
    0x00036b5a ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x00036b5c cmp r3, 7                                         |     
    0x00036b5e asr.w r0, r0, 0x1f                                |     r0 >>= 0x1f;
                                                                 |     if (r3 > 7) {
    0x00036b62 bgt 0x36bc2                                       |         goto label_35;
                                                                 |     }
    0x00036b64 cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x00036b66 ble 0x36b92                                       |         goto label_36;
                                                                 |     }
    0x00036b68 adds r1, r3, r3                                   |     r1 = r3 + r3;
    0x00036b6a adcs r0, r0                                       |     __asm ("adcs r0, r0");
    0x00036b6c cmp r1, 8                                         |     
    0x00036b6e sbcs r0, r0, 0                                    |     __asm ("sbcs r0, r0, 0");
                                                                 |     if (r1 >= 8) {
    0x00036b72 bhs.w 0x36ebc                                     |         goto label_37;
                                                                 |     }
    0x00036b76 lsls r1, r3, 2                                    |     r1 = r3 << 2;
    0x00036b78 movs r3, 0x14                                     |     r3 = 0x14;
                                                                 |     do {
                                                                 | label_16:
    0x00036b7a ldr r0, [pc, 0x390]                               |         
    0x00036b7c and r1, r1, 7                                     |         r1 &= 7;
    0x00036b80 sub.w r4, r3, 0xa                                 |         r4 = r3 - 0xa;
    0x00036b84 add r0, pc                                        |         r0 = 0x6da96;
    0x00036b86 add.w r1, r0, r1, lsl 1                           |         r1 = r0 + (r1 << 1);
    0x00036b88 lsls r1, r0, 5                                    |         r1 = r0 << 5;
    0x00036b8a ldrh.w r3, [r1, 0xd58]                            |         r3 = *((r1 + 0xd58));
    0x00036b8e add r4, r3                                        |         r4 += r3;
    0x00036b90 uxth r4, r4                                       |         r4 = (int16_t) r4;
                                                                 | label_36:
    0x00036b92 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00036b94 add r4, r3                                        |         r4 += r3;
    0x00036b96 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00036b98 uxth r4, r4                                       |         r4 = (int16_t) r4;
    0x00036b9a ldrh r1, [r3, 0x2c]                               |         r1 = *((r3 + 0x2c));
    0x00036b9c lsls r0, r1, 0x11                                 |         r0 = r1 << 0x11;
                                                                 |         if (r0 < r1) {
    0x00036b9e bpl 0x36baa                                       |             
    0x00036ba0 ldrsh.w r3, [r3, 0x2e]                            |             r3 = *((r3 + 0x2e));
    0x00036ba4 ldr r0, [sp, 0x50]                                |             r0 = var_50h;
    0x00036ba6 cmp r0, r3                                        |             
                                                                 |             if (r0 > r3) {
    0x00036ba8 bgt 0x36bb6                                       |                 goto label_38;
                                                                 |             }
                                                                 |         }
    0x00036baa lsls r1, r1, 0x17                                 |         r1 <<= 0x17;
    0x00036bac ldr r3, [sp, 0x50]                                |         r3 = var_50h;
                                                                 |         if (r1 < r1) {
    0x00036bae bpl 0x36bb6                                       |             
    0x00036bb0 cmp r3, 0xa                                       |             
                                                                 |             if (r3 <= 0xa) {
    0x00036bb2 ble 0x36bba                                       |                 goto label_10;
                                                                 |             }
    0x00036bb4 ldr r3, [sp, 0x64]                                |             r3 = var_64h;
                                                                 |         }
                                                                 | label_38:
    0x00036bb6 cmp r3, 0xa                                       |         
                                                                 |         if (r3 > 0xa) {
    0x00036bb8 bgt 0x36bf6                                       |             goto label_39;
                                                                 |         }
                                                                 | label_10:
    0x00036bba ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00036bbc sxth r4, r4                                       |         __asm ("sxth r4, r4");
    0x00036bbe strh r4, [r3]                                     |         *(r3) = r4;
    0x00036bc0 b 0x369c6                                         |         goto label_9;
                                                                 | label_35:
    0x00036bc2 clz r4, r0                                        |         r4 &= r0;
                                                                 |         if (r0 == 0) {
    0x00036bc6 cbnz r0, 0x36bce                                  |             
    0x00036bc8 clz r4, r3                                        |             r4 &= r3;
    0x00036bcc adds r4, 0x20                                     |             r4 += 0x20;
                                                                 |         }
    0x00036bce rsb.w r4, r4, 0x3c                                |         r4 = 0x3c - r4;
    0x00036bd2 lsr.w r1, r3, r4                                  |         r1 = r3 >> r4;
    0x00036bd6 add.w r3, r4, r4, lsl 2                           |         r3 = r4 + (r4 << 2);
    0x00036bda rsb.w ip, r4, 0x20                                |         
    0x00036bde lsls r3, r3, 1                                    |         r3 <<= 1;
    0x00036be0 lsl.w ip, r0, ip                                  |         
    0x00036be4 subs r4, 0x20                                     |         r4 -= 0x20;
    0x00036be6 lsr.w r4, r0, r4                                  |         r4 = r0 >> r4;
    0x00036bea adds r3, 0x28                                     |         r3 += 0x28;
    0x00036bec orr.w r1, r1, ip                                  |         r1 |= ip;
    0x00036bf0 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00036bf2 orrs r1, r4                                       |         r1 |= r4;
    0x00036bf4 b 0x36b7a                                         |         
                                                                 |     } while (1);
                                                                 | label_39:
    0x00036bf6 asrs.w ip, r3, 0x1f                               |     
    0x00036bfa sub.w r4, r4, 3                                   |     r4 -= 3;
    0x00036bfe itet eq                                           |     
                                                                 |     if (r1 == r4) {
    0x00036c00 clzeq r1, r3                                      |         __asm ("clzeq r1, r3");
                                                                 |     }
                                                                 |     if (r1 != r4) {
    0x00036c04 clzeq r1, ip                                      |         __asm ("clzeq r1, ip");
                                                                 |     }
                                                                 |     if (r1 == r4) {
    0x00036c08 adds r1, 0x20                                     |         r1 += 0x20;
                                                                 |     }
    0x00036c0a rsb.w r1, r1, 0x3c                                |     r1 = 0x3c - r1;
    0x00036c0e rsb.w r0, r1, 0x20                                |     r0 = 0x20 - r1;
    0x00036c12 lsrs r3, r1                                       |     r3 >>= r1;
    0x00036c14 lsl.w r0, ip, r0                                  |     r0 = ip << r0;
    0x00036c18 orrs r3, r0                                       |     r3 |= r0;
    0x00036c1a sub.w r0, r1, 0x20                                |     r0 = r1 - 0x20;
    0x00036c1e lsr.w r0, ip, r0                                  |     r0 = ip >> r0;
    0x00036c22 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x00036c26 orrs r3, r0                                       |     r3 |= r0;
    0x00036c28 ldr r0, [pc, 0x2e4]                               |     
    0x00036c2a and r3, r3, 7                                     |     r3 &= 7;
    0x00036c2e add.w r1, r4, r1, lsl 1                           |     r1 = r4 + (r1 << 1);
    0x00036c32 add r0, pc                                        |     r0 = 0x6db46;
    0x00036c34 add.w r3, r0, r3, lsl 1                           |     r3 = r0 + (r3 << 1);
    0x00036c38 ldrh.w r3, [r3, 0xd58]                            |     r3 = *((r3 + 0xd58));
    0x00036c3c add r3, r1                                        |     r3 += r1;
    0x00036c3e uxth r4, r3                                       |     r4 = (int16_t) r3;
    0x00036c40 b 0x36bba                                         |     goto label_10;
                                                                 | label_31:
    0x00036c42 movs r3, 0                                        |     r3 = 0;
    0x00036c44 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00036c46 b 0x36930                                         |     goto label_0;
                                                                 | label_34:
    0x00036c48 ldrd fp, sb, [sp, 0x68]                           |     __asm ("ldrd fp, sb, [var_68h]");
    0x00036c4c ldr.w sl, [sp, 0x58]                              |     sl = var_58h;
    0x00036c50 ldrd r8, r5, [sp, 0x70]                           |     __asm ("ldrd r8, r5, [var_70h]");
    0x00036c54 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00036c56 beq.w 0x36ec0                                     |         goto label_40;
                                                                 |     }
    0x00036c5a cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x00036c5c beq 0x36c7e                                       |         goto label_41;
                                                                 |     }
    0x00036c5e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00036c60 add.w r3, r2, 0x20                                |     r3 = r2 + 0x20;
    0x00036c64 add.w r4, r2, r7, lsl 5                           |     r4 = r2 + (r7 << 5);
                                                                 |     do {
    0x00036c68 ldrsh.w r0, [r3, 0x12]                            |         r0 = *((r3 + 0x12));
    0x00036c6c ldrsh.w r1, [r2, 0x12]                            |         r1 = *((r2 + 0x12));
    0x00036c70 cmp r0, r1                                        |         
    0x00036c72 it lt                                             |         
                                                                 |         if (r0 >= r1) {
    0x00036c74 movlt r2, r3                                      |             r2 = r3;
                                                                 |         }
    0x00036c76 adds r3, 0x20                                     |         r3 += 0x20;
    0x00036c78 cmp r3, r4                                        |         
    0x00036c7a bne 0x36c68                                       |         
                                                                 |     } while (r3 != r4);
    0x00036c7c str r2, [sp, 0x18]                                |     var_18h = r2;
                                                                 | label_41:
    0x00036c7e cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00036c82 beq 0x36cb0                                       |         goto label_12;
                                                                 |     }
    0x00036c84 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00036c86 subs r0, r5, 4                                    |     r0 = r5 - 4;
    0x00036c88 ldr r1, [r3, 0x18]                                |     r1 = *((r3 + 0x18));
    0x00036c8a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00036c8c add r0, r1                                        |     r0 += r1;
    0x00036c8e subs r1, 4                                        |     r1 -= 4;
    0x00036c90 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
                                                                 |     do {
    0x00036c92 ldr r2, [r1, 4]!                                  |         r2 = *((r1 += 4));
    0x00036c96 adds r3, 0x60                                     |         r3 += 0x60;
    0x00036c98 str.w r2, [r3, 0x2f0]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00036c9c cmp r1, r0                                        |         
    0x00036c9e ldrb r2, [r2, 0x10]                               |         r2 = *((r2 + 0x10));
    0x00036ca0 strb.w r2, [r3, 0x2dc]                            |         *((r3 + 0x2dc)) = r2;
    0x00036ca4 add.w r2, r4, r2, lsl 6                           |         r2 = r4 + (r2 << 6);
    0x00036ca8 ldr r2, [r2, 0x30]                                |         r2 = *((r2 + 0x30));
    0x00036caa str.w r2, [r3, 0x2a4]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00036cac movs r2, 0xa4                                     |         r2 = 0xa4;
    0x00036cae bne 0x36c92                                       |         
                                                                 |     } while (r2 != 0xa4);
                                                                 | label_12:
    0x00036cb0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00036cb2 ldrh r3, [r3, 0x2c]                               |     r3 = *((r3 + 0x2c));
    0x00036cb4 and r3, r3, 0x180                                 |     r3 &= 0x180;
    0x00036cb8 cmp.w r3, 0x100                                   |     
    0x00036cbc beq 0x36d1c                                       |     
                                                                 |     while (r3 == 0) {
                                                                 | label_11:
    0x00036cbe ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00036cc0 ldrb.w r3, [r2, 0x34]                             |         r3 = *((r2 + 0x34));
    0x00036cc4 ldr r1, [r2, 8]                                   |         r1 = *((r2 + 8));
    0x00036cc6 bfc r3, 2, 1                                      |         value_1 = BIT_MASK (1, );
                                                                 |         value_1 = ~value_1;
                                                                 |         r3 &= value_1;
    0x00036cca strb.w r3, [r2, 0x34]                             |         *((r2 + 0x34)) = r3;
    0x00036cce mov r3, r2                                        |         r3 = r2;
                                                                 |         if (r1 != 0) {
    0x00036cd0 cbz r1, 0x36cec                                   |             
    0x00036cd2 ldr r2, [sp, 0x18]                                |             r2 = var_18h;
    0x00036cd4 ldrsb.w r0, [r2, 0x16]                            |             r0 = *((r2 + 0x16));
    0x00036cd8 strb.w r0, [r3, 0x31]                             |             *((r3 + 0x31)) = r0;
    0x00036cdc ldrh r3, [r3, 0x2c]                               |             r3 = *((r3 + 0x2c));
    0x00036cde ands ip, r3, 0x80                                 |             
                                                                 |             if (ip == r3) {
    0x00036ce2 beq 0x36d9c                                       |                 goto label_42;
                                                                 |             }
    0x00036ce4 ldr r2, [r1]                                      |             r2 = *(r1);
    0x00036ce6 cmp r0, r2                                        |             
                                                                 |             if (r0 == r2) {
    0x00036ce8 beq.w 0x36ee4                                     |                 goto label_43;
                                                                 |             }
                                                                 |         }
                                                                 | label_14:
    0x00036cec ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00036cee ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00036cf0 ldrh r3, [r3, 0x10]                               |         r3 = *((r3 + 0x10));
    0x00036cf2 strh r3, [r2, 0x36]                               |         *((r2 + 0x36)) = r3;
    0x00036cf4 ldr r2, [pc, 0x21c]                               |         
    0x00036cf6 ldr r3, [pc, 0x210]                               |         r3 = *(0x36f0a);
    0x00036cf8 add r2, pc                                        |         r2 = 0x6dc10;
    0x00036cfa ldr r3, [r2, r3]                                  |         r3 = *(0x6dc10);
    0x00036cfc ldr r2, [r3]                                      |         r2 = *(0x6dc10);
    0x00036cfe ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00036d00 eors r2, r3                                       |         r2 ^= r3;
    0x00036d02 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00036d06 bne.w 0x36ee0                                     |             goto label_44;
                                                                 |         }
                                                                 | label_17:
    0x00036d0a mov r1, r8                                        |         r1 = r8;
    0x00036d0c mov r0, sb                                        |         r0 = sb;
    0x00036d0e add sp, 0x8c                                      |         
    0x00036d10 vpop {d8}                                         |         __asm ("vpop {d8}");
    0x00036d14 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00036d18 b.w 0x137d0                                       |         void (*0x137d0)() ();
    0x00036d1c ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00036d1e ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x00036d20 ldrb.w r3, [r3, 0x33]                             |         r3 = *((r3 + 0x33));
    0x00036d24 cmp r2, 0                                         |         
    0x00036d26 clz r3, r3                                        |         r3 &= r3;
    0x00036d2a lsr.w r3, r3, 5                                   |         r3 >>= 5;
    0x00036d2e it eq                                             |         
                                                                 |         if (r2 != 0) {
    0x00036d30 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00036d32 cmp r3, 0                                         |         
    0x00036d34 beq 0x36cbe                                       |         
                                                                 |     }
    0x00036d36 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00036d38 add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00036d3a str r3, [sp, 8]                                   |     var_8h = r3;
    0x00036d3c ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00036d3e ldr r3, [r2, 0x18]                                |     r3 = *((r2 + 0x18));
    0x00036d40 mov r0, r4                                        |     r0 = r4;
    0x00036d42 add r3, r5                                        |     r3 += r5;
    0x00036d44 ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x00036d48 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00036d4a add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x00036d4e uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00036d50 str r3, [sp]                                      |     *(sp) = r3;
    0x00036d52 movs r3, 0x80                                     |     r3 = 0x80;
    0x00036d54 ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x00036d56 bl 0x35fac                                        |     fcn_00035fac (r0, r1, r2, r3, r4);
    0x00036d5a ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00036d5c ldr r3, [r3]                                      |     r3 = *(r3);
    0x00036d5e cmp r0, r3                                        |     
    0x00036d60 ittt eq                                           |     
                                                                 |     if (r0 != r3) {
    0x00036d62 ldreq r2, [sp, 0x20]                              |         r2 = var_20h;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x00036d64 moveq r3, 2                                       |         r3 = 2;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x00036d66 strbeq r3, [r2, 0x33]                             |         *((r2 + 0x33)) = r3;
                                                                 |     }
    0x00036d6a b 0x36cbe                                         |     goto label_11;
                                                                 | label_19:
    0x00036d6c mla r3, r0, r5, r6                                |     __asm ("mla r3, r0, r5, r6");
    0x00036d70 mov r2, r4                                        |     r2 = r4;
    0x00036d72 movs r1, 0                                        |     r1 = 0;
    0x00036d74 mov r0, r3                                        |     r0 = r3;
    0x00036d76 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00036d78 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00036d7c ldr.w r3, [fp, 0x88]                              |     r3 = *(arg_88h);
    0x00036d80 cmp r3, 0x30                                      |     
    0x00036d82 it hs                                             |     
                                                                 |     if (r3 < 0x30) {
    0x00036d84 movhs r3, 0x30                                    |         r3 = 0x30;
                                                                 |     }
    0x00036d86 strh r3, [r7, 0x10]                               |     *((r7 + 0x10)) = r3;
    0x00036d88 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00036d8c bne 0x36d96                                       |         
    0x00036d8e ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00036d90 strb r3, [r7, 0x16]                               |         *((r7 + 0x16)) = r3;
                                                                 | label_20:
    0x00036d92 str r7, [sp, 0x18]                                |         var_18h = r7;
    0x00036d94 b 0x36cb0                                         |         goto label_12;
                                                                 |     }
    0x00036d96 movs r3, 0xff                                     |     r3 = 0xff;
    0x00036d98 strb r3, [r7, 0x16]                               |     *((r7 + 0x16)) = r3;
    0x00036d9a b 0x368c8                                         |     goto label_13;
                                                                 | label_42:
    0x00036d9c ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00036d9e cmp r0, 0                                         |     
    0x00036da0 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00036da2 ldrd r6, r7, [r4, 8]                              |     __asm ("ldrd r6, r7, [r4, 8]");
    0x00036da6 strd r6, r7, [r2, 0x50]                           |     __asm ("strd r6, r7, [r2, 0x50]");
                                                                 |     if (r0 <= 0) {
    0x00036daa ble 0x36e32                                       |         goto label_45;
                                                                 |     }
    0x00036dac subs.w r2, sl, 0                                  |     r2 = sl - 0;
    0x00036db0 it ne                                             |     
                                                                 |     if (r2 == sl) {
    0x00036db2 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00036db4 cmp r0, 1                                         |     
    0x00036db6 it ne                                             |     
                                                                 |     if (r0 == 1) {
    0x00036db8 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00036dba cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00036dbc bne.w 0x36eee                                     |         goto label_46;
                                                                 |     }
                                                                 | label_15:
    0x00036dc0 lsls r3, r3, 0x16                                 |     r3 <<= 0x16;
                                                                 |     if (r3 >= r3) {
    0x00036dc2 bpl 0x36cec                                       |         goto label_14;
                                                                 |     }
    0x00036dc4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00036dc6 cmp.w sl, 0                                       |     
    0x00036dca ldr r2, [r1]                                      |     r2 = *(r1);
    0x00036dcc ldrsb.w r3, [r3, 0x31]                            |     r3 = *((r3 + 0x31));
    0x00036dd0 sub.w r3, r3, r2                                  |     r3 -= r2;
    0x00036dd4 clz r3, r3                                        |     r3 &= r3;
    0x00036dd8 lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x00036ddc it eq                                             |     
                                                                 |     if (sl != 0) {
    0x00036dde moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00036de0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00036de2 beq 0x36cec                                       |         goto label_14;
                                                                 |     }
    0x00036de4 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00036de6 add r2, sp, 0x78                                  |     r2 += var_78h;
    0x00036de8 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00036dea add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x00036dee ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00036df0 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00036df2 ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
    0x00036df4 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00036df8 add r2, r5                                        |     r2 += r5;
    0x00036dfa ldr r2, [r2, -0x4]                                |     r2 = *((r2 - 0x4));
    0x00036dfe vstr d16, [sp, 0x78]                              |     __asm ("vstr d16, [sp, 0x78]");
    0x00036e02 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x00036e06 movs r3, 0                                        |     r3 = 0;
    0x00036e08 mov r2, r0                                        |     r2 = r0;
    0x00036e0a mov r0, r4                                        |     r0 = r4;
    0x00036e0c bl 0x35fac                                        |     fcn_00035fac (r0, r1, r2, r3, r4);
    0x00036e10 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00036e12 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00036e14 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x00036e16 bne.w 0x36cec                                     |         goto label_14;
                                                                 |     }
    0x00036e1a ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00036e1c ldrb.w r3, [r1, 0x34]                             |     r3 = *((r1 + 0x34));
    0x00036e20 orr r3, r3, 8                                     |     r3 |= 8;
    0x00036e24 strb.w r3, [r1, 0x34]                             |     *((r1 + 0x34)) = r3;
    0x00036e28 ldrd r2, r3, [sp, 0x78]                           |     __asm ("ldrd r2, r3, [var_78h]");
    0x00036e2c strd r2, r3, [r1, 0x50]                           |     __asm ("strd r2, r3, [r1, 0x50]");
    0x00036e30 b 0x36cec                                         |     goto label_14;
                                                                 | label_45:
    0x00036e32 mov r6, r2                                        |     r6 = r2;
    0x00036e34 strb.w ip, [r2, 0x31]                             |     *((r2 + 0x31)) = ip;
    0x00036e38 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00036e3c beq.w 0x36cec                                     |         goto label_14;
                                                                 |     }
    0x00036e40 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x00036e42 add r2, r5                                        |     r2 += r5;
    0x00036e44 ldr r0, [r2, -0x4]                                |     r0 = *((r2 - 0x4));
    0x00036e48 ldr r2, [r0, 0x28]                                |     r2 = *((r0 + 0x28));
    0x00036e4a lsls r7, r2, 0x13                                 |     r7 = r2 << 0x13;
                                                                 |     if (r7 < r2) {
    0x00036e4c bmi 0x36dc0                                       |         goto label_15;
                                                                 |     }
    0x00036e4e and r2, r2, 0x104                                 |     r2 &= 0x104;
    0x00036e52 cmp.w r2, 0x104                                   |     
                                                                 |     if (r2 == 0x104) {
    0x00036e56 beq 0x36dc0                                       |         goto label_15;
                                                                 |     }
    0x00036e58 add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x00036e5c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00036e60 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00036e62 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00036e64 mov r2, r4                                        |     r2 = r4;
    0x00036e66 str r3, [sp]                                      |     *(sp) = r3;
    0x00036e68 add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00036e6a str r3, [sp, 8]                                   |     var_8h = r3;
    0x00036e6c mov r0, r6                                        |     r0 = r6;
    0x00036e6e mov.w r3, 0x800                                   |     r3 = 0x800;
    0x00036e72 vstr d16, [sp, 0x78]                              |     __asm ("vstr d16, [sp, 0x78]");
    0x00036e76 bl 0x35fac                                        |     fcn_00035fac (r0, r1, r2, r3, r4);
    0x00036e7a ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x00036e7c ldr r3, [r1]                                      |     r3 = *(r1);
    0x00036e7e cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x00036e80 bne 0x36e98                                       |         
    0x00036e82 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00036e84 ldrb.w r3, [r0, 0x34]                             |         r3 = *((r0 + 0x34));
    0x00036e88 orr r3, r3, 4                                     |         r3 |= 4;
    0x00036e8c strb.w r3, [r0, 0x34]                             |         *((r0 + 0x34)) = r3;
    0x00036e90 ldrd r2, r3, [sp, 0x78]                           |         __asm ("ldrd r2, r3, [var_78h]");
    0x00036e94 strd r2, r3, [r0, 0x50]                           |         __asm ("strd r2, r3, [r0, 0x50]");
                                                                 |     }
    0x00036e98 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00036e9a ldrh r3, [r3, 0x2c]                               |     r3 = *((r3 + 0x2c));
    0x00036e9c b 0x36dc0                                         |     goto label_15;
                                                                 | label_18:
    0x00036e9e ldr r2, [pc, 0x78]                                |     
    0x00036ea0 ldr r3, [pc, 0x64]                                |     r3 = *(0x36f08);
    0x00036ea2 add r2, pc                                        |     r2 = 0x6ddc0;
    0x00036ea4 ldr r3, [r2, r3]                                  |     r3 = *(0x6ddc0);
    0x00036ea6 ldr r2, [r3]                                      |     r2 = *(0x6ddc0);
    0x00036ea8 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00036eaa eors r2, r3                                       |     r2 ^= r3;
    0x00036eac mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00036eb0 bne 0x36ee0                                       |         goto label_44;
                                                                 |     }
    0x00036eb2 add sp, 0x8c                                      |     
    0x00036eb4 vpop {d8}                                         |     __asm ("vpop {d8}");
    0x00036eb8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_37:
    0x00036ebc movs r3, 0x1e                                     |     r3 = 0x1e;
    0x00036ebe b 0x36b7a                                         |     goto label_16;
                                                                 | label_40:
    0x00036ec0 ldr r1, [pc, 0x58]                                |     
    0x00036ec2 mov r0, fp                                        |     r0 = fp;
    0x00036ec4 add r1, pc                                        |     r1 = 0x6dde4;
    0x00036ec6 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00036eca ldr r2, [pc, 0x54]                                |     
    0x00036ecc ldr r3, [pc, 0x38]                                |     r3 = *(0x36f08);
    0x00036ece add r2, pc                                        |     r2 = 0x6ddf4;
    0x00036ed0 ldr r3, [r2, r3]                                  |     r3 = *(0x6ddf4);
    0x00036ed2 ldr r2, [r3]                                      |     r2 = *(0x6ddf4);
    0x00036ed4 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00036ed6 eors r2, r3                                       |     r2 ^= r3;
    0x00036ed8 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x00036edc beq.w 0x36d0a                                     |         goto label_17;
                                                                 |     }
                                                                 | label_44:
    0x00036ee0 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_43:
    0x00036ee4 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00036ee6 movs r2, 2                                        |     r2 = 2;
    0x00036ee8 strb.w r2, [r0, 0x33]                             |     *((r0 + 0x33)) = r2;
    0x00036eec b 0x36dc0                                         |     goto label_15;
                                                                 | label_46:
    0x00036eee lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
    0x00036ef0 itttt ne                                          |     
                                                                 |     if (r2 == r3) {
    0x00036ef2 ldrne r0, [sp, 0x20]                              |         r0 = var_20h;
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x00036ef4 ldrbne r2, [r0, 0x34]                             |         r2 = *((r0 + 0x34));
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x00036ef8 orrne r2, r2, 4                                   |         r2 |= 4;
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x00036efc strb.w r2, [r0, 0x34]                             |         *((r0 + 0x34)) = r2;
                                                                 |     }
    0x00036f00 b 0x36dc0                                         |     goto label_15;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x37b3c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00037b3c ()                                      | void fcn_00037b3c (int16_t arg_20h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_b0h, int16_t arg_b4h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00037b3c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00037b40 sub sp, 0x8c                                      |     
    0x00037b42 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00037b44 mov fp, r0                                        |     
    0x00037b46 ldr r2, [sp, 0xb0]                                |     r2 = *(arg_b0h);
    0x00037b48 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00037b4a ldr r3, [r0, 0x2c]                                |     r3 = *(arg_b0hx2c);
    0x00037b4c add.w r8, r2, 9                                   |     r8 = r2 + 9;
    0x00037b50 ldr.w sb, [r0, 8]                                 |     sb = *((r0 + 8));
    0x00037b54 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x00037b56 cmp r3, r8                                        |     
    0x00037b58 it lt                                             |     
                                                                 |     if (r3 >= r8) {
    0x00037b5a movlt r3, r8                                      |         r3 = r8;
                                                                 |     }
    0x00037b5c str r3, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r3;
    0x00037b5e ldr r3, [r0]                                      |     r3 = *(r0);
    0x00037b60 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00037b62 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00037b66 beq.w 0x37f78                                     |         goto label_24;
                                                                 |     }
                                                                 | label_3:
    0x00037b6a ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x00037b6c cmp r5, 0                                         |     
    0x00037b6e it ne                                             |     
                                                                 |     if (r5 != 0) {
    0x00037b70 cmpne sb, 0                                       |         __asm ("cmpne sb, 0");
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x00037b74 beq 0x37b7c                                       |         goto label_0;
                                                                 |     }
    0x00037b76 ldrb.w r4, [r5, 0x2b]                             |     r4 = *((r5 + 0x2b));
    0x00037b7a cbz r4, 0x37b82                                   |     
                                                                 |     while (r0 == 0) {
                                                                 | label_0:
    0x00037b7c add sp, 0x8c                                      |         
    0x00037b7e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00037b82 ldr.w r0, [pc, 0x7f4]                             |         r0 = *(0x00038378);
    0x00037b86 movs r2, 0x5c                                     |         r2 = 0x5c;
    0x00037b88 ldr r1, [r5]                                      |         r1 = *(r5);
    0x00037b8a add r0, pc                                        |         r0 += pc;
    0x00037b8c blx 0x9c88                                        |         r0 = fcn_00009c88 ();
    0x00037b90 cmp r0, 0                                         |         
    0x00037b92 beq 0x37b7c                                       |         
                                                                 |     }
    0x00037b94 ldr r1, [r5, 0x3c]                                |     r1 = *((r5 + 0x3c));
    0x00037b96 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00037b98 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00037b9a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00037b9c beq.w 0x38362                                     |         goto label_25;
                                                                 |     }
    0x00037ba0 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00037ba2 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00037ba4 beq.w 0x382d4                                     |         goto label_26;
                                                                 |     }
    0x00037ba8 adds r3, 0x10                                     |     r3 += 0x10;
    0x00037baa mov r2, r4                                        |     r2 = r4;
                                                                 |     do {
    0x00037bac mov r0, r3                                        |         r0 = r3;
    0x00037bae adds r2, 1                                        |         r2++;
    0x00037bb0 ldr r4, [r3, 0xc]                                 |         r4 = *((r3 + 0xc));
    0x00037bb2 adds r3, 0x10                                     |         r3 += 0x10;
    0x00037bb4 cmp r1, r4                                        |         
    0x00037bb6 bne 0x37bac                                       |         
                                                                 |     } while (r1 != r4);
    0x00037bb8 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00037bba mov r5, r2                                        |     r5 = r2;
    0x00037bbc ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x00037bbe movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00037bc0 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00037bc2 mov r0, fp                                        |     r0 = fp;
    0x00037bc4 str r3, [sp]                                      |     *(sp) = r3;
    0x00037bc6 movs r3, 0                                        |     r3 = 0;
    0x00037bc8 ldr r2, [r4]                                      |     r2 = *(r4);
    0x00037bca bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00037bce cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00037bd0 bne 0x37b7c                                       |         goto label_0;
                                                                 |     }
    0x00037bd2 cmp r5, 1                                         |     
                                                                 |     if (r5 != 1) {
    0x00037bd4 beq 0x37bee                                       |         
    0x00037bd6 ldr r2, [r4, 0x14]                                |         r2 = *((r4 + 0x14));
    0x00037bd8 ldr r1, [r4]                                      |         r1 = *(r4);
    0x00037bda lsls r4, r5, 4                                    |         r4 = r5 << 4;
                                                                 | label_15:
    0x00037bdc ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00037be0 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00037be2 add r3, r4                                        |         r3 += r4;
    0x00037be4 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00037be6 ldrb r3, [r3, 9]                                  |         r3 = *((r3 + 9));
    0x00037be8 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00037bea bne.w 0x382c6                                     |             goto label_27;
                                                                 |         }
                                                                 |     }
                                                                 | label_14:
    0x00037bee ldr r3, [sp, 0xb4]                                |     r3 = *(arg_b4h);
    0x00037bf0 mov r0, fp                                        |     r0 = fp;
    0x00037bf2 ldr.w r2, [fp, 0x28]                              |     r2 = *(arg_28h);
    0x00037bf6 ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x00037bf8 adds r3, 2                                        |     r3 += 2;
    0x00037bfa ldr r1, [sp, 0xb4]                                |     r1 = *(arg_b4h);
    0x00037bfc cmp r3, r2                                        |     
    0x00037bfe it lt                                             |     
                                                                 |     if (r3 >= r2) {
    0x00037c00 movlt r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x00037c02 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00037c04 str.w r3, [fp, 0x28]                              |     __asm ("str.w r3, [arg_28h]");
    0x00037c08 movs r3, 0x70                                     |     r3 = 0x70;
    0x00037c0a str r3, [sp]                                      |     *(sp) = r3;
    0x00037c0c mov r3, r4                                        |     r3 = r4;
    0x00037c0e bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x00037c10 vpmax.u32 d25, d3, d28                            |     __asm ("vpmax.u32 d25, d3, d28");
    0x00037c14 mov r0, sb                                        |     r0 = sb;
    0x00037c16 adds r1, r2, 6                                    |     r1 = r2 + 6;
    0x00037c18 ldr r2, [r4]                                      |     r2 = *(r4);
    0x00037c1a str r1, [sp, 0x6c]                                |     var_6ch = r1;
    0x00037c1c bl 0x2a930                                        |     fcn_0002a930 (r0, r1, r2);
    0x00037c20 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00037c22 ldr.w sl, [r4, 8]                                 |     sl = *((r4 + 8));
    0x00037c26 adds r3, 4                                        |     r3 += 4;
    0x00037c28 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00037c2a ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00037c2c adds r3, 7                                        |     r3 += 7;
    0x00037c2e str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00037c30 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00037c32 adds r3, 8                                        |     r3 += 8;
    0x00037c34 str r3, [sp, 0x68]                                |     var_68h = r3;
    0x00037c36 ldr r3, [sp, 0xb4]                                |     r3 = *(arg_b4h);
    0x00037c38 add.w lr, r3, 1                                   |     lr = r3 + 1;
    0x00037c3c cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00037c40 beq.w 0x3834c                                     |         goto label_28;
                                                                 |     }
    0x00037c44 ldr.w r3, [pc, 0x734]                             |     
    0x00037c48 mov r5, sl                                        |     r5 = sl;
    0x00037c4a str.w r8, [sp, 0x20]                              |     __asm ("str.w r8, [var_20h]");
    0x00037c4e mov r8, lr                                        |     r8 = lr;
    0x00037c50 add r3, pc                                        |     
    0x00037c52 add.w r3, r3, 0x8d0                               |     r3 = 0x708a0;
    0x00037c56 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00037c58 ldr.w r3, [pc, 0x724]                             |     
    0x00037c5c add r3, pc                                        |     
    0x00037c5e adds r3, 4                                        |     r3 += 4;
    0x00037c60 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00037c62 ldr.w r3, [pc, 0x720]                             |     r3 = *(0x00038384);
    0x00037c64 adds r7, 0x20                                     |     r7 += 0x20;
    0x00037c66 add r3, pc                                        |     r3 = 0xa7c4a;
    0x00037c68 str r3, [sp, 0x78]                                |     var_78h = r3;
    0x00037c6a ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00037c6c adds r3, 1                                        |     r3++;
    0x00037c6e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00037c70 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00037c72 adds r3, 2                                        |     r3 += 2;
    0x00037c74 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00037c76 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00037c78 adds r3, 3                                        |     r3 += 3;
    0x00037c7a str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00037c7c ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00037c7e adds r3, 5                                        |     r3 += 5;
    0x00037c80 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00037c82 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00037c84 subs r3, 0                                        |     
    0x00037c86 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00037c88 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00037c8a str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00037c8c movs r3, 1                                        |     r3 = 1;
    0x00037c8e str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00037c90 b 0x37cbc                                         |     goto label_29;
                                                                 | label_1:
    0x00037c92 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00037c96 lsls r2, r7, 2                                    |     r2 = r7 << 2;
    0x00037c98 mov r0, r6                                        |     r0 = r6;
    0x00037c9a mov r1, r3                                        |     r1 = r3;
    0x00037c9c str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00037c9e subs r1, 1                                        |     r1--;
    0x00037ca0 mov r3, r4                                        |     r3 = r4;
    0x00037ca2 str.w r1, [fp, 0x38]                              |     __asm ("str.w r1, [arg_38h]");
    0x00037ca6 str r1, [sp, 0x70]                                |     var_70h = r1;
    0x00037ca8 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x00037cac str r0, [sp, 0x64]                                |     var_64h = r0;
    0x00037cae cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00037cb0 bne.w 0x37fa2                                     |         goto label_30;
                                                                 |     }
                                                                 |     do {
                                                                 | label_2:
    0x00037cb4 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x00037cb6 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00037cb8 beq.w 0x381c2                                     |             goto label_31;
                                                                 |         }
                                                                 | label_29:
    0x00037cbc ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x00037cbe ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00037cc0 cmp r2, r5                                        |         
    0x00037cc2 ite eq                                            |         
                                                                 |         if (r2 != r5) {
    0x00037cc4 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r2 == r5) {
    0x00037cc6 andne r3, r3, 1                                   |             r3 &= 1;
                                                                 |         }
    0x00037cca cmp r3, 0                                         |         
    0x00037ccc bne 0x37cb4                                       |         
                                                                 |     } while (r3 != 0);
    0x00037cce ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x00037cd0 cmp r3, 0                                         |     
    0x00037cd2 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00037cd4 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00037cd6 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00037cd8 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00037cda ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00037cdc ldr r2, [r3, 0x1c]                                |     r2 = *((r3 + 0x1c));
    0x00037cde ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x00037ce2 lsls r2, r2, 0x18                                 |     r2 <<= 0x18;
                                                                 |     if (r2 < r2) {
    0x00037ce4 bpl 0x37cf0                                       |         
    0x00037ce6 and r2, r3, 3                                     |         r2 = r3 & 3;
    0x00037cea cmp r2, 2                                         |         
                                                                 |         if (r2 == 2) {
    0x00037cec beq.w 0x381b8                                     |             goto label_32;
                                                                 |         }
                                                                 |     }
    0x00037cf0 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x00037cf2 ldrh r4, [r5, 0x34]                               |     r4 = *((r5 + 0x34));
    0x00037cf4 it mi                                             |     
                                                                 |     if (r3 < r3) {
    0x00037cf6 ldrhmi r7, [r5, 0x32]                             |         __asm ("ldrhmi r7, [r5, 0x32]");
                                                                 |     }
    0x00037cf8 ldr r2, [r5]                                      |     r2 = *(r5);
    0x00037cfa ite pl                                            |     
                                                                 |     if (r3 < r3) {
    0x00037cfc addpl r7, r4, -1                                  |         r7 = r4 + -1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00037d00 add.w r7, r7, -1                                  |         r7 += -1;
                                                                 |     }
                                                                 | label_11:
    0x00037d04 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x00037d06 mov r0, sb                                        |     r0 = sb;
    0x00037d08 bl 0x2a930                                        |     fcn_0002a930 (r0, r1, r2);
    0x00037d0c ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00037d0e mov r0, sb                                        |     r0 = sb;
    0x00037d10 ldr.w r1, [fp, 0x2c]                              |     r1 = *(arg_2ch);
    0x00037d14 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x00037d16 str r2, [sp]                                      |     *(sp) = r2;
    0x00037d18 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00037d1a adds r2, r7, r2                                   |     r2 = r7 + r2;
    0x00037d1c cmp r2, r1                                        |     
    0x00037d1e it lt                                             |     
                                                                 |     if (r2 >= r1) {
    0x00037d20 movlt r2, r1                                      |         r2 = r1;
                                                                 |     }
    0x00037d22 movs r1, 0x70                                     |     r1 = 0x70;
    0x00037d24 str.w r2, [fp, 0x2c]                              |     __asm ("str.w r2, [arg_2ch]");
    0x00037d28 mov r2, r8                                        |     r2 = r8;
    0x00037d2a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00037d2e mov r1, r5                                        |     r1 = r5;
    0x00037d30 mov r0, fp                                        |     r0 = fp;
    0x00037d32 bl 0x27dcc                                        |     fcn_00027dcc (r0, r1);
    0x00037d36 mov r2, r4                                        |     r2 = r4;
    0x00037d38 movs r4, 0                                        |     r4 = 0;
    0x00037d3a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00037d3c movs r1, 0x47                                     |     r1 = 0x47;
    0x00037d3e mov r0, sb                                        |     r0 = sb;
    0x00037d40 str r4, [sp]                                      |     *(sp) = r4;
    0x00037d42 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00037d46 ldrh r2, [r5, 0x32]                               |     r2 = *((r5 + 0x32));
    0x00037d48 movs r1, 0x47                                     |     r1 = 0x47;
    0x00037d4a ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00037d4c mov r0, sb                                        |     r0 = sb;
    0x00037d4e str r4, [sp]                                      |     *(sp) = r4;
    0x00037d50 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00037d54 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x00037d58 mov r2, r3                                        |     r2 = r3;
    0x00037d5a str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00037d5c ldr.w r3, [sb, 0x70]                              |     r3 = *((sb + 0x70));
    0x00037d60 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00037d62 bge.w 0x3817e                                     |         goto label_33;
                                                                 |     }
    0x00037d66 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00037d68 movs r0, 0x23                                     |     r0 = 0x23;
    0x00037d6a ldr.w r1, [sb, 0x68]                              |     r1 = *((sb + 0x68));
    0x00037d6e add.w r3, r2, r2, lsl 2                           |     r3 = r2 + (r2 << 2);
    0x00037d72 adds r2, 1                                        |     r2++;
    0x00037d74 str.w r2, [sb, 0x6c]                              |     __asm ("str.w r2, [sb, 0x6c]");
    0x00037d78 add.w r2, r1, r3, lsl 2                           |     r2 = r1 + (r3 << 2);
    0x00037d7c strd r8, r4, [r2, 4]                              |     __asm ("strd r8, r4, [r2, 4]");
    0x00037d80 strd r4, r4, [r2, 0xc]                            |     __asm ("strd r4, r4, [r2, 0xc]");
    0x00037d84 str.w r0, [r1, r3, lsl 2]                         |     __asm ("str.w r0, [r1, r3, lsl 2]");
                                                                 | label_8:
    0x00037d88 movs r3, 1                                        |     r3 = 1;
    0x00037d8a mov r2, r8                                        |     r2 = r8;
    0x00037d8c movs r1, 0x62                                     |     r1 = 0x62;
    0x00037d8e str r3, [sp]                                      |     *(sp) = r3;
    0x00037d90 mov r0, sb                                        |     r0 = sb;
    0x00037d92 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00037d94 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00037d98 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00037d9a movs r4, 0                                        |     r4 = 0;
    0x00037d9c movs r1, 0x47                                     |     r1 = 0x47;
    0x00037d9e mov r0, sb                                        |     r0 = sb;
    0x00037da0 ldr.w r3, [r6, 0x1ec]                             |     r3 = *((r6 + 0x1ec));
    0x00037da4 str r4, [sp]                                      |     *(sp) = r4;
    0x00037da6 mov r2, r3                                        |     r2 = r3;
    0x00037da8 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00037daa ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00037dac bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00037db0 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00037db2 mov r1, r4                                        |     r1 = r4;
    0x00037db4 ldr.w sl, [sp, 0x18]                              |     sl = var_18h;
    0x00037db8 mov r0, fp                                        |     r0 = fp;
    0x00037dba str r4, [sp, 8]                                   |     var_8h = r4;
    0x00037dbc str r3, [sp, 4]                                   |     var_4h = r3;
    0x00037dbe movs r3, 4                                        |     r3 = 4;
    0x00037dc0 mov r2, sl                                        |     r2 = sl;
    0x00037dc2 str r3, [sp]                                      |     *(sp) = r3;
    0x00037dc4 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00037dc6 bl 0x2b39c                                        |     fcn_0002b39c (r0, r1, r2, r3, r4, r5, r6);
    0x00037dca mov r3, sl                                        |     r3 = sl;
    0x00037dcc mov r2, r4                                        |     r2 = r4;
    0x00037dce movs r1, 0x47                                     |     r1 = 0x47;
    0x00037dd0 mov r0, sb                                        |     r0 = sb;
    0x00037dd2 str r4, [sp]                                      |     *(sp) = r4;
    0x00037dd4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00037dd8 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x00037ddc cmp r7, r4                                        |     
    0x00037dde str r3, [sp, 0x48]                                |     var_48h = r3;
                                                                 |     if (r7 > r4) {
    0x00037de0 bgt.w 0x37c92                                     |         goto label_1;
                                                                 |     }
                                                                 | label_6:
    0x00037de4 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00037de6 movs r7, 0                                        |     r7 = 0;
    0x00037de8 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00037dea movs r1, 1                                        |     r1 = 1;
    0x00037dec mov r0, fp                                        |     r0 = fp;
    0x00037dee str r7, [sp, 8]                                   |     var_8h = r7;
    0x00037df0 addw r3, r3, 0x8f8                                |     __asm ("addw r3, r3, aav.0x000000ff");
    0x00037df4 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00037df6 movs r3, 2                                        |     r3 = 2;
    0x00037df8 str r3, [sp]                                      |     *(sp) = r3;
    0x00037dfa ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00037dfc bl 0x2b39c                                        |     fcn_0002b39c (r0, r1, r2, r3, r4, r5, r6);
    0x00037e00 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00037e02 ldr.w r3, [r3, 0x1ec]                             |     r3 = *((r3 + 0x1ec));
    0x00037e04 adds r1, 0xec                                     |     r1 += 0xec;
    0x00037e06 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00037e08 beq.w 0x37f8a                                     |         goto label_34;
                                                                 |     }
    0x00037e0c ldrd r6, r1, [sb, 0x6c]                           |     __asm ("ldrd r6, r1, [sb, 0x6c]");
    0x00037e10 cmp r6, r1                                        |     
                                                                 |     if (r6 >= r1) {
    0x00037e12 bge.w 0x38302                                     |         goto label_35;
                                                                 |     }
    0x00037e16 ldr.w r0, [sb, 0x68]                              |     r0 = *((sb + 0x68));
    0x00037e1a add.w r3, r6, r6, lsl 2                           |     r3 = r6 + (r6 << 2);
    0x00037e1e adds r4, r6, 1                                    |     r4 = r6 + 1;
    0x00037e20 mov lr, r3                                        |     lr = r3;
    0x00037e22 mov.w ip, 0x32                                    |     
    0x00037e26 str.w r4, [sb, 0x6c]                              |     __asm ("str.w r4, [sb, 0x6c]");
    0x00037e2a add.w r2, r0, r3, lsl 2                           |     r2 = r0 + (r3 << 2);
    0x00037e2e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00037e30 strd r7, r7, [r2, 0xc]                            |     __asm ("strd r7, r7, [r2, 0xc]");
    0x00037e34 strd r3, r7, [r2, 4]                              |     __asm ("strd r3, r7, [r2, 4]");
    0x00037e38 str.w ip, [r0, lr, lsl 2]                         |     __asm ("str.w ip, [r0, lr, lsl 2]");
                                                                 | label_17:
    0x00037e3c cmp r1, r4                                        |     
                                                                 |     if (r1 <= r4) {
    0x00037e3e ble.w 0x38318                                     |         goto label_36;
                                                                 |     }
    0x00037e42 ldr.w r0, [sb, 0x68]                              |     r0 = *((sb + 0x68));
    0x00037e46 add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x00037e4a adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00037e4c ldr r7, [sp, 0x28]                                |     r7 = var_28h;
    0x00037e4e str.w r2, [sb, 0x6c]                              |     __asm ("str.w r2, [sb, 0x6c]");
    0x00037e52 movs r1, 0                                        |     r1 = 0;
    0x00037e54 mov.w ip, 0xf                                     |     
    0x00037e58 add.w r2, r0, r3, lsl 2                           |     r2 = r0 + (r3 << 2);
    0x00037e5c strd r7, r1, [r2, 4]                              |     __asm ("strd r7, r1, [r2, 4]");
    0x00037e60 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x00037e64 str.w ip, [r0, r3, lsl 2]                         |     __asm ("str.w ip, [r0, r3, lsl 2]");
                                                                 | label_18:
    0x00037e68 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00037e6a mov r2, r8                                        |     r2 = r8;
    0x00037e6c movs r1, 0x17                                     |     r1 = 0x17;
    0x00037e6e mov r0, sb                                        |     r0 = sb;
    0x00037e70 str r3, [sp]                                      |     *(sp) = r3;
    0x00037e72 movs r3, 1                                        |     r3 = 1;
    0x00037e74 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00037e76 movs r3, 0                                        |     r3 = 0;
    0x00037e78 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00037e7c ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00037e80 cmp r6, 0                                         |     
    0x00037e82 ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
    0x00037e86 mov r7, r0                                        |     r7 = r0;
    0x00037e88 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00037e8c it lt                                             |     
                                                                 |     if (r6 >= 0) {
    0x00037e8e addlt r6, r2, -1                                  |         r6 = r2 + -1;
                                                                 |     }
    0x00037e92 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00037e94 bne.w 0x381b0                                     |         goto label_37;
                                                                 |     }
    0x00037e98 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00037e9c add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x00037ea0 add.w r3, r3, r6, lsl 2                           |     r3 += (r6 << 2);
                                                                 | label_10:
    0x00037ea4 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00037ea6 movs r2, 0                                        |     r2 = 0;
    0x00037ea8 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00037eaa movs r1, 0x26                                     |     r1 = 0x26;
    0x00037eac str r2, [sp]                                      |     *(sp) = r2;
    0x00037eae mov r0, sb                                        |     r0 = sb;
    0x00037eb0 mov r2, r8                                        |     r2 = r8;
    0x00037eb2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00037eb6 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00037eba cmp r4, 0                                         |     
    0x00037ebc ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
    0x00037ec0 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00037ec4 it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00037ec6 addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x00037eca cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00037ecc beq.w 0x38190                                     |         goto label_38;
                                                                 |     }
    0x00037ed0 ldr.w r3, [pc, 0x4b4]                             |     
    0x00037ed4 add r3, pc                                        |     r3 = 0x70260;
    0x00037ed6 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x00037ed8 adds r3, 4                                        |     r3 += 4;
                                                                 | label_9:
    0x00037eda str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
                                                                 |     do {
    0x00037edc ldr.w r3, [pc, 0x4ac]                             |         r3 = *(0x0003838c);
    0x00037ee0 movs r4, 0                                        |         r4 = 0;
    0x00037ee2 mov r1, r4                                        |         r1 = r4;
    0x00037ee4 ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x00037ee6 mov r0, fp                                        |         r0 = fp;
    0x00037ee8 str r4, [sp, 8]                                   |         var_8h = r4;
    0x00037eea add r3, pc                                        |         r3 += pc;
    0x00037eec add.w r3, r3, 0x920                               |         r3 += 0x920;
    0x00037ef0 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00037ef2 movs r3, 1                                        |         r3 = 1;
    0x00037ef4 str r3, [sp]                                      |         *(sp) = r3;
    0x00037ef6 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x00037ef8 bl 0x2b39c                                        |         fcn_0002b39c (r0, r1, r2, r3, r4, r5, r6);
    0x00037efc ldr.w r3, [pc, 0x490]                             |         
    0x00037f00 movs r1, 0x61                                     |         r1 = 0x61;
    0x00037f02 ldr r6, [sp, 0x28]                                |         r6 = var_28h;
    0x00037f04 mov r0, sb                                        |         r0 = sb;
    0x00037f06 ldr r2, [sp, 0x6c]                                |         r2 = var_6ch;
    0x00037f08 add r3, pc                                        |         r3 = 0x7029c;
    0x00037f0a str r4, [sp, 8]                                   |         var_8h = r4;
    0x00037f0c str r3, [sp, 4]                                   |         var_4h = r3;
    0x00037f0e movs r3, 3                                        |         r3 = 3;
    0x00037f10 str r6, [sp]                                      |         *(sp) = r6;
    0x00037f12 bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00037f16 str r4, [sp]                                      |         *(sp) = r4;
    0x00037f18 movs r1, 0x7f                                     |         r1 = 0x7f;
    0x00037f1a ldr r4, [sp, 0x40]                                |         r4 = var_40h;
    0x00037f1c mov r0, sb                                        |         r0 = sb;
    0x00037f1e ldr r3, [sp, 0xb0]                                |         r3 = *(arg_b0h);
    0x00037f20 mov r2, r4                                        |         r2 = r4;
    0x00037f22 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00037f26 ldr r3, [sp, 0xb0]                                |         r3 = *(arg_b0h);
    0x00037f28 mov r2, r4                                        |         r2 = r4;
    0x00037f2a movs r1, 0x80                                     |         r1 = 0x80;
    0x00037f2c mov r0, sb                                        |         r0 = sb;
    0x00037f2e str r3, [sp]                                      |         *(sp) = r3;
    0x00037f30 mov r3, r6                                        |         r3 = r6;
    0x00037f32 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00037f36 ldr.w r2, [sb, 0x6c]                              |         r2 = *((sb + 0x6c));
    0x00037f3a cmp r2, 0                                         |         
                                                                 |         if (r2 > 0) {
    0x00037f3c ble 0x37f50                                       |             
    0x00037f3e ldr.w r3, [sb, 0x68]                              |             r3 = *((sb + 0x68));
    0x00037f42 add.w r1, r2, r2, lsl 2                           |             r1 = r2 + (r2 << 2);
    0x00037f46 add.w r3, r3, r1, lsl 2                           |             r3 += (r1 << 2);
    0x00037f4a movs r1, 8                                        |             r1 = 8;
    0x00037f4c strh r1, [r3, -0x12]                              |             *((r3 - 0x12)) = r1;
                                                                 |         }
    0x00037f50 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00037f52 cmp r3, 0                                         |         
    0x00037f54 itt lt                                            |         
                                                                 |         if (r3 >= 0) {
    0x00037f56 addlt r3, r2, -1                                  |             r3 = r2 + -1;
                                                                 |         }
                                                                 |         if (r3 < 0) {
    0x00037f5a str r3, [sp, 0x2c]                                |             var_2ch = r3;
                                                                 |         }
    0x00037f5c ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x00037f60 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 != 0) {
    0x00037f64 cbnz r3, 0x37f9a                                  |             goto label_39;
                                                                 |         }
    0x00037f66 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00037f68 ldr.w r1, [sb, 0x68]                              |         r1 = *((sb + 0x68));
    0x00037f6c add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00037f70 add.w r3, r1, r3, lsl 2                           |         r3 = r1 + (r3 << 2);
                                                                 | label_4:
    0x00037f74 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00037f76 b 0x37cb4                                         |         goto label_2;
                                                                 | label_24:
    0x00037f78 ldr r3, [r0, 0x74]                                |         r3 = *((r0 + 0x74));
    0x00037f7a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00037f7c beq.w 0x38170                                     |             goto label_40;
                                                                 |         }
                                                                 | label_7:
    0x00037f80 mov r0, fp                                        |         r0 = fp;
    0x00037f82 bl 0x29b0c                                        |         r0 = fcn_00029b0c (r0);
    0x00037f86 mov sb, r0                                        |         sb = r0;
    0x00037f88 b 0x37b6a                                         |         goto label_3;
                                                                 | label_34:
    0x00037f8a str r3, [sp]                                      |         *(sp) = r3;
    0x00037f8c mov r2, r8                                        |         r2 = r8;
    0x00037f8e ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x00037f90 movs r1, 0x26                                     |         r1 = 0x26;
    0x00037f92 mov r0, sb                                        |         r0 = sb;
    0x00037f94 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00037f98 b 0x37edc                                         |         
                                                                 |     } while (1);
                                                                 | label_39:
    0x00037f9a ldr r3, [pc, 0x3f8]                               |     
    0x00037f9c add r3, pc                                        |     r3 = 0x70336;
    0x00037f9e adds r3, 4                                        |     r3 += 4;
    0x00037fa0 b 0x37f74                                         |     goto label_4;
                                                                 | label_30:
    0x00037fa2 ldrd sl, r3, [sb, 0x6c]                           |     __asm ("ldrd sl, r3, [sb, 0x6c]");
    0x00037fa6 cmp sl, r3                                        |     
                                                                 |     if (sl >= r3) {
    0x00037fa8 bge.w 0x3832a                                     |         goto label_41;
                                                                 |     }
    0x00037fac ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00037fb0 add.w r2, sl, sl, lsl 2                           |     r2 = sl + (sl << 2);
    0x00037fb4 add.w r1, sl, 1                                   |     r1 = sl + 1;
    0x00037fb8 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00037fbc str.w r1, [sb, 0x6c]                              |     __asm ("str.w r1, [sb, 0x6c]");
    0x00037fc0 str r1, [sp, 0x48]                                |     var_48h = r1;
    0x00037fc2 movs r1, 8                                        |     r1 = 8;
    0x00037fc4 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x00037fc8 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00037fcc adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00037fce vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00037fd2 strd r4, r4, [r3, 0xc]                            |     __asm ("strd r4, r4, [r3, 0xc]");
                                                                 | label_19:
    0x00037fd6 cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x00037fd8 beq.w 0x382a2                                     |         goto label_42;
                                                                 |     }
                                                                 | label_13:
    0x00037fdc ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00037fde movs r4, 0                                        |     r4 = 0;
    0x00037fe0 str.w sl, [sp, 0x80]                              |     __asm ("str.w sl, [var_80h]");
    0x00037fe4 mov r6, r4                                        |     r6 = r4;
    0x00037fe6 str.w fp, [sp, 0x38]                              |     __asm ("str.w fp, [var_38h]");
    0x00037fea mov fp, r5                                        |     
    0x00037fec subs r3, 4                                        |     r3 -= 4;
    0x00037fee ldr r5, [sp, 0x28]                                |     r5 = var_28h;
    0x00037ff0 mov sl, r3                                        |     sl = r3;
    0x00037ff2 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x00037ff4 strd r7, r8, [sp, 0x30]                           |     __asm ("strd r7, r8, [var_30h]");
    0x00037ff8 b 0x38056                                         |     
                                                                 |     while (r7 < r3) {
    0x00037ffa ldr.w r2, [sb, 0x68]                              |         r2 = *((sb + 0x68));
    0x00037ffe add.w r3, r7, r7, lsl 2                           |         r3 = r7 + (r7 << 2);
    0x00038002 adds r1, r7, 1                                    |         r1 = r7 + 1;
    0x00038004 str.w r1, [sb, 0x6c]                              |         __asm ("str.w r1, [sb, 0x6c]");
    0x00038008 movs r1, 0x34                                     |         r1 = 0x34;
    0x0003800a add.w lr, r2, r3, lsl 2                           |         lr = r2 + (r3 << 2);
    0x0003800e str.w r0, [lr, 0xc]                               |         __asm ("str.w r0, [lr, 0xc]");
    0x00038012 strd r5, r6, [lr, 4]                              |         __asm ("strd r5, r6, [lr, 4]");
    0x00038016 str.w r6, [lr, 0x10]                              |         __asm ("str.w r6, [lr, 0x10]");
    0x0003801a str.w r1, [r2, r3, lsl 2]                         |         __asm ("str.w r1, [r2, r3, lsl 2]");
                                                                 | label_5:
    0x0003801e mov r2, r8                                        |         r2 = r8;
    0x00038020 mvn r3, 1                                         |         r3 = ~1;
    0x00038024 mov r1, r7                                        |         r1 = r7;
    0x00038026 mov r0, sb                                        |         r0 = sb;
    0x00038028 bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
    0x0003802c str r7, [sl, 4]!                                  |         *((sl += 4)) = r7;
    0x00038030 ldr.w r3, [sb, 0x6c]                              |         r3 = *((sb + 0x6c));
    0x00038034 cmp r3, 0                                         |         
    0x00038036 it gt                                             |         
                                                                 |         if (r3 <= 0) {
    0x00038038 ldrgt r2, [sb, 0x68]                              |             r2 = *((sb + 0x68));
                                                                 |         }
    0x0003803c add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00038040 ittt gt                                           |         
                                                                 |         if (r3 <= 0) {
    0x00038042 addgt r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
                                                                 |         }
                                                                 |         if (r3 <= 0) {
    0x00038046 movgt r3, 0x80                                    |             r3 = 0x80;
                                                                 |         }
                                                                 |         if (r3 > 0) {
    0x00038048 strh r3, [r2, -0x12]                              |             *((r2 - 0x12)) = r3;
                                                                 |         }
    0x0003804c adds r3, r4, 1                                    |         r3 = r4 + 1;
    0x0003804e ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00038050 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x00038052 beq 0x380a2                                       |             goto label_43;
                                                                 |         }
    0x00038054 mov r4, r3                                        |         r4 = r3;
    0x00038056 ldr.w r3, [fp, 0x20]                              |         r3 = *(arg_20h);
    0x0003805a ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x0003805c ldr.w r1, [r3, r4, lsl 2]                         |         offset_0 = r4 << 2;
                                                                 |         r1 = *((r3 + offset_0));
    0x00038060 bl 0x27ce0                                        |         fcn_00027ce0 (r0, r1);
    0x00038064 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00038066 mov r2, r4                                        |         r2 = r4;
    0x00038068 movs r1, 0x47                                     |         r1 = 0x47;
    0x0003806a mov r8, r0                                        |         r8 = r0;
    0x0003806c str r6, [sp]                                      |         *(sp) = r6;
    0x0003806e mov r0, sb                                        |         r0 = sb;
    0x00038070 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00038074 ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x00038076 mov r3, r4                                        |         r3 = r4;
    0x00038078 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x0003807a mov r0, sb                                        |         r0 = sb;
    0x0003807c str r5, [sp]                                      |         *(sp) = r5;
    0x0003807e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00038082 ldrd r7, r3, [sb, 0x6c]                           |         __asm ("ldrd r7, r3, [sb, 0x6c]");
    0x00038086 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00038088 cmp r7, r3                                        |         
    0x0003808a add.w r0, r4, r2                                  |         r0 = r4 + r2;
    0x0003808e blt 0x37ffa                                       |         
                                                                 |     }
    0x00038090 str r0, [sp]                                      |     *(sp) = r0;
    0x00038092 movs r3, 0                                        |     r3 = 0;
    0x00038094 mov r2, r5                                        |     r2 = r5;
    0x00038096 movs r1, 0x34                                     |     r1 = 0x34;
    0x00038098 mov r0, sb                                        |     r0 = sb;
    0x0003809a bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0003809e mov r7, r0                                        |     r7 = r0;
    0x000380a0 b 0x3801e                                         |     goto label_5;
                                                                 | label_43:
    0x000380a2 movs r3, 0                                        |     r3 = 0;
    0x000380a4 movs r1, 0x47                                     |     r1 = 0x47;
    0x000380a6 str r3, [sp]                                      |     *(sp) = r3;
    0x000380a8 mov r0, sb                                        |     r0 = sb;
    0x000380aa ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000380ac mov r5, fp                                        |     r5 = fp;
    0x000380ae ldr.w sl, [sp, 0x80]                              |     sl = var_80h;
    0x000380b2 ldr.w r8, [sp, 0x34]                              |     r8 = var_34h;
    0x000380b6 ldr.w fp, [sp, 0x38]                              |     fp = var_38h;
    0x000380ba bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000380be ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x000380c0 mov r0, sb                                        |     r0 = sb;
    0x000380c2 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x000380c6 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x000380ca cmp.w sl, 0                                       |     
    0x000380ce ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x000380d2 ldrb.w r0, [r3, 0x57]                             |     r0 = *((r3 + 0x57));
    0x000380d6 it lt                                             |     
                                                                 |     if (sl >= 0) {
    0x000380d8 addlt sl, r1, -1                                  |         sl = r1 + -1;
                                                                 |     }
    0x000380dc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000380de bne.w 0x3829a                                     |         goto label_44;
                                                                 |     }
    0x000380e2 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x000380e6 add.w r6, sl, sl, lsl 2                           |     r6 = sl + (sl << 2);
    0x000380ea add.w r3, r3, r6, lsl 2                           |     r3 += (r6 << 2);
                                                                 | label_12:
    0x000380ee movs r6, 0                                        |     r6 = 0;
    0x000380f0 str r5, [sp, 0x30]                                |     var_30h = r5;
    0x000380f2 ldr r7, [sp, 0x7c]                                |     r7 = var_7ch;
    0x000380f4 mov r5, r6                                        |     r5 = r6;
    0x000380f6 ldr.w sl, [sp, 0x20]                              |     sl = var_20h;
    0x000380fa ldr r6, [sp, 0x84]                                |     r6 = var_84h;
    0x000380fc str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
    0x000380fe b 0x3810c                                         |     
                                                                 |     while (r5 != r4) {
    0x00038100 ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x00038104 ldr.w r1, [sb, 0x6c]                              |         r1 = *((sb + 0x6c));
    0x00038108 ldrb.w r0, [r2, 0x57]                             |         r0 = *((r2 + 0x57));
    0x0003810c ldr r2, [r7, 4]!                                  |         r2 = *((r7 += 4));
    0x00038110 mov ip, r6                                        |         
    0x00038112 cmp r2, 0                                         |         
    0x00038114 it lt                                             |         
                                                                 |         if (r2 >= 0) {
    0x00038116 addlt r2, r1, -1                                  |             r2 = r1 + -1;
                                                                 |         }
    0x0003811a add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |         if (r0 == 0) {
    0x0003811e cbnz r0, 0x38128                                  |             
    0x00038120 ldr.w r0, [sb, 0x68]                              |             r0 = *((sb + 0x68));
    0x00038124 add.w ip, r0, r2, lsl 2                           |             
                                                                 |         }
    0x00038128 add.w r2, r5, sl                                  |         r2 = r5 + sl;
    0x0003812c str.w r1, [ip, 8]                                 |         __asm ("str.w r1, [ip, 8]");
    0x00038130 mov r3, r5                                        |         r3 = r5;
    0x00038132 str r2, [sp]                                      |         *(sp) = r2;
    0x00038134 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x00038136 mov r2, r8                                        |         r2 = r8;
    0x00038138 mov r0, sb                                        |         r0 = sb;
    0x0003813a bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0003813e cmp r5, r4                                        |         
    0x00038140 add.w r2, r5, 1                                   |         r2 = r5 + 1;
    0x00038144 mov r5, r2                                        |         r5 = r2;
    0x00038146 bne 0x38100                                       |         
                                                                 |     }
    0x00038148 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x0003814c ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x0003814e ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00038152 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00038154 bmi.w 0x382f6                                     |         goto label_45;
                                                                 |     }
    0x00038158 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0003815a ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x0003815c ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x00038160 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00038162 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00038164 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_16:
    0x00038166 ldr r1, [sp, 0x64]                                |     r1 = var_64h;
    0x00038168 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0003816a bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0003816e b 0x37de4                                         |     goto label_6;
                                                                 | label_40:
    0x00038170 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00038172 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00038174 lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x00038176 itt pl                                            |     
                                                                 |     if (r1 < r3) {
    0x00038178 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x0003817a strbpl r3, [r0, 0x17]                             |         *((r0 + 0x17)) = r3;
                                                                 |     }
    0x0003817c b 0x37f80                                         |     goto label_7;
                                                                 | label_33:
    0x0003817e mov r3, r4                                        |     r3 = r4;
    0x00038180 mov r2, r8                                        |     r2 = r8;
    0x00038182 movs r1, 0x23                                     |     r1 = 0x23;
    0x00038184 mov r0, sb                                        |     r0 = sb;
    0x00038186 str r4, [sp]                                      |     *(sp) = r4;
    0x00038188 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0003818c str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x0003818e b 0x37d88                                         |     goto label_8;
                                                                 | label_38:
    0x00038190 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00038194 cmp r7, 0                                         |     
    0x00038196 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0003819a it lt                                             |     
                                                                 |     if (r7 >= 0) {
    0x0003819c addlt r7, r2, -1                                  |         r7 = r2 + -1;
                                                                 |     }
    0x000381a0 add.w r7, r7, r7, lsl 2                           |     r7 += (r7 << 2);
    0x000381a4 add.w r4, r3, r4, lsl 2                           |     r4 = r3 + (r4 << 2);
    0x000381a8 add.w r3, r3, r7, lsl 2                           |     r3 += (r7 << 2);
    0x000381ac str r2, [r4, 8]                                   |     *((r4 + 8)) = r2;
    0x000381ae b 0x37eda                                         |     goto label_9;
                                                                 | label_37:
    0x000381b0 ldr r3, [pc, 0x1e4]                               |     
    0x000381b2 add r3, pc                                        |     r3 = 0x7054e;
    0x000381b4 adds r3, 4                                        |     r3 += 4;
    0x000381b6 b 0x37ea4                                         |     goto label_10;
                                                                 | label_32:
    0x000381b8 ldrh r4, [r5, 0x32]                               |     r4 = *((r5 + 0x32));
    0x000381ba ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000381bc subs r7, r4, 1                                    |     r7 = r4 - 1;
    0x000381be ldr r2, [r3]                                      |     r2 = *(r3);
    0x000381c0 b 0x37d04                                         |     goto label_11;
                                                                 | label_31:
    0x000381c2 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000381c4 and r3, r3, 1                                     |     r3 &= 1;
                                                                 | label_21:
    0x000381c8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000381ca cmp r2, 0                                         |     
    0x000381cc ite ne                                            |     
                                                                 |     if (r2 == 0) {
    0x000381ce movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x000381d0 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x000381d4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000381d6 beq.w 0x37b7c                                     |         goto label_0;
                                                                 |     }
    0x000381da movs r5, 0                                        |     r5 = 0;
    0x000381dc ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000381de ldr r2, [sp, 0xb4]                                |     r2 = *(arg_b4h);
    0x000381e0 movs r1, 0x62                                     |     r1 = 0x62;
    0x000381e2 mov r0, sb                                        |     r0 = sb;
    0x000381e4 str r5, [sp]                                      |     *(sp) = r5;
    0x000381e6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000381ea ldrd r4, r3, [sb, 0x6c]                           |     __asm ("ldrd r4, r3, [sb, 0x6c]");
    0x000381ee cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x000381f0 bge.w 0x38350                                     |         goto label_46;
                                                                 |     }
    0x000381f4 add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x000381f8 ldr.w r1, [sb, 0x68]                              |     r1 = *((sb + 0x68));
    0x000381fc ldr r6, [sp, 0x68]                                |     r6 = var_68h;
    0x000381fe adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00038200 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00038202 str.w r2, [sb, 0x6c]                              |     __asm ("str.w r2, [sb, 0x6c]");
    0x00038206 movs r0, 0x10                                     |     r0 = 0x10;
    0x00038208 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x0003820a strd r6, r5, [r2, 4]                              |     __asm ("strd r6, r5, [r2, 4]");
    0x0003820e strd r5, r5, [r2, 0xc]                            |     __asm ("strd r5, r5, [r2, 0xc]");
    0x00038212 str r0, [r1, r3]                                  |     *((r1 + r3)) = r0;
                                                                 | label_22:
    0x00038214 movs r5, 0                                        |     r5 = 0;
    0x00038216 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00038218 mov r2, r5                                        |     r2 = r5;
    0x0003821a movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0003821c str r5, [sp]                                      |     *(sp) = r5;
    0x0003821e mov r0, sb                                        |     r0 = sb;
    0x00038220 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00038224 ldr r3, [pc, 0x174]                               |     
    0x00038226 movs r1, 0x61                                     |     r1 = 0x61;
    0x00038228 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x0003822a mov r0, sb                                        |     r0 = sb;
    0x0003822c ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0003822e add r3, pc                                        |     r3 = 0x705ce;
    0x00038230 str r5, [sp, 8]                                   |     var_8h = r5;
    0x00038232 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00038234 movs r3, 3                                        |     r3 = 3;
    0x00038236 str r6, [sp]                                      |     *(sp) = r6;
    0x00038238 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0003823c str r5, [sp]                                      |     *(sp) = r5;
    0x0003823e movs r1, 0x7f                                     |     r1 = 0x7f;
    0x00038240 ldr r5, [sp, 0x40]                                |     r5 = var_40h;
    0x00038242 mov r0, sb                                        |     r0 = sb;
    0x00038244 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x00038246 mov r2, r5                                        |     r2 = r5;
    0x00038248 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0003824c ldr r1, [sp, 0xb0]                                |     r1 = *(arg_b0h);
    0x0003824e mov r3, r6                                        |     r3 = r6;
    0x00038250 mov r2, r5                                        |     r2 = r5;
    0x00038252 mov r0, sb                                        |     r0 = sb;
    0x00038254 str r1, [sp]                                      |     *(sp) = r1;
    0x00038256 movs r1, 0x80                                     |     r1 = 0x80;
    0x00038258 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0003825c ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x00038260 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00038262 ble 0x38276                                       |         
    0x00038264 ldr.w r2, [sb, 0x68]                              |         r2 = *((sb + 0x68));
    0x00038268 add.w r1, r3, r3, lsl 2                           |         r1 = r3 + (r3 << 2);
    0x0003826c add.w r2, r2, r1, lsl 2                           |         r2 += (r1 << 2);
    0x00038270 movs r1, 8                                        |         r1 = 8;
    0x00038272 strh r1, [r2, -0x12]                              |         *((r2 - 0x12)) = r1;
                                                                 |     }
    0x00038276 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x0003827a cmp r4, 0                                         |     
    0x0003827c it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x0003827e addlt r4, r3, -1                                  |         r4 = r3 + -1;
                                                                 |     }
    0x00038282 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00038286 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00038288 bne 0x38344                                       |         goto label_47;
                                                                 |     }
    0x0003828a ldr.w r2, [sb, 0x68]                              |     r2 = *((sb + 0x68));
    0x0003828e add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00038292 add.w r2, r2, r4, lsl 2                           |     r2 += (r4 << 2);
                                                                 | label_20:
    0x00038296 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x00038298 b 0x37b7c                                         |     goto label_0;
                                                                 | label_44:
    0x0003829a ldr r3, [pc, 0x104]                               |     
    0x0003829c add r3, pc                                        |     r3 = 0x70642;
    0x0003829e adds r3, 4                                        |     r3 += 4;
    0x000382a0 b 0x380ee                                         |     goto label_12;
                                                                 | label_42:
    0x000382a2 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x000382a4 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000382a6 bne.w 0x37fdc                                     |         goto label_13;
                                                                 |     }
    0x000382aa ldrb.w r3, [r5, 0x36]                             |     r3 = *((r5 + 0x36));
    0x000382ae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000382b0 beq.w 0x37fdc                                     |         goto label_13;
                                                                 |     }
    0x000382b4 movs r3, 0                                        |     r3 = 0;
    0x000382b6 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000382b8 str r3, [sp]                                      |     *(sp) = r3;
    0x000382ba movs r1, 0x33                                     |     r1 = 0x33;
    0x000382bc ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x000382be mov r0, sb                                        |     r0 = sb;
    0x000382c0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000382c4 b 0x37fdc                                         |     goto label_13;
                                                                 | label_27:
    0x000382c6 str r1, [sp]                                      |     *(sp) = r1;
    0x000382c8 movs r3, 0                                        |     r3 = 0;
    0x000382ca ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x000382cc mov r0, fp                                        |     r0 = fp;
    0x000382ce bl 0x2ba0c                                        |     fcn_0002ba0c (r0, r1, r2, r3, r4);
    0x000382d2 b 0x37bee                                         |     goto label_14;
                                                                 | label_26:
    0x000382d4 str r4, [sp, 0x50]                                |     var_50h = r4;
                                                                 | label_23:
    0x000382d6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000382d8 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x000382da mov r0, fp                                        |     r0 = fp;
    0x000382dc str r3, [sp]                                      |     *(sp) = r3;
    0x000382de ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000382e0 ldr r2, [r3]                                      |     r2 = *(r3);
    0x000382e2 movs r3, 0                                        |     r3 = 0;
    0x000382e4 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x000382e8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000382ea bne.w 0x37b7c                                     |         goto label_0;
                                                                 |     }
    0x000382ee ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000382f0 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x000382f2 ldr r1, [r3]                                      |     r1 = *(r3);
    0x000382f4 b 0x37bdc                                         |     goto label_15;
                                                                 | label_45:
    0x000382f6 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x000382f8 mov r1, sb                                        |     r1 = sb;
    0x000382fa rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x000382fc bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00038300 b 0x38166                                         |     goto label_16;
                                                                 | label_35:
    0x00038302 movs r1, 0x32                                     |     r1 = 0x32;
    0x00038304 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00038306 mov r3, r7                                        |     r3 = r7;
    0x00038308 mov r0, sb                                        |     r0 = sb;
    0x0003830a str r7, [sp]                                      |     *(sp) = r7;
    0x0003830c bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00038310 ldrd r4, r1, [sb, 0x6c]                           |     __asm ("ldrd r4, r1, [sb, 0x6c]");
    0x00038314 mov r6, r0                                        |     r6 = r0;
    0x00038316 b 0x37e3c                                         |     goto label_17;
                                                                 | label_36:
    0x00038318 movs r3, 0                                        |     r3 = 0;
    0x0003831a ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0003831c movs r1, 0xf                                      |     r1 = 0xf;
    0x0003831e mov r0, sb                                        |     r0 = sb;
    0x00038320 str r3, [sp]                                      |     *(sp) = r3;
    0x00038322 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00038326 mov r4, r0                                        |     r4 = r0;
    0x00038328 b 0x37e68                                         |     goto label_18;
                                                                 | label_41:
    0x0003832a mov r3, r4                                        |     r3 = r4;
    0x0003832c mov r2, r4                                        |     r2 = r4;
    0x0003832e movs r1, 8                                        |     r1 = 8;
    0x00038330 mov r0, sb                                        |     r0 = sb;
    0x00038332 str r4, [sp]                                      |     *(sp) = r4;
    0x00038334 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00038338 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x0003833c add.w sl, r3, -1                                  |     sl = r3 + -1;
    0x00038340 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00038342 b 0x37fd6                                         |     goto label_19;
                                                                 | label_47:
    0x00038344 ldr r2, [pc, 0x5c]                                |     
    0x00038346 add r2, pc                                        |     r2 = 0x706ee;
    0x00038348 adds r2, 4                                        |     r2 += 4;
    0x0003834a b 0x38296                                         |     goto label_20;
                                                                 | label_28:
    0x0003834c movs r3, 1                                        |     r3 = 1;
    0x0003834e b 0x381c8                                         |     goto label_21;
                                                                 | label_46:
    0x00038350 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x00038352 mov r3, r5                                        |     r3 = r5;
    0x00038354 movs r1, 0x10                                     |     r1 = 0x10;
    0x00038356 mov r0, sb                                        |     r0 = sb;
    0x00038358 str r5, [sp]                                      |     *(sp) = r5;
    0x0003835a bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0003835e mov r4, r0                                        |     r4 = r0;
    0x00038360 b 0x38214                                         |     goto label_22;
                                                                 | label_25:
    0x00038362 mov.w r2, 0x8000                                  |     r2 = 0x8000;
    0x00038366 movs r4, 0                                        |     r4 = 0;
    0x00038368 movt r2, 0xffff                                   |     r2 = (r2 & 0xFFFF) | 0xffff0000;
    0x0003836c sub.w r3, r3, 0x80000                             |     r3 -= 0x80000;
    0x00038370 movt r4, 0xfff8                                   |     r4 = (r4 & 0xFFFF) | 0xfff80000;
    0x00038374 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00038376 b 0x382d6                                         |     goto label_23;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x383a8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x38a3c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00038a3c ()                                      | void fcn_00038a3c (int16_t arg_10h, int16_t arg_2e8h, int16_t arg1, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_sp_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_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;
                                                                 |     int32_t var_30h_2;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int32_t var_3ch_2;
                                                                 |     int16_t var_44h;
                                                                 |     int32_t var_44h_2;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int32_t var_4h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_b0h;
                                                                 |     int32_t var_ch_3;
                                                                 |     int32_t var_2h;
                                                                 |     int16_t var_e0h;
                                                                 |     int16_t var_e8h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_10h;
                                                                 |     int32_t var_12h;
                                                                 |     int16_t var_118h;
                                                                 |     int8_t var_8h_3;
                                                                 |     int32_t var_ch_4;
                                                                 |     int32_t var_14h_2;
                                                                 |     int32_t var_18h_2;
                                                                 |     int16_t var_2bch;
                                                                 |     int16_t var_2c4h;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00038a3c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00038a40 sub.w sp, sp, 0x2c4                               |     
    0x00038a44 strd r2, r3, [sp, 0xc]                            |     __asm ("strd r2, r3, [var_ch]");
    0x00038a48 mov sb, r0                                        |     sb = r0;
    0x00038a4a movs r1, 0                                        |     r1 = 0;
    0x00038a4c ldr r2, [pc, 0x2f0]                               |     
    0x00038a4e ldr r4, [r0, 4]                                   |     r4 = *((r0 + 4));
    0x00038a50 ldr r3, [pc, 0x2f0]                               |     r3 = *(0x38d44);
    0x00038a52 add r2, pc                                        |     r2 = 0x71796;
    0x00038a54 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00038a56 str r4, [sp, 0x24]                                |     var_24h = r4;
    0x00038a58 ldr r3, [r2, r3]                                  |     
    0x00038a5a movs r2, 0x38                                     |     r2 = 0x38;
    0x00038a5c ldr.w fp, [r0, 8]                                 |     fp = *((r0 + 8));
    0x00038a60 ldr r3, [r3]                                      |     r3 = *(0x71796);
    0x00038a62 str r3, [sp, 0x2bc]                               |     var_2bch = r3;
    0x00038a64 mov.w r3, 0                                       |     r3 = 0;
    0x00038a68 add r3, sp, 0x70                                  |     r3 += var_70h;
    0x00038a6a mov r0, r3                                        |     r0 = r3;
    0x00038a6c str r3, [sp, 8]                                   |     var_8h = r3;
    0x00038a6e ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00038a70 ldr r4, [r4, 0xc]                                 |     r4 = *((r4 + 0xc));
    0x00038a72 mov r6, r3                                        |     r6 = r3;
    0x00038a74 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00038a78 ldrb.w r2, [fp, 0x10]                             |     r2 = *(arg_10h);
    0x00038a7c ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00038a7e adds r3, 8                                        |     r3 += 8;
    0x00038a80 add.w ip, r3, r2, lsl 6                           |     
    0x00038a84 ldrb.w r3, [ip, 0x24]                             |     r3 = *((ip + 0x24));
    0x00038a88 ldr.w r2, [ip, 0x28]                              |     r2 = *((ip + 0x28));
    0x00038a8c lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
    0x00038a8e str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 |     if (r1 < r3) {
    0x00038a90 bmi 0x38aca                                       |         goto label_10;
                                                                 |     }
    0x00038a92 add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x00038a96 add.w lr, r6, r4, lsl 4                           |     lr = r6 + (r4 << 4);
    0x00038a9a cmp r6, lr                                        |     
                                                                 |     if (r6 >= lr) {
    0x00038a9c bhs 0x38aca                                       |         goto label_10;
                                                                 |     }
    0x00038a9e mov r5, lr                                        |     r5 = lr;
    0x00038aa0 mov r4, fp                                        |     r4 = fp;
    0x00038aa2 mov sl, sb                                        |     sl = sb;
    0x00038aa4 str.w ip, [sp, 0x28]                              |     __asm ("str.w ip, [var_28h]");
                                                                 |     do {
    0x00038aa8 ldrh r3, [r6, 0xc]                                |         r3 = *((r6 + 0xc));
    0x00038aaa lsls r2, r3, 0x16                                 |         r2 = r3 << 0x16;
                                                                 |         if (r2 < r3) {
    0x00038aac bpl 0x38ac4                                       |             
    0x00038aae ldr r2, [r6, 0x18]                                |             r2 = *((r6 + 0x18));
    0x00038ab0 ldrd r0, r1, [r4, 8]                              |             __asm ("ldrd r0, r1, [r4, 8]");
    0x00038ab4 ldr.w r3, [r2, 0x1a0]                             |             r3 = *((r2 + 0x1a0));
    0x00038ab8 ands r3, r0                                       |             r3 &= r0;
    0x00038aba ldr.w r0, [r2, 0x1a4]                             |             r0 = *((r2 + 0x1a4));
    0x00038abe ands r0, r1                                       |             r0 &= r1;
    0x00038ac0 orrs r3, r0                                       |             r3 |= r0;
                                                                 |             if (r3 != r0) {
    0x00038ac2 bne 0x38aea                                       |                 goto label_11;
                                                                 |             }
                                                                 |         }
                                                                 | label_7:
    0x00038ac4 adds r6, 0x30                                     |         r6 += 0x30;
    0x00038ac6 cmp r5, r6                                        |         
    0x00038ac8 bhi 0x38aa8                                       |         
                                                                 |     } while (r5 > r6);
                                                                 | label_10:
    0x00038aca movs r0, 0                                        |     r0 = 0;
                                                                 | label_5:
    0x00038acc ldr r2, [pc, 0x278]                               |     
    0x00038ace ldr r3, [pc, 0x274]                               |     r3 = *(0x38d46);
    0x00038ad0 add r2, pc                                        |     r2 = 0x7181c;
    0x00038ad2 ldr r3, [r2, r3]                                  |     r3 = *(0x7181c);
    0x00038ad4 ldr r2, [r3]                                      |     r2 = *(0x7181c);
    0x00038ad6 ldr r3, [sp, 0x2bc]                               |     r3 = var_2bch;
    0x00038ad8 eors r2, r3                                       |     r2 ^= r3;
    0x00038ada mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00038ade bne.w 0x38d3a                                     |         goto label_12;
                                                                 |     }
    0x00038ae2 add.w sp, sp, 0x2c4                               |     
    0x00038ae6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
    0x00038ae8 ldrh r0, [r6, 0x3e]                               |     r0 = *((r6 + 0x3e));
                                                                 | label_11:
    0x00038aea ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00038aec mov sb, sl                                        |     sb = sl;
    0x00038aee ldr.w r8, [r2, 0x18]                              |     r8 = *((r2 + 0x18));
    0x00038af2 add.w lr, sp, 0x58                                |     lr += var_58h;
    0x00038af6 mov r7, lr                                        |     r7 = lr;
    0x00038af8 add.w fp, sp, 0xa8                                |     
    0x00038afc add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00038b00 add.w ip, r8, r3, lsl 4                           |     
    0x00038b04 ldm.w sb!, {r0, r1, r2, r3}                       |     r0 = *(sb!);
                                                                 |     r1 = *((sb! + 4));
                                                                 |     r2 = *((sb! + 8));
                                                                 |     r3 = *((sb! + 12));
    0x00038b08 cmp r8, ip                                        |     
    0x00038b0a stm r7!, {r0, r1, r2, r3}                         |     *(r7!) = r0;
                                                                 |     *((r7! + 4)) = r1;
                                                                 |     *((r7! + 8)) = r2;
                                                                 |     *((r7! + 12)) = r3;
    0x00038b0c ldm.w sb, {r0, r1}                                |     r0 = *(sb);
                                                                 |     r1 = *((sb + 4));
    0x00038b10 str.w fp, [sp, 0x64]                              |     __asm ("str.w fp, [var_64h]");
    0x00038b14 stm.w r7, {r0, r1}                                |     *(r7) = r0;
                                                                 |     *((r7 + 4)) = r1;
                                                                 |     if (r8 >= ip) {
    0x00038b18 bhs.w 0x38d18                                     |         goto label_13;
                                                                 |     }
    0x00038b1c movs r3, 0                                        |     r3 = 0;
    0x00038b1e add r2, sp, 0x118                                 |     r2 += var_118h;
    0x00038b20 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00038b22 movs r3, 1                                        |     r3 = 1;
    0x00038b24 strd r6, sl, [sp, 0x44]                           |     __asm ("strd r6, sl, [var_44h]");
    0x00038b28 mov sb, r2                                        |     sb = r2;
    0x00038b2a strd r5, r4, [sp, 0x3c]                           |     __asm ("strd r5, r4, [var_3ch]");
    0x00038b2e mov sl, r3                                        |     sl = r3;
    0x00038b30 mov r4, r8                                        |     r4 = r8;
    0x00038b32 mov r6, fp                                        |     r6 = fp;
    0x00038b34 mov r8, lr                                        |     r8 = lr;
    0x00038b36 str.w ip, [sp, 0x2c]                              |     __asm ("str.w ip, [var_2ch]");
    0x00038b3a b 0x38b92                                         |     
                                                                 |     while (r3 < r3) {
    0x00038b3c ldr r3, [r4, 0x18]                                |         r3 = *((r4 + 0x18));
                                                                 | label_1:
    0x00038b3e str.w r3, [r8, 4]                                 |         __asm ("str.w r3, [var_4h]");
    0x00038b42 mov.w r3, 0                                       |         r3 = 0;
    0x00038b46 strh r3, [r6]                                     |         *(r6) = r3;
    0x00038b48 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00038b4a ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00038b4c ldrb.w r3, [r3, 0x2b]                             |         r3 = *((r3 + 0x2b));
    0x00038b50 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00038b52 beq 0x38bc0                                       |             goto label_14;
                                                                 |         }
    0x00038b54 ldrd r2, r3, [sp, 0xc]                            |         __asm ("ldrd r2, r3, [var_ch]");
    0x00038b58 mov r0, r8                                        |         r0 = r8;
    0x00038b5a bl 0x383a8                                        |         fcn_000383a8 (r0, r1, r2);
    0x00038b5e str r0, [sp, 0x14]                                |         var_14h = r0;
    0x00038b60 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00038b62 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00038b64 beq 0x38bda                                       |             goto label_15;
                                                                 |         }
                                                                 | label_2:
    0x00038b66 ldrh r5, [r6]                                     |         r5 = *(r6);
    0x00038b68 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00038b6a beq.w 0x38d06                                     |             goto label_16;
                                                                 |         }
    0x00038b6e ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00038b70 cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x00038b74 beq 0x38bf0                                       |             goto label_17;
                                                                 |         }
    0x00038b76 strh r5, [r3]                                     |         *(r3) = r5;
    0x00038b78 lsls r2, r5, 4                                    |         r2 = r5 << 4;
    0x00038b7a movs r3, 0x30                                     |         r3 = 0x30;
    0x00038b7c add r1, sp, 0xb0                                  |         r1 += var_b0h;
    0x00038b7e add r0, sp, 0x78                                  |         r0 += var_78h;
    0x00038b80 blx 0x9410                                        |         fcn_00009410 ();
                                                                 | label_3:
    0x00038b84 mov.w sl, 0                                       |         sl = 0;
                                                                 | label_0:
    0x00038b88 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00038b8a adds r4, 0x30                                     |         r4 += 0x30;
    0x00038b8c cmp r3, r4                                        |         
                                                                 |         if (r3 < r4) {
    0x00038b8e bls.w 0x38c9c                                     |             goto label_18;
                                                                 |         }
    0x00038b92 ldrh r3, [r4, 0xc]                                |         r3 = *((r4 + 0xc));
    0x00038b94 lsls r3, r3, 0x15                                 |         r3 <<= 0x15;
    0x00038b96 bmi 0x38b3c                                       |         
                                                                 |     }
    0x00038b98 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x00038b9a ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00038b9c cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00038b9e bne 0x38b88                                       |         goto label_0;
                                                                 |     }
    0x00038ba0 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00038ba2 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00038ba4 str.w r4, [sb, 0x18]                              |     __asm ("str.w r4, [var_18h_2]");
    0x00038ba8 strd r3, r2, [sb]                                 |     __asm ("strd r3, r2, [sb]");
    0x00038bac movs r2, 1                                        |     r2 = 1;
    0x00038bae str.w r2, [sb, 0xc]                               |     __asm ("str.w r2, [var_ch_4]");
    0x00038bb2 mov r3, sb                                        |     r3 = sb;
    0x00038bb4 str.w r2, [sb, 0x14]                              |     __asm ("str.w r2, [var_14h_2]");
    0x00038bb8 movs r2, 0x2c                                     |     r2 = 0x2c;
    0x00038bba strb.w r2, [sb, 8]                                |     var_8h_3 = r2;
    0x00038bbe b 0x38b3e                                         |     goto label_1;
                                                                 | label_14:
    0x00038bc0 ldrd r2, r3, [sp, 0x2e8]                          |     __asm ("ldrd r2, r3, [arg_2e8h]");
    0x00038bc4 mov r0, r8                                        |     r0 = r8;
    0x00038bc6 strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x00038bca ldrd r2, r3, [sp, 0xc]                            |     __asm ("ldrd r2, r3, [var_ch]");
    0x00038bce bl 0x34038                                        |     fcn_00034038 (r0, r1, r2, r3, r4, r5, r6);
    0x00038bd2 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00038bd4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00038bd6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00038bd8 bne 0x38b66                                       |         goto label_2;
                                                                 |     }
                                                                 | label_15:
    0x00038bda ldrd r2, r3, [sp, 0x2e8]                          |     __asm ("ldrd r2, r3, [arg_2e8h]");
    0x00038bde mov r0, r8                                        |     r0 = r8;
    0x00038be0 strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x00038be4 ldrd r2, r3, [sp, 0xc]                            |     __asm ("ldrd r2, r3, [var_ch]");
    0x00038be8 bl 0x38a3c                                        |     fcn_00038a3c (r0, r1, r2, r3, r4);
    0x00038bec str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00038bee b 0x38b66                                         |     goto label_2;
                                                                 | label_17:
    0x00038bf0 ldrh.w fp, [r3]                                   |     fp = *(r3);
    0x00038bf4 add r1, sp, 0x78                                  |     r1 += var_78h;
    0x00038bf6 movs r3, 0x30                                     |     r3 = 0x30;
    0x00038bf8 add r0, sp, 0xe8                                  |     r0 += var_e8h;
    0x00038bfa add r7, sp, 0xe0                                  |     r7 += var_e0h;
    0x00038bfc lsl.w r2, fp, 4                                   |     r2 = fp << 4;
    0x00038c00 blx 0x9410                                        |     fcn_00009410 ();
    0x00038c04 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00038c06 strh.w sl, [r3]                                   |     *(r3) = sl;
    0x00038c0a cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00038c0e beq 0x38b84                                       |         goto label_3;
                                                                 |     }
    0x00038c10 str.w fp, [sp, 0x38]                              |     __asm ("str.w fp, [var_38h]");
    0x00038c14 mov r1, sl                                        |     r1 = sl;
    0x00038c16 mov fp, r6                                        |     
    0x00038c18 mov r3, r5                                        |     r3 = r5;
    0x00038c1a mov r6, r7                                        |     r6 = r7;
    0x00038c1c str r4, [sp, 0x4c]                                |     var_4ch = r4;
    0x00038c1e str.w r8, [sp, 0x50]                              |     __asm ("str.w r8, [var_50h]");
    0x00038c22 str.w sb, [sp, 0x54]                              |     __asm ("str.w sb, [var_54h]");
                                                                 |     if (r3 == 0) {
                                                                 | label_4:
    0x00038c26 cbz r3, 0x38c80                                   |         goto label_19;
                                                                 |     }
    0x00038c28 ldrd sl, r3, [r6, 8]                              |     __asm ("ldrd sl, r3, [var_e8h]");
    0x00038c2c mov r4, fp                                        |     r4 = fp;
    0x00038c2e ldrsh.w sb, [r6, 0x10]                            |     sb = var_10h;
    0x00038c32 movs r7, 0                                        |     r7 = 0;
    0x00038c34 strd r6, r1, [sp, 0x30]                           |     __asm ("strd r6, r1, [var_30h]");
    0x00038c38 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00038c3a ldrsh.w r3, [r6, 0x12]                            |     r3 = var_12h;
    0x00038c3e str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     do {
    0x00038c40 ldr r2, [r4, 8]                                   |         r2 = var_b0h;
    0x00038c42 mov r0, sb                                        |         r0 = sb;
    0x00038c44 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00038c46 adds r7, 1                                        |         r7++;
    0x00038c48 ldr r6, [r4, 0xc]                                 |         r6 = var_ch_3;
    0x00038c4a adds r4, 0x10                                     |         r4 += 0x10;
    0x00038c4c ldrsh.w r1, [r4]                                  |         r1 = *(r4);
    0x00038c50 orr.w r5, sl, r2                                  |         r5 = sl | r2;
    0x00038c54 orrs r6, r3                                       |         r6 |= r3;
    0x00038c56 bl 0xf330                                         |         fcn_0000f330 (r0, r1);
    0x00038c5a ldrsh.w r1, [r4, 2]                               |         r1 = var_2h;
    0x00038c5e mov r8, r0                                        |         r8 = r0;
    0x00038c60 ldr r0, [sp, 0x18]                                |         r0 = var_18h;
    0x00038c62 bl 0xf330                                         |         fcn_0000f330 (r0, r1);
    0x00038c66 mov r3, r6                                        |         r3 = r6;
    0x00038c68 strd r8, r0, [sp]                                 |         __asm ("strd r8, r0, [sp]");
    0x00038c6c mov r2, r5                                        |         r2 = r5;
    0x00038c6e ldr r0, [sp, 8]                                   |         r0 = var_8h;
    0x00038c70 bl 0x10938                                        |         fcn_00010938 (r0, r1, r2, r3, r4);
    0x00038c74 ldrh.w r3, [fp]                                   |         r3 = *(fp);
    0x00038c78 cmp r3, r7                                        |         
    0x00038c7a bgt 0x38c40                                       |         
                                                                 |     } while (r3 > r7);
    0x00038c7c ldrd r6, r1, [sp, 0x30]                           |     __asm ("ldrd r6, r1, [var_30h]");
                                                                 | label_19:
    0x00038c80 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00038c82 adds r1, 1                                        |     r1++;
    0x00038c84 cmp r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00038c86 bge 0x38c90                                       |         
    0x00038c88 ldrh.w r3, [fp]                                   |         r3 = *(fp);
    0x00038c8c adds r6, 0x10                                     |         r6 += 0x10;
    0x00038c8e b 0x38c26                                         |         goto label_4;
                                                                 |     }
    0x00038c90 ldrd r4, r8, [sp, 0x4c]                           |     __asm ("ldrd r4, r8, [var_4ch]");
    0x00038c94 mov r6, fp                                        |     r6 = fp;
    0x00038c96 ldr.w sb, [sp, 0x54]                              |     sb = var_54h;
    0x00038c9a b 0x38b84                                         |     goto label_3;
                                                                 | label_18:
    0x00038c9c ldrd r5, r4, [sp, 0x3c]                           |     __asm ("ldrd r5, r4, [var_3ch]");
    0x00038ca0 ldrd r6, sl, [sp, 0x44]                           |     __asm ("ldrd r6, sl, [var_44h]");
                                                                 | label_8:
    0x00038ca4 ldr r2, [r4, 0x34]                                |     r2 = *((r4 + 0x34));
    0x00038ca6 movs r3, 0                                        |     r3 = 0;
    0x00038ca8 movs r1, 1                                        |     r1 = 1;
    0x00038caa strh r1, [r4, 0x2c]                               |     *((r4 + 0x2c)) = r1;
    0x00038cac str r6, [r2]                                      |     *(r2) = r6;
    0x00038cae strh r3, [r4, 0x12]                               |     *((r4 + 0x12)) = r3;
    0x00038cb0 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00038cb2 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x00038cb4 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x00038cb6 str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x00038cb8 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x00038cba mov.w r3, 0x2000                                  |     r3 = 0x2000;
    0x00038cbe str r3, [r4, 0x28]                                |     *((r4 + 0x28)) = r3;
    0x00038cc0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00038cc2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00038cc4 bne 0x38d36                                       |         goto label_20;
                                                                 |     }
                                                                 | label_9:
    0x00038cc6 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00038cc8 mov.w fp, 0                                       |     
    0x00038ccc ldrh.w r8, [r3]                                   |     r8 = *(r3);
    0x00038cd0 mov sb, r3                                        |     sb = r3;
    0x00038cd2 b 0x38d00                                         |     goto label_21;
                                                                 | label_6:
    0x00038cd4 ldrh.w r3, [sb, 0x10]                             |     r3 = *((sb + 0x10));
    0x00038cd8 add.w sb, sb, 0x10                                |     sb += 0x10;
    0x00038cdc mov r1, r4                                        |     r1 = r4;
    0x00038cde mov r0, sl                                        |     r0 = sl;
    0x00038ce0 add.w fp, fp, 1                                   |     
    0x00038ce4 adds r3, 1                                        |     r3++;
    0x00038ce6 strh r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
    0x00038ce8 ldrh.w r3, [sb, 2]                                |     r3 = *((sb + 2));
    0x00038cec strh r3, [r4, 0x16]                               |     *((r4 + 0x16)) = r3;
    0x00038cee ldrd r2, r3, [sb, -0x8]                           |     __asm ("ldrd r2, r3, [sb, -0x8]");
    0x00038cf2 strd r2, r3, [r4]                                 |     __asm ("strd r2, r3, [r4]");
    0x00038cf6 bl 0x1d914                                        |     r0 = fcn_0001d914 (r0, r1);
    0x00038cfa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00038cfc bne.w 0x38acc                                     |         goto label_5;
                                                                 |     }
                                                                 | label_21:
    0x00038d00 cmp r8, fp                                        |     
                                                                 |     if (r8 > fp) {
    0x00038d02 bgt 0x38cd4                                       |         goto label_6;
                                                                 |     }
    0x00038d04 b 0x38ac4                                         |     goto label_7;
                                                                 | label_16:
    0x00038d06 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00038d08 mov sb, r5                                        |     sb = r5;
    0x00038d0a ldrd r6, sl, [sp, 0x44]                           |     __asm ("ldrd r6, sl, [var_44h]");
    0x00038d0e ldrd r5, r4, [sp, 0x3c]                           |     __asm ("ldrd r5, r4, [var_3ch]");
    0x00038d12 strh.w sb, [r3]                                   |     *(r3) = sb;
    0x00038d16 b 0x38ca4                                         |     goto label_8;
                                                                 | label_13:
    0x00038d18 ldr r2, [r4, 0x34]                                |     r2 = *((r4 + 0x34));
    0x00038d1a movs r3, 0                                        |     r3 = 0;
    0x00038d1c movs r1, 1                                        |     r1 = 1;
    0x00038d1e strh r1, [r4, 0x2c]                               |     *((r4 + 0x2c)) = r1;
    0x00038d20 str r6, [r2]                                      |     *(r2) = r6;
    0x00038d22 strh r3, [r4, 0x12]                               |     *((r4 + 0x12)) = r3;
    0x00038d24 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00038d26 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x00038d28 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x00038d2a str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x00038d2c str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x00038d2e mov.w r3, 0x2000                                  |     r3 = 0x2000;
    0x00038d32 str r3, [r4, 0x28]                                |     *((r4 + 0x28)) = r3;
    0x00038d34 b 0x38cc6                                         |     goto label_9;
                                                                 | label_20:
    0x00038d36 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00038d38 b 0x38acc                                         |     goto label_5;
                                                                 | label_12:
    0x00038d3a blx 0x9b44                                        |     fcn_00009b44 ();
    0x00038d3e nop                                               |     
    0x00038d40 strh r6, [r5, 4]                                  |     *((r5 + 4)) = r6;
    0x00038d42 movs r6, r0                                       |     r6 = r0;
    0x00038d44 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00038d46 movs r0, r0                                       |     
    0x00038d48 strh r0, [r6]                                     |     *(r6) = r0;
    0x00038d4a movs r6, r0                                       |     r6 = r0;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3c3fc */
                                                 | #include <stdint.h>
                                                 |  
                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                 |  
    ; (fcn) fcn.0003c3fc ()                      | void fcn_0003c3fc (int16_t arg_230h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                 |     int16_t var_4h;
                                                 |     int16_t var_2ch;
                                                 |     int16_t var_30h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
    0x0003c3fc invalid                           |     
    0x0003c400 mov r6, r2                        |     r6 = r2;
    0x0003c402 mov r0, r2                        |     r0 = r2;
    0x0003c404 mov r5, r1                        |     r5 = r1;
    0x0003c406 sub sp, 0x34                      |     
    0x0003c408 ldr r2, [pc, 0xd4]                |     
    0x0003c40a ldr r3, [pc, 0xd8]                |     r3 = *(0x3c4e6);
    0x0003c40c ldr r1, [pc, 0xd8]                |     
    0x0003c40e add r2, pc                        |     r2 = 0x788f2;
    0x0003c410 ldr r3, [r2, r3]                  |     
    0x0003c412 add r1, pc                        |     r1 = 0x788fe;
    0x0003c414 ldr r3, [r3]                      |     r3 = *(0x788f2);
    0x0003c416 str r3, [sp, 0x2c]                |     var_2ch = r3;
    0x0003c418 mov.w r3, 0                       |     r3 = 0;
    0x0003c41c bl 0xdc4c                         |     r0 = fcn_0000dc4c (r0, r1);
                                                 |     if (r0 != 0) {
    0x0003c420 cbz r0, 0x3c426                   |         
    0x0003c422 ldrb r3, [r0]                     |         r3 = *(r0);
                                                 |         if (r3 != 0) {
    0x0003c424 cbnz r3, 0x3c47e                  |             goto label_1;
                                                 |         }
                                                 |     }
    0x0003c426 ldr r1, [pc, 0xc4]                |     
    0x0003c428 mov r0, r6                        |     r0 = r6;
    0x0003c42a add r1, pc                        |     r1 = 0x7891c;
    0x0003c42c bl 0xdc4c                         |     r0 = fcn_0000dc4c (r0, r1);
    0x0003c430 mov r7, r0                        |     r7 = r0;
                                                 |     if (r0 == 0) {
    0x0003c432 cbz r0, 0x3c460                   |         goto label_2;
                                                 |     }
    0x0003c434 blx 0x9e8c                        |     fcn_00009e8c ();
    0x0003c438 mov r2, r7                        |     r2 = r7;
    0x0003c43a bic r3, r0, 0xc0000000            |     r3 = BIT_MASK (r0, 0xc0000000);
    0x0003c43e mov r1, r5                        |     r1 = r5;
    0x0003c440 mov r0, r4                        |     r0 = r4;
    0x0003c442 blx 0xa208                        |     fcn_0000a208 ();
                                                 | label_0:
    0x0003c446 movs r0, 1                        |     r0 = 1;
                                                 |     do {
    0x0003c448 ldr r2, [pc, 0xa4]                |         
    0x0003c44a ldr r3, [pc, 0x98]                |         r3 = *(0x3c4e6);
    0x0003c44c add r2, pc                        |         r2 = 0x78940;
    0x0003c44e ldr r3, [r2, r3]                  |         r3 = *(0x78940);
    0x0003c450 ldr r2, [r3]                      |         r2 = *(0x78940);
    0x0003c452 ldr r3, [sp, 0x2c]                |         r3 = var_2ch;
    0x0003c454 eors r2, r3                       |         r2 ^= r3;
    0x0003c456 mov.w r3, 0                       |         r3 = 0;
                                                 |         if (r2 != r3) {
    0x0003c45a bne 0x3c4da                       |             goto label_3;
                                                 |         }
    0x0003c45c add sp, 0x34                      |         
    0x0003c45e pop {r4, r5, r6, r7, pc}          |         
                                                 | label_2:
    0x0003c460 ldr r1, [pc, 0x90]                |         
    0x0003c462 mov r0, r6                        |         r0 = r6;
    0x0003c464 add r1, pc                        |         r1 = 0x7895c;
    0x0003c466 bl 0xdc4c                         |         fcn_0000dc4c (r0, r1);
    0x0003c468 invalid                           |         
    0x0003c46c beq 0x3c448                       |         
                                                 |     } while (r2 == r3);
    0x0003c46e mov r2, r0                        |     r2 = r0;
    0x0003c470 mov.w r3, -1                      |     r3 = -1;
    0x0003c474 mov r1, r5                        |     r1 = r5;
    0x0003c476 mov r0, r4                        |     r0 = r4;
    0x0003c478 blx 0xa208                        |     fcn_0000a208 ();
    0x0003c47c b 0x3c446                         |     goto label_0;
                                                 | label_1:
    0x0003c47e ldr r6, [pc, 0x78]                |     
    0x0003c480 movs r3, 0                        |     r3 = 0;
    0x0003c482 add.w ip, r0, -1                  |     
    0x0003c486 mov r1, r3                        |     r1 = r3;
    0x0003c488 add r6, pc                        |     r6 = 0x78986;
    0x0003c48a b 0x3c4ba                         |     
                                                 |     while (r2 < r2) {
    0x0003c48c ubfx r2, r0, 6, 1                 |         r2 = (r0 >> 6) & ((1 << 1) - 1);
    0x0003c490 add.w r2, r2, r2, lsl 3           |         r2 += (r2 << 3);
    0x0003c494 add r2, r0                        |         r2 += r0;
    0x0003c496 lsls r0, r3, 0x1f                 |         r0 = r3 << 0x1f;
    0x0003c498 and r2, r2, 0xf                   |         r2 &= 0xf;
    0x0003c49c add.w r1, r2, r1, lsl 4           |         r1 = r2 + (r1 << 4);
    0x0003c4a0 itt mi                            |         
                                                 |         if (r0 >= r3) {
    0x0003c4a2 addmi r2, sp, 0x30                |             r2 += var_30h;
                                                 |         }
                                                 |         if (r0 >= r3) {
    0x0003c4a4 addmi r2, r2, r3, asr 1           |             r2 += (r3 >> 1);
                                                 |         }
    0x0003c4a8 add.w r3, r3, 1                   |         r3++;
    0x0003c4ac and r1, r1, 0xff                  |         r1 &= 0xff;
    0x0003c4b0 it mi                             |         
                                                 |         if (r0 >= r3) {
    0x0003c4b2 strbmi r1, [r2, -0x2c]            |             *((r2 - 0x2c)) = r1;
                                                 |         }
    0x0003c4b6 cmp r3, 0x50                      |         
                                                 |         if (r3 == 0x50) {
    0x0003c4b8 beq 0x3c4d6                       |             goto label_4;
                                                 |         }
    0x0003c4ba ldrb r0, [ip, 1]!                 |         r0 = *((ip += 1));
    0x0003c4be adds r2, r6, r0                   |         r2 = r6 + r0;
    0x0003c4c0 ldrb.w r2, [r2, 0x40]             |         r2 = *((r2 + 0x40));
    0x0003c4c4 lsls r2, r2, 0x1c                 |         r2 <<= 0x1c;
    0x0003c4c6 bmi 0x3c48c                       |         
                                                 |     }
    0x0003c4c8 asrs r3, r3, 1                    |     r3 >>= 1;
                                                 |     do {
    0x0003c4ca add r2, sp, 4                     |         r2 += var_4h;
    0x0003c4cc mov r1, r5                        |         r1 = r5;
    0x0003c4ce mov r0, r4                        |         r0 = r4;
    0x0003c4d0 blx 0xa208                        |         fcn_0000a208 ();
    0x0003c4d4 b 0x3c446                         |         goto label_0;
                                                 | label_4:
    0x0003c4d6 movs r3, 0x28                     |         r3 = 0x28;
    0x0003c4d8 b 0x3c4ca                         |         
                                                 |     } while (1);
                                                 | label_3:
    0x0003c4da blx 0x9b44                        |     fcn_00009b44 ();
    0x0003c4de nop                               |     
    0x0003c4e0 mov sl, lr                        |     sl = lr;
    0x0003c4e2 movs r6, r0                       |     r6 = r0;
    0x0003c4e4 lsls r0, r1, 0x13                 |     r0 = r1 << 0x13;
    0x0003c4e6 movs r0, r0                       |     
    0x0003c4e8 cmp r2, ip                        |     
    0x0003c4ea movs r5, r0                       |     r5 = r0;
    0x0003c4ec adds r3, 0x22                     |     r3 += 0x22;
    0x0003c4ee movs r5, r0                       |     r5 = r0;
    0x0003c4f0 mov ip, r6                        |     
    0x0003c4f2 movs r6, r0                       |     r6 = r0;
    0x0003c4f4 cmp r0, r3                        |     
    0x0003c4f6 movs r5, r0                       |     r5 = r0;
    0x0003c4f8 add r0, sp, 0x230                 |     r0 += arg_230h;
    0x0003c4fa movs r5, r0                       |     r5 = r0;
                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3cf48 */
                                                                     | #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.0003cf48 ()                                          | void fcn_0003cf48 (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;
                                                                     |     int32_t var_3ch_2;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_50h;
                                                                     |     int16_t var_54h;
                                                                     |     int16_t var_58h;
                                                                     |     int16_t var_5ch;
                                                                     |     int16_t var_60h;
                                                                     |     int16_t var_64h;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_70h;
                                                                     |     int16_t var_74h;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_7ch;
                                                                     |     int16_t var_84h;
                                                                     |     int16_t var_88h;
                                                                     |     int16_t var_8ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x0003cf48 invalid                                               |     
    0x0003cf4c ldr.w r3, [pc, 0x610]                                 |     
    0x0003cf50 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0003cf54 mov r4, r0                                            |     r4 = r0;
    0x0003cf56 add r2, pc                                            |     r2 += pc;
    0x0003cf58 vpush {d8}                                            |     __asm ("vpush {d8}");
    0x0003cf5c sub sp, 0x94                                          |     
    0x0003cf5e mov r5, r1                                            |     r5 = r1;
    0x0003cf60 ldr r3, [r2, r3]                                      |     r3 = *((r2 + r3));
    0x0003cf62 ldr r3, [r3]                                          |     r3 = *(0x3d560);
    0x0003cf64 str r3, [sp, 0x8c]                                    |     var_8ch = r3;
    0x0003cf66 mov.w r3, 0                                           |     r3 = 0;
    0x0003cf6a ldr r3, [r0, 0x18]                                    |     r3 = *((r0 + 0x18));
    0x0003cf6c cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0003cf6e ble 0x3d05c                                           |         goto label_23;
                                                                     |     }
    0x0003cf70 ldr r3, [r0, 0x20]                                    |     r3 = *((r0 + 0x20));
    0x0003cf72 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0003cf74 str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0003cf76 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003cf78 beq 0x3d05c                                           |         goto label_23;
                                                                     |     }
                                                                     | label_8:
    0x0003cf7a movs r7, 0                                            |     r7 = 0;
                                                                     | label_1:
    0x0003cf7c mov r1, r5                                            |     r1 = r5;
    0x0003cf7e mov r0, r4                                            |     r0 = r4;
    0x0003cf80 bl 0x12adc                                            |     r0 = fcn_00012adc (r0, r1);
    0x0003cf84 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003cf86 beq 0x3d038                                           |         goto label_24;
                                                                     |     }
                                                                     | label_7:
    0x0003cf88 ldrb.w r3, [r4, 0x32]                                 |     r3 = *((r4 + 0x32));
                                                                     |     if (r3 == 0) {
    0x0003cf8c cbnz r3, 0x3cf98                                      |         
    0x0003cf8e ldrb.w r3, [r4, 0x2e]                                 |         r3 = *((r4 + 0x2e));
    0x0003cf92 lsls r3, r3, 0x1e                                     |         r3 <<= 0x1e;
                                                                     |         if (r3 < r3) {
    0x0003cf94 bmi.w 0x3d0ce                                         |             goto label_25;
                                                                     |         }
                                                                     |     }
    0x0003cf98 ldrb.w r6, [r4, 0x2c]                                 |     r6 = *((r4 + 0x2c));
                                                                     |     if (r6 == 0) {
    0x0003cf9c cbnz r6, 0x3cfba                                      |         
    0x0003cf9e ldrb.w r1, [r4, 0x2b]                                 |         r1 = *((r4 + 0x2b));
                                                                     |         if (r1 == 0) {
    0x0003cfa2 cbnz r1, 0x3cfb8                                      |             
    0x0003cfa4 ldr r0, [r4, 4]                                       |             r0 = *((r4 + 4));
    0x0003cfa6 movs r2, 1                                            |             r2 = 1;
    0x0003cfa8 ldr r3, [r0]                                          |             r3 = *(r0);
    0x0003cfaa ldr r6, [r3, 0x38]                                    |             r6 = *((r3 + 0x38));
    0x0003cfac movs r3, 0xa                                          |             r3 = 0xa;
    0x0003cfae blx r6                                                |             r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0003cfb0 mov r7, r0                                            |             r7 = r0;
    0x0003cfb2 cmp r0, 0                                             |             
                                                                     |             if (r0 != 0) {
    0x0003cfb4 bne.w 0x3d130                                         |                 goto label_11;
                                                                     |             }
                                                                     |         }
                                                                     | label_3:
    0x0003cfb8 movs r6, 0                                            |         r6 = 0;
                                                                     |     }
                                                                     | label_2:
    0x0003cfba ldr r3, [r4, 0x18]                                    |     r3 = *((r4 + 0x18));
    0x0003cfbc movs r2, 1                                            |     r2 = 1;
    0x0003cfbe strb.w r2, [r4, 0x2c]                                 |     *((r4 + 0x2c)) = r2;
    0x0003cfc2 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0003cfc4 ble.w 0x3d118                                         |         goto label_26;
                                                                     |     }
    0x0003cfc8 ldr r3, [r4, 0x20]                                    |     r3 = *((r4 + 0x20));
    0x0003cfca ldr r3, [r3]                                          |     r3 = *(r3);
    0x0003cfcc str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0003cfce cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003cfd0 beq.w 0x3d118                                         |         goto label_26;
                                                                     |     }
                                                                     | label_5:
    0x0003cfd4 mov r1, r5                                            |     r1 = r5;
    0x0003cfd6 mov r0, r4                                            |     r0 = r4;
    0x0003cfd8 bl 0x12adc                                            |     r0 = fcn_00012adc (r0, r1);
    0x0003cfdc mov r7, r0                                            |     r7 = r0;
    0x0003cfde cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0003cfe0 bne.w 0x3d156                                         |         goto label_27;
                                                                     |     }
                                                                     |     if (r6 == 0) {
    0x0003cfe4 cbnz r6, 0x3cffe                                      |         
    0x0003cfe6 ldrb.w r3, [r4, 0x2b]                                 |         r3 = *((r4 + 0x2b));
    0x0003cfea strb.w r0, [r4, 0x2c]                                 |         *((r4 + 0x2c)) = r0;
                                                                     |         if (r3 != 0) {
    0x0003cfee cbnz r3, 0x3cffe                                      |             goto label_28;
                                                                     |         }
    0x0003cff0 ldr r0, [r4, 4]                                       |         r0 = *((r4 + 4));
    0x0003cff2 movs r3, 9                                            |         r3 = 9;
    0x0003cff4 movs r2, 1                                            |         r2 = 1;
    0x0003cff6 ldr r1, [r0]                                          |         r1 = *(r0);
    0x0003cff8 ldr r5, [r1, 0x38]                                    |         r5 = *((r1 + 0x38));
    0x0003cffa mov r1, r7                                            |         r1 = r7;
    0x0003cffc blx r5                                                |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                     |     }
                                                                     | label_28:
    0x0003cffe ldr r2, [r4, 0x34]                                    |     r2 = *((r4 + 0x34));
    0x0003d000 movw r3, 0xe218                                       |     
    0x0003d004 movt r3, 0x2d                                         |     r3 = 0x2de218;
    0x0003d008 cmp r2, r3                                            |     
                                                                     |     if (r2 != r3) {
    0x0003d00a bne 0x3d094                                           |         goto label_29;
                                                                     |     }
    0x0003d00c ldrb.w r3, [r4, 0x32]                                 |     r3 = *((r4 + 0x32));
                                                                     |     if (r3 != 0) {
    0x0003d010 cbnz r3, 0x3d052                                      |         goto label_30;
                                                                     |     }
                                                                     |     do {
                                                                     | label_0:
    0x0003d012 ldr.w r2, [pc, 0x550]                                 |         r2 = *(0x0003d564);
    0x0003d016 ldr.w r3, [pc, 0x548]                                 |         r3 = *(0x3d562);
    0x0003d01a add r2, pc                                            |         r2 += pc;
    0x0003d01c ldr r3, [r2, r3]                                      |         r3 = *((r2 + r3));
    0x0003d01e ldr r2, [r3]                                          |         r2 = *(0x3d562);
    0x0003d020 ldr r3, [sp, 0x8c]                                    |         r3 = var_8ch;
    0x0003d022 eors r2, r3                                           |         r2 ^= r3;
    0x0003d024 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0003d028 bne.w 0x3d39a                                         |             goto label_31;
                                                                     |         }
    0x0003d02c mov r0, r7                                            |         r0 = r7;
    0x0003d02e add sp, 0x94                                          |         
    0x0003d030 vpop {d8}                                             |         __asm ("vpop {d8}");
    0x0003d034 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_24:
    0x0003d038 ldr r2, [r4, 0x34]                                    |         r2 = *((r4 + 0x34));
    0x0003d03a movw r3, 0xe218                                       |         
    0x0003d03e movt r3, 0x2d                                         |         r3 = 0x2de218;
    0x0003d042 cmp r2, r3                                            |         
                                                                     |         if (r2 != r3) {
    0x0003d044 bne 0x3d094                                           |             goto label_29;
                                                                     |         }
                                                                     | label_6:
    0x0003d046 ldrb.w r3, [r4, 0x32]                                 |         r3 = *((r4 + 0x32));
    0x0003d04a cmp r3, 0                                             |         
    0x0003d04c beq 0x3d012                                           |         
                                                                     |     } while (r3 == 0);
    0x0003d04e cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0003d050 bne 0x3d13a                                           |         goto label_32;
                                                                     |     }
                                                                     | label_30:
    0x0003d052 movs r7, 0                                            |     r7 = 0;
                                                                     | label_4:
    0x0003d054 movs r3, 0                                            |     r3 = 0;
    0x0003d056 strb.w r3, [r4, 0x2b]                                 |     *((r4 + 0x2b)) = r3;
    0x0003d05a b 0x3d012                                             |     goto label_0;
                                                                     | label_23:
    0x0003d05c add r2, sp, 0x50                                      |     r2 += var_50h;
    0x0003d05e movs r1, 0                                            |     r1 = 0;
    0x0003d060 mov r0, r4                                            |     r0 = r4;
    0x0003d062 bl 0x18b88                                            |     r0 = fcn_00018b88 (r0, r1, r2);
    0x0003d066 mov r7, r0                                            |     r7 = r0;
    0x0003d068 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003d06a beq.w 0x3d2a2                                         |         goto label_33;
                                                                     |     }
    0x0003d06e cmp.w r0, 0x508                                       |     
                                                                     |     if (r0 != 0x508) {
    0x0003d072 bne 0x3d012                                           |         goto label_0;
                                                                     |     }
    0x0003d074 movs r2, 2                                            |     r2 = 2;
    0x0003d076 movs r3, 1                                            |     r3 = 1;
    0x0003d078 strb.w r2, [r4, 0x2b]                                 |     *((r4 + 0x2b)) = r2;
    0x0003d07c ldr r2, [sp, 0x50]                                    |     r2 = var_50h;
    0x0003d07e strb.w r3, [r4, 0x32]                                 |     *((r4 + 0x32)) = r3;
    0x0003d082 str r3, [r5]                                          |     *(r5) = r3;
    0x0003d084 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0003d086 bne.w 0x3cf7c                                         |         goto label_1;
                                                                     |     }
    0x0003d08a ldrb.w r6, [r4, 0x2c]                                 |     r6 = *((r4 + 0x2c));
    0x0003d08e cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0003d090 bne 0x3cfba                                           |         goto label_2;
                                                                     |     }
    0x0003d092 b 0x3cfb8                                             |     goto label_3;
                                                                     | label_29:
    0x0003d094 blx 0xa230                                            |     fcn_0000a230 ();
    0x0003d098 ldr.w r2, [pc, 0x4cc]                                 |     r2 = *(0x0003d568);
    0x0003d09c adds r0, 0x14                                         |     r0 += 0x14;
    0x0003d09e ldr.w r1, [pc, 0x4cc]                                 |     r1 = *(0x0003d56c);
    0x0003d0a2 movw r3, 0xfba7                                       |     r3 = 0xfba7;
    0x0003d0a6 str r0, [sp]                                          |     *(sp) = r0;
    0x0003d0a8 movs r0, 0xe                                          |     r0 = 0xe;
    0x0003d0aa add r2, pc                                            |     r2 += pc;
    0x0003d0ac movs r7, 0xe                                          |     r7 = 0xe;
    0x0003d0ae add r1, pc                                            |     r1 += pc;
    0x0003d0b0 blx 0x9f00                                            |     fcn_00009f00 ();
    0x0003d0b4 ldrb.w r3, [r4, 0x32]                                 |     r3 = *((r4 + 0x32));
    0x0003d0b8 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003d0ba beq 0x3d012                                           |         goto label_0;
                                                                     |     }
    0x0003d0bc movs r1, 0                                            |     r1 = 0;
    0x0003d0be mov r0, r4                                            |     r0 = r4;
    0x0003d0c0 bl 0xed08                                             |     fcn_0000ed08 (r0, r1);
    0x0003d0c4 movs r3, 0                                            |     r3 = 0;
    0x0003d0c6 movs r7, 0xe                                          |     r7 = 0xe;
    0x0003d0c8 strb.w r3, [r4, 0x32]                                 |     *((r4 + 0x32)) = r3;
    0x0003d0cc b 0x3d054                                             |     goto label_4;
                                                                     | label_25:
    0x0003d0ce ldrb.w r1, [r4, 0x2b]                                 |     r1 = *((r4 + 0x2b));
    0x0003d0d2 cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0003d0d4 bne.w 0x3d2ac                                         |         goto label_34;
                                                                     |     }
    0x0003d0d8 ldr r0, [r4, 4]                                       |     r0 = *((r4 + 4));
    0x0003d0da movs r3, 6                                            |     r3 = 6;
    0x0003d0dc movs r2, 1                                            |     r2 = 1;
    0x0003d0de ldr r5, [r0]                                          |     r5 = *(r0);
    0x0003d0e0 ldr r5, [r5, 0x38]                                    |     r5 = *((r5 + 0x38));
    0x0003d0e2 blx r5                                                |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0003d0e4 mov r7, r0                                            |     r7 = r0;
                                                                     |     if (r0 != 0) {
    0x0003d0e6 cbnz r0, 0x3d130                                      |         goto label_11;
                                                                     |     }
    0x0003d0e8 ldrb.w r1, [r4, 0x2b]                                 |     r1 = *((r4 + 0x2b));
                                                                     |     if (r1 == 0) {
    0x0003d0ec cbnz r1, 0x3d0fa                                      |         
    0x0003d0ee ldr r0, [r4, 4]                                       |         r0 = *((r4 + 4));
    0x0003d0f0 movs r3, 5                                            |         r3 = 5;
    0x0003d0f2 movs r2, 1                                            |         r2 = 1;
    0x0003d0f4 ldr r5, [r0]                                          |         r5 = *(r0);
    0x0003d0f6 ldr r5, [r5, 0x38]                                    |         r5 = *((r5 + 0x38));
    0x0003d0f8 blx r5                                                |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
                                                                     |     }
    0x0003d0fa ldrb.w r3, [r4, 0x32]                                 |     r3 = *((r4 + 0x32));
    0x0003d0fe cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003d100 beq.w 0x3d2ac                                         |         goto label_34;
                                                                     |     }
    0x0003d104 movs r1, 0                                            |     r1 = 0;
    0x0003d106 mov r0, r4                                            |     r0 = r4;
    0x0003d108 bl 0xed08                                             |     fcn_0000ed08 (r0, r1);
    0x0003d10c movs r3, 0                                            |     r3 = 0;
    0x0003d10e mov.w r7, 0x108                                       |     r7 = 0x108;
    0x0003d112 strb.w r3, [r4, 0x32]                                 |     *((r4 + 0x32)) = r3;
    0x0003d116 b 0x3d054                                             |     goto label_4;
                                                                     | label_26:
    0x0003d118 add r2, sp, 0x50                                      |     r2 += var_50h;
    0x0003d11a movs r1, 0                                            |     r1 = 0;
    0x0003d11c mov r0, r4                                            |     r0 = r4;
    0x0003d11e bl 0x18b88                                            |     r0 = fcn_00018b88 (r0, r1, r2);
    0x0003d122 mov r7, r0                                            |     r7 = r0;
    0x0003d124 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003d126 beq.w 0x3cfd4                                         |         goto label_5;
                                                                     |     }
    0x0003d12a cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0003d12c beq.w 0x3d284                                         |         goto label_10;
                                                                     |     }
                                                                     | label_11:
    0x0003d130 ldrb.w r3, [r4, 0x32]                                 |     r3 = *((r4 + 0x32));
    0x0003d134 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003d136 beq.w 0x3d012                                         |         goto label_0;
                                                                     |     }
                                                                     | label_32:
    0x0003d13a movs r1, 0                                            |     r1 = 0;
    0x0003d13c mov r0, r4                                            |     r0 = r4;
    0x0003d13e bl 0xed08                                             |     fcn_0000ed08 (r0, r1);
    0x0003d142 movw r3, 0x20a                                        |     r3 = 0x20a;
    0x0003d146 cmp r7, r3                                            |     
    0x0003d148 it eq                                                 |     
                                                                     |     if (r7 != r3) {
    0x0003d14a moveq r7, -1                                          |         r7 = -1;
                                                                     |     }
    0x0003d14e movs r3, 0                                            |     r3 = 0;
    0x0003d150 strb.w r3, [r4, 0x32]                                 |     *((r4 + 0x32)) = r3;
    0x0003d154 b 0x3d054                                             |     goto label_4;
                                                                     | label_27:
    0x0003d156 ldrb.w r3, [r4, 0x2d]                                 |     r3 = *((r4 + 0x2d));
    0x0003d15a adds r1, r3, 1                                        |     r1 = r3 + 1;
    0x0003d15c rsb.w sb, r3, 2                                       |     sb = 2 - r3;
    0x0003d160 ldrb.w r3, [r4, 0x2b]                                 |     r3 = *((r4 + 0x2b));
    0x0003d164 str r1, [sp, 0xc]                                     |     var_ch = r1;
                                                                     |     if (r3 == 0) {
    0x0003d166 cbnz r3, 0x3d17c                                      |         
    0x0003d168 ldr r0, [r4, 4]                                       |         r0 = *((r4 + 4));
    0x0003d16a movs r3, 0xa                                          |         r3 = 0xa;
    0x0003d16c mov r2, sb                                            |         r2 = sb;
    0x0003d16e ldr r7, [r0]                                          |         r7 = *(r0);
    0x0003d170 ldr r7, [r7, 0x38]                                    |         r7 = *((r7 + 0x38));
    0x0003d172 blx r7                                                |         r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0003d174 mov r7, r0                                            |         r7 = r0;
    0x0003d176 cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0003d178 bne.w 0x3d344                                         |             goto label_35;
                                                                     |         }
                                                                     |     }
    0x0003d17c movs r2, 0x30                                         |     r2 = 0x30;
    0x0003d17e movs r1, 0                                            |     r1 = 0;
    0x0003d180 add.w r0, r4, 0x34                                    |     r0 = r4 + 0x34;
    0x0003d184 blx 0x97d4                                            |     fcn_000097d4 ();
    0x0003d188 ldr r0, [r4, 8]                                       |     r0 = *((r4 + 8));
    0x0003d18a add r1, sp, 0x60                                      |     r1 += var_60h;
    0x0003d18c ldr r3, [r0]                                          |     r3 = *(r0);
    0x0003d18e ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0003d190 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0003d192 mov r7, r0                                            |     r7 = r0;
    0x0003d194 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003d196 bne 0x3d262                                           |         
    0x0003d198 ldrd r2, r3, [sp, 0x60]                               |         __asm ("ldrd r2, r3, [var_60h]");
    0x0003d19c cmp r2, 0x21                                          |         
    0x0003d19e sbcs r3, r3, 0                                        |         __asm ("sbcs r3, r3, 0");
                                                                     |         if (r2 < 0x21) {
    0x0003d1a2 blt.w 0x3d2b2                                         |             goto label_36;
                                                                     |         }
    0x0003d1a6 ldr r0, [r4, 8]                                       |         r0 = *((r4 + 8));
    0x0003d1a8 add.w sl, sp, 0x6c                                    |         sl += var_6ch;
    0x0003d1ac vmov.i32 d16, 0                                       |         __asm ("vmov.i32 d16, 0");
    0x0003d1b0 movs r2, 0x20                                         |         r2 = 0x20;
    0x0003d1b2 mov r1, sl                                            |         r1 = sl;
    0x0003d1b4 ldr r3, [r0]                                          |         r3 = *(r0);
    0x0003d1b6 vstr d16, [sp]                                        |         __asm ("vstr d16, [sp]");
    0x0003d1ba ldr r3, [r3, 8]                                       |         r3 = *((r3 + 8));
    0x0003d1bc blx r3                                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0003d1be cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0003d1c0 bne.w 0x3d36e                                         |             goto label_37;
                                                                     |         }
    0x0003d1c4 ldr r1, [sp, 0x6c]                                    |         r1 = var_6ch;
    0x0003d1c6 movw r2, 0x682                                        |         
    0x0003d1ca movt r2, 0x377f                                       |         r2 = 0x377f0682;
    0x0003d1ce ldr r0, [sp, 0x74]                                    |         r0 = var_74h;
    0x0003d1d0 rev r3, r1                                            |         r1 = SWAP32 (r3);
    0x0003d1d2 bic r3, r3, 1                                         |         r3 = BIT_MASK (r3, 1);
    0x0003d1d6 cmp r3, r2                                            |         
                                                                     |         if (r3 != r2) {
    0x0003d1d8 bne 0x3d2b2                                           |             goto label_36;
                                                                     |         }
    0x0003d1da rev.w r8, r0                                          |         r0 = SWAP32 (r8);
    0x0003d1de add.w r3, r8, -1                                      |         r3 = r8 + -1;
    0x0003d1e2 ands.w fp, r3, r8                                     |         
                                                                     |         if (fp != r3) {
    0x0003d1e6 bne 0x3d2b2                                           |             goto label_36;
                                                                     |         }
    0x0003d1e8 sub.w r3, r8, 0x200                                   |         r3 = r8 - 0x200;
    0x0003d1ec cmp.w r3, 0xfe00                                      |         
                                                                     |         if (r3 > 0xfe00) {
    0x0003d1f0 bhi 0x3d2b2                                           |             goto label_36;
                                                                     |         }
    0x0003d1f2 ubfx r2, r1, 0x18, 1                                  |         r2 = (r1 >> 0x18) & ((1 << 1) - 1);
    0x0003d1f6 ldr r1, [sp, 0x78]                                    |         r1 = var_78h;
    0x0003d1f8 mov r3, r7                                            |         r3 = r7;
    0x0003d1fa add r7, sp, 0x7c                                      |         r7 += var_7ch;
    0x0003d1fc strb.w r2, [r4, 0x41]                                 |         *((r4 + 0x41)) = r2;
    0x0003d200 rev r1, r1                                            |         r1 = SWAP32 (r1);
    0x0003d202 str.w r8, [r4, 0x24]                                  |         __asm ("str.w r8, [r4, 0x24]");
    0x0003d206 str r1, [r4, 0x70]                                    |         *((r4 + 0x70)) = r1;
    0x0003d208 ldm r7!, {r0, r1}                                     |         r0 = *(r7!);
                                                                     |         r1 = *((r7! + 4));
    0x0003d20a str r1, [r4, 0x58]                                    |         *((r4 + 0x58)) = r1;
    0x0003d20c mov r1, sl                                            |         r1 = sl;
    0x0003d20e add.w sl, r4, 0x4c                                    |         sl = r4 + 0x4c;
    0x0003d212 str r0, [r4, 0x54]                                    |         *((r4 + 0x54)) = r0;
    0x0003d214 eor r0, r2, 1                                         |         r0 = r2 ^ 1;
    0x0003d218 str.w sl, [sp]                                        |         __asm ("str.w sl, [sp]");
    0x0003d21c movs r2, 0x18                                         |         r2 = 0x18;
    0x0003d21e bl 0xb7dc                                             |         fcn_0000b7dc (r0, r1, r2, r3);
    0x0003d222 ldr r3, [sp, 0x84]                                    |         r3 = var_84h;
    0x0003d224 ldr r2, [r4, 0x4c]                                    |         r2 = *((r4 + 0x4c));
    0x0003d226 rev r3, r3                                            |         r3 = SWAP32 (r3);
    0x0003d228 cmp r2, r3                                            |         
                                                                     |         if (r2 != r3) {
    0x0003d22a bne 0x3d2b6                                           |             goto label_38;
                                                                     |         }
    0x0003d22c ldr r3, [sp, 0x88]                                    |         r3 = var_88h;
    0x0003d22e ldr r2, [r4, 0x50]                                    |         r2 = *((r4 + 0x50));
    0x0003d230 rev r3, r3                                            |         r3 = SWAP32 (r3);
    0x0003d232 cmp r2, r3                                            |         
                                                                     |         if (r2 != r3) {
    0x0003d234 bne 0x3d2b6                                           |             goto label_38;
                                                                     |         }
    0x0003d236 ldr r2, [sp, 0x70]                                    |         r2 = var_70h;
    0x0003d238 mov.w r3, 0x2d00                                      |         
    0x0003d23c movt r3, 0x18e2                                       |         r3 = 0x18e22d00;
    0x0003d240 cmp r2, r3                                            |         
                                                                     |         if (r2 == r3) {
    0x0003d242 beq.w 0x3d39e                                         |             goto label_39;
                                                                     |         }
    0x0003d246 blx 0xa230                                            |         fcn_0000a230 ();
    0x0003d24a ldr r2, [pc, 0x324]                                   |         
    0x0003d24c adds r0, 0x14                                         |         r0 += 0x14;
    0x0003d24e ldr r1, [pc, 0x324]                                   |         
    0x0003d250 movs r7, 0xe                                          |         r7 = 0xe;
    0x0003d252 str r0, [sp]                                          |         *(sp) = r0;
    0x0003d254 movw r3, 0xf71c                                       |         r3 = 0xf71c;
    0x0003d258 add r2, pc                                            |         r2 = 0x7a7ce;
    0x0003d25a movs r0, 0xe                                          |         r0 = 0xe;
    0x0003d25c add r1, pc                                            |         r1 = 0x7a7d6;
    0x0003d25e blx 0x9f00                                            |         fcn_00009f00 ();
                                                                     |     }
                                                                     | label_13:
    0x0003d262 ldrb.w r3, [r4, 0x2b]                                 |     r3 = *((r4 + 0x2b));
                                                                     |     if (r3 == 0) {
    0x0003d266 cbnz r3, 0x3d27a                                      |         
    0x0003d268 ldr r0, [r4, 4]                                       |         r0 = *((r4 + 4));
    0x0003d26a mov r2, sb                                            |         r2 = sb;
    0x0003d26c ldr r1, [sp, 0xc]                                     |         r1 = var_ch;
    0x0003d26e movs r3, 9                                            |         r3 = 9;
    0x0003d270 ldr.w ip, [r0]                                        |         ip = *(r0);
    0x0003d274 ldr.w r8, [ip, 0x38]                                  |         r8 = *((ip + 0x38));
    0x0003d278 blx r8                                                |         uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                     |     }
    0x0003d27a movs r3, 1                                            |     r3 = 1;
    0x0003d27c str r3, [r5]                                          |     *(r5) = r3;
    0x0003d27e cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0003d280 bne.w 0x3d046                                         |         goto label_6;
                                                                     |     }
                                                                     | label_10:
    0x0003d284 ldrb.w r1, [r4, 0x2b]                                 |     r1 = *((r4 + 0x2b));
    0x0003d288 movs r3, 0                                            |     r3 = 0;
    0x0003d28a strb.w r3, [r4, 0x2c]                                 |     *((r4 + 0x2c)) = r3;
    0x0003d28e cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0003d290 bne.w 0x3d046                                         |         goto label_6;
                                                                     |     }
    0x0003d294 ldr r0, [r4, 4]                                       |     r0 = *((r4 + 4));
    0x0003d296 movs r2, 1                                            |     r2 = 1;
    0x0003d298 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0003d29a ldr r5, [r3, 0x38]                                    |     r5 = *((r3 + 0x38));
    0x0003d29c movs r3, 9                                            |     r3 = 9;
    0x0003d29e blx r5                                                |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0003d2a0 b 0x3d046                                             |     goto label_6;
                                                                     | label_33:
    0x0003d2a2 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0003d2a4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003d2a6 beq.w 0x3cf88                                         |         goto label_7;
                                                                     |     }
    0x0003d2aa b 0x3cf7a                                             |     goto label_8;
                                                                     | label_34:
    0x0003d2ac mov.w r7, 0x108                                       |     r7 = 0x108;
    0x0003d2b0 b 0x3d012                                             |     goto label_0;
                                                                     | label_36:
    0x0003d2b2 add.w sl, r4, 0x4c                                    |     sl = r4 + 0x4c;
                                                                     | label_38:
    0x0003d2b6 vmov.i32 d8, 0                                        |     __asm ("vmov.i32 d8, 0");
                                                                     | label_19:
    0x0003d2ba vst1.32 {d8}, [sl]                                    |     __asm ("vst1.32 {d8}, [sl]");
    0x0003d2be mov r0, r4                                            |     r0 = r4;
    0x0003d2c0 bl 0x128e0                                            |     fcn_000128e0 (r0);
    0x0003d2c4 ldr r3, [r4, 0x20]                                    |     r3 = *((r4 + 0x20));
    0x0003d2c6 mov.w r8, 1                                           |     r8 = 1;
    0x0003d2ca ldr r2, [r4, 0x44]                                    |     r2 = *((r4 + 0x44));
    0x0003d2cc mov.w fp, 4                                           |     
    0x0003d2d0 ldr.w sl, [r3]                                        |     sl = *(r3);
    0x0003d2d4 movs r3, 0                                            |     r3 = 0;
    0x0003d2d6 str.w r3, [sl, 0x60]                                  |     __asm ("str.w r3, [sl, 0x60]");
    0x0003d2da str.w r2, [sl, 0x80]                                  |     __asm ("str.w r2, [sl, 0x80]");
    0x0003d2de str.w r3, [sl, 0x64]                                  |     __asm ("str.w r3, [sl, 0x64]");
    0x0003d2e2 ldrb.w r3, [r4, 0x2b]                                 |     r3 = *((r4 + 0x2b));
    0x0003d2e6 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0003d2e8 bne 0x3d388                                           |         goto label_40;
                                                                     |     }
                                                                     |     do {
    0x0003d2ea ldr r0, [r4, 4]                                       |         r0 = *((r4 + 4));
    0x0003d2ec movs r3, 0xa                                          |         r3 = 0xa;
    0x0003d2ee movs r2, 1                                            |         r2 = 1;
    0x0003d2f0 mov r1, fp                                            |         r1 = fp;
    0x0003d2f2 ldr r7, [r0]                                          |         r7 = *(r0);
    0x0003d2f4 ldr r7, [r7, 0x38]                                    |         r7 = *((r7 + 0x38));
    0x0003d2f6 blx r7                                                |         r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0003d2f8 mov r7, r0                                            |         r7 = r0;
                                                                     |         if (r0 != 0) {
    0x0003d2fa cbnz r0, 0x3d34e                                      |             goto label_41;
                                                                     |         }
    0x0003d2fc cmp.w r8, 1                                           |         
    0x0003d300 ldrb.w r2, [r4, 0x2b]                                 |         r2 = *((r4 + 0x2b));
                                                                     |         if (r8 == 1) {
    0x0003d304 beq 0x3d372                                           |             goto label_42;
                                                                     |         }
    0x0003d306 add.w r3, sl, r8, lsl 2                               |         r3 = sl + (r8 << 2);
    0x0003d30a mov.w r0, -1                                          |         r0 = -1;
    0x0003d30e str r0, [r3, 0x64]                                    |         *((r3 + 0x64)) = r0;
                                                                     |         if (r2 == 0) {
    0x0003d310 cbnz r2, 0x3d320                                      |             
                                                                     | label_14:
    0x0003d312 ldr r0, [r4, 4]                                       |             r0 = *((r4 + 4));
    0x0003d314 mov r1, fp                                            |             r1 = fp;
    0x0003d316 movs r3, 9                                            |             r3 = 9;
    0x0003d318 movs r2, 1                                            |             r2 = 1;
    0x0003d31a ldr r7, [r0]                                          |             r7 = *(r0);
    0x0003d31c ldr r7, [r7, 0x38]                                    |             r7 = *((r7 + 0x38));
    0x0003d31e blx r7                                                |             uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                     |         }
                                                                     | label_9:
    0x0003d320 movs r7, 0                                            |         r7 = 0;
                                                                     | label_12:
    0x0003d322 add.w r8, r8, 1                                       |         r8++;
    0x0003d326 cmp.w r8, 5                                           |         
                                                                     |         if (r8 == 5) {
    0x0003d32a beq 0x3d354                                           |             goto label_43;
                                                                     |         }
                                                                     | label_15:
    0x0003d32c ldrb.w r3, [r4, 0x2b]                                 |         r3 = *((r4 + 0x2b));
    0x0003d330 add.w fp, r8, 3                                       |         
    0x0003d334 cmp r3, 0                                             |         
    0x0003d336 beq 0x3d2ea                                           |         
                                                                     |     } while (r3 == 0);
    0x0003d338 add.w r3, sl, r8, lsl 2                               |     r3 = sl + (r8 << 2);
    0x0003d33c mov.w r2, -1                                          |     r2 = -1;
    0x0003d340 str r2, [r3, 0x64]                                    |     *((r3 + 0x64)) = r2;
    0x0003d342 b 0x3d320                                             |     goto label_9;
                                                                     | label_35:
    0x0003d344 movs r3, 1                                            |     r3 = 1;
    0x0003d346 str r3, [r5]                                          |     *(r5) = r3;
    0x0003d348 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0003d34a beq 0x3d284                                           |         goto label_10;
                                                                     |     }
    0x0003d34c b 0x3d130                                             |     goto label_11;
                                                                     | label_41:
    0x0003d34e cmp r0, 5                                             |     
                                                                     |     if (r0 == 5) {
    0x0003d350 beq 0x3d322                                           |         goto label_12;
                                                                     |     }
    0x0003d352 b 0x3d262                                             |     goto label_13;
                                                                     | label_43:
    0x0003d354 ldr r3, [r4, 0x48]                                    |     r3 = *((r4 + 0x48));
    0x0003d356 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003d358 beq 0x3d262                                           |         goto label_13;
                                                                     |     }
    0x0003d35a ldr r1, [pc, 0x21c]                                   |     
    0x0003d35c movw r0, 0x11b                                        |     r0 = 0x11b;
    0x0003d360 ldr r3, [r4, 0x6c]                                    |     r3 = *((r4 + 0x6c));
    0x0003d362 ldr r2, [r4, 0x44]                                    |     r2 = *((r4 + 0x44));
    0x0003d364 add r1, pc                                            |     r1 = 0x7a8e2;
    0x0003d366 blx 0x9f00                                            |     fcn_00009f00 ();
    0x0003d36a b 0x3d262                                             |     goto label_13;
                                                                     | label_17:
    0x0003d36c movs r0, 7                                            |     r0 = 7;
                                                                     | label_37:
    0x0003d36e mov r7, r0                                            |     r7 = r0;
    0x0003d370 b 0x3d262                                             |     goto label_13;
                                                                     | label_42:
    0x0003d372 ldr r3, [r4, 0x44]                                    |     r3 = *((r4 + 0x44));
                                                                     |     if (r3 == 0) {
    0x0003d374 cbnz r3, 0x3d37a                                      |         
    0x0003d376 mov.w r3, -1                                          |         r3 = -1;
                                                                     |     }
    0x0003d37a str.w r3, [sl, 0x68]                                  |     __asm ("str.w r3, [sl, 0x68]");
    0x0003d37e cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0003d380 beq 0x3d312                                           |         goto label_14;
                                                                     |     }
                                                                     |     do {
                                                                     | label_16:
    0x0003d382 mov.w r8, 2                                           |         r8 = 2;
    0x0003d386 b 0x3d32c                                             |         goto label_15;
                                                                     |         if (r2 == 0) {
                                                                     | label_40:
    0x0003d388 cbz r2, 0x3d390                                       |             goto label_44;
                                                                     |         }
    0x0003d38a str.w r2, [sl, 0x68]                                  |         __asm ("str.w r2, [sl, 0x68]");
    0x0003d38e b 0x3d382                                             |         
                                                                     |     } while (1);
                                                                     | label_44:
    0x0003d390 mov.w r3, -1                                          |     r3 = -1;
    0x0003d394 str.w r3, [sl, 0x68]                                  |     __asm ("str.w r3, [sl, 0x68]");
    0x0003d398 b 0x3d382                                             |     goto label_16;
                                                                     | label_31:
    0x0003d39a blx 0x9b44                                            |     fcn_00009b44 ();
                                                                     | label_39:
    0x0003d39e add.w r0, r8, 0x8000                                  |     r0 = r8 + 0x8000;
    0x0003d3a2 mov r1, fp                                            |     r1 = fp;
    0x0003d3a4 adds r0, 0x18                                         |     r0 += 0x18;
    0x0003d3a6 blx 0xa1f8                                            |     fcn_0000a1f8 ();
    0x0003d3aa add.w r2, r8, 0x18                                    |     r2 = r8 + 0x18;
    0x0003d3ae mov r7, r0                                            |     r7 = r0;
    0x0003d3b0 str r0, [sp, 0x28]                                    |     var_28h = r0;
    0x0003d3b2 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003d3b4 beq 0x3d36c                                           |         goto label_17;
                                                                     |     }
    0x0003d3b6 ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0003d3b8 adds r7, 0x18                                         |     r7 += 0x18;
    0x0003d3ba ldr r1, [sp, 0x64]                                    |     r1 = var_64h;
    0x0003d3bc str r2, [sp, 0x14]                                    |     var_14h = r2;
    0x0003d3be subs.w r0, r3, 0x20                                   |     r0 = r3 - 0x20;
    0x0003d3c2 asr.w r3, r2, 0x1f                                    |     r3 = r2 >> 0x1f;
    0x0003d3c6 sbc r1, r1, 0                                         |     __asm ("sbc r1, r1, 0");
    0x0003d3ca str r7, [sp, 0x10]                                    |     var_10h = r7;
    0x0003d3cc str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0003d3ce bl 0x8ca4c                                            |     fcn_0008ca4c (r0, r1, r2, r3);
    0x0003d3d2 bic r3, r8, 0xff                                      |     r3 = BIT_MASK (r8, 0xff);
    0x0003d3d6 mov ip, r0                                            |     
    0x0003d3d8 orr.w r3, r3, r8, asr 16                              |     r3 |= (r8 >> 16);
    0x0003d3dc str.w sl, [sp, 0x20]                                  |     __asm ("str.w sl, [var_20h]");
    0x0003d3e0 ldr.w sl, [sp, 0x14]                                  |     sl = var_14h;
    0x0003d3e4 add.w r1, r7, r8                                      |     r1 = r7 + r8;
    0x0003d3e8 uxth r3, r3                                           |     r3 = (int16_t) r3;
    0x0003d3ea mov.w r8, 0                                           |     r8 = 0;
    0x0003d3ee vmov.i32 d8, 0                                        |     __asm ("vmov.i32 d8, 0");
    0x0003d3f2 mov fp, r8                                            |     
    0x0003d3f4 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0003d3f6 add.w r3, ip, 0x21                                    |     r3 = ip + 0x21;
    0x0003d3fa lsrs r3, r3, 0xc                                      |     r3 >>= 0xc;
    0x0003d3fc str r1, [sp, 0x1c]                                    |     var_1ch = r1;
    0x0003d3fe strd sb, ip, [sp, 0x34]                               |     __asm ("strd sb, ip, [var_38h]");
    0x0003d402 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0003d404 add r3, sp, 0x5c                                      |     r3 += var_5ch;
    0x0003d406 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0003d408 strd r6, r5, [sp, 0x3c]                               |     __asm ("strd r6, r5, [var_3ch]");
                                                                     | label_18:
    0x0003d40c ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0003d40e lsl.w r7, fp, 0xc                                     |     r7 = fp << 0xc;
    0x0003d412 addw r8, r7, 0xfde                                    |     __asm ("addw r8, r7, aav.0x000000ff");
    0x0003d416 cmp r8, r3                                            |     
    0x0003d418 it hs                                                 |     
                                                                     |     if (r8 < r3) {
    0x0003d41a movhs r8, r3                                          |         r8 = r3;
                                                                     |     }
    0x0003d41c cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0003d420 beq 0x3d51c                                           |         goto label_45;
                                                                     |     }
    0x0003d422 subs r7, 0x21                                         |     r7 -= 0x21;
                                                                     | label_20:
    0x0003d424 ldr r2, [r4, 0x18]                                    |     r2 = *((r4 + 0x18));
    0x0003d426 cmp fp, r2                                            |     
                                                                     |     if (fp >= r2) {
    0x0003d428 bge 0x3d520                                           |         goto label_46;
                                                                     |     }
    0x0003d42a ldr r2, [r4, 0x20]                                    |     r2 = *((r4 + 0x20));
    0x0003d42c ldr.w r2, [r2, fp, lsl 2]                             |     offset_0 = fp << 2;
                                                                     |     r2 = *((r2 + offset_0));
    0x0003d430 str r2, [sp, 0x54]                                    |     var_54h = r2;
    0x0003d432 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0003d434 beq 0x3d520                                           |         goto label_46;
                                                                     |     }
    0x0003d436 movs r5, 0                                            |     r5 = 0;
                                                                     | label_21:
    0x0003d438 ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0003d43a cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0003d43c beq 0x3d4fc                                           |         goto label_47;
                                                                     |     }
    0x0003d43e ldr r0, [r4, 0x20]                                    |     r0 = *((r4 + 0x20));
    0x0003d440 cmp r8, r7                                            |     
    0x0003d442 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0003d444 lsl.w r1, fp, 2                                       |     r1 = fp << 2;
    0x0003d448 str.w r3, [r0, fp, lsl 2]                             |     __asm ("str.w r3, [r0, fp, lsl 2]");
                                                                     |     if (r8 <= r7) {
    0x0003d44c blo 0x3d52e                                           |         goto label_48;
                                                                     |     }
    0x0003d44e subs r0, r7, 1                                        |     r0 = r7 - 1;
    0x0003d450 add r3, sp, 0x58                                      |     r3 += var_58h;
    0x0003d452 umull r6, sb, r0, sl                                  |     r6:sb = r0 * sl;
    0x0003d456 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0003d458 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0003d45a strd r2, fp, [sp, 0x44]                               |     __asm ("strd r2, fp, [var_0hx44]");
    0x0003d45e str r1, [sp, 0x4c]                                    |     var_4ch = r1;
    0x0003d460 mov fp, r3                                            |     
    0x0003d462 mla sb, r0, r3, sb                                    |     __asm ("mla sb, r0, r3, sb");
    0x0003d466 adds r6, 0x20                                         |     r6 += 0x20;
    0x0003d468 adc sb, sb, 0                                         |     __asm ("adc sb, sb, 0");
    0x0003d46c mov r5, sb                                            |     r5 = sb;
    0x0003d46e ldr.w sb, [sp, 0x28]                                  |     sb = var_28h;
    0x0003d472 b 0x3d4b6                                             |     
                                                                     |     while (r0 == 0) {
    0x0003d474 ldr r3, [sp, 0x10]                                    |         r3 = var_10h;
    0x0003d476 mov r0, r4                                            |         r0 = r4;
    0x0003d478 ldrd r1, r2, [sp, 0x14]                               |         __asm ("ldrd r1, r2, [var_14h]");
    0x0003d47c str.w sb, [sp]                                        |         __asm ("str.w sb, [sp]");
    0x0003d480 bl 0xe1e8                                             |         r0 = fcn_0000e1e8 (r0, r1, r2, r3, r4);
                                                                     |         if (r0 == 0) {
    0x0003d484 cbz r0, 0x3d4ca                                       |             goto label_49;
                                                                     |         }
    0x0003d486 ldr r2, [sp, 0x58]                                    |         r2 = var_58h;
    0x0003d488 mov r1, r7                                            |         r1 = r7;
    0x0003d48a mov r0, r4                                            |         r0 = r4;
    0x0003d48c bl 0x223f4                                            |         r0 = fcn_000223f4 (r0, r1, r2);
                                                                     |         if (r0 != 0) {
    0x0003d490 cbnz r0, 0x3d4ca                                      |             goto label_49;
                                                                     |         }
    0x0003d492 ldr r3, [sp, 0x5c]                                    |         r3 = var_5ch;
                                                                     |         if (r3 != 0) {
    0x0003d494 cbz r3, 0x3d4a6                                       |             
    0x0003d496 strd r7, r3, [r4, 0x44]                               |             __asm ("strd r7, r3, [r4, 0x44]");
    0x0003d49a ldr r3, [sp, 0x20]                                    |             r3 = var_20h;
    0x0003d49c vld1.32 {d8}, [r3]                                    |             __asm ("vld1.32 {d8}, [r3]");
    0x0003d4a0 ldr r3, [sp, 0x24]                                    |             r3 = var_24h;
    0x0003d4a2 strh.w r3, [r4, 0x42]                                 |             *((r4 + 0x42)) = r3;
                                                                     |         }
    0x0003d4a6 adds.w r6, r6, sl                                     |         r6 += sl;
    0x0003d4aa add.w r7, r7, 1                                       |         r7++;
    0x0003d4ae adc.w r5, r5, fp                                      |         __asm ("adc.w r5, r5, fp");
    0x0003d4b2 cmp r8, r7                                            |         
                                                                     |         if (r8 <= r7) {
    0x0003d4b4 blo 0x3d4ca                                           |             goto label_49;
                                                                     |         }
    0x0003d4b6 ldr r0, [r4, 8]                                       |         r0 = *((r4 + 8));
    0x0003d4b8 mov r2, sl                                            |         r2 = sl;
    0x0003d4ba mov r1, sb                                            |         r1 = sb;
    0x0003d4bc ldr r3, [r0]                                          |         r3 = *(r0);
    0x0003d4be strd r6, r5, [sp]                                     |         __asm ("strd r6, r5, [sp]");
    0x0003d4c2 ldr r3, [r3, 8]                                       |         r3 = *((r3 + 8));
    0x0003d4c4 blx r3                                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0003d4c6 cmp r0, 0                                             |         
    0x0003d4c8 beq 0x3d474                                           |         
                                                                     |     }
                                                                     | label_49:
    0x0003d4ca ldrd fp, r1, [sp, 0x48]                               |     __asm ("ldrd fp, r1, [var_4ch]");
    0x0003d4ce mov r5, r0                                            |     r5 = r0;
    0x0003d4d0 ldr r2, [sp, 0x44]                                    |     r2 = var_44h;
    0x0003d4d2 ldr r0, [r4, 0x20]                                    |     r0 = *((r4 + 0x20));
    0x0003d4d4 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0003d4d6 cmp.w fp, 0                                           |     
    0x0003d4da str r2, [r0, r1]                                      |     *((r0 + r1)) = r2;
    0x0003d4dc ite eq                                                |     
                                                                     |     if (fp != 0) {
    0x0003d4de moveq r1, 0x88                                        |         r1 = 0x88;
                                                                     |     }
                                                                     |     if (fp == 0) {
    0x0003d4e0 movne r1, 0                                           |         r1 = 0;
                                                                     |     }
    0x0003d4e2 adds r0, r2, r1                                       |     r0 = r2 + r1;
    0x0003d4e4 rsb.w r2, r1, 0x8000                                  |     r2 = 0x8000 - r1;
    0x0003d4e8 add r1, r3                                            |     r1 += r3;
    0x0003d4ea blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0003d4ee cmp r8, r7                                            |     
                                                                     |     if (r8 >= r7) {
    0x0003d4f0 bhs 0x3d4fc                                           |         goto label_47;
                                                                     |     }
                                                                     | label_22:
    0x0003d4f2 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0003d4f4 add.w fp, fp, 1                                       |     
    0x0003d4f8 cmp fp, r3                                            |     
                                                                     |     if (fp < r3) {
    0x0003d4fa bls 0x3d40c                                           |         goto label_18;
                                                                     |     }
                                                                     | label_47:
    0x0003d4fc ldr r0, [sp, 0x28]                                    |     r0 = var_28h;
    0x0003d4fe str r5, [sp, 0x10]                                    |     var_10h = r5;
    0x0003d500 ldr.w sb, [sp, 0x34]                                  |     sb = var_34h;
    0x0003d504 ldrd r6, r5, [sp, 0x3c]                               |     __asm ("ldrd r6, r5, [var_3ch]");
    0x0003d508 ldr.w sl, [sp, 0x20]                                  |     sl = var_20h;
    0x0003d50c blx 0x9c24                                            |     fcn_00009c24 ();
    0x0003d510 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0003d512 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003d514 beq.w 0x3d2ba                                         |         goto label_19;
                                                                     |     }
    0x0003d518 mov r7, r3                                            |     r7 = r3;
    0x0003d51a b 0x3d262                                             |     goto label_13;
                                                                     | label_45:
    0x0003d51c movs r7, 1                                            |     r7 = 1;
    0x0003d51e b 0x3d424                                             |     goto label_20;
                                                                     | label_46:
    0x0003d520 add r2, sp, 0x54                                      |     r2 += var_54h;
    0x0003d522 mov r1, fp                                            |     r1 = fp;
    0x0003d524 mov r0, r4                                            |     r0 = r4;
    0x0003d526 bl 0x18b88                                            |     r0 = fcn_00018b88 (r0, r1, r2);
    0x0003d52a mov r5, r0                                            |     r5 = r0;
    0x0003d52c b 0x3d438                                             |     goto label_21;
                                                                     | label_48:
    0x0003d52e str.w r2, [r0, fp, lsl 2]                             |     __asm ("str.w r2, [r0, fp, lsl 2]");
    0x0003d532 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0003d536 bne 0x3d54c                                           |         
    0x0003d538 ldr r3, [sp, 0x1c]                                    |         r3 = var_1ch;
    0x0003d53a add.w r0, r2, 0x88                                    |         r0 = r2 + 0x88;
    0x0003d53e movw r2, 0x7f78                                       |         r2 = 0x7f78;
    0x0003d542 add.w r1, r3, 0x88                                    |         r1 = r3 + 0x88;
    0x0003d546 blx 0x9e2c                                            |         fcn_00009e2c ();
    0x0003d54a b 0x3d4f2                                             |         goto label_22;
                                                                     |     }
    0x0003d54c ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0003d54e mov r0, r2                                            |     r0 = r2;
    0x0003d550 mov.w r2, 0x8000                                      |     r2 = 0x8000;
    0x0003d554 blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0003d558 b 0x3d4f2                                             |     goto label_22;
                                                                     | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3e330 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0003e330 ()                          | void fcn_0003e330 (int16_t arg1, uint32_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x0003e330 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x0003e334 mov r5, r0                            |     r5 = r0;
    0x0003e336 ldrd r4, r6, [r0, 8]                  |     __asm ("ldrd r4, r6, [r0, 8]");
    0x0003e33a movs r0, 0                            |     r0 = 0;
    0x0003e33c cmp r1, r4                            |     
    0x0003e33e sbcs r0, r6                           |     __asm ("sbcs r0, r6");
                                                     |     if (r1 >= r4) {
    0x0003e340 bhs 0x3e354                           |         goto label_1;
                                                     |     }
    0x0003e342 ldrb r3, [r5, 0x18]                   |     r3 = *((r5 + 0x18));
    0x0003e344 adds r4, r4, r4                       |     r4 += r4;
    0x0003e346 adcs r6, r6                           |     __asm ("adcs r6, r6");
                                                     |     if (r3 == 0) {
    0x0003e348 cbz r3, 0x3e368                       |         goto label_2;
                                                     |     }
                                                     |     do {
    0x0003e34a ldrb r7, [r5, 0x19]                   |         r7 = *((r5 + 0x19));
    0x0003e34c movs r0, 1                            |         r0 = 1;
                                                     |         if (r7 == 0) {
    0x0003e34e cbz r7, 0x3e378                       |             goto label_3;
                                                     |         }
                                                     | label_0:
    0x0003e350 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_1:
    0x0003e354 adds.w r2, r4, 0xa                    |         r2 = r4 + 0xa;
    0x0003e358 adc r3, r6, 0                         |         __asm ("adc r3, r6, 0");
    0x0003e35c adds r4, r2, r1                       |         r4 = r2 + r1;
    0x0003e35e adc r6, r3, 0                         |         __asm ("adc r6, r3, 0");
    0x0003e362 ldrb r3, [r5, 0x18]                   |         r3 = *((r5 + 0x18));
    0x0003e364 cmp r3, 0                             |         
    0x0003e366 bne 0x3e34a                           |         
                                                     |     } while (r3 != 0);
                                                     | label_2:
    0x0003e368 ldr r0, [r5, 4]                       |     r0 = *((r5 + 4));
    0x0003e36a mov r2, r4                            |     r2 = r4;
    0x0003e36c mov r3, r6                            |     r3 = r6;
    0x0003e36e blx 0x9c60                            |     r0 = fcn_00009c60 ();
                                                     |     if (r0 != 0) {
    0x0003e372 cbz r0, 0x3e39c                       |         
    0x0003e374 str r0, [r5, 4]                       |         *((r5 + 4)) = r0;
    0x0003e376 b 0x3e392                             |         goto label_4;
                                                     | label_3:
    0x0003e378 mov r0, r4                            |         r0 = r4;
    0x0003e37a mov r1, r6                            |         r1 = r6;
    0x0003e37c blx 0xa1f8                            |         r0 = fcn_0000a1f8 ();
    0x0003e380 mov r8, r0                            |         r8 = r0;
                                                     |         if (r0 == 0) {
    0x0003e382 cbz r0, 0x3e39c                       |             goto label_5;
                                                     |         }
    0x0003e384 ldr r2, [r5, 0x10]                    |         r2 = *((r5 + 0x10));
    0x0003e386 ldr r1, [r5, 4]                       |         r1 = *((r5 + 4));
    0x0003e388 blx 0x9e2c                            |         fcn_00009e2c ();
    0x0003e38c str.w r8, [r5, 4]                     |         __asm ("str.w r8, [r5, 4]");
    0x0003e390 strb r7, [r5, 0x18]                   |         *((r5 + 0x18)) = r7;
                                                     | label_4:
    0x0003e392 movs r0, 0                            |         r0 = 0;
    0x0003e394 strd r4, r6, [r5, 8]                  |         __asm ("strd r4, r6, [r5, 8]");
    0x0003e398 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     |     }
                                                     | label_5:
    0x0003e39c movs r3, 1                            |     r3 = 1;
    0x0003e39e ldr r0, [r5]                          |     r0 = *(r5);
    0x0003e3a0 strb r3, [r5, 0x19]                   |     *((r5 + 0x19)) = r3;
    0x0003e3a2 blx 0x9718                            |     fcn_00009718 ();
    0x0003e3a6 ldrb r3, [r5, 0x18]                   |     r3 = *((r5 + 0x18));
    0x0003e3a8 cbz r3, 0x3e3c8                       |     
                                                     |     while (1) {
    0x0003e3aa vldr d16, [pc, 0x24]                  |         __asm ("vldr d16, aav.0x000000ff");
    0x0003e3ae vldr d17, [pc, 0x28]                  |         __asm ("vldr d17, aav.0x000000ff");
    0x0003e3b2 add.w r2, r5, 0x1a                    |         r2 = r5 + 0x1a;
    0x0003e3b6 movs r3, 1                            |         r3 = 1;
    0x0003e3b8 movs r0, 7                            |         r0 = 7;
    0x0003e3ba str r2, [r5, 4]                       |         *((r5 + 4)) = r2;
    0x0003e3bc vstr d16, [r5, 8]                     |         __asm ("vstr d16, [r5, 8]");
    0x0003e3c0 vstr d17, [r5, 0x10]                  |         __asm ("vstr d17, [r5, 0x10]");
    0x0003e3c4 strb r3, [r5, 0x18]                   |         *((r5 + 0x18)) = r3;
    0x0003e3c6 b 0x3e350                             |         goto label_0;
    0x0003e3c8 ldr r0, [r5, 4]                       |         r0 = *((r5 + 4));
    0x0003e3ca blx 0x9c24                            |         fcn_00009c24 ();
    0x0003e3ce b 0x3e3aa                             |         
                                                     |     }
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3e3e0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0003e3e0 ()                                      | void fcn_0003e3e0 (int16_t arg1, uint32_t arg2, int16_t arg3) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0003e3e0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003e3e2 beq.w 0x3e5aa                                     |         goto label_4;
                                                                 |     }
    0x0003e3e6 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003e3ea mov sl, r2                                        |     sl = r2;
    0x0003e3ec ldrd r3, r7, [r0, 0x10]                           |     __asm ("ldrd r3, r7, [r0, 0x10]");
    0x0003e3f0 mov sb, r1                                        |     sb = r1;
    0x0003e3f2 sub sp, 0x14                                      |     
    0x0003e3f4 mov r4, r0                                        |     r4 = r0;
    0x0003e3f6 ldrd r6, r5, [r0, 8]                              |     __asm ("ldrd r6, r5, [r0, 8]");
    0x0003e3fa adds r2, r3, 2                                    |     r2 = r3 + 2;
    0x0003e3fc adc r1, r7, 0                                     |     __asm ("adc r1, r7, 0");
    0x0003e400 adds.w r2, r2, sl                                 |     r2 += sl;
    0x0003e404 adc r1, r1, 0                                     |     __asm ("adc r1, r1, 0");
    0x0003e408 cmp r2, r6                                        |     
    0x0003e40a sbcs r1, r5                                       |     __asm ("sbcs r1, r5");
                                                                 |     if (r2 >= r6) {
    0x0003e40c bhs.w 0x3e598                                     |         goto label_5;
                                                                 |     }
                                                                 | label_3:
    0x0003e410 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0003e412 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x0003e414 str r1, [r4, 0x10]                                |     *((r4 + 0x10)) = r1;
    0x0003e416 adc r7, r7, 0                                     |     __asm ("adc r7, r7, 0");
    0x0003e41a movs r1, 0x22                                     |     r1 = 0x22;
    0x0003e41c str r7, [r4, 0x14]                                |     *((r4 + 0x14)) = r7;
    0x0003e41e strb r1, [r2, r3]                                 |     *((r2 + r3)) = r1;
    0x0003e420 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0003e424 beq.w 0x3e57e                                     |         goto label_6;
                                                                 |     }
    0x0003e428 ldr r3, [pc, 0x180]                               |     
    0x0003e42a movs r5, 0                                        |     r5 = 0;
    0x0003e42c add.w r7, sl, 7                                   |     r7 = sl + 7;
    0x0003e430 add.w sb, sb, -1                                  |     sb += -1;
    0x0003e434 mov r8, r5                                        |     r8 = r5;
    0x0003e436 mov.w fp, 0x5c                                    |     
    0x0003e43a add r3, pc                                        |     r3 = 0x7c9ea;
    0x0003e43c str r7, [sp, 4]                                   |     var_4h = r7;
    0x0003e43e str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003e440 ldr r3, [pc, 0x16c]                               |     
    0x0003e442 add r3, pc                                        |     r3 = 0x7c9f6;
    0x0003e444 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0003e446 b 0x3e50c                                         |     
                                                                 |     while (r6 != 0x5c) {
    0x0003e448 cmp r6, 0x1f                                      |         
                                                                 |         if (r6 <= 0x1f) {
    0x0003e44a bhi 0x3e4ee                                       |             
    0x0003e44c ldr r7, [sp, 8]                                   |             r7 = var_8h;
    0x0003e44e add.w ip, r7, r6                                  |             
    0x0003e452 ldrb ip, [ip, -0x70]                              |             ip = *((ip - 0x70));
    0x0003e456 cmp.w ip, 0                                       |             
                                                                 |             if (ip != 0) {
    0x0003e45a bne.w 0x3e56a                                     |                 goto label_7;
                                                                 |             }
    0x0003e45e ldrd r7, r2, [r4, 8]                              |             __asm ("ldrd r7, r2, [r4, 8]");
    0x0003e462 adds r1, r3, 7                                    |             r1 = r3 + 7;
    0x0003e464 adc ip, r0, 0                                     |             __asm ("adc ip, r0, 0");
    0x0003e468 adds.w r1, r1, sl                                 |             r1 += sl;
    0x0003e46c adc ip, ip, 0                                     |             __asm ("adc ip, ip, 0");
    0x0003e470 adds r1, r1, r5                                   |             r1 += r5;
    0x0003e472 adc.w ip, r8, ip                                  |             __asm ("adc.w ip, r8, ip");
    0x0003e476 cmp r7, r1                                        |             
    0x0003e478 sbcs.w ip, r2, ip                                 |             __asm ("sbcs.w ip, r2, ip");
                                                                 |             if (r7 <= r1) {
    0x0003e47c blo 0x3e56e                                       |                 goto label_8;
                                                                 |             }
                                                                 | label_2:
    0x0003e47e ldr r2, [r4, 4]                                   |             r2 = *((r4 + 4));
    0x0003e480 adds r1, r3, 1                                    |             r1 = r3 + 1;
    0x0003e482 adc r0, r0, 0                                     |             __asm ("adc r0, r0, 0");
    0x0003e486 str r1, [r4, 0x10]                                |             *((r4 + 0x10)) = r1;
    0x0003e488 str r0, [r4, 0x14]                                |             *((r4 + 0x14)) = r0;
    0x0003e48a mov.w ip, 0x75                                    |             
    0x0003e48e strb.w fp, [r2, r3]                               |             *((r2 + r3)) = fp;
    0x0003e492 movs r1, 0x30                                     |             r1 = 0x30;
    0x0003e494 ldrd r0, r3, [r4, 0x10]                           |             __asm ("ldrd r0, r3, [r4, 0x10]");
    0x0003e498 adds r2, r0, 1                                    |             r2 = r0 + 1;
    0x0003e49a adc r3, r3, 0                                     |             __asm ("adc r3, r3, 0");
    0x0003e49e str r2, [r4, 0x10]                                |             *((r4 + 0x10)) = r2;
    0x0003e4a0 str r3, [r4, 0x14]                                |             *((r4 + 0x14)) = r3;
    0x0003e4a2 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x0003e4a4 strb.w ip, [r3, r0]                               |             *((r3 + r0)) = ip;
    0x0003e4a8 lsrs r0, r6, 4                                    |             r0 = r6 >> 4;
    0x0003e4aa ldr r2, [r4, 0x10]                                |             r2 = *((r4 + 0x10));
    0x0003e4ac and r6, r6, 0xf                                   |             r6 &= 0xf;
    0x0003e4b0 ldr r3, [sp, 0xc]                                 |             r3 = var_ch;
    0x0003e4b2 add r0, r1                                        |             r0 += r1;
    0x0003e4b4 ldrb r6, [r3, r6]                                 |             r6 = *((r3 + r6));
    0x0003e4b6 adds r3, r2, 1                                    |             r3 = r2 + 1;
    0x0003e4b8 str r3, [r4, 0x10]                                |             *((r4 + 0x10)) = r3;
    0x0003e4ba ldr r3, [r4, 0x14]                                |             r3 = *((r4 + 0x14));
    0x0003e4bc adc r3, r3, 0                                     |             __asm ("adc r3, r3, 0");
    0x0003e4c0 str r3, [r4, 0x14]                                |             *((r4 + 0x14)) = r3;
    0x0003e4c2 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x0003e4c4 strb r1, [r3, r2]                                 |             *((r3 + r2)) = r1;
    0x0003e4c6 ldr r2, [r4, 0x10]                                |             r2 = *((r4 + 0x10));
    0x0003e4c8 adds r3, r2, 1                                    |             r3 = r2 + 1;
    0x0003e4ca str r3, [r4, 0x10]                                |             *((r4 + 0x10)) = r3;
    0x0003e4cc ldr r3, [r4, 0x14]                                |             r3 = *((r4 + 0x14));
    0x0003e4ce adc r3, r3, 0                                     |             __asm ("adc r3, r3, 0");
    0x0003e4d2 str r3, [r4, 0x14]                                |             *((r4 + 0x14)) = r3;
    0x0003e4d4 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x0003e4d6 strb r1, [r3, r2]                                 |             *((r3 + r2)) = r1;
    0x0003e4d8 ldrd r1, r3, [r4, 0x10]                           |             __asm ("ldrd r1, r3, [r4, 0x10]");
    0x0003e4dc adds r2, r1, 1                                    |             r2 = r1 + 1;
    0x0003e4de adc r3, r3, 0                                     |             __asm ("adc r3, r3, 0");
    0x0003e4e2 str r2, [r4, 0x10]                                |             *((r4 + 0x10)) = r2;
    0x0003e4e4 str r3, [r4, 0x14]                                |             *((r4 + 0x14)) = r3;
    0x0003e4e6 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x0003e4e8 strb r0, [r3, r1]                                 |             *((r3 + r1)) = r0;
    0x0003e4ea ldrd r2, r1, [r4, 0x10]                           |             __asm ("ldrd r2, r1, [r4, 0x10]");
                                                                 |         }
                                                                 | label_0:
    0x0003e4ee ldr r0, [sp, 4]                                   |         r0 = var_4h;
    0x0003e4f0 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0003e4f2 subs r7, r0, 1                                    |         r7 = r0 - 1;
    0x0003e4f4 adds r0, r2, 1                                    |         r0 = r2 + 1;
    0x0003e4f6 adc r1, r1, 0                                     |         __asm ("adc r1, r1, 0");
    0x0003e4fa adds r5, 1                                        |         r5++;
    0x0003e4fc adc r8, r8, 0                                     |         __asm ("adc r8, r8, 0");
    0x0003e500 cmp r7, 7                                         |         
    0x0003e502 str r0, [r4, 0x10]                                |         *((r4 + 0x10)) = r0;
    0x0003e504 str r1, [r4, 0x14]                                |         *((r4 + 0x14)) = r1;
    0x0003e506 str r7, [sp, 4]                                   |         var_4h = r7;
    0x0003e508 strb r6, [r3, r2]                                 |         *((r3 + r2)) = r6;
                                                                 |         if (r7 == 7) {
    0x0003e50a beq 0x3e57e                                       |             goto label_6;
                                                                 |         }
    0x0003e50c ldrb r6, [sb, 1]!                                 |         r6 = *((sb += 1));
    0x0003e510 ldrd r3, r0, [r4, 0x10]                           |         __asm ("ldrd r3, r0, [r4, 0x10]");
    0x0003e514 cmp r6, 0x5c                                      |         
    0x0003e516 it ne                                             |         
                                                                 |         if (r6 != 0x5c) {
    0x0003e518 cmpne r6, 0x22                                    |             __asm ("cmpne r6, 0x22");
                                                                 |         }
    0x0003e51a mov r2, r3                                        |         r2 = r3;
    0x0003e51c mov r1, r0                                        |         r1 = r0;
    0x0003e51e bne 0x3e448                                       |         
                                                                 |     }
                                                                 | label_1:
    0x0003e520 adds r2, 3                                        |     r2 += 3;
    0x0003e522 adc lr, r1, 0                                     |     __asm ("adc lr, r1, 0");
    0x0003e526 adds.w r2, r2, sl                                 |     r2 += sl;
    0x0003e52a adc lr, lr, 0                                     |     __asm ("adc lr, lr, 0");
    0x0003e52e subs.w ip, r2, r5                                 |     
    0x0003e532 ldrd r1, r2, [r4, 8]                              |     __asm ("ldrd r1, r2, [r4, 8]");
    0x0003e536 sbc.w lr, lr, r8                                  |     __asm ("sbc.w lr, lr, r8");
    0x0003e53a cmp r1, ip                                        |     
    0x0003e53c sbcs.w lr, r2, lr                                 |     __asm ("sbcs.w lr, r2, lr");
    0x0003e540 blo 0x3e558                                       |     
                                                                 |     while (1) {
    0x0003e542 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0003e544 adds r1, r3, 1                                    |         r1 = r3 + 1;
    0x0003e546 adc r0, r0, 0                                     |         __asm ("adc r0, r0, 0");
    0x0003e54a str r1, [r4, 0x10]                                |         *((r4 + 0x10)) = r1;
    0x0003e54c str r0, [r4, 0x14]                                |         *((r4 + 0x14)) = r0;
    0x0003e54e strb.w fp, [r2, r3]                               |         *((r2 + r3)) = fp;
    0x0003e552 ldrd r2, r1, [r4, 0x10]                           |         __asm ("ldrd r2, r1, [r4, 0x10]");
    0x0003e556 b 0x3e4ee                                         |         goto label_0;
    0x0003e558 ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x0003e55a mov r0, r4                                        |         r0 = r4;
    0x0003e55c subs r1, r3, 4                                    |         r1 = r3 - 4;
    0x0003e55e bl 0x3e330                                        |         r0 = fcn_0003e330 (r0, r1);
                                                                 |         if (r0 != 0) {
    0x0003e562 cbnz r0, 0x3e592                                  |             goto label_9;
                                                                 |         }
    0x0003e564 ldrd r3, r0, [r4, 0x10]                           |         __asm ("ldrd r3, r0, [r4, 0x10]");
    0x0003e568 b 0x3e542                                         |         
                                                                 |     }
                                                                 | label_7:
    0x0003e56a mov r6, ip                                        |     r6 = ip;
    0x0003e56c b 0x3e520                                         |     goto label_1;
                                                                 | label_8:
    0x0003e56e ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x0003e570 mov r0, r4                                        |     r0 = r4;
    0x0003e572 bl 0x3e330                                        |     r0 = fcn_0003e330 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x0003e576 cbnz r0, 0x3e592                                  |         goto label_9;
                                                                 |     }
    0x0003e578 ldrd r3, r0, [r4, 0x10]                           |     __asm ("ldrd r3, r0, [r4, 0x10]");
    0x0003e57c b 0x3e47e                                         |     goto label_2;
                                                                 | label_6:
    0x0003e57e ldrd r3, r2, [r4, 0x10]                           |     __asm ("ldrd r3, r2, [r4, 0x10]");
    0x0003e582 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0003e584 adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x0003e586 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0003e588 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x0003e58c movs r0, 0x22                                     |     r0 = 0x22;
    0x0003e58e str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0003e590 strb r0, [r1, r3]                                 |     *((r1 + r3)) = r0;
                                                                 |     do {
                                                                 | label_9:
    0x0003e592 add sp, 0x14                                      |         
    0x0003e594 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_5:
    0x0003e598 add.w r1, sl, 2                                   |         r1 = sl + 2;
    0x0003e59c bl 0x3e330                                        |         r0 = fcn_0003e330 (r0, r1);
    0x0003e5a0 cmp r0, 0                                         |         
    0x0003e5a2 bne 0x3e592                                       |         
                                                                 |     } while (r0 != 0);
    0x0003e5a4 ldrd r3, r7, [r4, 0x10]                           |     __asm ("ldrd r3, r7, [r4, 0x10]");
    0x0003e5a8 b 0x3e410                                         |     goto label_3;
                                                                 | label_4:
    0x0003e5aa bx lr                                             |     return;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3ebc8 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0003ebc8 ()                              | void fcn_0003ebc8 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x0003ebc8 ldr r3, [r0, 0x30]                        |     r3 = *((r0 + 0x30));
    0x0003ebca push.w {r4, r5, r6, r7, r8, lr}           |     
    0x0003ebce mov r7, r0                                |     r7 = r0;
    0x0003ebd0 mov r4, r2                                |     r4 = r2;
    0x0003ebd2 mov r6, r1                                |     r6 = r1;
    0x0003ebd4 ldr.w r5, [r3, r2, lsl 2]                 |     offset_0 = r2 << 2;
                                                         |     r5 = *((r3 + offset_0));
                                                         |     if (r5 == 0) {
    0x0003ebd8 cbz r5, 0x3ec0c                           |         goto label_2;
                                                         |     }
    0x0003ebda mov r2, r5                                |     r2 = r5;
    0x0003ebdc bl 0x3ebc8                                |     fcn_0003ebc8 (r0, r1, r2);
                                                         |     do {
                                                         | label_0:
    0x0003ebe0 ldr r2, [r7, 0x28]                        |         r2 = *((r7 + 0x28));
    0x0003ebe2 add.w r5, r5, r5, lsl 1                   |         r5 += (r5 << 1);
    0x0003ebe6 add.w r4, r4, r4, lsl 1                   |         r4 += (r4 << 1);
    0x0003ebea lsls r5, r5, 2                            |         r5 <<= 2;
    0x0003ebec add.w r3, r2, r4, lsl 2                   |         r3 = r2 + (r4 << 2);
    0x0003ebf0 adds r1, r2, r5                           |         r1 = r2 + r5;
    0x0003ebf2 ldrb r2, [r2, r5]                         |         r2 = *((r2 + r5));
    0x0003ebf4 cmp r2, 6                                 |         
                                                         |         if (r2 == 6) {
    0x0003ebf6 beq 0x3ec2e                               |             goto label_3;
                                                         |         }
    0x0003ebf8 ldrb r2, [r3, 1]                          |         r2 = *((r3 + 1));
    0x0003ebfa mov r0, r6                                |         r0 = r6;
    0x0003ebfc pop.w {r4, r5, r6, r7, r8, lr}            |         
    0x0003ec00 lsls r2, r2, 0x19                         |         r2 <<= 0x19;
    0x0003ec02 it pl                                     |         
                                                         |         if (r2 < r2) {
    0x0003ec04 subpl r3, 0xc                             |             r3 -= 0xc;
                                                         |         }
    0x0003ec06 ldrd r1, r2, [r3, 4]                      |         __asm ("ldrd r1, r2, [r3, 4]");
    0x0003ec0a b 0x3e82c                                 |         void (*0x3e82c)() ();
                                                         | label_2:
    0x0003ec0c ldr r3, [r1, 0x10]                        |         r3 = *((r1 + 0x10));
    0x0003ec0e ldr r0, [r1, 8]                           |         r0 = *((r1 + 8));
    0x0003ec10 ldr r2, [r1, 0x14]                        |         r2 = *((r1 + 0x14));
    0x0003ec12 ldr r1, [r1, 0xc]                         |         r1 = *((r1 + 0xc));
    0x0003ec14 cmp r3, r0                                |         
    0x0003ec16 sbcs.w r1, r2, r1                         |         __asm ("sbcs.w r1, r2, r1");
                                                         |         if (r3 >= r0) {
    0x0003ec1a bhs 0x3ec3e                               |             goto label_4;
                                                         |         }
                                                         | label_1:
    0x0003ec1c adds r0, r3, 1                            |         r0 = r3 + 1;
    0x0003ec1e ldr r1, [r6, 4]                           |         r1 = *((r6 + 4));
    0x0003ec20 adc r2, r2, 0                             |         __asm ("adc r2, r2, 0");
    0x0003ec24 str r0, [r6, 0x10]                        |         *((r6 + 0x10)) = r0;
    0x0003ec26 str r2, [r6, 0x14]                        |         *((r6 + 0x14)) = r2;
    0x0003ec28 movs r2, 0x24                             |         r2 = 0x24;
    0x0003ec2a strb r2, [r1, r3]                         |         *((r1 + r3)) = r2;
    0x0003ec2c b 0x3ebe0                                 |         
                                                         |     } while (1);
                                                         | label_3:
    0x0003ec2e ldr r2, [pc, 0x20]                        |     
    0x0003ec30 movs r0, 0x1e                             |     r0 = 0x1e;
    0x0003ec32 ldr r3, [r1, 8]                           |     r3 = *((r1 + 8));
    0x0003ec34 mov r1, r6                                |     r1 = r6;
    0x0003ec36 pop.w {r4, r5, r6, r7, r8, lr}            |     
    0x0003ec3a add r2, pc                                |     r2 = 0x7d890;
    0x0003ec3c b 0x3e79c                                 |     void (*0x3e79c)() ();
                                                         | label_4:
    0x0003ec3e movs r1, 1                                |     r1 = 1;
    0x0003ec40 mov r0, r6                                |     r0 = r6;
    0x0003ec42 bl 0x3e330                                |     r0 = fcn_0003e330 (r0, r1);
    0x0003ec46 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x0003ec48 bne 0x3ebe0                               |         goto label_0;
                                                         |     }
    0x0003ec4a ldrd r3, r2, [r6, 0x10]                   |     __asm ("ldrd r3, r2, [r6, 0x10]");
    0x0003ec4e b 0x3ec1c                                 |     goto label_1;
                                                         | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3f43c */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0003f43c ()                                          | void fcn_0003f43c (int16_t arg1, int16_t arg2) {
                                                                     |     int16_t var_24h_2;
                                                                     |     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_24h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     | label_0:
    0x000095dc bx pc                                                 |     return void (*pc)() ();
                                                                     |     do {
    0x0000965c bx pc                                                 |         return void (*pc)() ();
                                                                     | label_12:
    0x00009f64 bx pc                                                 |         return void (*pc)() ();
    0x0003f43c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |         
    0x0003f440 mov r5, r1                                            |         r5 = r1;
    0x0003f442 ldr r1, [pc, 0x3f4]                                   |         
    0x0003f444 sub sp, 0x2c                                          |         
    0x0003f446 ldr r2, [pc, 0x3f4]                                   |         r2 = *(0x3f83e);
    0x0003f448 add r1, pc                                            |         r1 = 0x7ec86;
    0x0003f44a ldrb r3, [r0]                                         |         r3 = *(r0);
    0x0003f44c ldr.w sl, [pc, 0x3f0]                                 |         
    0x0003f450 ldr r2, [r1, r2]                                      |         
    0x0003f452 subs r3, 1                                            |         r3--;
    0x0003f454 add sl, pc                                            |         sl = 0x7ec98;
    0x0003f456 ldr r2, [r2]                                          |         r2 = *(0x7ec86);
    0x0003f458 str r2, [sp, 0x24]                                    |         var_24h = r2;
    0x0003f45a mov.w r2, 0                                           |         r2 = 0;
    0x0003f45e cmp r3, 6                                             |         
                                                                     |         if (r3 > 6) {
    0x0003f460 bhi.w 0x3f816                                         |             goto label_13;
                                                                     |         }
                                                                     |         /* switch table (7 cases) at 0x3f468 */
    0x0003f464 tbb [pc, r3]                                          |         __asm ("tbb aav.0x000000ff");
    0x0003f470 ldr r2, [pc, 0x3d0]                                   |         
    0x0003f472 ldr r3, [pc, 0x3c8]                                   |         r3 = *(0x3f83e);
    0x0003f474 add r2, pc                                            |         r2 = 0x7ecbc;
    0x0003f476 ldr r3, [r2, r3]                                      |         r3 = *(0x7ecbc);
    0x0003f478 ldr r2, [r3]                                          |         r2 = *(0x7ecbc);
    0x0003f47a ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0003f47c eors r2, r3                                           |         r2 ^= r3;
    0x0003f47e mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0003f482 bne.w 0x3f770                                         |             goto label_11;
                                                                     |         }
    0x0003f486 movs r2, 0                                            |         r2 = 0;
    0x0003f488 mov r1, r5                                            |         r1 = r5;
    0x0003f48a add sp, 0x2c                                          |         
    0x0003f48c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0003f490 b 0x3f374                                             |         void (*0x3f374)() ();
    0x0003f492 ldr r2, [pc, 0x3b4]                                   |         
    0x0003f494 ldr r3, [pc, 0x3a4]                                   |         r3 = *(0x3f83c);
    0x0003f496 add r2, pc                                            |         r2 = 0x7ece4;
    0x0003f498 ldr r3, [r2, r3]                                      |         r3 = *(0x7ece4);
    0x0003f49a ldr r2, [r3]                                          |         r2 = *(0x7ece4);
    0x0003f49c ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0003f49e eors r2, r3                                           |         r2 ^= r3;
    0x0003f4a0 mov.w r3, 0                                           |         r3 = 0;
    0x0003f4a4 it eq                                                 |         
                                                                     |         if (r2 != r3) {
    0x0003f4a6 moveq r1, 1                                           |             r1 = 1;
                                                                     |         }
                                                                     |         if (r2 != r3) {
    0x0003f4a8 bne.w 0x3f770                                         |             goto label_11;
                                                                     |         }
    0x0003f4ac mov r0, r5                                            |         r0 = r5;
    0x0003f4ae add sp, 0x2c                                          |         
    0x0003f4b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0003f4b4 b.w 0x9b10                                            |         void (*0x9b10)() ();
    0x0003f4b8 ldr r2, [pc, 0x390]                                   |         
    0x0003f4ba ldr r3, [pc, 0x380]                                   |         r3 = *(0x3f83e);
    0x0003f4bc add r2, pc                                            |         r2 = 0x7ed0c;
    0x0003f4be ldr r3, [r2, r3]                                      |         r3 = *(0x7ed0c);
    0x0003f4c0 ldr r2, [r3]                                          |         r2 = *(0x7ed0c);
    0x0003f4c2 ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0003f4c4 eors r2, r3                                           |         r2 ^= r3;
    0x0003f4c6 mov.w r3, 0                                           |         r3 = 0;
    0x0003f4ca it eq                                                 |         
                                                                     |         if (r2 != r3) {
    0x0003f4cc moveq r1, 0                                           |             r1 = 0;
                                                                     |         }
                                                                     |         if (r2 != r3) {
    0x0003f4ce bne.w 0x3f770                                         |             goto label_11;
                                                                     |         }
    0x0003f4d2 mov r0, r5                                            |         r0 = r5;
    0x0003f4d4 add sp, 0x2c                                          |         
    0x0003f4d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0003f4da b.w 0x9b10                                            |         void (*0x9b10)() ();
    0x0003f4de ldr r4, [r0, 8]                                       |         r4 = *((r0 + 8));
    0x0003f4e0 ldrb r1, [r4]                                         |         r1 = *(r4);
    0x0003f4e2 cmp r1, 0x2d                                          |         
                                                                     |         if (r1 == 0x2d) {
    0x0003f4e4 beq.w 0x3f702                                         |             goto label_14;
                                                                     |         }
    0x0003f4e8 sub.w r6, r1, 0x30                                    |         r6 = r1 - 0x30;
    0x0003f4ec uxtb r3, r6                                           |         r3 = (int8_t) r6;
    0x0003f4ee cmp r3, 9                                             |         
    0x0003f4f0 it ls                                                 |         
                                                                     |         if (r3 > 9) {
    0x0003f4f2 movls r7, r4                                          |             r7 = r4;
                                                                     |         }
                                                                     |         if (r3 > 9) {
    0x0003f4f4 bhi.w 0x3f710                                         |             goto label_15;
                                                                     |         }
                                                                     | label_7:
    0x0003f4f8 movs r2, 0                                            |         r2 = 0;
    0x0003f4fa movw ip, 0xcccc                                       |         
    0x0003f4fe adds r7, 1                                            |         r7++;
    0x0003f500 movt ip, 0xccc                                        |         ip = 0xccccccc;
    0x0003f504 mov r3, r2                                            |         r3 = r2;
    0x0003f506 mov.w lr, -0x33333334                                 |         lr = -0x33333334;
                                                                     | label_1:
    0x0003f50a cmp.w r2, -0x33333334                                 |         
    0x0003f50e sbcs.w r0, r3, ip                                     |         __asm ("sbcs.w r0, r3, ip");
                                                                     |         if (r2 < -0x33333334) {
    0x0003f512 blt 0x3f5de                                           |             goto label_16;
                                                                     |         }
    0x0003f514 cmp r3, ip                                            |         
    0x0003f516 it eq                                                 |         
                                                                     |         if (r3 == ip) {
    0x0003f518 cmpeq r2, lr                                          |             __asm ("cmpeq r2, lr");
                                                                     |         }
                                                                     |         if (r3 != ip) {
    0x0003f51a bne 0x3f568                                           |             goto label_8;
                                                                     |         }
    0x0003f51c ldrb r3, [r7]                                         |         r3 = *(r7);
    0x0003f51e subs r3, 0x30                                         |         r3 -= 0x30;
    0x0003f520 cmp r6, 9                                             |         
    0x0003f522 it ne                                                 |         
                                                                     |         if (r6 != 9) {
    0x0003f524 cmpne r3, 9                                           |             __asm ("cmpne r3, 9");
                                                                     |         }
                                                                     |         if (r6 < 9) {
    0x0003f526 bls 0x3f568                                           |             goto label_8;
                                                                     |         }
    0x0003f528 subs.w r2, r6, 8                                      |         r2 = r6 - 8;
    0x0003f52c mvn r3, 0x80000000                                    |         r3 = ~0x80000000;
    0x0003f530 adc.w r3, r3, r6, asr 31                              |         __asm ("adc.w r3, r3, r6, asr 31");
    0x0003f534 cmp r6, 8                                             |         
                                                                     |         if (r6 == 8) {
    0x0003f536 beq.w 0x3f74c                                         |             goto label_17;
                                                                     |         }
                                                                     | label_2:
    0x0003f53a cmp r1, 0x2d                                          |         
                                                                     |         if (r1 == 0x2d) {
    0x0003f53c beq.w 0x3f6fa                                         |             goto label_18;
                                                                     |         }
                                                                     | label_6:
    0x0003f540 ldr r0, [pc, 0x30c]                                   |         
    0x0003f542 ldr r1, [pc, 0x2f8]                                   |         r1 = *(0x3f83e);
    0x0003f544 add r0, pc                                            |         r0 = 0x7ed98;
    0x0003f546 ldr r1, [r0, r1]                                      |         r1 = *(0x7ed98);
    0x0003f548 ldr r0, [r1]                                          |         r0 = *(0x7ed98);
    0x0003f54a ldr r1, [sp, 0x24]                                    |         r1 = var_24h;
    0x0003f54c eors r0, r1                                           |         r0 ^= r1;
    0x0003f54e mov.w r1, 0                                           |         r1 = 0;
                                                                     |         if (r0 != r1) {
    0x0003f552 bne.w 0x3f770                                         |             goto label_11;
                                                                     |         }
                                                                     | label_9:
    0x0003f556 mov r0, r5                                            |         r0 = r5;
    0x0003f558 add sp, 0x2c                                          |         
    0x0003f55a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0003f55e b.w 0x965c                                            |         
                                                                     |     } while (1);
    0x0003f562 ldr r4, [r0, 8]                                       |     r4 = *((r0 + 8));
    0x0003f564 mov r2, r4                                            |     r2 = r4;
                                                                     |     if (r4 != 0) {
    0x0003f566 cbz r4, 0x3f572                                       |         
                                                                     | label_8:
    0x0003f568 mov r0, r4                                            |         r0 = r4;
    0x0003f56a blx 0x9e8c                                            |         r0 = fcn_00009e8c ();
    0x0003f56e bic r2, r0, 0xc0000000                                |         r2 = BIT_MASK (r0, 0xc0000000);
                                                                     |     }
    0x0003f572 movs r3, 1                                            |     r3 = 1;
    0x0003f574 add r1, sp, 0x18                                      |     r1 += var_18h;
    0x0003f576 mov r0, r4                                            |     r0 = r4;
    0x0003f578 bl 0xa5b8                                             |     fcn_0000a5b8 (r0, r1, r2, r3);
    0x0003f57c ldr r2, [pc, 0x2d4]                                   |     
    0x0003f57e ldr r3, [pc, 0x2bc]                                   |     r3 = *(0x3f83e);
    0x0003f580 add r2, pc                                            |     r2 = 0x7edd8;
    0x0003f582 ldr r3, [r2, r3]                                      |     r3 = *(0x7edd8);
    0x0003f584 ldr r2, [r3]                                          |     r2 = *(0x7edd8);
    0x0003f586 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0003f588 eors r2, r3                                           |     r2 ^= r3;
    0x0003f58a mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0003f58e bne.w 0x3f770                                         |         goto label_11;
                                                                     |     }
    0x0003f592 vldr d0, [sp, 0x18]                                   |     __asm ("vldr d0, [sp, 0x18]");
    0x0003f596 mov r0, r5                                            |     r0 = r5;
    0x0003f598 add sp, 0x2c                                          |     
    0x0003f59a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x0003f59e b.w 0x95dc                                            |     goto label_0;
    0x0003f5a2 ldr r3, [r0, 4]                                       |     r3 = *((r0 + 4));
    0x0003f5a4 ldr.w r8, [r0, 8]                                     |     r8 = *((r0 + 8));
    0x0003f5a8 str r3, [sp]                                          |     *(sp) = r3;
    0x0003f5aa ldrb r3, [r0, 1]                                      |     r3 = *((r0 + 1));
    0x0003f5ac lsls r3, r3, 0x1e                                     |     r3 <<= 0x1e;
                                                                     |     if (r3 < r3) {
    0x0003f5ae bmi 0x3f60a                                           |         goto label_19;
                                                                     |     }
    0x0003f5b0 ldr r2, [pc, 0x2a4]                                   |     
    0x0003f5b2 ldr r3, [pc, 0x288]                                   |     r3 = *(0x3f83e);
    0x0003f5b4 add r2, pc                                            |     r2 = 0x7ee10;
    0x0003f5b6 ldr r3, [r2, r3]                                      |     r3 = *(0x7ee10);
    0x0003f5b8 ldr r2, [r3]                                          |     r2 = *(0x7ee10);
    0x0003f5ba ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0003f5bc eors r2, r3                                           |     r2 ^= r3;
    0x0003f5be mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0003f5c2 bne.w 0x3f770                                         |         goto label_11;
                                                                     |     }
    0x0003f5c6 ldr r2, [sp]                                          |     r2 = *(sp);
    0x0003f5c8 mov.w r3, -1                                          |     r3 = -1;
    0x0003f5cc add.w r1, r8, 1                                       |     r1 = r8 + 1;
    0x0003f5d0 mov r0, r5                                            |     r0 = r5;
    0x0003f5d2 subs r2, 2                                            |     r2 -= 2;
                                                                     | label_4:
    0x0003f5d4 add sp, 0x2c                                          |     
    0x0003f5d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x0003f5da b.w 0x9b6c                                            |     void (*0x9b6c)() ();
                                                                     | label_16:
    0x0003f5de lsl.w r8, r3, 2                                       |     r8 = r3 << 2;
    0x0003f5e2 lsls r0, r2, 2                                        |     r0 = r2 << 2;
    0x0003f5e4 orr.w r8, r8, r2, lsr 30                              |     r8 |= (r2 >> 30);
    0x0003f5e8 adds r2, r0, r2                                       |     r2 = r0 + r2;
    0x0003f5ea ldrb r0, [r7], 1                                      |     r0 = *(r7);
                                                                     |     r7++;
    0x0003f5ee adc.w r8, r3, r8                                      |     __asm ("adc.w r8, r3, r8");
    0x0003f5f2 adds r2, r2, r2                                       |     r2 += r2;
    0x0003f5f4 adc.w r8, r8, r8                                      |     __asm ("adc.w r8, r8, r8");
    0x0003f5f8 adds r2, r6, r2                                       |     r2 = r6 + r2;
    0x0003f5fa adc.w r3, r8, r6, asr 31                              |     __asm ("adc.w r3, r8, r6, asr 31");
    0x0003f5fe sub.w r6, r0, 0x30                                    |     r6 = r0 - 0x30;
    0x0003f602 uxtb r0, r6                                           |     r0 = (int8_t) r6;
    0x0003f604 cmp r0, 9                                             |     
                                                                     |     if (r0 < 9) {
    0x0003f606 bls 0x3f50a                                           |         goto label_1;
                                                                     |     }
    0x0003f608 b 0x3f53a                                             |     goto label_2;
                                                                     | label_19:
    0x0003f60a ldr r4, [sp]                                          |     r4 = *(sp);
    0x0003f60c adds r0, r4, 1                                        |     r0 = r4 + 1;
    0x0003f60e blx 0x9524                                            |     r0 = fcn_00009524 ();
    0x0003f612 mov sb, r0                                            |     sb = r0;
    0x0003f614 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003f616 beq.w 0x3f774                                         |         goto label_20;
                                                                     |     }
    0x0003f61a add.w fp, r4, -1                                      |     
    0x0003f61e cmp.w fp, 1                                           |     
    0x0003f622 itt ls                                                |     
                                                                     |     if (fp > 1) {
    0x0003f624 movls r7, r0                                          |         r7 = r0;
                                                                     |     }
                                                                     |     if (fp > 1) {
    0x0003f626 movls r2, 0                                           |         r2 = 0;
                                                                     |     }
                                                                     |     if (fp < 1) {
    0x0003f628 bls 0x3f6bc                                           |         goto label_21;
                                                                     |     }
    0x0003f62a movs r6, 0                                            |     r6 = 0;
    0x0003f62c movs r4, 1                                            |     r4 = 1;
    0x0003f62e b 0x3f63a                                             |     
                                                                     |     while (r3 != 0x5c) {
    0x0003f630 adds r6, 1                                            |         r6++;
    0x0003f632 strb r3, [r7]                                         |         *(r7) = r3;
                                                                     | label_3:
    0x0003f634 adds r4, 1                                            |         r4++;
    0x0003f636 cmp r4, fp                                            |         
                                                                     |         if (r4 >= fp) {
    0x0003f638 bhs 0x3f6b6                                           |             goto label_22;
                                                                     |         }
    0x0003f63a ldrb.w r3, [r8, r4]                                   |         r3 = *((r8 + r4));
    0x0003f63e add.w r7, sb, r6                                      |         r7 = sb + r6;
    0x0003f642 cmp r3, 0x5c                                          |         
    0x0003f644 bne 0x3f630                                           |         
                                                                     |     }
    0x0003f646 adds r2, r4, 1                                        |     r2 = r4 + 1;
    0x0003f648 ldrb.w r3, [r8, r2]                                   |     r3 = *((r8 + r2));
    0x0003f64c cmp r3, 0x75                                          |     
                                                                     |     if (r3 == 0x75) {
    0x0003f64e beq 0x3f67a                                           |         goto label_23;
                                                                     |     }
    0x0003f650 sub.w r1, r3, 0x62                                    |     r1 = r3 - 0x62;
    0x0003f654 cmp r1, 0x12                                          |     
                                                                     |     if (r1 > 0x12) {
    0x0003f656 bhi 0x3f672                                           |         goto label_5;
                                                                     |     }
                                                                     |     /* switch table (19 cases) at 0x3f65c */
    0x0003f658 tbb [pc, r1]                                          |     __asm ("tbb aav.0x000000ff");
    0x0003f670 movs r3, 0xd                                          |     r3 = 0xd;
                                                                     |     do {
                                                                     | label_5:
    0x0003f672 adds r6, 1                                            |         r6++;
    0x0003f674 mov r4, r2                                            |         r4 = r2;
    0x0003f676 strb r3, [r7]                                         |         *(r7) = r3;
    0x0003f678 b 0x3f634                                             |         goto label_3;
                                                                     | label_23:
    0x0003f67a adds r0, r4, 2                                        |         r0 = r4 + 2;
    0x0003f67c add r0, r8                                            |         r0 += r8;
    0x0003f67e bl 0xcd94                                             |         fcn_0000cd94 (r0);
    0x0003f682 adds r2, r4, 5                                        |         r2 = r4 + 5;
    0x0003f684 mov r3, r0                                            |         r3 = r0;
                                                                     |         if (r0 != 0) {
    0x0003f686 cbz r0, 0x3f6ba                                       |             
    0x0003f688 cmp r0, 0x7f                                          |             
    0x0003f68a add.w r1, r6, 1                                       |             r1 = r6 + 1;
                                                                     |             if (r0 < 0x7f) {
    0x0003f68e bls 0x3f6e2                                           |                 goto label_24;
                                                                     |             }
    0x0003f690 cmp.w r3, 0x800                                       |             
    0x0003f694 add.w r0, r6, 2                                       |             r0 = r6 + 2;
    0x0003f698 str r0, [sp, 4]                                       |             var_4h = r0;
                                                                     |             if (r3 >= 0x800) {
    0x0003f69a bhs 0x3f716                                           |                 goto label_25;
                                                                     |             }
    0x0003f69c mov r4, r2                                            |             r4 = r2;
    0x0003f69e lsrs r2, r3, 6                                        |             r2 = r3 >> 6;
    0x0003f6a0 and r3, r3, 0x3f                                      |             r3 &= 0x3f;
    0x0003f6a4 orn r3, r3, 0x7f                                      |             r3 |= 0x7f;
                                                                     |             r3 = ~r3;
    0x0003f6a8 orn r2, r2, 0x3f                                      |             r2 |= 0x3f;
                                                                     |             r2 = ~r2;
    0x0003f6ac strb r2, [r7]                                         |             *(r7) = r2;
    0x0003f6ae mov r6, r0                                            |             r6 = r0;
    0x0003f6b0 strb.w r3, [sb, r1]                                   |             *((sb + r1)) = r3;
    0x0003f6b4 b 0x3f634                                             |             goto label_3;
                                                                     | label_22:
    0x0003f6b6 add.w r7, sb, r6                                      |             r7 = sb + r6;
                                                                     |         }
    0x0003f6ba mov r2, r6                                            |         r2 = r6;
                                                                     | label_21:
    0x0003f6bc movs r3, 0                                            |         r3 = 0;
    0x0003f6be ldr r1, [pc, 0x19c]                                   |         
    0x0003f6c0 strb r3, [r7]                                         |         *(r7) = r3;
    0x0003f6c2 ldr r3, [pc, 0x178]                                   |         r3 = *(0x3f83e);
    0x0003f6c4 add r1, pc                                            |         r1 = 0x7ef26;
    0x0003f6c6 ldr r3, [r1, r3]                                      |         r3 = *(0x7ef26);
    0x0003f6c8 ldr r1, [r3]                                          |         r1 = *(0x7ef26);
    0x0003f6ca ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0003f6cc eors r1, r3                                           |         r1 ^= r3;
    0x0003f6ce mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r1 != r3) {
    0x0003f6d2 bne 0x3f770                                           |             goto label_11;
                                                                     |         }
    0x0003f6d4 ldr r3, [pc, 0x188]                                   |         r3 = *(0x3f860);
    0x0003f6d6 mov r1, sb                                            |         r1 = sb;
    0x0003f6d8 mov r0, r5                                            |         r0 = r5;
    0x0003f6da ldr.w r3, [sl, r3]                                    |         r3 = *((sl + r3));
    0x0003f6de str r3, [sp]                                          |         *(sp) = r3;
    0x0003f6e0 b 0x3f5d4                                             |         goto label_4;
                                                                     | label_24:
    0x0003f6e2 mov r6, r1                                            |         r6 = r1;
    0x0003f6e4 mov r4, r2                                            |         r4 = r2;
    0x0003f6e6 strb r0, [r7]                                         |         *(r7) = r0;
    0x0003f6e8 b 0x3f634                                             |         goto label_3;
    0x0003f6ea movs r3, 9                                            |         r3 = 9;
    0x0003f6ec b 0x3f672                                             |         
                                                                     |     } while (1);
    0x0003f6ee movs r3, 0xa                                          |     r3 = 0xa;
    0x0003f6f0 b 0x3f672                                             |     goto label_5;
    0x0003f6f2 movs r3, 0xc                                          |     r3 = 0xc;
    0x0003f6f4 b 0x3f672                                             |     goto label_5;
    0x0003f6f6 movs r3, 8                                            |     r3 = 8;
    0x0003f6f8 b 0x3f672                                             |     goto label_5;
                                                                     | label_18:
    0x0003f6fa rsbs r2, r2, 0                                        |     r2 -= ;
    0x0003f6fc sbc.w r3, r3, r3, lsl 1                               |     __asm ("sbc.w r3, r3, r3, lsl 1");
    0x0003f700 b 0x3f540                                             |     goto label_6;
                                                                     | label_14:
    0x0003f702 ldrb r6, [r4, 1]                                      |     r6 = *((r4 + 1));
    0x0003f704 adds r7, r4, 1                                        |     r7 = r4 + 1;
    0x0003f706 subs r6, 0x30                                         |     r6 -= 0x30;
    0x0003f708 uxtb r3, r6                                           |     r3 = (int8_t) r6;
    0x0003f70a cmp r3, 9                                             |     
                                                                     |     if (r3 < 9) {
    0x0003f70c bls.w 0x3f4f8                                         |         goto label_7;
                                                                     |     }
                                                                     | label_15:
    0x0003f710 movs r2, 0                                            |     r2 = 0;
    0x0003f712 mov r3, r2                                            |     r3 = r2;
    0x0003f714 b 0x3f540                                             |     goto label_6;
                                                                     | label_25:
    0x0003f716 and ip, r3, 0xfc00                                    |     
    0x0003f71a adds r0, r6, 3                                        |     r0 = r6 + 3;
    0x0003f71c cmp.w ip, 0xd800                                      |     
    0x0003f720 str r0, [sp, 8]                                       |     var_8h = r0;
                                                                     |     if (ip == 0xd800) {
    0x0003f722 beq 0x3f794                                           |         goto label_26;
                                                                     |     }
                                                                     | label_10:
    0x0003f724 mov r4, r2                                            |     r4 = r2;
    0x0003f726 lsrs r2, r3, 0xc                                      |     r2 = r3 >> 0xc;
    0x0003f728 ldr r6, [sp, 8]                                       |     r6 = var_8h;
    0x0003f72a orn r2, r2, 0x1f                                      |     r2 |= 0x1f;
                                                                     |     r2 = ~r2;
    0x0003f72e strb r2, [r7]                                         |     *(r7) = r2;
    0x0003f730 ubfx r2, r3, 6, 6                                     |     r2 = (r3 >> 6) & ((1 << 6) - 1);
    0x0003f734 orn r2, r2, 0x7f                                      |     r2 |= 0x7f;
                                                                     |     r2 = ~r2;
    0x0003f738 and r3, r3, 0x3f                                      |     r3 &= 0x3f;
    0x0003f73c strb.w r2, [sb, r1]                                   |     *((sb + r1)) = r2;
    0x0003f740 orn r3, r3, 0x7f                                      |     r3 |= 0x7f;
                                                                     |     r3 = ~r3;
    0x0003f744 ldr r2, [sp, 4]                                       |     r2 = var_4h;
    0x0003f746 strb.w r3, [sb, r2]                                   |     *((sb + r2)) = r3;
    0x0003f74a b 0x3f634                                             |     goto label_3;
                                                                     | label_17:
    0x0003f74c cmp r1, 0x2d                                          |     
                                                                     |     if (r1 != 0x2d) {
    0x0003f74e bne.w 0x3f568                                         |         goto label_8;
                                                                     |     }
    0x0003f752 ldr r2, [pc, 0x110]                                   |     
    0x0003f754 ldr r3, [pc, 0xe4]                                    |     r3 = *(0x3f83c);
    0x0003f756 add r2, pc                                            |     r2 = 0x7efc0;
    0x0003f758 ldr r3, [r2, r3]                                      |     r3 = *(0x7efc0);
    0x0003f75a ldr r2, [r3]                                          |     r2 = *(0x7efc0);
    0x0003f75c ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0003f75e eors r2, r3                                           |     r2 ^= r3;
    0x0003f760 mov.w r3, 0                                           |     r3 = 0;
    0x0003f764 itt eq                                                |     
                                                                     |     if (r2 != r3) {
    0x0003f766 moveq r2, 0                                           |         r2 = 0;
                                                                     |     }
                                                                     |     if (r2 == r3) {
    0x0003f768 moveq r3, -0x80000000                                 |         r3 = -0x80000000;
                                                                     |         goto label_27;
                                                                     |     }
                                                                     |     if (r2 == r3) {
                                                                     | label_27:
    0x0003f76c beq.w 0x3f556                                         |         goto label_9;
                                                                     |     }
                                                                     |     do {
                                                                     | label_11:
    0x0003f770 blx 0x9b44                                            |         fcn_00009b44 ();
                                                                     | label_20:
    0x0003f774 ldr r2, [pc, 0xf0]                                    |         
    0x0003f776 ldr r3, [pc, 0xc4]                                    |         r3 = *(0x3f83e);
    0x0003f778 add r2, pc                                            |         r2 = 0x7efe4;
    0x0003f77a ldr r3, [r2, r3]                                      |         r3 = *(0x7efe4);
    0x0003f77c ldr r2, [r3]                                          |         r2 = *(0x7efe4);
    0x0003f77e ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0003f780 eors r2, r3                                           |         r2 ^= r3;
    0x0003f782 mov.w r3, 0                                           |         r3 = 0;
    0x0003f786 bne 0x3f770                                           |         
                                                                     |     } while (r2 != r3);
    0x0003f788 mov r0, r5                                            |     r0 = r5;
    0x0003f78a add sp, 0x2c                                          |     
    0x0003f78c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x0003f790 b.w 0x9714                                            |     void (*0x9714)() ();
                                                                     | label_26:
    0x0003f794 ldr r0, [sp]                                          |     r0 = *(sp);
    0x0003f796 subs r0, 6                                            |     r0 -= 6;
    0x0003f798 cmp r2, r0                                            |     
                                                                     |     if (r2 >= r0) {
    0x0003f79a bhs 0x3f724                                           |         goto label_10;
                                                                     |     }
    0x0003f79c add.w r0, r8, r4                                      |     r0 = r8 + r4;
    0x0003f7a0 ldrb.w ip, [r0, 6]                                    |     ip = *((r0 + 6));
    0x0003f7a4 cmp.w ip, 0x5c                                        |     
                                                                     |     if (ip != 0x5c) {
    0x0003f7a8 bne 0x3f724                                           |         goto label_10;
                                                                     |     }
    0x0003f7aa ldrb r0, [r0, 7]                                      |     r0 = *((r0 + 7));
    0x0003f7ac cmp r0, 0x75                                          |     
                                                                     |     if (r0 != 0x75) {
    0x0003f7ae bne 0x3f724                                           |         goto label_10;
                                                                     |     }
    0x0003f7b0 add.w r0, r4, 8                                       |     r0 = r4 + 8;
    0x0003f7b4 strd r2, r1, [sp, 0x10]                               |     __asm ("strd r2, r1, [sp, 0x10]");
    0x0003f7b8 add r0, r8                                            |     r0 += r8;
    0x0003f7ba str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0003f7bc bl 0xcd94                                             |     r0 = fcn_0000cd94 (r0);
    0x0003f7c0 and ip, r0, 0xfc00                                    |     
    0x0003f7c4 ldrd r3, r2, [sp, 0xc]                                |     __asm ("ldrd r3, r2, [var_ch]");
    0x0003f7c8 cmp.w ip, 0xdc00                                      |     
    0x0003f7cc ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
                                                                     |     if (ip != 0xdc00) {
    0x0003f7ce bne 0x3f724                                           |         goto label_10;
                                                                     |     }
    0x0003f7d0 mov.w r2, 0xfc00                                      |     r2 = 0xfc00;
    0x0003f7d4 ubfx r0, r0, 0, 0xa                                   |     r0 = (r0 >> 0) & ((1 << 0xa) - 1);
    0x0003f7d8 movt r2, 0xf                                          |     r2 = (r2 & 0xFFFF) | 0xf0000;
    0x0003f7dc adds r4, 0xb                                          |     r4 += 0xb;
    0x0003f7de and.w r3, r2, r3, lsl 10                              |     r3 = r2 & (r3 << 10);
    0x0003f7e2 movs r2, 0                                            |     r2 = 0;
    0x0003f7e4 adds r6, 4                                            |     r6 += 4;
    0x0003f7e6 orrs r3, r0                                           |     r3 |= r0;
    0x0003f7e8 add.w r3, r3, 0x10000                                 |     r3 += 0x10000;
    0x0003f7ec lsrs r1, r3, 0x12                                     |     r1 = r3 >> 0x12;
    0x0003f7ee bfi r2, r1, 0, 8                                      |     value_0 = BIT_MASK (0, 8);
                                                                     |     value_1 = r1 & value_0;
                                                                     |     value_0 = ~value_0;
                                                                     |     r2 &= value_0;
                                                                     |     r2 |= value_1;
    0x0003f7f2 ubfx r1, r3, 0xc, 6                                   |     r1 = (r3 >> 0xc) & ((1 << 6) - 1);
    0x0003f7f6 bfi r2, r1, 8, 8                                      |     value_2 = BIT_MASK (8, 8);
                                                                     |     value_3 = r1 & value_2;
                                                                     |     value_2 = ~value_2;
                                                                     |     r2 &= value_2;
                                                                     |     r2 |= value_3;
    0x0003f7fa ubfx r1, r3, 6, 6                                     |     r1 = (r3 >> 6) & ((1 << 6) - 1);
    0x0003f7fe bfi r2, r1, 0x10, 8                                   |     value_4 = BIT_MASK (0x10, 8);
                                                                     |     value_5 = r1 & value_4;
                                                                     |     value_4 = ~value_4;
                                                                     |     r2 &= value_4;
                                                                     |     r2 |= value_5;
    0x0003f802 and r3, r3, 0x3f                                      |     r3 &= 0x3f;
    0x0003f806 bfi r2, r3, 0x18, 8                                   |     value_6 = BIT_MASK (0x18, 8);
                                                                     |     value_7 = r3 & value_6;
                                                                     |     value_6 = ~value_6;
                                                                     |     r2 &= value_6;
                                                                     |     r2 |= value_7;
    0x0003f80a orr r2, r2, 0x80808080                                |     r2 |= 0x80808080;
    0x0003f80e orr r2, r2, 0x70                                      |     r2 |= 0x70;
    0x0003f812 str r2, [r7]                                          |     *(r7) = r2;
    0x0003f814 b 0x3f634                                             |     goto label_3;
                                                                     | label_13:
    0x0003f816 ldr r2, [pc, 0x54]                                    |     
    0x0003f818 ldr r3, [pc, 0x20]                                    |     r3 = *(0x3f83c);
    0x0003f81a add r2, pc                                            |     r2 = 0x7f08c;
    0x0003f81c ldr r3, [r2, r3]                                      |     r3 = *(0x7f08c);
    0x0003f81e ldr r2, [r3]                                          |     r2 = *(0x7f08c);
    0x0003f820 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0003f822 eors r2, r3                                           |     r2 ^= r3;
    0x0003f824 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0003f828 bne 0x3f770                                           |         goto label_11;
                                                                     |     }
    0x0003f82a mov r0, r5                                            |     r0 = r5;
    0x0003f82c add sp, 0x2c                                          |     
    0x0003f82e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x0003f832 b.w 0x9f64                                            |     goto label_12;
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3fb1c */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0003fb1c ()                                          | void fcn_0003fb1c (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0003fb1c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0003fb20 sub sp, 0x24                                          |     
    0x0003fb22 ldrb r3, [r2]                                         |     r3 = *(r2);
    0x0003fb24 mov sl, r2                                            |     sl = r2;
    0x0003fb26 str r0, [sp, 0x10]                                    |     var_10h = r0;
    0x0003fb28 cmp r3, 7                                             |     
                                                                     |     if (r3 == 7) {
    0x0003fb2a beq 0x3fb36                                           |         goto label_8;
                                                                     |     }
    0x0003fb2c mov r6, sl                                            |     r6 = sl;
                                                                     |     do {
                                                                     | label_2:
    0x0003fb2e mov r0, r6                                            |         r0 = r6;
    0x0003fb30 add sp, 0x24                                          |         
    0x0003fb32 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_8:
    0x0003fb36 add.w r3, r1, r1, lsl 1                               |         r3 = r1 + (r1 << 1);
    0x0003fb3a ldr r6, [r0, 8]                                       |         r6 = *((r0 + 8));
    0x0003fb3c mov ip, r1                                            |         
    0x0003fb3e lsl.w lr, r3, 2                                       |         lr = r3 << 2;
    0x0003fb42 ldrb.w r3, [r6, lr]                                   |         r3 = *((r6 + lr));
    0x0003fb46 add r6, lr                                            |         r6 += lr;
    0x0003fb48 cmp r3, 7                                             |         
                                                                     |         if (r3 != 7) {
    0x0003fb4a bne.w 0x3fd40                                         |             goto label_9;
                                                                     |         }
    0x0003fb4e ldr.w r3, [sl, 4]                                     |         r3 = *((sl + 4));
    0x0003fb52 cmp r3, 1                                             |         
    0x0003fb54 ittt hi                                               |         
                                                                     |         if (r3 <= 1) {
    0x0003fb56 movhi fp, 1                                           |             
                                                                     |         }
                                                                     |         if (r3 <= 1) {
    0x0003fb5a strhi ip, [sp, 0x14]                                  |             var_14h = ip;
                                                                     |         }
                                                                     |         if (r3 > 1) {
    0x0003fb5e strd lr, r1, [sp, 0x18]                               |             __asm ("strd lr, r1, [var_18h]");
                                                                     |         }
    0x0003fb62 bls 0x3fb2e                                           |         
                                                                     |     } while (r3 < 1);
                                                                     | label_1:
    0x0003fb64 add.w r8, fp, fp, lsl 1                               |     r8 = fp + (fp << 1);
    0x0003fb68 lsl.w r8, r8, 2                                       |     r8 <<= 2;
    0x0003fb6c add.w r3, r8, 0xc                                     |     r3 = r8 + 0xc;
    0x0003fb70 add.w r2, sl, r8                                      |     r2 = sl + r8;
    0x0003fb74 ldr.w r8, [r6, 4]                                     |     r8 = *((r6 + 4));
    0x0003fb78 ldrb.w r1, [sl, r3]                                   |     r1 = *((sl + r3));
    0x0003fb7c str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0003fb7e add r3, sl                                            |     r3 += sl;
    0x0003fb80 cmp.w r8, 1                                           |     
    0x0003fb84 ldrd r7, sb, [r2, 4]                                  |     __asm ("ldrd r7, sb, [r2, 4]");
    0x0003fb88 str r3, [sp, 8]                                       |     var_8h = r3;
                                                                     |     if (r8 < 1) {
    0x0003fb8a bls 0x3fbf8                                           |         goto label_10;
                                                                     |     }
    0x0003fb8c mov r3, r8                                            |     r3 = r8;
    0x0003fb8e movs r5, 1                                            |     r5 = 1;
    0x0003fb90 mov r8, r7                                            |     r8 = r7;
    0x0003fb92 str r1, [sp, 4]                                       |     var_4h = r1;
    0x0003fb94 mov r7, r3                                            |     r7 = r3;
    0x0003fb96 b 0x3fbae                                             |     
                                                                     |     while (r1 != r8) {
                                                                     | label_0:
    0x0003fb98 adds r4, 0xc                                          |         r4 += 0xc;
    0x0003fb9a movs r3, 2                                            |         r3 = 2;
    0x0003fb9c ldrb r1, [r6, r4]                                     |         r1 = *((r6 + r4));
    0x0003fb9e add r4, r6                                            |         r4 += r6;
    0x0003fba0 cmp r1, 5                                             |         
    0x0003fba2 itt hi                                                |         
                                                                     |         if (r1 <= 5) {
    0x0003fba4 ldrhi r3, [r4, 4]                                     |             r3 = *((r4 + 4));
                                                                     |         }
                                                                     |         if (r1 <= 5) {
    0x0003fba6 addhi r3, 2                                           |             r3 += 2;
                                                                     |         }
    0x0003fba8 add r5, r3                                            |         r5 += r3;
    0x0003fbaa cmp r5, r7                                            |         
                                                                     |         if (r5 >= r7) {
    0x0003fbac bhs 0x3fbf4                                           |             goto label_11;
                                                                     |         }
    0x0003fbae add.w r4, r5, r5, lsl 1                               |         r4 = r5 + (r5 << 1);
    0x0003fbb2 lsls r4, r4, 2                                        |         r4 <<= 2;
    0x0003fbb4 adds r3, r6, r4                                       |         r3 = r6 + r4;
    0x0003fbb6 ldr r1, [r3, 4]                                       |         r1 = *((r3 + 4));
    0x0003fbb8 cmp r1, r8                                            |         
    0x0003fbba bne 0x3fb98                                           |         
                                                                     |     }
    0x0003fbbc ldr r0, [r3, 8]                                       |     r0 = *((r3 + 8));
    0x0003fbbe mov r2, r8                                            |     r2 = r8;
    0x0003fbc0 mov r1, sb                                            |     r1 = sb;
    0x0003fbc2 blx 0x95a4                                            |     r0 = fcn_000095a4 ();
    0x0003fbc6 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0003fbc8 bne 0x3fb98                                           |         goto label_0;
                                                                     |     }
    0x0003fbca adds r4, 0xc                                          |     r4 += 0xc;
    0x0003fbcc mov r3, r7                                            |     r3 = r7;
    0x0003fbce adds r0, r6, r4                                       |     r0 = r6 + r4;
    0x0003fbd0 mov r7, r8                                            |     r7 = r8;
    0x0003fbd2 ldrb r2, [r0, 1]                                      |     r2 = *((r0 + 1));
    0x0003fbd4 mov r8, r3                                            |     r8 = r3;
    0x0003fbd6 ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0003fbd8 tst.w r2, 0x14                                        |     
                                                                     |     if ((r2 & 0x14) != 0) {
    0x0003fbdc bne 0x3fc34                                           |         goto label_12;
                                                                     |     }
                                                                     |     if (r1 != 0) {
    0x0003fbde cbnz r1, 0x3fbfe                                      |         goto label_13;
                                                                     |     }
    0x0003fbe0 movs r3, 2                                            |     r3 = 2;
    0x0003fbe2 orr r2, r2, 4                                         |     r2 |= 4;
    0x0003fbe6 strb r2, [r0, 1]                                      |     *((r0 + 1)) = r2;
                                                                     | label_3:
    0x0003fbe8 ldr.w r2, [sl, 4]                                     |     r2 = *((sl + 4));
    0x0003fbec add fp, r3                                            |     
    0x0003fbee cmp r2, fp                                            |     
                                                                     |     if (r2 > fp) {
    0x0003fbf0 bhi 0x3fb64                                           |         goto label_1;
                                                                     |     }
    0x0003fbf2 b 0x3fb2e                                             |     goto label_2;
                                                                     | label_11:
    0x0003fbf4 ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0003fbf6 mov r7, r8                                            |     r7 = r8;
                                                                     |     if (r1 != 0) {
                                                                     |         do {
                                                                     | label_10:
    0x0003fbf8 cbnz r1, 0x3fc44                                      |             goto label_14;
                                                                     |         }
                                                                     | label_4:
    0x0003fbfa movs r3, 2                                            |         r3 = 2;
    0x0003fbfc b 0x3fbe8                                             |         goto label_3;
                                                                     | label_13:
    0x0003fbfe ldr r3, [sp, 0x1c]                                    |         r3 = var_1ch;
    0x0003fc00 ldr r2, [sp, 8]                                       |         r2 = var_8h;
    0x0003fc02 ldr r0, [sp, 0x10]                                    |         r0 = var_10h;
    0x0003fc04 adds r1, r3, 1                                        |         r1 = r3 + 1;
    0x0003fc06 add r1, r5                                            |         r1 += r5;
    0x0003fc08 bl 0x3fb1c                                            |         r0 = fcn_0003fb1c (r0, r1, r2);
    0x0003fc0c cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0003fc0e beq.w 0x3fd4a                                         |             goto label_15;
                                                                     |         }
    0x0003fc12 ldr r3, [sp, 0x10]                                    |         r3 = var_10h;
    0x0003fc14 ldr r6, [r3, 8]                                       |         r6 = *((r3 + 8));
    0x0003fc16 ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0003fc18 add r6, r3                                            |         r6 += r3;
    0x0003fc1a ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0003fc1c add r4, r6                                            |         r4 += r6;
    0x0003fc1e ldr.w r8, [r6, 4]                                     |         r8 = *((r6 + 4));
    0x0003fc22 cmp r4, r0                                            |         
    0x0003fc24 ldrb.w r1, [sl, r3]                                   |         r1 = *((sl + r3));
                                                                     |         if (r4 != r0) {
    0x0003fc28 beq 0x3fc34                                           |             
    0x0003fc2a ldrb r2, [r4, 1]                                      |             r2 = *((r4 + 1));
    0x0003fc2c str r0, [r4, 8]                                       |             *((r4 + 8)) = r0;
    0x0003fc2e orr r2, r2, 0x10                                      |             r2 |= 0x10;
    0x0003fc32 strb r2, [r4, 1]                                      |             *((r4 + 1)) = r2;
                                                                     |         }
                                                                     | label_12:
    0x0003fc34 cmp r5, r8                                            |         
    0x0003fc36 bhs 0x3fbf8                                           |         
                                                                     |     } while (r5 >= r8);
                                                                     | label_5:
    0x0003fc38 cmp r1, 5                                             |     
                                                                     |     if (r1 < 5) {
    0x0003fc3a bls 0x3fbfa                                           |         goto label_4;
                                                                     |     }
    0x0003fc3c ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0003fc3e ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x0003fc40 adds r3, 2                                            |     r3 += 2;
    0x0003fc42 b 0x3fbe8                                             |     goto label_3;
                                                                     | label_14:
    0x0003fc44 ldr r1, [sp, 0x10]                                    |     r1 = var_10h;
    0x0003fc46 ldr r2, [r1, 8]                                       |     r2 = *((r1 + 8));
    0x0003fc48 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0003fc4a beq 0x3fcfa                                           |         goto label_16;
                                                                     |     }
    0x0003fc4c ldrd r3, r1, [r1]                                     |     __asm ("ldrd r3, r1, [r1]");
    0x0003fc50 cmp r3, r1                                            |     
                                                                     |     if (r3 >= r1) {
    0x0003fc52 bhs 0x3fcfa                                           |         goto label_16;
                                                                     |     }
    0x0003fc54 add.w r0, r3, r3, lsl 1                               |     r0 = r3 + (r3 << 1);
    0x0003fc58 movs r5, 7                                            |     r5 = 7;
    0x0003fc5a movs r6, 2                                            |     r6 = 2;
    0x0003fc5c strh.w r5, [r2, r0, lsl 2]                            |     offset_0 = r0 << 2;
                                                                     |     *((r2 + offset_0)) = r5;
    0x0003fc60 add.w r0, r2, r0, lsl 2                               |     r0 = r2 + (r0 << 2);
    0x0003fc64 movs r5, 0                                            |     r5 = 0;
    0x0003fc66 mov r4, r3                                            |     r4 = r3;
    0x0003fc68 strd r6, r5, [r0, 4]                                  |     __asm ("strd r6, r5, [r0, 4]");
    0x0003fc6c adds r3, 1                                            |     r3++;
    0x0003fc6e ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0003fc70 cmp r3, r1                                            |     
    0x0003fc72 str r3, [r0]                                          |     *(r0) = r3;
                                                                     |     if (r3 >= r1) {
    0x0003fc74 bhs 0x3fd16                                           |         goto label_17;
                                                                     |     }
                                                                     |     do {
    0x0003fc76 add.w r0, r3, r3, lsl 1                               |         r0 = r3 + (r3 << 1);
    0x0003fc7a movs r5, 5                                            |         r5 = 5;
    0x0003fc7c adds r3, 1                                            |         r3++;
    0x0003fc7e strh.w r5, [r2, r0, lsl 2]                            |         offset_1 = r0 << 2;
                                                                     |         *((r2 + offset_1)) = r5;
    0x0003fc82 add.w r2, r2, r0, lsl 2                               |         r2 += (r0 << 2);
    0x0003fc86 cmp r3, r1                                            |         
    0x0003fc88 strd r7, sb, [r2, 4]                                  |         __asm ("strd r7, sb, [r2, 4]");
    0x0003fc8c ldr r2, [sp, 0x10]                                    |         r2 = var_10h;
    0x0003fc8e str r3, [r2]                                          |         *(r2) = r3;
    0x0003fc90 ldr r2, [r2, 8]                                       |         r2 = *((r2 + 8));
                                                                     |         if (r3 >= r1) {
    0x0003fc92 bhs 0x3fd30                                           |             goto label_18;
                                                                     |         }
                                                                     | label_6:
    0x0003fc94 add.w r1, r3, r3, lsl 1                               |         r1 = r3 + (r3 << 1);
    0x0003fc98 mov.w r0, 1                                           |         r0 = 1;
    0x0003fc9c strh.w r0, [r2, r1, lsl 2]                            |         offset_2 = r1 << 2;
                                                                     |         *((r2 + offset_2)) = r0;
    0x0003fca0 add.w r1, r2, r1, lsl 2                               |         r1 = r2 + (r1 << 2);
    0x0003fca4 movs r0, 0                                            |         r0 = 0;
    0x0003fca6 strd r0, r0, [r1, 4]                                  |         __asm ("strd r0, r0, [r1, 4]");
    0x0003fcaa mov r2, r3                                            |         r2 = r3;
    0x0003fcac ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
    0x0003fcae adds r3, 1                                            |         r3++;
    0x0003fcb0 str r3, [r1]                                          |         *(r1) = r3;
                                                                     | label_7:
    0x0003fcb2 ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
    0x0003fcb4 ldrb r3, [r1, 0x14]                                   |         r3 = *((r1 + 0x14));
    0x0003fcb6 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0003fcb8 bne 0x3fd4a                                           |             goto label_15;
                                                                     |         }
    0x0003fcba mov r0, sl                                            |         r0 = sl;
    0x0003fcbc add.w r2, r2, r2, lsl 1                               |         r2 += (r2 << 1);
    0x0003fcc0 bl 0xce84                                             |         fcn_0000ce84 (r0);
    0x0003fcc4 ldr r6, [r1, 8]                                       |         r6 = *((r1 + 8));
    0x0003fcc6 ldr r1, [sp, 0x14]                                    |         r1 = var_14h;
    0x0003fcc8 str r4, [sp, 0x14]                                    |         var_14h = r4;
    0x0003fcca add.w r3, r6, r2, lsl 2                               |         r3 = r6 + (r2 << 2);
    0x0003fcce add.w r2, r1, r1, lsl 1                               |         r2 = r1 + (r1 << 1);
    0x0003fcd2 subs r1, r4, r1                                       |         r1 = r4 - r1;
    0x0003fcd4 add.w r2, r6, r2, lsl 2                               |         r2 = r6 + (r2 << 2);
    0x0003fcd8 str r1, [r2, 8]                                       |         *((r2 + 8)) = r1;
    0x0003fcda ldr r1, [sp, 0x18]                                    |         r1 = var_18h;
    0x0003fcdc add r6, r1                                            |         r6 += r1;
    0x0003fcde ldrb r1, [r2, 1]                                      |         r1 = *((r2 + 1));
    0x0003fce0 orr r1, r1, 0x20                                      |         r1 |= 0x20;
    0x0003fce4 strb r1, [r2, 1]                                      |         *((r2 + 1)) = r1;
    0x0003fce6 ldr r2, [sp, 8]                                       |         r2 = var_8h;
    0x0003fce8 str r2, [r3, 8]                                       |         *((r3 + 8)) = r2;
    0x0003fcea ldrb r2, [r3, 1]                                      |         r2 = *((r3 + 1));
    0x0003fcec orr r2, r2, 0x10                                      |         r2 |= 0x10;
    0x0003fcf0 strb r2, [r3, 1]                                      |         *((r3 + 1)) = r2;
    0x0003fcf2 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0003fcf4 ldrb.w r1, [sl, r3]                                   |         r1 = *((sl + r3));
    0x0003fcf8 b 0x3fc38                                             |         goto label_5;
                                                                     | label_16:
    0x0003fcfa ldr r5, [sp, 0x10]                                    |         r5 = var_10h;
    0x0003fcfc movs r2, 2                                            |         r2 = 2;
    0x0003fcfe movs r3, 0                                            |         r3 = 0;
    0x0003fd00 movs r1, 7                                            |         r1 = 7;
    0x0003fd02 mov r0, r5                                            |         r0 = r5;
    0x0003fd04 bl 0x3fac0                                            |         fcn_0003fac0 (r0, r1, r2, r3);
    0x0003fd08 ldr r2, [r5, 8]                                       |         r2 = *((r5 + 8));
    0x0003fd0a mov r4, r0                                            |         r4 = r0;
                                                                     |         if (r2 == 0) {
    0x0003fd0c cbz r2, 0x3fd16                                       |             goto label_17;
                                                                     |         }
    0x0003fd0e ldrd r3, r1, [r5]                                     |         __asm ("ldrd r3, r1, [r5]");
    0x0003fd12 cmp r3, r1                                            |         
    0x0003fd14 blo 0x3fc76                                           |         
                                                                     |     } while (r3 <= r1);
                                                                     | label_17:
    0x0003fd16 ldr r5, [sp, 0x10]                                    |     r5 = var_10h;
    0x0003fd18 mov r2, r7                                            |     r2 = r7;
    0x0003fd1a mov r3, sb                                            |     r3 = sb;
    0x0003fd1c movs r1, 5                                            |     r1 = 5;
    0x0003fd1e mov r0, r5                                            |     r0 = r5;
    0x0003fd20 bl 0x3fac0                                            |     fcn_0003fac0 (r0, r1, r2, r3);
    0x0003fd24 ldr r2, [r5, 8]                                       |     r2 = *((r5 + 8));
                                                                     |     if (r2 == 0) {
    0x0003fd26 cbz r2, 0x3fd30                                       |         goto label_18;
                                                                     |     }
    0x0003fd28 ldrd r3, r1, [r5]                                     |     __asm ("ldrd r3, r1, [r5]");
    0x0003fd2c cmp r3, r1                                            |     
                                                                     |     if (r3 <= r1) {
    0x0003fd2e blo 0x3fc94                                           |         goto label_6;
                                                                     |     }
                                                                     | label_18:
    0x0003fd30 movs r3, 0                                            |     r3 = 0;
    0x0003fd32 ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0003fd34 mov r2, r3                                            |     r2 = r3;
    0x0003fd36 movs r1, 1                                            |     r1 = 1;
    0x0003fd38 bl 0x3fac0                                            |     r0 = fcn_0003fac0 (r0, r1, r2, r3);
    0x0003fd3c mov r2, r0                                            |     r2 = r0;
    0x0003fd3e b 0x3fcb2                                             |     goto label_7;
                                                                     | label_9:
    0x0003fd40 mov r0, sl                                            |     r0 = sl;
    0x0003fd42 mov r6, sl                                            |     r6 = sl;
    0x0003fd44 bl 0xce84                                             |     fcn_0000ce84 (r0);
    0x0003fd48 b 0x3fb2e                                             |     goto label_2;
                                                                     | label_15:
    0x0003fd4a movs r6, 0                                            |     r6 = 0;
    0x0003fd4c b 0x3fb2e                                             |     goto label_2;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3fd50 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0003fd50 ()                                      | void fcn_0003fd50 (int16_t arg_48h, int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_1h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0003fd50 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003fd54 mov r4, r1                                        |     r4 = r1;
    0x0003fd56 mov sb, r2                                        |     sb = r2;
    0x0003fd58 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0003fd5a lsls r6, r4, 1                                    |     r6 = r4 << 1;
    0x0003fd5c sub sp, 0x24                                      |     
    0x0003fd5e ldrb r2, [r2]                                     |     r2 = *(r2);
    0x0003fd60 adds r5, r6, r4                                   |     r5 = r6 + r4;
    0x0003fd62 str r1, [sp, 4]                                   |     var_4h = r1;
    0x0003fd64 add.w r5, r1, r5, lsl 2                           |     r5 = r1 + (r5 << 2);
    0x0003fd68 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fd6a beq.w 0x3fea4                                     |         goto label_15;
                                                                 |     }
    0x0003fd6e mov fp, r3                                        |     
    0x0003fd70 ldr.w r3, [pc, 0x49c]                             |     
    0x0003fd74 str.w fp, [sp, 0x1c]                              |     __asm ("str.w fp, [var_1ch]");
    0x0003fd78 add r3, pc                                        |     r3 = 0x7ff8c;
    0x0003fd7a strd r3, r0, [sp, 0x14]                           |     __asm ("strd r3, r0, [var_14h]");
                                                                 | label_2:
    0x0003fd7e ldrb.w ip, [r5, 1]                                |     ip = *((r5 + 1));
    0x0003fd82 ands r3, ip, 8                                    |     r3 = ip & 8;
                                                                 |     if (r3 != ip) {
    0x0003fd86 bne.w 0x40032                                     |         goto label_10;
                                                                 |     }
    0x0003fd8a cmp r2, 0x2e                                      |     
                                                                 |     if (r2 != 0x2e) {
    0x0003fd8c bne.w 0x3feac                                     |         goto label_17;
                                                                 |     }
    0x0003fd90 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0003fd92 cmp r3, 7                                         |     
                                                                 |     if (r3 != 7) {
    0x0003fd94 bne.w 0x40032                                     |         goto label_10;
                                                                 |     }
    0x0003fd98 ldrb.w r3, [sb, 1]                                |     r3 = *((sb + 1));
    0x0003fd9c add.w r2, sb, 1                                   |     r2 = sb + 1;
    0x0003fda0 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0003fda2 cmp r3, 0x22                                      |     
                                                                 |     if (r3 == 0x22) {
    0x0003fda4 beq.w 0x4003c                                     |         goto label_18;
                                                                 |     }
    0x0003fda8 cmp r3, 0                                         |     
    0x0003fdaa it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x0003fdac cmpne r3, 0x2e                                    |         __asm ("cmpne r3, 0x2e");
                                                                 |     }
    0x0003fdae ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x0003fdb0 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0003fdb2 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x0003fdb4 cmp r3, 0x5b                                      |     
    0x0003fdb6 ite eq                                            |     
                                                                 |     if (r3 != 0x5b) {
    0x0003fdb8 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0x5b) {
    0x0003fdba andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x0003fdbe cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fdc0 beq.w 0x40176                                     |         goto label_19;
                                                                 |     }
    0x0003fdc4 add.w r3, sb, 2                                   |     r3 = sb + 2;
                                                                 |     do {
    0x0003fdc8 ldrb r1, [r3]                                     |         r1 = *(r3);
    0x0003fdca mov r0, r3                                        |         r0 = r3;
    0x0003fdcc adds r3, 1                                        |         r3++;
    0x0003fdce cmp r1, 0                                         |         
    0x0003fdd0 it ne                                             |         
                                                                 |         if (r1 != 0) {
    0x0003fdd2 cmpne r1, 0x2e                                    |             __asm ("cmpne r1, 0x2e");
                                                                 |         }
    0x0003fdd4 ite ne                                            |         
                                                                 |         if (r1 == 0) {
    0x0003fdd6 movne r2, 1                                       |             r2 = 1;
                                                                 |         }
                                                                 |         if (r1 != 0) {
    0x0003fdd8 moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
    0x0003fdda cmp r1, 0x5b                                      |         
    0x0003fddc ite eq                                            |         
                                                                 |         if (r1 != 0x5b) {
    0x0003fdde moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r1 == 0x5b) {
    0x0003fde0 andne r2, r2, 1                                   |             r2 &= 1;
                                                                 |         }
    0x0003fde4 cmp r2, 0                                         |         
    0x0003fde6 bne 0x3fdc8                                       |         
                                                                 |     } while (r2 != 0);
    0x0003fde8 sub.w r0, r0, sb                                  |     r0 -= sb;
    0x0003fdec ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003fdee add.w fp, r0, -1                                  |     
    0x0003fdf2 mov r7, fp                                        |     r7 = fp;
    0x0003fdf4 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 | label_4:
    0x0003fdf6 ldr.w sb, [r5, 4]                                 |     sb = *((r5 + 4));
    0x0003fdfa add.w sl, r7, 2                                   |     sl = r7 + 2;
    0x0003fdfe mov r2, r7                                        |     r2 = r7;
    0x0003fe00 mov.w r8, 1                                       |     r8 = 1;
    0x0003fe04 mov r7, sl                                        |     r7 = sl;
    0x0003fe06 mov sl, r6                                        |     sl = r6;
    0x0003fe08 mov r6, sb                                        |     r6 = sb;
                                                                 | label_0:
    0x0003fe0a cmp r8, r6                                        |     
                                                                 |     if (r8 < r6) {
    0x0003fe0c bls 0x3fe34                                       |         goto label_20;
                                                                 |     }
                                                                 |     do {
    0x0003fe0e ldrb r3, [r5, 1]                                  |         r3 = *((r5 + 1));
    0x0003fe10 ands r3, r3, 0x20                                 |         r3 &= 0x20;
                                                                 |         if (r3 == r3) {
    0x0003fe14 beq.w 0x3ffaa                                     |             goto label_21;
                                                                 |         }
    0x0003fe18 ldr r3, [r5, 8]                                   |         r3 = *((r5 + 8));
    0x0003fe1a mov.w r8, 1                                       |         r8 = 1;
    0x0003fe1e add r4, r3                                        |         r4 += r3;
    0x0003fe20 ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x0003fe22 lsl.w sl, r4, 1                                   |         sl = r4 << 1;
    0x0003fe26 add.w r5, sl, r4                                  |         r5 = sl + r4;
    0x0003fe2a add.w r5, r3, r5, lsl 2                           |         r5 = r3 + (r5 << 2);
    0x0003fe2e ldr r6, [r5, 4]                                   |         r6 = *((r5 + 4));
    0x0003fe30 cmp r8, r6                                        |         
    0x0003fe32 bhi 0x3fe0e                                       |         
                                                                 |     } while (r8 > r6);
                                                                 | label_20:
    0x0003fe34 add.w sb, r8, r8, lsl 1                           |     sb = r8 + (r8 << 1);
    0x0003fe38 lsl.w sb, sb, 2                                   |     sb <<= 2;
    0x0003fe3c add.w r3, r5, sb                                  |     r3 = r5 + sb;
    0x0003fe40 ldrb r0, [r3, 1]                                  |     r0 = *((r3 + 1));
    0x0003fe42 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0003fe44 lsls r0, r0, 0x1f                                 |     r0 <<= 0x1f;
                                                                 |     if (r0 >= r0) {
    0x0003fe46 bpl 0x3fe6e                                       |         goto label_22;
                                                                 |     }
    0x0003fe48 cmp r2, r1                                        |     
    0x0003fe4a it eq                                             |     
                                                                 |     if (r2 != r1) {
    0x0003fe4c ldreq r0, [r3, 8]                                 |         r0 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r2 == r1) {
    0x0003fe4e beq 0x3fe76                                       |         goto label_23;
                                                                 |     }
                                                                 |     do {
                                                                 | label_1:
    0x0003fe50 add.w r3, sb, 0xc                                 |         r3 = sb + 0xc;
    0x0003fe54 add.w r8, r8, 1                                   |         r8++;
    0x0003fe58 ldrb r1, [r5, r3]                                 |         r1 = *((r5 + r3));
    0x0003fe5a add.w sb, r5, r3                                  |         sb = r5 + r3;
    0x0003fe5e cmp r1, 5                                         |         
    0x0003fe60 itet hi                                           |         
                                                                 |         if (r1 <= 5) {
    0x0003fe62 ldrhi r3, [sb, 4]                                 |             r3 = *((sb + 4));
                                                                 |         }
                                                                 |         if (r1 <= 5) {
    0x0003fe66 movhi r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r1 > 5) {
    0x0003fe68 adds r3, 1                                        |             r3++;
                                                                 |         }
    0x0003fe6a add r8, r3                                        |         r8 += r3;
    0x0003fe6c b 0x3fe0a                                         |         goto label_0;
                                                                 | label_22:
    0x0003fe6e cmp r7, r1                                        |         
    0x0003fe70 bne 0x3fe50                                       |         
                                                                 |     } while (r7 != r1);
    0x0003fe72 ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x0003fe74 adds r0, 1                                        |     r0++;
                                                                 | label_23:
    0x0003fe76 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0003fe78 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0003fe7a blx 0x95a4                                        |     fcn_000095a4 ();
    0x0003fe7e ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0003fe80 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003fe82 bne 0x3fe50                                       |         goto label_1;
                                                                 |     }
    0x0003fe84 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003fe86 add r8, r4                                        |     r8 += r4;
    0x0003fe88 add.w r4, r8, 1                                   |     r4 += var_1h;
    0x0003fe8c add r3, fp                                        |     r3 += fp;
    0x0003fe8e mov sb, r3                                        |     sb = r3;
                                                                 | label_6:
    0x0003fe90 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0003fe92 lsls r6, r4, 1                                    |     r6 = r4 << 1;
    0x0003fe94 ldrb.w r2, [sb]                                   |     r2 = *(sb);
    0x0003fe98 adds r5, r6, r4                                   |     r5 = r6 + r4;
    0x0003fe9a add.w r5, r3, r5, lsl 2                           |     r5 = r3 + (r5 << 2);
    0x0003fe9e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0003fea0 bne.w 0x3fd7e                                     |         goto label_2;
                                                                 |     }
                                                                 | label_15:
    0x0003fea4 mov r0, r5                                        |     r0 = r5;
    0x0003fea6 add sp, 0x24                                      |     
    0x0003fea8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_17:
    0x0003feac cmp r2, 0x5b                                      |     
                                                                 |     if (r2 != 0x5b) {
    0x0003feae bne 0x3ffa2                                       |         goto label_5;
                                                                 |     }
    0x0003feb0 ldrb.w lr, [sb, 1]                                |     
    0x0003feb4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003feb6 add r2, lr                                        |     r2 += lr;
    0x0003feb8 ldrb.w r2, [r2, 0x40]                             |     r2 = *((r2 + 0x40));
    0x0003febc ands r2, r2, 4                                    |     r2 &= 4;
                                                                 |     if (r2 == r2) {
    0x0003fec0 beq.w 0x40170                                     |         goto label_24;
                                                                 |     }
    0x0003fec4 ldr.w r8, [pc, 0x34c]                             |     r8 = *(0x00040214);
    0x0003fec8 add.w r1, sb, 1                                   |     r1 = sb + 1;
    0x0003fecc mov r2, lr                                        |     r2 = lr;
    0x0003fece add r8, pc                                        |     r8 += pc;
                                                                 |     do {
    0x0003fed0 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x0003fed4 mov r7, r1                                        |         r7 = r1;
    0x0003fed6 add.w r2, r2, r3, lsl 1                           |         r2 += (r3 << 1);
    0x0003feda sub.w r3, r2, 0x30                                |         r3 = r2 - 0x30;
    0x0003fede ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x0003fee2 add.w r0, r8, r2                                  |         r0 = r8 + r2;
    0x0003fee6 ldrb.w r0, [r0, 0x40]                             |         r0 = *((r0 + 0x40));
    0x0003feea tst.w r0, 4                                       |         
    0x0003feee bne 0x3fed0                                       |         
                                                                 |     } while ((r0 & 4) != 0);
    0x0003fef0 rsb.w r1, sb, 1                                   |     r1 = 1 - sb;
    0x0003fef4 add r1, r7                                        |     r1 += r7;
    0x0003fef6 cmp r1, 1                                         |     
    0x0003fef8 ite hi                                            |     
                                                                 |     if (r1 <= 1) {
    0x0003fefa movhi r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r1 > 1) {
    0x0003fefc movls r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x0003fefe cmp r2, 0x5d                                      |     
    0x0003ff00 it ne                                             |     
                                                                 |     if (r2 == 0x5d) {
    0x0003ff02 orrne r0, r0, 1                                   |         r0 |= 1;
                                                                 |     }
    0x0003ff06 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003ff08 beq.w 0x400fe                                     |         goto label_25;
                                                                 |     }
                                                                 | label_14:
    0x0003ff0c cmp.w lr, 0x23                                    |     
                                                                 |     if (lr != 0x23) {
    0x0003ff10 bne 0x3ffa2                                       |         goto label_5;
                                                                 |     }
    0x0003ff12 ldrb r2, [r5]                                     |     r2 = *(r5);
    0x0003ff14 mov lr, r4                                        |     lr = r4;
    0x0003ff16 cmp r2, 6                                         |     
                                                                 |     if (r2 != 6) {
    0x0003ff18 bne.w 0x40032                                     |         goto label_10;
                                                                 |     }
    0x0003ff1c ldr.w r8, [r5, 4]                                 |     r8 = *((r5 + 4));
    0x0003ff20 mov r7, ip                                        |     r7 = ip;
    0x0003ff22 mov r0, r5                                        |     r0 = r5;
    0x0003ff24 str r4, [sp, 8]                                   |     var_8h = r4;
    0x0003ff26 mov sl, r8                                        |     sl = r8;
                                                                 | label_3:
    0x0003ff28 add.w r2, r1, r1, lsl 1                           |     r2 = r1 + (r1 << 1);
    0x0003ff2c cmp r1, sl                                        |     
    0x0003ff2e add.w r2, r0, r2, lsl 2                           |     r2 = r0 + (r2 << 2);
                                                                 |     if (r1 < sl) {
    0x0003ff32 bls 0x3ff5e                                       |         goto label_26;
                                                                 |     }
                                                                 |     do {
    0x0003ff34 ands r7, r7, 0x20                                 |         r7 &= 0x20;
    0x0003ff38 mov.w r1, 1                                       |         r1 = 1;
                                                                 |         if (r7 == r7) {
    0x0003ff3c beq 0x3ff80                                       |             goto label_27;
                                                                 |         }
    0x0003ff3e ldr r2, [r0, 8]                                   |         r2 = *((r0 + 8));
    0x0003ff40 add lr, r2                                        |         lr += r2;
    0x0003ff42 ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x0003ff44 add.w r0, lr, lr, lsl 1                           |         r0 = lr + (lr << 1);
    0x0003ff48 add.w r0, r2, r0, lsl 2                           |         r0 = r2 + (r0 << 2);
    0x0003ff4c add.w r2, r1, r1, lsl 1                           |         r2 = r1 + (r1 << 1);
    0x0003ff50 ldr.w sl, [r0, 4]                                 |         sl = *((r0 + 4));
    0x0003ff54 add.w r2, r0, r2, lsl 2                           |         r2 = r0 + (r2 << 2);
    0x0003ff58 ldrb r7, [r0, 1]                                  |         r7 = *((r0 + 1));
    0x0003ff5a cmp r1, sl                                        |         
    0x0003ff5c bhi 0x3ff34                                       |         
                                                                 |     } while (r1 > sl);
                                                                 | label_26:
    0x0003ff5e ldrb.w fp, [r2, 1]                                |     fp = *((r2 + 1));
    0x0003ff62 movs r4, 1                                        |     r4 = 1;
    0x0003ff64 tst.w fp, 4                                       |     
    0x0003ff68 ldrb.w fp, [r2]                                   |     fp = *(r2);
    0x0003ff6c it eq                                             |     
                                                                 |     if ((fp & 4) != 0) {
    0x0003ff6e addeq r3, r3, r4                                  |         r3 += r4;
                                                                 |     }
    0x0003ff70 cmp.w fp, 5                                       |     
    0x0003ff74 ittt hi                                           |     
                                                                 |     if (fp <= 5) {
    0x0003ff76 ldrhi r2, [r2, 4]                                 |         r2 = *((r2 + 4));
                                                                 |     }
                                                                 |     if (fp <= 5) {
    0x0003ff78 addhi r2, 1                                       |         r2++;
                                                                 |     }
                                                                 |     if (fp <= 5) {
    0x0003ff7a movhi r4, r2                                      |         r4 = r2;
                                                                 |     }
    0x0003ff7c add r1, r4                                        |     r1 += r4;
    0x0003ff7e b 0x3ff28                                         |     goto label_3;
                                                                 | label_27:
    0x0003ff80 ldrb.w r2, [sb, 2]                                |     r2 = *((sb + 2));
    0x0003ff84 ldr r4, [sp, 8]                                   |     r4 = var_8h;
    0x0003ff86 cmp r2, 0x2d                                      |     
                                                                 |     if (r2 != 0x2d) {
    0x0003ff88 bne 0x40074                                       |         goto label_28;
                                                                 |     }
    0x0003ff8a ldr.w lr, [pc, 0x28c]                             |     
    0x0003ff8e ldrb.w r2, [sb, 3]                                |     r2 = *((sb + 3));
    0x0003ff92 add lr, pc                                        |     lr += pc;
    0x0003ff94 add.w r1, lr, r2                                  |     r1 = lr + r2;
    0x0003ff98 ldrb.w r1, [r1, 0x40]                             |     r1 = *((r1 + 0x40));
    0x0003ff9c lsls r1, r1, 0x1d                                 |     r1 <<= 0x1d;
                                                                 |     if (r1 < r1) {
    0x0003ff9e bmi.w 0x4013a                                     |         goto label_29;
                                                                 |     }
                                                                 | label_5:
    0x0003ffa2 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x0003ffa4 str.w sb, [r3]                                    |     __asm ("str.w sb, [r3]");
    0x0003ffa8 b 0x40032                                         |     goto label_10;
                                                                 | label_21:
    0x0003ffaa mov r5, fp                                        |     r5 = fp;
    0x0003ffac ldr.w fp, [sp, 0x1c]                              |     fp = var_1ch;
    0x0003ffb0 mov r6, sl                                        |     r6 = sl;
    0x0003ffb2 mov sb, r2                                        |     sb = r2;
    0x0003ffb4 ldr.w sl, [sp, 0x18]                              |     sl = var_18h;
    0x0003ffb8 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x0003ffbc beq 0x40032                                       |         
    0x0003ffbe ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x0003ffc0 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0003ffc2 beq 0x400a2                                       |             goto label_30;
                                                                 |         }
    0x0003ffc4 ldrd r8, r2, [sl]                                 |         __asm ("ldrd r8, r2, [sl]");
    0x0003ffc8 cmp r8, r2                                        |         
                                                                 |         if (r8 >= r2) {
    0x0003ffca bhs 0x400a2                                       |             goto label_30;
                                                                 |         }
    0x0003ffcc add.w r2, r8, r8, lsl 1                           |         r2 = r8 + (r8 << 1);
    0x0003ffd0 ldr r0, [sp, 4]                                   |         r0 = var_4h;
    0x0003ffd2 movs r1, 7                                        |         r1 = 7;
    0x0003ffd4 lsls r2, r2, 2                                    |         r2 <<= 2;
    0x0003ffd6 strh r1, [r0, r2]                                 |         *((r0 + r2)) = r1;
    0x0003ffd8 add r2, r0                                        |         r2 += r0;
    0x0003ffda str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
    0x0003ffdc movs r3, 2                                        |         r3 = 2;
    0x0003ffde str r3, [r2, 4]                                   |         *((r2 + 4)) = r3;
    0x0003ffe0 add.w r3, r8, 1                                   |         r3 = r8 + 1;
    0x0003ffe4 str.w r3, [sl]                                    |         __asm ("str.w r3, [sl]");
                                                                 | label_7:
    0x0003ffe8 ldrd r7, r3, [sl]                                 |         __asm ("ldrd r7, r3, [sl]");
    0x0003ffec cmp r7, r3                                        |         
                                                                 |         if (r7 >= r3) {
    0x0003ffee bhs 0x400ba                                       |             goto label_31;
                                                                 |         }
    0x0003fff0 add.w r3, r7, r7, lsl 1                           |         r3 = r7 + (r7 << 1);
    0x0003fff4 ldr r1, [sp, 4]                                   |         r1 = var_4h;
    0x0003fff6 movs r2, 5                                        |         r2 = 5;
    0x0003fff8 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x0003fffa strh r2, [r1, r3]                                 |         *((r1 + r3)) = r2;
    0x0003fffc add r3, r1                                        |         r3 += r1;
    0x0003fffe ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x00040000 str.w sb, [r3, 4]                                 |         __asm ("str.w sb, [r3, 4]");
    0x00040002 str r0, [sp, 0x10]                                |         *((sp + 0x10)) = r0;
    0x00040004 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00040006 adds r3, r7, 1                                    |         r3 = r7 + 1;
    0x00040008 str.w r3, [sl]                                    |         __asm ("str.w r3, [sl]");
    0x0004000a adds r0, 0                                        |         r0 += 0;
                                                                 | label_8:
    0x0004000c ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x0004000e mov r2, fp                                        |         r2 = fp;
    0x00040010 ldr r3, [sp, 0x48]                                |         r3 = *(arg_48h);
    0x00040012 mov r0, sl                                        |         r0 = sl;
    0x00040014 add r1, r5                                        |         r1 += r5;
    0x00040016 bl 0x4021c                                        |         fcn_0004021c (r0, r1, r2, r3);
    0x0004001a ldrb.w r3, [sl, 0x14]                             |         r3 = *((sl + 0x14));
    0x0004001e cmp r0, 0                                         |         
    0x00040020 mov r5, r0                                        |         r5 = r0;
    0x00040022 clz r3, r3                                        |         r3 &= r3;
    0x00040026 lsr.w r3, r3, 5                                   |         r3 >>= 5;
    0x0004002a it eq                                             |         
                                                                 |         if (r0 != 0) {
    0x0004002c moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0004002e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00040030 bne 0x4010a                                       |             goto label_32;
                                                                 |         }
                                                                 |     }
                                                                 | label_10:
    0x00040032 movs r5, 0                                        |     r5 = 0;
    0x00040034 mov r0, r5                                        |     r0 = r5;
    0x00040036 add sp, 0x24                                      |     
    0x00040038 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_18:
    0x0004003c ldrb.w r3, [sb, 2]                                |     r3 = *((sb + 2));
    0x00040040 add.w r0, sb, 2                                   |     r0 = sb + 2;
    0x00040044 str r0, [sp, 8]                                   |     var_8h = r0;
    0x00040046 cmp r3, 0                                         |     
    0x00040048 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x0004004a cmpne r3, 0x22                                    |         __asm ("cmpne r3, 0x22");
                                                                 |     }
    0x0004004c ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x0004004e movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00040050 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00040052 beq.w 0x4016a                                     |         goto label_33;
                                                                 |     }
    0x00040056 movs r1, 1                                        |     r1 = 1;
                                                                 |     do {
    0x00040058 ldrb r3, [r0, 1]!                                 |         r3 = *((r0 += 1));
    0x0004005c mov r7, r1                                        |         r7 = r1;
    0x0004005e adds r1, 1                                        |         r1++;
    0x00040060 cmp r3, 0                                         |         
    0x00040062 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00040064 cmpne r3, 0x22                                    |             __asm ("cmpne r3, 0x22");
                                                                 |         }
    0x00040066 bne 0x40058                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_13:
    0x00040068 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004006a beq.w 0x40176                                     |         goto label_19;
                                                                 |     }
    0x0004006c strh r4, [r0, 4]                                  |     *((r0 + 4)) = r4;
    0x0004006e add.w fp, r1, 1                                   |     
    0x00040072 b 0x3fdf6                                         |     goto label_4;
                                                                 | label_28:
    0x00040074 movs r1, 2                                        |     r1 = 2;
                                                                 | label_12:
    0x00040076 cmp r2, 0x5d                                      |     
                                                                 |     if (r2 != 0x5d) {
    0x00040078 bne 0x3ffa2                                       |         goto label_5;
                                                                 |     }
                                                                 | label_11:
    0x0004007a adds r1, 1                                        |     r1++;
    0x0004007c mov r7, r8                                        |     r7 = r8;
    0x0004007e add sb, r1                                        |     sb += r1;
    0x00040080 movs r2, 1                                        |     r2 = 1;
                                                                 | label_9:
    0x00040082 cmp r2, r7                                        |     
                                                                 |     if (r2 > r7) {
    0x00040084 bhi 0x400ca                                       |         goto label_34;
                                                                 |     }
    0x00040086 add.w r1, r2, r2, lsl 1                           |     r1 = r2 + (r2 << 1);
    0x0004008a add.w r1, r5, r1, lsl 2                           |     r1 = r5 + (r1 << 2);
    0x0004008e ldrb r0, [r1, 1]                                  |     r0 = *((r1 + 1));
    0x00040090 and r0, r0, 4                                     |     r0 &= 4;
                                                                 |     if (r3 != 0) {
    0x00040094 cbnz r3, 0x400ea                                  |         goto label_35;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x00040096 cbnz r0, 0x400ee                                  |         goto label_36;
                                                                 |     }
    0x00040098 tst.w ip, 0x20                                    |     
                                                                 |     if ((ip & 0x20) != 0) {
    0x0004009c bne 0x400d0                                       |         goto label_37;
                                                                 |     }
    0x0004009e add r4, r2                                        |     r4 += r2;
    0x000400a0 b 0x3fe90                                         |     goto label_6;
                                                                 | label_30:
    0x000400a2 movs r3, 0                                        |     r3 = 0;
    0x000400a4 movs r2, 2                                        |     r2 = 2;
    0x000400a6 movs r1, 7                                        |     r1 = 7;
    0x000400a8 mov r0, sl                                        |     r0 = sl;
    0x000400aa bl 0x3fac0                                        |     fcn_0003fac0 (r0, r1, r2, r3);
    0x000400ae ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x000400b2 mov r8, r0                                        |     r8 = r0;
    0x000400b4 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000400b6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000400b8 bne 0x3ffe8                                       |         goto label_7;
                                                                 |     }
                                                                 | label_31:
    0x000400ba ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000400bc mov r2, sb                                        |     r2 = sb;
    0x000400be movs r1, 5                                        |     r1 = 5;
    0x000400c0 mov r0, sl                                        |     r0 = sl;
    0x000400c2 bl 0x3fac0                                        |     r0 = fcn_0003fac0 (r0, r1, r2, r3);
    0x000400c6 mov r7, r0                                        |     r7 = r0;
    0x000400c8 b 0x4000c                                         |     goto label_8;
                                                                 | label_34:
    0x000400ca ands ip, ip, 0x20                                 |     
                                                                 |     if (ip == ip) {
    0x000400ce beq 0x4017e                                       |         goto label_38;
                                                                 |     }
                                                                 | label_37:
    0x000400d0 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x000400d2 movs r2, 1                                        |     r2 = 1;
    0x000400d4 add r4, r1                                        |     r4 += r1;
    0x000400d6 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x000400d8 lsl.w r6, r4, r2                                  |     r6 = r4 << r2;
    0x000400dc adds r5, r6, r4                                   |     r5 = r6 + r4;
    0x000400de add.w r5, r1, r5, lsl 2                           |     r5 = r1 + (r5 << 2);
    0x000400e2 ldr r7, [r5, 4]                                   |     r7 = *((r5 + 4));
    0x000400e4 ldrb.w ip, [r5, 1]                                |     ip = *((r5 + 1));
    0x000400e8 b 0x40082                                         |     goto label_9;
                                                                 |     if (r0 == 0) {
                                                                 | label_35:
    0x000400ea cbnz r0, 0x400ee                                  |         
    0x000400ec subs r3, 1                                        |         r3--;
                                                                 |     }
                                                                 | label_36:
    0x000400ee ldrb r0, [r1]                                     |     r0 = *(r1);
    0x000400f0 cmp r0, 5                                         |     
    0x000400f2 itet hi                                           |     
                                                                 |     if (r0 <= 5) {
    0x000400f4 ldrhi r1, [r1, 4]                                 |         r1 = *((r1 + 4));
                                                                 |     }
                                                                 |     if (r0 > 5) {
    0x000400f6 movls r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r0 <= 5) {
    0x000400f8 addhi r1, 1                                       |         r1++;
                                                                 |     }
    0x000400fa add r2, r1                                        |     r2 += r1;
    0x000400fc b 0x40082                                         |     goto label_9;
                                                                 | label_25:
    0x000400fe ldrb r2, [r5]                                     |     r2 = *(r5);
    0x00040100 cmp r2, 6                                         |     
                                                                 |     if (r2 != 6) {
    0x00040102 bne 0x40032                                       |         goto label_10;
                                                                 |     }
    0x00040104 ldr.w r8, [r5, 4]                                 |     r8 = *((r5 + 4));
    0x00040108 b 0x4007a                                         |     goto label_11;
                                                                 | label_32:
    0x0004010a ldr.w r2, [sl, 8]                                 |     r2 = *((sl + 8));
    0x0004010e adds r1, r6, r4                                   |     r1 = r6 + r4;
    0x00040110 add.w r7, r7, r7, lsl 1                           |     r7 += (r7 << 1);
    0x00040114 sub.w r4, r8, r4                                  |     r4 = r8 - r4;
    0x00040118 mov r0, r5                                        |     r0 = r5;
    0x0004011a add.w r1, r2, r1, lsl 2                           |     r1 = r2 + (r1 << 2);
    0x0004011e add.w r2, r2, r7, lsl 2                           |     r2 += (r7 << 2);
    0x00040122 ldrb r3, [r1, 1]                                  |     r3 = *((r1 + 1));
    0x00040124 str r4, [r1, 8]                                   |     *((r1 + 8)) = r4;
    0x00040126 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x0004012a strb r3, [r1, 1]                                  |     *((r1 + 1)) = r3;
    0x0004012c ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
    0x0004012e orr r3, r3, 1                                     |     r3 |= 1;
    0x00040132 strb r3, [r2, 1]                                  |     *((r2 + 1)) = r3;
    0x00040134 add sp, 0x24                                      |     
    0x00040136 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_29:
    0x0004013a add.w r1, sb, 3                                   |     r1 = sb + 3;
                                                                 |     do {
    0x0004013e add.w r7, r7, r7, lsl 2                           |         r7 += (r7 << 2);
    0x00040142 mov sl, r1                                        |         sl = r1;
    0x00040144 add.w r7, r2, r7, lsl 1                           |         r7 = r2 + (r7 << 1);
    0x00040148 ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x0004014c subs r7, 0x30                                     |         r7 -= 0x30;
    0x0004014e add.w r0, lr, r2                                  |         r0 = lr + r2;
    0x00040152 ldrb.w r0, [r0, 0x40]                             |         r0 = *((r0 + 0x40));
    0x00040156 lsls r0, r0, 0x1d                                 |         r0 <<= 0x1d;
    0x00040158 bmi 0x4013e                                       |         
                                                                 |     } while (r0 < r0);
    0x0004015a cmp r3, r7                                        |     
                                                                 |     if (r3 <= r7) {
    0x0004015c blo.w 0x40032                                     |         goto label_10;
                                                                 |     }
    0x00040160 rsb.w r1, sb, 1                                   |     r1 = 1 - sb;
    0x00040164 subs r3, r3, r7                                   |     r3 -= r7;
    0x00040166 add r1, sl                                        |     r1 += sl;
    0x00040168 b 0x40076                                         |     goto label_12;
                                                                 | label_33:
    0x0004016a mov r7, r2                                        |     r7 = r2;
    0x0004016c movs r1, 1                                        |     r1 = 1;
    0x0004016e b 0x40068                                         |     goto label_13;
                                                                 | label_24:
    0x00040170 mov r3, r2                                        |     r3 = r2;
    0x00040172 movs r1, 1                                        |     r1 = 1;
    0x00040174 b 0x3ff0c                                         |     goto label_14;
                                                                 | label_19:
    0x00040176 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00040178 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0004017a str r2, [r3]                                      |     *(r3) = r2;
    0x0004017c b 0x40032                                         |     goto label_10;
                                                                 | label_38:
    0x0004017e ldrd sl, fp, [sp, 0x18]                           |     __asm ("ldrd sl, fp, [var_1ch]");
    0x00040182 clz r3, r3                                        |     r3 &= r3;
    0x00040186 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00040188 mov lr, ip                                        |     lr = ip;
    0x0004018a cmp.w fp, 0                                       |     
    0x0004018e it eq                                             |     
                                                                 |     if (fp != 0) {
    0x00040190 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00040192 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040194 beq.w 0x40032                                     |         goto label_10;
                                                                 |     }
    0x00040198 ldr r3, [sp, 4]                                   |     r3 = var_4h;
                                                                 |     if (r3 == 0) {
    0x0004019a cbz r3, 0x401fe                                   |         goto label_39;
                                                                 |     }
    0x0004019c ldrd r7, r3, [sl]                                 |     __asm ("ldrd r7, r3, [sl]");
    0x000401a0 cmp r7, r3                                        |     
                                                                 |     if (r7 >= r3) {
    0x000401a2 bhs 0x401fe                                       |         goto label_39;
                                                                 |     }
    0x000401a4 add.w r3, r7, r7, lsl 1                           |     r3 = r7 + (r7 << 1);
    0x000401a8 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x000401aa movs r2, 5                                        |     r2 = 5;
    0x000401ac lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000401ae strh r2, [r1, r3]                                 |     *((r1 + r3)) = r2;
    0x000401b0 add r3, r1                                        |     r3 += r1;
    0x000401b2 movs r2, 1                                        |     r2 = 1;
    0x000401b4 str.w ip, [r3, 8]                                 |     __asm ("str.w ip, [r3, 8]");
    0x000401b8 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x000401ba adds r3, r7, r2                                   |     r3 = r7 + r2;
    0x000401bc str.w r0, [sl]                                    |     __asm ("str.w r0, [sl]");
                                                                 | label_16:
    0x000401c0 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x000401c2 mov r2, fp                                        |     r2 = fp;
    0x000401c4 mov r1, sb                                        |     r1 = sb;
    0x000401c6 mov r0, sl                                        |     r0 = sl;
    0x000401c8 bl 0x4021c                                        |     fcn_0004021c (r0, r1, r2, r3);
    0x000401cc ldrb.w r3, [sl, 0x14]                             |     r3 = *((sl + 0x14));
    0x000401d0 cmp r0, 0                                         |     
    0x000401d2 mov r5, r0                                        |     r5 = r0;
    0x000401d4 clz r3, r3                                        |     r3 &= r3;
    0x000401d8 lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x000401dc it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x000401de moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000401e0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000401e2 beq.w 0x40032                                     |         goto label_10;
                                                                 |     }
    0x000401e6 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x000401ea add r6, r4                                        |     r6 += r4;
    0x000401ec subs r7, r7, r4                                   |     r7 -= r4;
    0x000401ee add.w r3, r3, r6, lsl 2                           |     r3 += (r6 << 2);
    0x000401f2 ldrb r2, [r3, 1]                                  |     r2 = *((r3 + 1));
    0x000401f4 str r7, [r3, 8]                                   |     *((r3 + 8)) = r7;
    0x000401f6 orr r2, r2, 0x20                                  |     r2 |= 0x20;
    0x000401fa strb r2, [r3, 1]                                  |     *((r3 + 1)) = r2;
    0x000401fc b 0x3fea4                                         |     goto label_15;
                                                                 | label_39:
    0x000401fe movs r3, 0                                        |     r3 = 0;
    0x00040200 movs r2, 1                                        |     r2 = 1;
    0x00040202 movs r1, 6                                        |     r1 = 6;
    0x00040204 mov r0, sl                                        |     r0 = sl;
    0x00040206 bl 0x3fac0                                        |     r0 = fcn_0003fac0 (r0, r1, r2, r3);
    0x0004020a mov r7, r0                                        |     r7 = r0;
    0x0004020c b 0x401c0                                         |     goto label_16;
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x40308 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00040308 ()                                  | void fcn_00040308 (int16_t arg1, uint32_t arg2) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00040308 push.w {r3, r4, r5, r6, r7, r8, sb, lr}       |     
    0x0004030c mov r6, r0                                    |     r6 = r0;
    0x0004030e ldr r5, [r0, 0xc]                             |     r5 = *((r0 + 0xc));
    0x00040310 mov r7, r1                                    |     r7 = r1;
    0x00040312 ldr.w r3, [pc, 0x56c]                         |     r3 = *(0x00040880);
    0x00040314 adds r5, 0x6c                                 |     r5 += 0x6c;
    0x00040316 ldrb r4, [r5, r1]                             |     r4 = *((r5 + r1));
    0x00040318 adds r0, r5, r1                               |     r0 = r5 + r1;
    0x0004031a add r3, pc                                    |     r3 += pc;
    0x0004031c adds r2, r3, r4                               |     r2 = r3 + r4;
    0x0004031e ldrb r2, [r2, -0x50]                          |     r2 = *((r2 - 0x50));
                                                             |     if (r2 == 0) {
    0x00040322 cbz r2, 0x4033e                               |         goto label_14;
                                                             |     }
    0x00040324 adds r2, r1, 1                                |     r2 = r1 + 1;
    0x00040326 add.w ip, r5, r2                              |     
                                                             |     do {
    0x0004032a mov r0, ip                                    |         r0 = ip;
    0x0004032c ldrb r4, [ip], 1                              |         r4 = *(ip);
                                                             |         ip++;
    0x00040330 mov r7, r2                                    |         r7 = r2;
    0x00040332 adds r2, 1                                    |         r2++;
    0x00040334 adds r1, r3, r4                               |         r1 = r3 + r4;
    0x00040336 ldrb r1, [r1, -0x50]                          |         r1 = *((r1 - 0x50));
    0x0004033a cmp r1, 0                                     |         
    0x0004033c bne 0x4032a                                   |         
                                                             |     } while (r1 != 0);
                                                             | label_14:
    0x0004033e cmp r4, 0x7b                                  |     
                                                             |     if (r4 == 0x7b) {
    0x00040340 beq 0x40414                                   |         goto label_15;
                                                             |     }
    0x00040342 cmp r4, 0x5b                                  |     
                                                             |     if (r4 == 0x5b) {
    0x00040344 beq.w 0x40628                                 |         goto label_16;
                                                             |     }
    0x00040348 cmp r4, 0x22                                  |     
                                                             |     if (r4 != 0x22) {
    0x0004034a beq 0x40390                                   |         
    0x0004034c cmp r4, 0x6e                                  |         
                                                             |         if (r4 == 0x6e) {
    0x0004034e beq.w 0x406f4                                 |             goto label_17;
                                                             |         }
    0x00040352 cmp r4, 0x74                                  |         
                                                             |         if (r4 == 0x74) {
    0x00040354 beq.w 0x40534                                 |             goto label_18;
                                                             |         }
    0x00040358 cmp r4, 0x66                                  |         
                                                             |         if (r4 != 0x66) {
    0x0004035a bne.w 0x40598                                 |             goto label_19;
                                                             |         }
    0x0004035e ldr.w r1, [pc, 0x524]                         |         
    0x00040362 movs r2, 5                                    |         r2 = 5;
    0x00040364 add r1, pc                                    |         r1 = 0x80bee;
    0x00040366 blx 0x95a4                                    |         r0 = fcn_000095a4 ();
                                                             |         if (r0 == 0) {
    0x0004036a cbnz r0, 0x40384                              |             
    0x0004036c ldr.w r3, [pc, 0x518]                         |             
    0x00040370 adds r7, 5                                    |             r7 += 5;
    0x00040372 ldrb r2, [r5, r7]                             |             r2 = *((r5 + r7));
    0x00040374 add r3, pc                                    |             r3 = 0x80c00;
    0x00040376 add r3, r2                                    |             r3 += r2;
    0x00040378 ldrb.w r3, [r3, 0x40]                         |             r3 = *((r3 + 0x40));
    0x0004037c tst.w r3, 6                                   |             
                                                             |             if ((r3 & 6) == 0) {
    0x00040380 beq.w 0x407fe                                 |                 goto label_20;
                                                             |             }
                                                             |         }
                                                             | label_3:
    0x00040384 subs r4, 0                                    |         
    0x00040386 it ne                                         |         
                                                             |         if (r4 == 0) {
    0x00040388 movne r4, 1                                   |             r4 = 1;
                                                             |         }
    0x0004038a rsbs r0, r4, 0                                |         r0 = r4 - ;
                                                             | label_4:
    0x0004038c pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |         
                                                             |     }
    0x00040390 adds r2, r7, 1                                |     r2 = r7 + 1;
    0x00040392 ldrb r3, [r5, r2]                             |     r3 = *((r5 + r2));
    0x00040394 cmp r3, 0x1f                                  |     
                                                             |     if (r3 < 0x1f) {
    0x00040396 bls 0x403e6                                   |         goto label_2;
                                                             |     }
    0x00040398 movw r1, 0x1011                               |     
    0x0004039c mov.w r8, 0                                   |     r8 = 0;
    0x000403a0 movt r1, 5                                    |     r1 = 0x51011;
    0x000403a4 mov.w ip, 1                                   |     
    0x000403a8 b 0x403b8                                     |     
                                                             |     while (r3 != 0x5c) {
    0x000403aa cmp r3, 0x22                                  |         
                                                             |         if (r3 == 0x22) {
    0x000403ac beq.w 0x40786                                 |             goto label_21;
                                                             |         }
    0x000403b0 mov r2, r4                                    |         r2 = r4;
                                                             | label_1:
    0x000403b2 ldrb r3, [r5, r2]                             |         r3 = *((r5 + r2));
    0x000403b4 cmp r3, 0x1f                                  |         
                                                             |         if (r3 < 0x1f) {
    0x000403b6 bls 0x403e6                                   |             goto label_2;
                                                             |         }
    0x000403b8 cmp r3, 0x5c                                  |         
    0x000403ba add.w r4, r2, 1                               |         r4 = r2 + 1;
    0x000403be bne 0x403aa                                   |         
                                                             |     }
    0x000403c0 ldrb r3, [r5, r4]                             |     r3 = *((r5 + r4));
    0x000403c2 add r4, r5                                    |     r4 += r5;
    0x000403c4 cmp r3, 0x5c                                  |     
    0x000403c6 it ne                                         |     
                                                             |     if (r3 != 0x5c) {
    0x000403c8 cmpne r3, 0x22                                |         __asm ("cmpne r3, 0x22");
                                                             |     }
                                                             |     if (r3 == 0x5c) {
    0x000403ca beq 0x4040c                                   |         goto label_22;
                                                             |     }
    0x000403cc cmp r3, 0x2f                                  |     
                                                             |     if (r3 == 0x2f) {
    0x000403ce beq 0x4040c                                   |         goto label_22;
                                                             |     }
    0x000403d0 subs r3, 0x62                                 |     r3 -= 0x62;
    0x000403d2 uxtb r3, r3                                   |     r3 = (int8_t) r3;
    0x000403d4 cmp r3, 0x13                                  |     
                                                             |     if (r3 > 0x13) {
    0x000403d6 bhi 0x403e6                                   |         goto label_2;
                                                             |     }
    0x000403d8 lsl.w lr, ip, r3                              |     lr = ip << r3;
    0x000403dc tst.w lr, r1                                  |     
                                                             |     if ((lr & r1) != 0) {
    0x000403e0 bne 0x4040c                                   |         goto label_22;
                                                             |     }
    0x000403e2 cmp r3, 0x13                                  |     
    0x000403e4 beq 0x403ee                                   |     
                                                             |     while (r3 >= r3) {
                                                             | label_2:
    0x000403e6 mov.w r0, -1                                  |         r0 = -1;
    0x000403ea pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |         
    0x000403ee ldr.w r8, [pc, 0x49c]                         |         
    0x000403f2 add.w lr, r5, 5                               |         lr = r5 + 5;
    0x000403f6 add lr, r2                                    |         lr += r2;
    0x000403f8 add r8, pc                                    |         r8 = 0x80c8a;
                                                             | label_0:
    0x000403fa ldrb r3, [r4, 1]!                             |         r3 = *((r4 += 1));
    0x000403fe add r3, r8                                    |         r3 += r8;
    0x00040400 ldrb.w r3, [r3, 0x40]                         |         r3 = *((r3 + 0x40));
    0x00040404 lsls r3, r3, 0x1c                             |         r3 <<= 0x1c;
    0x00040406 bpl 0x403e6                                   |         
                                                             |     }
    0x00040408 cmp lr, r4                                    |     
                                                             |     if (lr != r4) {
    0x0004040a bne 0x403fa                                   |         goto label_0;
                                                             |     }
                                                             | label_22:
    0x0004040c adds r2, 2                                    |     r2 += 2;
    0x0004040e mov.w r8, 2                                   |     r8 = 2;
    0x00040412 b 0x403b2                                     |     goto label_1;
                                                             | label_15:
    0x00040414 ldr r2, [r6, 8]                               |     r2 = *((r6 + 8));
    0x00040416 cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x00040418 beq.w 0x40584                                 |         goto label_23;
                                                             |     }
    0x0004041c ldrd r3, r1, [r6]                             |     __asm ("ldrd r3, r1, [r6]");
    0x00040420 cmp r3, r1                                    |     
                                                             |     if (r3 >= r1) {
    0x00040422 bhs.w 0x40584                                 |         goto label_23;
                                                             |     }
    0x00040426 add.w r1, r3, r3, lsl 1                       |     r1 = r3 + (r3 << 1);
    0x0004042a mov r8, r3                                    |     r8 = r3;
    0x0004042c movs r4, 0                                    |     r4 = 0;
    0x0004042e lsls r1, r1, 2                                |     r1 <<= 2;
    0x00040430 adds r3, 1                                    |     r3++;
    0x00040432 mov.w ip, 7                                   |     
    0x00040436 adds r0, r2, r1                               |     r0 = r2 + r1;
    0x00040438 strh.w ip, [r2, r1]                           |     *((r2 + r1)) = ip;
    0x0004043c strd r4, r4, [r0, 4]                          |     __asm ("strd r4, r4, [r0, 4]");
    0x00040440 str r3, [r6]                                  |     *(r6) = r3;
                                                             | label_5:
    0x00040442 cmp.w r8, 0                                   |     
                                                             |     if (r8 < 0) {
    0x00040446 blt 0x403e6                                   |         goto label_2;
                                                             |     }
    0x00040448 adds r4, r7, 1                                |     r4 = r7 + 1;
    0x0004044a ldr.w r7, [pc, 0x444]                         |     
    0x0004044e ldrh r1, [r6, 0x16]                           |     r1 = *((r6 + 0x16));
    0x00040450 add r7, pc                                    |     r7 = 0x80ce6;
                                                             | label_6:
    0x00040452 ldrb r3, [r5, r4]                             |     r3 = *((r5 + r4));
    0x00040454 add r3, r7                                    |     r3 += r7;
    0x00040456 ldrb r3, [r3, -0x50]                          |     r3 = *((r3 - 0x50));
    0x00040458 subs r4, 0x50                                 |     r4 -= 0x50;
    0x0004045a cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0004045c bne.w 0x40594                                 |         goto label_24;
                                                             |     }
    0x00040460 adds r1, 1                                    |     r1++;
    0x00040462 uxth r1, r1                                   |     r1 = (int16_t) r1;
    0x00040464 cmp.w r1, 0x7d0                               |     
    0x00040468 strh r1, [r6, 0x16]                           |     *((r6 + 0x16)) = r1;
                                                             |     if (r1 > 0x7d0) {
    0x0004046a bhi 0x403e6                                   |         goto label_2;
                                                             |     }
    0x0004046c mov r1, r4                                    |     r1 = r4;
    0x0004046e mov r0, r6                                    |     r0 = r6;
    0x00040470 bl 0x40308                                    |     r0 = fcn_00040308 (r0, r1);
    0x00040474 subs r3, r0, 0                                |     r3 = r0 - 0;
                                                             |     if (r3 < r0) {
    0x00040476 blt.w 0x4083a                                 |         goto label_25;
                                                             |     }
    0x0004047a ldrb r2, [r6, 0x14]                           |     r2 = *((r6 + 0x14));
    0x0004047c cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x0004047e bne 0x403e6                                   |         goto label_2;
                                                             |     }
    0x00040480 ldr r2, [r6]                                  |     r2 = *(r6);
    0x00040482 ldr r1, [r6, 8]                               |     r1 = *((r6 + 8));
    0x00040484 add.w r2, r2, r2, lsl 1                       |     r2 += (r2 << 1);
    0x00040488 lsls r2, r2, 2                                |     r2 <<= 2;
    0x0004048a subs r2, 0xc                                  |     r2 -= 0xc;
    0x0004048c ldrb r0, [r1, r2]                             |     r0 = *((r1 + r2));
    0x0004048e add r1, r2                                    |     r1 += r2;
    0x00040490 cmp r0, 5                                     |     
                                                             |     if (r0 != 5) {
    0x00040492 bne 0x403e6                                   |         goto label_2;
                                                             |     }
    0x00040494 ldrb r2, [r1, 1]                              |     r2 = *((r1 + 1));
    0x00040496 orr r2, r2, 0x40                              |     r2 |= 0x40;
    0x0004049a strb r2, [r1, 1]                              |     *((r1 + 1)) = r2;
    0x0004049c mov r1, r3                                    |     r1 = r3;
    0x0004049e ldrb r4, [r5, r3]                             |     r4 = *((r5 + r3));
    0x000404a0 add r3, r5                                    |     r3 += r5;
    0x000404a2 adds r2, r7, r4                               |     r2 = r7 + r4;
    0x000404a4 ldrb r2, [r2, -0x50]                          |     r2 = *((r2 - 0x50));
                                                             |     if (r2 == 0) {
    0x000404a8 cbz r2, 0x404c4                               |         goto label_26;
                                                             |     }
    0x000404aa ldr r1, [pc, 0x3e8]                           |     
    0x000404ac add r1, pc                                    |     r1 = 0x80d46;
                                                             |     do {
    0x000404ae mov r0, r3                                    |         r0 = r3;
    0x000404b0 ldrb r4, [r3, 1]!                             |         r4 = *((r3 += 1));
    0x000404b4 adds r2, r1, r4                               |         r2 = r1 + r4;
    0x000404b6 ldrb r2, [r2, -0x50]                          |         r2 = *((r2 - 0x50));
    0x000404ba cmp r2, 0                                     |         
    0x000404bc bne 0x404ae                                   |         
                                                             |     } while (r2 != 0);
    0x000404be rsb.w r1, r5, 1                               |     r1 = 1 - r5;
    0x000404c2 add r1, r0                                    |     r1 += r0;
                                                             | label_26:
    0x000404c4 cmp r4, 0x3a                                  |     
                                                             |     if (r4 != 0x3a) {
    0x000404c6 bne 0x403e6                                   |         goto label_2;
                                                             |     }
    0x000404c8 adds r1, 1                                    |     r1++;
    0x000404ca mov r0, r6                                    |     r0 = r6;
    0x000404cc bl 0x40308                                    |     fcn_00040308 (r0, r1);
    0x000404d0 ldrh r1, [r6, 0x16]                           |     r1 = *((r6 + 0x16));
    0x000404d2 subs r3, r0, 0                                |     r3 = r0 - 0;
    0x000404d4 add.w r1, r1, -1                              |     r1 += -1;
    0x000404d8 uxth r1, r1                                   |     r1 = (int16_t) r1;
    0x000404da strh r1, [r6, 0x16]                           |     *((r6 + 0x16)) = r1;
                                                             |     if (r3 < r0) {
    0x000404dc blt 0x403e6                                   |         goto label_2;
                                                             |     }
    0x000404de ldr r0, [pc, 0x3b8]                           |     
    0x000404e0 mov r4, r3                                    |     r4 = r3;
    0x000404e2 ldrb.w ip, [r5, r3]                           |     ip = *((r5 + r3));
    0x000404e6 add r3, r5                                    |     r3 += r5;
    0x000404e8 add r0, pc                                    |     r0 = 0x80d86;
    0x000404ea add.w r2, r0, ip                              |     r2 = r0 + ip;
    0x000404ee ldrb r2, [r2, -0x50]                          |     r2 = *((r2 - 0x50));
                                                             |     if (r2 == 0) {
    0x000404f2 cbz r2, 0x4050c                               |         goto label_27;
                                                             |     }
                                                             |     do {
    0x000404f4 mov lr, r3                                    |         lr = r3;
    0x000404f6 ldrb ip, [r3, 1]!                             |         ip = *((r3 += 1));
    0x000404fa add.w r2, r0, ip                              |         r2 = r0 + ip;
    0x000404fe ldrb r2, [r2, -0x50]                          |         r2 = *((r2 - 0x50));
    0x00040502 cmp r2, 0                                     |         
    0x00040504 bne 0x404f4                                   |         
                                                             |     } while (r2 != 0);
    0x00040506 rsb.w r4, r5, 1                               |     r4 = 1 - r5;
    0x0004050a add r4, lr                                    |     r4 += lr;
                                                             | label_27:
    0x0004050c cmp.w ip, 0x2c                                |     
                                                             |     if (ip == 0x2c) {
    0x00040510 beq 0x40594                                   |         goto label_24;
                                                             |     }
    0x00040512 cmp.w ip, 0x7d                                |     
                                                             |     if (ip != 0x7d) {
    0x00040516 bne.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x0004051a ldr r2, [r6, 8]                               |     r2 = *((r6 + 8));
    0x0004051c add.w r1, r8, r8, lsl 1                       |     r1 = r8 + (r8 << 1);
    0x00040520 ldr r3, [r6]                                  |     r3 = *(r6);
    0x00040522 adds r0, r4, 1                                |     r0 = r4 + 1;
    0x00040524 add.w r2, r2, r1, lsl 2                       |     r2 += (r1 << 2);
    0x00040528 subs r3, 1                                    |     r3--;
    0x0004052a sub.w r3, r3, r8                              |     r3 -= r8;
    0x0004052e str r3, [r2, 4]                               |     *((r2 + 4)) = r3;
    0x00040530 pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |     
                                                             | label_18:
    0x00040534 ldr r1, [pc, 0x364]                           |     
    0x00040536 movs r2, 4                                    |     r2 = 4;
    0x00040538 add r1, pc                                    |     r1 = 0x80dd8;
    0x0004053a blx 0x95a4                                    |     r0 = fcn_000095a4 ();
    0x0004053e cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00040540 bne.w 0x40384                                 |         goto label_3;
                                                             |     }
    0x00040544 ldr r3, [pc, 0x358]                           |     
    0x00040546 adds r7, 4                                    |     r7 += 4;
    0x00040548 ldrb r2, [r5, r7]                             |     r2 = *((r5 + r7));
    0x0004054a add r3, pc                                    |     r3 = 0x80dee;
    0x0004054c add r3, r2                                    |     r3 += r2;
    0x0004054e ldrb.w r3, [r3, 0x40]                         |     r3 = *((r3 + 0x40));
    0x00040552 ands r3, r3, 6                                |     r3 &= 6;
                                                             |     if (r3 != r3) {
    0x00040556 bne.w 0x40384                                 |         goto label_3;
                                                             |     }
    0x0004055a ldr r1, [r6, 8]                               |     r1 = *((r6 + 8));
    0x0004055c cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0004055e beq.w 0x40868                                 |         goto label_28;
                                                             |     }
    0x00040562 ldrd r2, r0, [r6]                             |     __asm ("ldrd r2, r0, [r6]");
    0x00040566 cmp r2, r0                                    |     
                                                             |     if (r2 >= r0) {
    0x00040568 bhs.w 0x40868                                 |         goto label_28;
                                                             |     }
    0x0004056c add.w r0, r2, r2, lsl 1                       |     r0 = r2 + (r2 << 1);
    0x00040570 movs r4, 1                                    |     r4 = 1;
    0x00040572 adds r2, 1                                    |     r2++;
    0x00040574 lsls r0, r0, 2                                |     r0 <<= 2;
    0x00040576 strh r4, [r1, r0]                             |     *((r1 + r0)) = r4;
    0x00040578 add r1, r0                                    |     r1 += r0;
    0x0004057a strd r3, r3, [r1, 4]                          |     __asm ("strd r3, r3, [r1, 4]");
    0x0004057e mov r0, r7                                    |     r0 = r7;
    0x00040580 str r2, [r6]                                  |     *(r6) = r2;
    0x00040582 b 0x4038c                                     |     goto label_4;
                                                             | label_23:
    0x00040584 movs r3, 0                                    |     r3 = 0;
    0x00040586 movs r1, 7                                    |     r1 = 7;
    0x00040588 mov r2, r3                                    |     r2 = r3;
    0x0004058a mov r0, r6                                    |     r0 = r6;
    0x0004058c bl 0x3fac0                                    |     r0 = fcn_0003fac0 (r0, r1, r2, r3);
    0x00040590 mov r8, r0                                    |     r8 = r0;
    0x00040592 b 0x40442                                     |     goto label_5;
                                                             | label_24:
    0x00040594 adds r4, 1                                    |     r4++;
    0x00040596 b 0x40452                                     |     goto label_6;
                                                             | label_19:
    0x00040598 sub.w r3, r4, 0x30                            |     r3 = r4 - 0x30;
    0x0004059c cmp r4, 0x2d                                  |     
    0x0004059e it ne                                         |     
                                                             |     if (r4 != 0x2d) {
    0x000405a0 cmpne r3, 9                                   |         __asm ("cmpne r3, 9");
                                                             |     }
                                                             |     if (r4 > 0x2d) {
    0x000405a2 bhi.w 0x407c6                                 |         goto label_29;
                                                             |     }
    0x000405a6 cmp r4, 0x30                                  |     
                                                             |     if (r4 <= 0x30) {
    0x000405a8 bhi 0x405ba                                   |         
    0x000405aa cmp r4, 0x2d                                  |         
    0x000405ac ite eq                                        |         
                                                             |         if (r4 != 0x2d) {
    0x000405ae addeq r3, r7, 1                               |             r3 = r7 + 1;
                                                             |         }
                                                             |         if (r4 == 0x2d) {
    0x000405b0 movne r3, r7                                  |             r3 = r7;
                                                             |         }
    0x000405b2 ldrb r2, [r5, r3]                             |         r2 = *((r5 + r3));
    0x000405b4 cmp r2, 0x30                                  |         
                                                             |         if (r2 == 0x30) {
    0x000405b6 beq.w 0x407d8                                 |             goto label_30;
                                                             |         }
                                                             |     }
                                                             | label_11:
    0x000405ba movs r3, 0                                    |     r3 = 0;
    0x000405bc adds r4, r7, 1                                |     r4 = r7 + 1;
    0x000405be mov ip, r3                                    |     
    0x000405c0 b 0x405fc                                     |     goto label_31;
                                                             | label_7:
    0x000405c2 and r2, r2, 0xdf                              |     r2 &= 0xdf;
    0x000405c6 cmp r2, 0x45                                  |     
                                                             |     if (r2 != 0x45) {
    0x000405c8 bne.w 0x40752                                 |         goto label_32;
                                                             |     }
    0x000405cc cmp r1, 0x2f                                  |     
    0x000405ce it ls                                         |     
                                                             |     if (r1 > 0x2f) {
    0x000405d0 orrls r3, r3, 1                               |         r3 |= 1;
                                                             |     }
    0x000405d4 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x000405d6 bne.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x000405da adds r2, r4, 1                                |     r2 = r4 + 1;
    0x000405dc ldrb r3, [r5, r2]                             |     r3 = *((r5 + r2));
    0x000405de sub.w r1, r3, 0x2b                            |     r1 = r3 - 0x2b;
    0x000405e2 tst.w r1, 0xfd                                |     
    0x000405e6 itt eq                                        |     
                                                             |     if ((r1 & 0xfd) != 0) {
    0x000405e8 ldrbeq r3, [lr, 2]                            |         r3 = *((lr + 2));
                                                             |     }
                                                             |     if ((r1 & 0xfd) == 0) {
    0x000405ec mov r4, r2                                    |         r4 = r2;
                                                             |     }
    0x000405ee subs r3, 0x30                                 |     r3 -= 0x30;
    0x000405f0 cmp r3, 9                                     |     
                                                             |     if (r3 > 9) {
    0x000405f2 bhi.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x000405f6 movs r3, 1                                    |     r3 = 1;
    0x000405f8 mov ip, r3                                    |     
                                                             |     do {
                                                             | label_8:
    0x000405fa adds r4, 1                                    |         r4++;
                                                             | label_31:
    0x000405fc ldrb r2, [r5, r4]                             |         r2 = *((r5 + r4));
    0x000405fe sub.w r1, r2, 0x30                            |         r1 = r2 - 0x30;
    0x00040602 cmp r1, 9                                     |         
    0x00040604 bls 0x405fa                                   |         
                                                             |     } while (r1 < 9);
    0x00040606 cmp r2, 0x2e                                  |     
    0x00040608 add.w lr, r5, r4                              |     lr = r5 + r4;
    0x0004060c ldrb r1, [lr, -0x1]                           |     r1 = *((lr - 0x1));
                                                             |     if (r2 != 0x2e) {
    0x00040610 bne 0x405c2                                   |         goto label_7;
                                                             |     }
    0x00040612 cmp r1, 0x2d                                  |     
    0x00040614 ite ne                                        |     
                                                             |     if (r1 == 0x2d) {
    0x00040616 movne r2, ip                                  |         r2 = ip;
                                                             |     }
                                                             |     if (r1 != 0x2d) {
    0x00040618 orreq r2, ip, 1                               |         r2 = ip | 1;
                                                             |     }
    0x0004061c cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x0004061e bne.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x00040622 mov.w ip, 1                                   |     
    0x00040626 b 0x405fa                                     |     goto label_8;
                                                             | label_16:
    0x00040628 ldr r2, [r6, 8]                               |     r2 = *((r6 + 8));
    0x0004062a cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x0004062c beq.w 0x40742                                 |         goto label_33;
                                                             |     }
    0x00040630 ldrd r3, r1, [r6]                             |     __asm ("ldrd r3, r1, [r6]");
    0x00040634 cmp r3, r1                                    |     
                                                             |     if (r3 >= r1) {
    0x00040636 bhs.w 0x40742                                 |         goto label_33;
                                                             |     }
    0x0004063a add.w r1, r3, r3, lsl 1                       |     r1 = r3 + (r3 << 1);
    0x0004063e mov r8, r3                                    |     r8 = r3;
    0x00040640 movs r4, 0                                    |     r4 = 0;
    0x00040642 lsls r1, r1, 2                                |     r1 <<= 2;
    0x00040644 adds r3, 1                                    |     r3++;
    0x00040646 mov.w ip, 6                                   |     
    0x0004064a adds r0, r2, r1                               |     r0 = r2 + r1;
    0x0004064c strh.w ip, [r2, r1]                           |     *((r2 + r1)) = ip;
    0x00040650 strd r4, r4, [r0, 4]                          |     __asm ("strd r4, r4, [r0, 4]");
    0x00040654 str r3, [r6]                                  |     *(r6) = r3;
                                                             | label_10:
    0x00040656 cmp.w r8, 0                                   |     
                                                             |     if (r8 < 0) {
    0x0004065a blt.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x0004065e add.w r3, r8, r8, lsl 1                       |     r3 = r8 + (r8 << 1);
    0x00040662 adds r4, r7, 1                                |     r4 = r7 + 1;
    0x00040664 ldr.w sb, [pc, 0x23c]                         |     sb = *(0x000408a4);
    0x00040668 movs r2, 0                                    |     r2 = 0;
    0x0004066a lsls r7, r3, 2                                |     r7 = r3 << 2;
    0x0004066c ldr r3, [r6, 8]                               |     r3 = *((r6 + 8));
    0x0004066e add sb, pc                                    |     sb += pc;
    0x00040670 add r3, r7                                    |     r3 += r7;
    0x00040672 str r2, [r3, 8]                               |     *((r3 + 8)) = r2;
    0x00040674 ldrh r1, [r6, 0x16]                           |     r1 = *((r6 + 0x16));
                                                             | label_9:
    0x00040676 ldrb r3, [r5, r4]                             |     r3 = *((r5 + r4));
    0x00040678 add r3, sb                                    |     r3 += sb;
    0x0004067a ldrb r3, [r3, -0x50]                          |     r3 = *((r3 - 0x50));
    0x0004067e cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00040680 bne 0x406f0                                   |         goto label_34;
                                                             |     }
    0x00040682 adds r1, 1                                    |     r1++;
    0x00040684 uxth r1, r1                                   |     r1 = (int16_t) r1;
    0x00040686 cmp.w r1, 0x7d0                               |     
    0x0004068a strh r1, [r6, 0x16]                           |     *((r6 + 0x16)) = r1;
                                                             |     if (r1 > 0x7d0) {
    0x0004068c bhi.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x00040690 mov r1, r4                                    |     r1 = r4;
    0x00040692 mov r0, r6                                    |     r0 = r6;
    0x00040694 bl 0x40308                                    |     fcn_00040308 (r0, r1);
    0x00040698 ldrh r1, [r6, 0x16]                           |     r1 = *((r6 + 0x16));
    0x0004069a subs r3, r0, 0                                |     r3 = r0 - 0;
    0x0004069c add.w r1, r1, -1                              |     r1 += -1;
    0x000406a0 uxth r1, r1                                   |     r1 = (int16_t) r1;
    0x000406a2 strh r1, [r6, 0x16]                           |     *((r6 + 0x16)) = r1;
                                                             |     if (r3 < r0) {
    0x000406a4 blt.w 0x40824                                 |         goto label_35;
                                                             |     }
    0x000406a8 ldrb r0, [r5, r3]                             |     r0 = *((r5 + r3));
    0x000406aa mov r4, r3                                    |     r4 = r3;
    0x000406ac add r3, r5                                    |     r3 += r5;
    0x000406ae add.w r2, sb, r0                              |     r2 = sb + r0;
    0x000406b2 ldrb r2, [r2, -0x50]                          |     r2 = *((r2 - 0x50));
                                                             |     if (r2 == 0) {
    0x000406b6 cbz r2, 0x406d2                               |         goto label_36;
                                                             |     }
    0x000406b8 ldr r4, [pc, 0x1ec]                           |     
    0x000406ba add r4, pc                                    |     r4 = 0x80f66;
                                                             |     do {
    0x000406bc mov ip, r3                                    |         
    0x000406be ldrb r0, [r3, 1]!                             |         r0 = *((r3 += 1));
    0x000406c2 adds r2, r4, r0                               |         r2 = r4 + r0;
    0x000406c4 ldrb r2, [r2, -0x50]                          |         r2 = *((r2 - 0x50));
    0x000406c8 cmp r2, 0                                     |         
    0x000406ca bne 0x406bc                                   |         
                                                             |     } while (r2 != 0);
    0x000406cc rsb.w r4, r5, 1                               |     r4 = 1 - r5;
    0x000406d0 add r4, ip                                    |     r4 += ip;
                                                             | label_36:
    0x000406d2 cmp r0, 0x2c                                  |     
                                                             |     if (r0 == 0x2c) {
    0x000406d4 beq 0x406f0                                   |         goto label_34;
                                                             |     }
    0x000406d6 cmp r0, 0x5d                                  |     
                                                             |     if (r0 != 0x5d) {
    0x000406d8 bne.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x000406dc ldr r3, [r6]                                  |     r3 = *(r6);
    0x000406de adds r0, r4, 1                                |     r0 = r4 + 1;
    0x000406e0 ldr r2, [r6, 8]                               |     r2 = *((r6 + 8));
    0x000406e2 subs r3, 1                                    |     r3--;
    0x000406e4 add r2, r7                                    |     r2 += r7;
    0x000406e6 sub.w r3, r3, r8                              |     r3 -= r8;
    0x000406ea str r3, [r2, 4]                               |     *((r2 + 4)) = r3;
    0x000406ec pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |     
                                                             | label_34:
    0x000406f0 adds r4, 1                                    |     r4++;
    0x000406f2 b 0x40676                                     |     goto label_9;
                                                             | label_17:
    0x000406f4 ldr r1, [pc, 0x1b4]                           |     
    0x000406f6 movs r2, 4                                    |     r2 = 4;
    0x000406f8 add r1, pc                                    |     r1 = 0x80fa8;
    0x000406fa blx 0x95a4                                    |     r0 = fcn_000095a4 ();
    0x000406fe cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00040700 bne.w 0x40384                                 |         goto label_3;
                                                             |     }
    0x00040704 ldr r3, [pc, 0x1a8]                           |     
    0x00040706 adds r7, 4                                    |     r7 += 4;
    0x00040708 ldrb r2, [r5, r7]                             |     r2 = *((r5 + r7));
    0x0004070a add r3, pc                                    |     r3 = 0x80fbe;
    0x0004070c add r3, r2                                    |     r3 += r2;
    0x0004070e ldrb.w r3, [r3, 0x40]                         |     r3 = *((r3 + 0x40));
    0x00040712 ands r3, r3, 6                                |     r3 &= 6;
                                                             |     if (r3 != r3) {
    0x00040716 bne.w 0x40384                                 |         goto label_3;
                                                             |     }
    0x0004071a ldr r1, [r6, 8]                               |     r1 = *((r6 + 8));
    0x0004071c cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0004071e beq.w 0x40858                                 |         goto label_37;
                                                             |     }
    0x00040722 ldrd r2, r0, [r6]                             |     __asm ("ldrd r2, r0, [r6]");
    0x00040726 cmp r2, r0                                    |     
                                                             |     if (r2 >= r0) {
    0x00040728 bhs.w 0x40858                                 |         goto label_37;
                                                             |     }
    0x0004072c add.w r0, r2, r2, lsl 1                       |     r0 = r2 + (r2 << 1);
    0x00040730 adds r2, 1                                    |     r2++;
    0x00040732 lsls r0, r0, 2                                |     r0 <<= 2;
    0x00040734 strh r3, [r1, r0]                             |     *((r1 + r0)) = r3;
    0x00040736 add r1, r0                                    |     r1 += r0;
    0x00040738 strd r3, r3, [r1, 4]                          |     __asm ("strd r3, r3, [r1, 4]");
    0x0004073c mov r0, r7                                    |     r0 = r7;
    0x0004073e str r2, [r6]                                  |     *(r6) = r2;
    0x00040740 b 0x4038c                                     |     goto label_4;
                                                             | label_33:
    0x00040742 movs r3, 0                                    |     r3 = 0;
    0x00040744 movs r1, 6                                    |     r1 = 6;
    0x00040746 mov r2, r3                                    |     r2 = r3;
    0x00040748 mov r0, r6                                    |     r0 = r6;
    0x0004074a bl 0x3fac0                                    |     r0 = fcn_0003fac0 (r0, r1, r2, r3);
    0x0004074e mov r8, r0                                    |     r8 = r0;
    0x00040750 b 0x40656                                     |     goto label_10;
                                                             | label_32:
    0x00040752 cmp r1, 0x2f                                  |     
                                                             |     if (r1 < 0x2f) {
    0x00040754 bls.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x00040758 ldr r3, [r6, 8]                               |     r3 = *((r6 + 8));
    0x0004075a add.w r1, ip, 3                               |     r1 = ip + 3;
    0x0004075c lsls r3, r0, 4                                |     r3 = r0 << 4;
    0x0004075e subs r2, r4, r7                               |     r2 = r4 - r7;
    0x00040760 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00040762 beq 0x407e6                                   |         goto label_38;
                                                             |     }
    0x00040764 ldrd r5, r7, [r6]                             |     __asm ("ldrd r5, r7, [r6]");
    0x00040768 cmp r5, r7                                    |     
                                                             |     if (r5 >= r7) {
    0x0004076a bhs 0x407e6                                   |         goto label_38;
                                                             |     }
    0x0004076c add.w r7, r5, r5, lsl 1                       |     r7 = r5 + (r5 << 1);
    0x00040770 adds r5, 1                                    |     r5++;
    0x00040772 lsls r7, r7, 2                                |     r7 <<= 2;
    0x00040774 strb r1, [r3, r7]                             |     *((r3 + r7)) = r1;
    0x00040776 add r3, r7                                    |     r3 += r7;
    0x00040778 strd r2, r0, [r3, 4]                          |     __asm ("strd r2, r0, [r3, 4]");
    0x0004077c movs r2, 0                                    |     r2 = 0;
    0x0004077e strb r2, [r3, 1]                              |     *((r3 + 1)) = r2;
    0x00040780 str r5, [r6]                                  |     *(r6) = r5;
                                                             |     do {
    0x00040782 mov r0, r4                                    |         r0 = r4;
    0x00040784 b 0x4038c                                     |         goto label_4;
                                                             | label_21:
    0x00040786 ldr r3, [r6, 8]                               |         r3 = *((r6 + 8));
    0x00040788 rsb.w r7, r7, 1                               |         r7 = 1 - r7;
    0x0004078c add r2, r7                                    |         r2 += r7;
                                                             |         if (r3 == 0) {
    0x0004078e cbz r3, 0x407f2                               |             goto label_39;
                                                             |         }
    0x00040790 ldrd r1, r5, [r6]                             |         __asm ("ldrd r1, r5, [r6]");
    0x00040794 cmp r1, r5                                    |         
                                                             |         if (r1 >= r5) {
    0x00040796 bhs 0x407f2                                   |             goto label_39;
                                                             |         }
    0x00040798 add.w r5, r1, r1, lsl 1                       |         r5 = r1 + (r1 << 1);
    0x0004079c movs r7, 5                                    |         r7 = 5;
    0x0004079e adds r1, 1                                    |         r1++;
    0x000407a0 lsls r5, r5, 2                                |         r5 <<= 2;
    0x000407a2 strh r7, [r3, r5]                             |         *((r3 + r5)) = r7;
    0x000407a4 add r3, r5                                    |         r3 += r5;
    0x000407a6 strd r2, r0, [r3, 4]                          |         __asm ("strd r2, r0, [r3, 4]");
    0x000407aa str r1, [r6]                                  |         *(r6) = r1;
                                                             | label_12:
    0x000407ac ldrb r3, [r6, 0x14]                           |         r3 = *((r6 + 0x14));
    0x000407ae cmp r3, 0                                     |         
    0x000407b0 bne 0x40782                                   |         
                                                             |     } while (r3 != 0);
    0x000407b2 ldr r3, [r6]                                  |     r3 = *(r6);
    0x000407b4 mov r0, r4                                    |     r0 = r4;
    0x000407b6 ldr r2, [r6, 8]                               |     r2 = *((r6 + 8));
    0x000407b8 add.w r3, r3, r3, lsl 1                       |     r3 += (r3 << 1);
    0x000407bc add.w r3, r2, r3, lsl 2                       |     r3 = r2 + (r3 << 2);
    0x000407c0 strb r8, [r3, -0xb]                           |     *((r3 - 0xb)) = r8;
    0x000407c4 b 0x4038c                                     |     goto label_4;
                                                             | label_29:
    0x000407c6 cmp r4, 0x7d                                  |     
                                                             |     if (r4 == 0x7d) {
    0x000407c8 beq 0x40878                                   |         goto label_40;
                                                             |     }
    0x000407ca cmp r4, 0x5d                                  |     
    0x000407cc it eq                                         |     
                                                             |     if (r4 == 0x5d) {
    0x000407ce mvneq r0, 2                                   |         r0 = ~2;
                                                             |         goto label_41;
                                                             |     }
                                                             |     if (r4 == 0x5d) {
                                                             | label_41:
    0x000407d2 beq.w 0x4038c                                 |         goto label_4;
                                                             |     }
    0x000407d6 b 0x40384                                     |     goto label_3;
                                                             | label_30:
    0x000407d8 add r3, r5                                    |     r3 += r5;
    0x000407da ldrb r3, [r3, 1]                              |     r3 = *((r3 + 1));
    0x000407dc subs r3, 0x30                                 |     r3 -= 0x30;
    0x000407de cmp r3, 9                                     |     
                                                             |     if (r3 > 9) {
    0x000407e0 bhi.w 0x405ba                                 |         goto label_11;
                                                             |     }
    0x000407e4 b 0x403e6                                     |     goto label_2;
                                                             | label_38:
    0x000407e6 mov r3, r0                                    |     r3 = r0;
    0x000407e8 mov r0, r6                                    |     r0 = r6;
    0x000407ea bl 0x3fac0                                    |     fcn_0003fac0 (r0, r1, r2, r3);
    0x000407ee mov r0, r4                                    |     r0 = r4;
    0x000407f0 b 0x4038c                                     |     goto label_4;
                                                             | label_39:
    0x000407f2 mov r3, r0                                    |     r3 = r0;
    0x000407f4 movs r1, 5                                    |     r1 = 5;
    0x000407f6 mov r0, r6                                    |     r0 = r6;
    0x000407f8 bl 0x3fac0                                    |     fcn_0003fac0 (r0, r1, r2, r3);
    0x000407fc b 0x407ac                                     |     goto label_12;
                                                             | label_20:
    0x000407fe ldr r2, [r6, 8]                               |     r2 = *((r6 + 8));
                                                             |     if (r2 == 0) {
    0x00040800 cbz r2, 0x40848                               |         goto label_42;
                                                             |     }
    0x00040802 ldrd r3, r1, [r6]                             |     __asm ("ldrd r3, r1, [r6]");
    0x00040806 cmp r3, r1                                    |     
                                                             |     if (r3 >= r1) {
    0x00040808 bhs 0x40848                                   |         goto label_42;
                                                             |     }
    0x0004080a add.w r1, r3, r3, lsl 1                       |     r1 = r3 + (r3 << 1);
    0x0004080e movs r4, 2                                    |     r4 = 2;
    0x00040810 movs r0, 0                                    |     r0 = 0;
    0x00040812 lsls r1, r1, 2                                |     r1 <<= 2;
    0x00040814 adds r3, 1                                    |     r3++;
    0x00040816 strh r4, [r2, r1]                             |     *((r2 + r1)) = r4;
    0x00040818 add r2, r1                                    |     r2 += r1;
    0x0004081a strd r0, r0, [r2, 4]                          |     __asm ("strd r0, r0, [r2, 4]");
    0x0004081e mov r0, r7                                    |     r0 = r7;
    0x00040820 str r3, [r6]                                  |     *(r6) = r3;
    0x00040822 b 0x4038c                                     |     goto label_4;
                                                             | label_35:
    0x00040824 adds r3, 3                                    |     r3 += 3;
                                                             |     if (r3 != 3) {
    0x00040826 bne.w 0x403e6                                 |         goto label_2;
                                                             |     }
                                                             | label_13:
    0x0004082a ldr r3, [r6]                                  |     r3 = *(r6);
    0x0004082c add.w r8, r8, 1                               |     r8++;
    0x00040830 cmp r3, r8                                    |     
                                                             |     if (r3 != r8) {
    0x00040832 bne.w 0x403e6                                 |         goto label_2;
                                                             |     }
    0x00040836 adds r0, r4, 1                                |     r0 = r4 + 1;
    0x00040838 b 0x4038c                                     |     goto label_4;
                                                             | label_25:
    0x0004083a ldrh r2, [r6, 0x16]                           |     r2 = *((r6 + 0x16));
    0x0004083c adds r3, 2                                    |     r3 += 2;
    0x0004083e add.w r2, r2, -1                              |     r2 += -1;
    0x00040842 strh r2, [r6, 0x16]                           |     *((r6 + 0x16)) = r2;
                                                             |     if (r3 == 2) {
    0x00040844 beq 0x4082a                                   |         goto label_13;
                                                             |     }
    0x00040846 b 0x403e6                                     |     goto label_2;
                                                             | label_42:
    0x00040848 movs r3, 0                                    |     r3 = 0;
    0x0004084a movs r1, 2                                    |     r1 = 2;
    0x0004084c mov r2, r3                                    |     r2 = r3;
    0x0004084e mov r0, r6                                    |     r0 = r6;
    0x00040850 bl 0x3fac0                                    |     fcn_0003fac0 (r0, r1, r2, r3);
    0x00040854 mov r0, r7                                    |     r0 = r7;
    0x00040856 b 0x4038c                                     |     goto label_4;
                                                             | label_37:
    0x00040858 movs r3, 0                                    |     r3 = 0;
    0x0004085a mov r0, r6                                    |     r0 = r6;
    0x0004085c mov r2, r3                                    |     r2 = r3;
    0x0004085e mov r1, r3                                    |     r1 = r3;
    0x00040860 bl 0x3fac0                                    |     fcn_0003fac0 (r0, r1, r2, r3);
    0x00040864 mov r0, r7                                    |     r0 = r7;
    0x00040866 b 0x4038c                                     |     goto label_4;
                                                             | label_28:
    0x00040868 movs r3, 0                                    |     r3 = 0;
    0x0004086a movs r1, 1                                    |     r1 = 1;
    0x0004086c mov r2, r3                                    |     r2 = r3;
    0x0004086e mov r0, r6                                    |     r0 = r6;
    0x00040870 bl 0x3fac0                                    |     fcn_0003fac0 (r0, r1, r2, r3);
    0x00040874 mov r0, r7                                    |     r0 = r7;
    0x00040876 b 0x4038c                                     |     goto label_4;
                                                             | label_40:
    0x00040878 mvn r0, 1                                     |     r0 = ~1;
    0x0004087c b 0x4038c                                     |     goto label_4;
                                                             | }
    ; assembly                           | /* r2dec pseudo code output */
                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x408b4 */
                                         | #include <stdint.h>
                                         |  
    ; (fcn) fcn.000408b4 ()              | void fcn_000408b4 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                         |     r0 = arg1;
                                         |     r1 = arg2;
                                         |     r2 = arg3;
    0x000408b4 push {r4, r5, r6, lr}     |     
    0x000408b6 mov r5, r2                |     r5 = r2;
    0x000408b8 mov r6, r1                |     r6 = r1;
    0x000408ba movs r2, 0x20             |     r2 = 0x20;
    0x000408bc movs r1, 0                |     r1 = 0;
    0x000408be mov r4, r0                |     r4 = r0;
    0x000408c0 blx 0x97d4                |     fcn_000097d4 ();
                                         |     if (r5 != 0) {
    0x000408c4 cbz r5, 0x408f6           |         
    0x000408c6 movs r1, 0                |         r1 = 0;
    0x000408c8 mov r0, r4                |         r0 = r4;
    0x000408ca str r5, [r4, 0xc]         |         *((r4 + 0xc)) = r5;
    0x000408cc bl 0x40308                |         fcn_00040308 (r0, r1);
    0x000408d0 ldrb r3, [r4, 0x14]       |         r3 = *((r4 + 0x14));
                                         |         if (r3 == 0) {
    0x000408d2 cbz r3, 0x408fa           |             goto label_2;
                                         |         }
                                         |         if (r6 != 0) {
    0x000408d4 cbz r6, 0x408dc           |             
    0x000408d6 mov r0, r6                |             r0 = r6;
    0x000408d8 blx 0x9718                |             fcn_00009718 ();
                                         |         }
                                         | label_1:
    0x000408dc ldr r0, [r4, 8]           |         r0 = *((r4 + 8));
    0x000408de movs r5, 0                |         r5 = 0;
    0x000408e0 blx 0x9c24                |         fcn_00009c24 ();
    0x000408e4 vmov.i32 d16, 0           |         __asm ("vmov.i32 d16, 0");
    0x000408e8 ldr r0, [r4, 0x10]        |         r0 = *((r4 + 0x10));
    0x000408ea str r5, [r4, 8]           |         *((r4 + 8)) = r5;
    0x000408ec vst1.32 {d16}, [r4]       |         __asm ("vst1.32 {d16}, [r4]");
    0x000408f0 blx 0x9c24                |         fcn_00009c24 ();
    0x000408f4 str r5, [r4, 0x10]        |         *((r4 + 0x10)) = r5;
                                         |     }
    0x000408f6 movs r0, 1                |     r0 = 1;
                                         | label_0:
    0x000408f8 pop {r4, r5, r6, pc}      |     
                                         | label_2:
    0x000408fa cmp r0, 0                 |     
                                         |     if (r0 <= 0) {
    0x000408fc ble 0x40920               |         goto label_3;
                                         |     }
    0x000408fe ldr r1, [pc, 0x34]        |     
    0x00040900 adds r3, r5, r0           |     r3 = r5 + r0;
    0x00040902 ldrb r0, [r5, r0]         |     r0 = *((r5 + r0));
    0x00040904 add r1, pc                |     r1 = 0x8123e;
    0x00040906 adds r2, r1, r0           |     r2 = r1 + r0;
    0x00040908 ldrb r2, [r2, -0x50]      |     r2 = *((r2 - 0x50));
                                         |     if (r2 == 0) {
    0x0004090c cbz r2, 0x4091c           |         goto label_4;
                                         |     }
                                         |     do {
    0x0004090e ldrb r0, [r3, 1]!         |         r0 = *((r3 += 1));
    0x00040912 adds r2, r1, r0           |         r2 = r1 + r0;
    0x00040914 ldrb r2, [r2, -0x50]      |         r2 = *((r2 - 0x50));
    0x00040918 cmp r2, 0                 |         
    0x0004091a bne 0x4090e               |         
                                         |     } while (r2 != 0);
                                         | label_4:
    0x0004091c cmp r0, 0                 |     
                                         |     if (r0 == 0) {
    0x0004091e beq 0x408f8               |         goto label_0;
                                         |     }
                                         | label_3:
    0x00040920 cmp r6, 0                 |     
                                         |     if (r6 == 0) {
    0x00040922 beq 0x408dc               |         goto label_1;
                                         |     }
    0x00040924 ldr r1, [pc, 0x10]        |     
    0x00040926 mov.w r2, -1              |     r2 = -1;
    0x0004092a mov r0, r6                |     r0 = r6;
    0x0004092c add r1, pc                |     r1 = 0x81268;
    0x0004092e blx 0x9ea8                |     fcn_00009ea8 ();
    0x00040932 b 0x408dc                 |     goto label_1;
                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x40e64 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00040e64 ()                                      | void fcn_00040e64 (int16_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_24h, int16_t arg_26h, int16_t arg_2ch, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     arithmetic x;
                                                                 |     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_80h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_11ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00040e64 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00040e68 sub sp, 0x124                                     |     
    0x00040e6a str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00040e6c mov r8, r0                                        |     r8 = r0;
    0x00040e6e ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00040e70 ldr.w r1, [pc, 0xa54]                             |     
    0x00040e74 ldr r0, [r0, 0x18]                                |     r0 = *((r0 + 0x18));
    0x00040e76 ldr.w r2, [pc, 0xa54]                             |     r2 = *(0x418ce);
    0x00040e7a cmp r3, 0x4b                                      |     
    0x00040e7c add r1, pc                                        |     r1 = 0x82748;
    0x00040e7e str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x00040e80 ldr r2, [r1, r2]                                  |     
    0x00040e82 ldr r2, [r2]                                      |     r2 = *(0x82748);
    0x00040e84 str r2, [sp, 0x11c]                               |     var_11ch = r2;
    0x00040e86 mov.w r2, 0                                       |     r2 = 0;
    0x00040e8a ldr r2, [r0]                                      |     r2 = *(r0);
    0x00040e8c str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 |     if (r3 > 0x4b) {
    0x00040e8e bhi 0x40f54                                       |         goto label_86;
                                                                 |     }
    0x00040e90 cmp r3, 0x13                                      |     
                                                                 |     if (r3 < 0x13) {
    0x00040e92 bls 0x40f28                                       |         goto label_0;
                                                                 |     }
    0x00040e94 subs r3, 0x14                                     |     r3 -= 0x14;
    0x00040e96 cmp r3, 0x37                                      |     
                                                                 |     if (r3 > 0x37) {
    0x00040e98 bhi 0x40f28                                       |         goto label_0;
                                                                 |     }
                                                                 |     /* switch table (57 cases) at 0x40e9e */
    0x00040e9a tbh [pc, r3, lsl 1]                               |     __asm ("tbh [pc, r3, lsl 1]");
    0x00040f0e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00040f10 movw r1, 0x44a7                                   |     r1 = 0x44a7;
    0x00040f14 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00040f16 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00040f18 ldrh r3, [r4, 0x20]                               |     r3 = *((r4 + 0x20));
    0x00040f1a ldr r0, [r2, 0x18]                                |     r0 = *((r2 + 0x18));
    0x00040f1c ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x00040f1e subs r3, 1                                        |     r3--;
    0x00040f20 strh r1, [r4]                                     |     *(r4) = r1;
    0x00040f22 str r0, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r0;
    0x00040f24 strh r3, [r4, 0x20]                               |     *((r4 + 0x20)) = r3;
    0x00040f26 str r2, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r2;
                                                                 |     do {
                                                                 | label_0:
    0x00040f28 invalid                                           |         
    0x00040f2a ldr r0, [r3, 0x24]                                |         r0 = *((r3 + 0x24));
    0x00040f2c subs r0, 0                                        |         
    0x00040f2e it ne                                             |         
                                                                 |         if (r0 == 0) {
    0x00040f30 movne r0, 1                                       |             r0 = 1;
                                                                 |         }
    0x00040f32 lsls r0, r0, 1                                    |         r0 <<= 1;
                                                                 | label_1:
    0x00040f34 ldr.w r2, [pc, 0x998]                             |         
    0x00040f38 ldr.w r3, [pc, 0x990]                             |         r3 = *(0x418cc);
    0x00040f3c add r2, pc                                        |         r2 = 0x82810;
    0x00040f3e ldr r3, [r2, r3]                                  |         r3 = *(0x82810);
    0x00040f40 ldr r2, [r3]                                      |         r2 = *(0x82810);
    0x00040f42 ldr r3, [sp, 0x11c]                               |         r3 = var_11ch;
    0x00040f44 eors r2, r3                                       |         r2 ^= r3;
    0x00040f46 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00040f4a bne.w 0x4287c                                     |             goto label_87;
                                                                 |         }
    0x00040f4e add sp, 0x124                                     |         
    0x00040f50 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_86:
    0x00040f54 add.w r2, r3, 0x76                                |         r2 = r3 + 0x76;
    0x00040f58 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x00040f5a cmp r2, 0x22                                      |         
    0x00040f5c bhi 0x40f28                                       |         
                                                                 |     } while (r2 > 0x22);
    0x00040f5e subs r3, 0x8a                                     |     r3 -= 0x8a;
    0x00040f60 cmp r3, 0x22                                      |     
                                                                 |     if (r3 > 0x22) {
    0x00040f62 bhi 0x40f28                                       |         goto label_0;
                                                                 |     }
    0x00040f64 adr r2, 8                                         |     r2 = 8;
    0x00040f66 ldr.w r3, [r2, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_0));
    0x00040f6a add r2, r3                                        |     r2 += r3;
                                                                 |     /* switch table (35 cases) at 0x40f70 */
    0x00040f6c bx r2                                             |     return uint32_t (*r2)() ();
    0x00040ffc ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00040ffe ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
                                                                 |     if (r4 != 0) {
    0x00041000 cbnz r4, 0x41010                                  |         goto label_88;
                                                                 |     }
    0x00041002 b 0x41024                                         |     goto label_2;
                                                                 |     do {
    0x00041004 lsls r5, r3, 0xc                                  |         r5 = r3 << 0xc;
    0x00041006 itet mi                                           |         
                                                                 |         if (r5 >= r3) {
    0x00041008 ldrmi r3, [r4, 0x14]                              |             r3 = *((r4 + 0x14));
                                                                 |         }
                                                                 |         if (r5 < r3) {
    0x0004100a ldrpl r4, [r4, 0xc]                               |             r4 = *((r4 + 0xc));
                                                                 |         }
                                                                 |         if (r5 >= r3) {
    0x0004100c ldrmi r4, [r3, 8]                                 |             r4 = *((r3 + 8));
                                                                 |         }
                                                                 |         if (r4 == 0) {
    0x0004100e cbz r4, 0x41024                                   |             goto label_2;
                                                                 |         }
                                                                 | label_88:
    0x00041010 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00041012 ands r5, r3, 0x82000                              |         r5 = r3 & 0x82000;
    0x00041016 bne 0x41004                                       |         
                                                                 |     } while (r5 != r3);
    0x00041018 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0004101a cmp r3, 0xaa                                      |     
    0x0004101c it ne                                             |     
                                                                 |     if (r3 != 0xaa) {
    0x0004101e cmpne r3, 0x3b                                    |         __asm ("cmpne r3, 0x3b");
                                                                 |     }
                                                                 |     if (r3 == 0xaa) {
    0x00041020 beq.w 0x41484                                     |         goto label_89;
                                                                 |     }
                                                                 | label_2:
    0x00041024 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041026 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00041028 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0004102c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004102e bne.w 0x40f28                                     |         goto label_0;
                                                                 |     }
    0x00041032 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00041034 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00041036 ldrb r2, [r3]                                     |     r2 = *(r3);
    0x00041038 cmp r2, 0xb0                                      |     
    0x0004103a it eq                                             |     
                                                                 |     if (r2 != 0xb0) {
    0x0004103c ldrbeq r2, [r3, 2]                                |         r2 = *((r3 + 2));
                                                                 |     }
    0x0004103e cmp r2, 0xb1                                      |     
                                                                 |     if (r2 == 0xb1) {
    0x00041040 beq.w 0x4227c                                     |         goto label_90;
                                                                 |     }
    0x00041044 cmp r2, 0x8a                                      |     
    0x00041046 itett eq                                          |     
                                                                 |     if (r2 != 0x8a) {
    0x00041048 ldreq r3, [r3, 0x14]                              |         r3 = *((r3 + 0x14));
                                                                 |     }
                                                                 |     if (r2 == 0x8a) {
    0x0004104a movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r2 != 0x8a) {
    0x0004104c ldreq r3, [r3, 0x1c]                              |         r3 = *((r3 + 0x1c));
                                                                 |     }
                                                                 |     if (r2 != 0x8a) {
    0x0004104e ldreq r3, [r3]                                    |         r3 = *(r3);
                                                                 |     }
                                                                 | label_66:
    0x00041050 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041052 ldrb r2, [r2]                                     |     r2 = *(r2);
    0x00041054 cmp r2, 0x30                                      |     
    0x00041056 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
                                                                 |     if (r2 == 0x30) {
    0x00041058 beq.w 0x41760                                     |         goto label_91;
                                                                 |     }
    0x0004105c ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x0004105e ldrb r1, [r2]                                     |     r1 = *(r2);
    0x00041060 cmp r1, 0xb0                                      |     
                                                                 |     if (r1 == 0xb0) {
    0x00041062 beq.w 0x41788                                     |         goto label_92;
                                                                 |     }
                                                                 | label_8:
    0x00041066 cmp r1, 0xb1                                      |     
                                                                 |     if (r1 == 0xb1) {
    0x00041068 beq.w 0x42294                                     |         goto label_93;
                                                                 |     }
    0x0004106c cmp r1, 0x8a                                      |     
    0x0004106e itett eq                                          |     
                                                                 |     if (r1 != 0x8a) {
    0x00041070 ldreq r2, [r2, 0x14]                              |         r2 = *((r2 + 0x14));
                                                                 |     }
                                                                 |     if (r1 == 0x8a) {
    0x00041072 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r1 != 0x8a) {
    0x00041074 ldreq r2, [r2, 0x1c]                              |         r2 = *((r2 + 0x1c));
                                                                 |     }
                                                                 |     if (r1 != 0x8a) {
    0x00041076 ldreq r2, [r2]                                    |         r2 = *(r2);
                                                                 |     }
                                                                 | label_67:
    0x00041078 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0004107a beq.w 0x40f28                                     |         goto label_0;
                                                                 |     }
                                                                 | label_7:
    0x0004107e ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00041080 ldr.w r1, [pc, 0x850]                             |     r1 = *(0x000418d4);
    0x00041084 mov r0, r4                                        |     r0 = r4;
    0x00041086 add r1, pc                                        |     r1 += pc;
    0x00041088 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0004108c ldr r2, [r4]                                      |     r2 = *(r4);
    0x0004108e ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
                                                                 |     do {
    0x00041090 ldr r3, [r1, 4]                                   |         r3 = *((r1 + 4));
    0x00041092 lsls r0, r3, 0x1e                                 |         r0 = r3 << 0x1e;
                                                                 |         if (r0 == r3) {
    0x00041094 bne 0x4109e                                       |             
    0x00041096 ldr r3, [r1, 0x24]                                |             r3 = *((r1 + 0x24));
    0x00041098 cmp r3, 0                                         |             
                                                                 |             if (r3 > 0) {
    0x0004109a bgt.w 0x42072                                     |                 goto label_94;
                                                                 |             }
                                                                 |         }
    0x0004109e ldr r1, [r1, 0xc]                                 |         r1 = *((r1 + 0xc));
    0x000410a0 cmp r1, 0                                         |         
    0x000410a2 bne 0x41090                                       |         
                                                                 |     } while (r1 != 0);
    0x000410a4 b 0x40f28                                         |     goto label_0;
    0x000410a6 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000410a8 add r5, sp, 0x98                                  |     r5 += var_98h;
    0x000410aa mov r0, r5                                        |     r0 = r5;
    0x000410ac movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x000410ae ldr r1, [r3, 0x10]                                |         r1 = *((r3 + 0x10));
    0x000410b0 adds r2, 1                                        |         r2++;
    0x000410b2 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000410b4 str r1, [r0, 4]!                                  |         *((r0 += 4)) = r1;
    0x000410b8 subs r1, r3, 0                                    |         r1 = r3 - 0;
    0x000410ba it ne                                             |         
                                                                 |         if (r1 == r3) {
    0x000410bc movne r1, 1                                       |             r1 = 1;
                                                                 |         }
    0x000410be cmp r2, 7                                         |         
    0x000410c0 it gt                                             |         
                                                                 |         if (r2 <= 7) {
    0x000410c2 movgt r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x000410c4 cmp r1, 0                                         |         
    0x000410c6 bne 0x410ae                                       |         
                                                                 |     } while (r1 != 0);
    0x000410c8 ldr r6, [sp, 0xc]                                 |     r6 = var_ch;
    0x000410ca ldr r4, [r6, 0xc]                                 |     r4 = *((r6 + 0xc));
                                                                 |     if (r4 != 0) {
    0x000410cc cbz r4, 0x410d8                                   |         
    0x000410ce mov r1, r4                                        |         r1 = r4;
    0x000410d0 mov r0, r8                                        |         r0 = r8;
    0x000410d2 bl 0x2cd88                                        |         fcn_0002cd88 (r0, r1);
    0x000410d6 ldr r4, [r6, 0xc]                                 |         r4 = *((r6 + 0xc));
                                                                 |     }
    0x000410d8 mov r0, r4                                        |     r0 = r4;
    0x000410da bl 0xc0c4                                         |     r0 = fcn_0000c0c4 (r0);
    0x000410de mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r0 == 0) {
    0x000410e0 cbnz r0, 0x410ee                                  |         
    0x000410e2 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x000410e4 ldrb.w r2, [r2, 0xd0]                             |         r2 = *((r2 + 0xd0));
    0x000410e8 cmp r2, 1                                         |         
                                                                 |         if (r2 < 1) {
    0x000410ea bls.w 0x41712                                     |             goto label_95;
                                                                 |         }
                                                                 |     }
                                                                 | label_6:
    0x000410ee movs r0, 1                                        |     r0 = 1;
    0x000410f0 b 0x40f34                                         |     goto label_1;
    0x00041110 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041112 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00041114 lsls r6, r3, 0x13                                 |     r6 = r3 << 0x13;
                                                                 |     if (r6 >= r3) {
    0x00041116 bpl.w 0x40f28                                     |         goto label_0;
                                                                 |     }
    0x0004111a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004111c ldr r1, [r3, 0x18]                                |     r1 = *((r3 + 0x18));
    0x0004111e ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x00041120 tst.w r1, 0x2e                                    |     
                                                                 |     if ((r1 & 0x2e) != 0) {
    0x00041124 bne.w 0x4178c                                     |         goto label_96;
                                                                 |     }
    0x00041128 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0004112a mov r0, r8                                        |     r0 = r8;
    0x0004112c ldr r1, [r3, 0x14]                                |     r1 = *((r3 + 0x14));
    0x0004112e bl 0x2d9bc                                        |     fcn_0002d9bc (r0, r1, r2, r3, r4, r5);
                                                                 | label_9:
    0x00041132 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00041134 ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
    0x00041136 cmp r3, r4                                        |     
                                                                 |     if (r3 == r4) {
    0x00041138 beq.w 0x40f28                                     |         goto label_0;
                                                                 |     }
    0x0004113c ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0004113e ldr r3, [r1, 0x18]                                |     r3 = *((r1 + 0x18));
    0x00041140 ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x00041142 orr r3, r3, 0x40                                  |     r3 |= 0x40;
    0x00041146 orr r2, r2, 0x40                                  |     r2 |= 0x40;
    0x0004114a str r2, [r0, 4]                                   |     *((r0 + 4)) = r2;
    0x0004114c str r3, [r1, 0x18]                                |     *((r1 + 0x18)) = r3;
    0x0004114e b 0x40f28                                         |     goto label_0;
                                                                 | label_89:
    0x00041484 mov r0, r8                                        |     r0 = r8;
    0x00041486 mov r1, r4                                        |     r1 = r4;
    0x00041488 bl 0x40e64                                        |     r0 = fcn_00040e64 (r0, r1, r2, r3, r4, r5, r6);
    0x0004148c cmp r0, 2                                         |     
                                                                 |     if (r0 == 2) {
    0x0004148e beq.w 0x40f34                                     |         goto label_1;
                                                                 |     }
    0x00041492 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00041494 cmp r3, 0xaa                                      |     
                                                                 |     if (r3 != 0xaa) {
    0x00041496 bne.w 0x41024                                     |         goto label_2;
                                                                 |     }
    0x0004149a ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0004149c movs r2, 0xaf                                     |     r2 = 0xaf;
    0x0004149e mov r0, r5                                        |     r0 = r5;
    0x000414a0 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x000414a2 strb r2, [r1]                                     |     *(r1) = r2;
    0x000414a4 strb r3, [r1, 2]                                  |     *((r1 + 2)) = r3;
    0x000414a6 b 0x40f34                                         |     goto label_1;
    0x000414a8 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000414aa ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000414ac ldr r3, [r3]                                      |     r3 = *(r3);
    0x000414ae ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x000414b0 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x000414b2 movs r3, 0                                        |     r3 = 0;
    0x000414b4 mov fp, r3                                        |     
    0x000414b6 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x000414b8 mov.w r3, -1                                      |     r3 = -1;
    0x000414bc str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x000414be str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x000414c0 str.w fp, [sp, 0x18]                              |     __asm ("str.w fp, [var_18h]");
    0x000414c4 strd fp, fp, [sp, 0x38]                           |     __asm ("strd fp, fp, [var_0hx38]");
    0x000414c8 ldr.w sl, [pc, 0x424]                             |     
    0x000414cc ldr.w r3, [pc, 0x424]                             |     r3 = *(0x000418f4);
    0x000414d0 ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
    0x000414d4 add sl, pc                                        |     sl = 0x82dc8;
    0x000414d6 add r3, pc                                        |     r3 += pc;
    0x000414d8 str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
    0x000414dc mov sl, fp                                        |     sl = fp;
    0x000414de mov fp, r8                                        |     
    0x000414e0 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000414e2 movs r3, 0                                        |     r3 = 0;
    0x000414e4 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000414e6 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x000414e8 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_12:
    0x000414ea ldr.w lr, [fp, 4]                                 |     
    0x000414ee cmp.w lr, 0                                       |     
                                                                 |     if (lr != 0) {
    0x000414f2 bne.w 0x418a4                                     |         goto label_97;
                                                                 |     }
    0x000414f6 mov r4, sl                                        |     r4 = sl;
    0x000414f8 str.w lr, [sp, 0x10]                              |     __asm ("str.w lr, [var_10h]");
                                                                 | label_36:
    0x000414fc cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x000414fe bne.w 0x417e0                                     |         goto label_98;
                                                                 |     }
    0x00041502 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041504 ldr.w r8, [fp, 0x18]                              |     r8 = *(arg_18h);
    0x00041508 ldr.w sb, [r3, 0x78]                              |     sb = *((r3 + 0x78));
    0x0004150c cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00041510 beq.w 0x41e00                                     |         goto label_99;
                                                                 |     }
    0x00041514 ldrb.w r2, [r3, 0x95]                             |     r2 = *((r3 + 0x95));
    0x00041518 ldrb.w r3, [r3, 0x94]                             |     r3 = *((r3 + 0x94));
    0x0004151c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004151e beq.w 0x41db0                                     |         goto label_100;
                                                                 |     }
    0x00041522 tst.w r8, 0x400                                   |     
                                                                 |     if ((r8 & 0x400) == 0) {
    0x00041526 beq.w 0x41e5e                                     |         goto label_101;
                                                                 |     }
    0x0004152a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0004152c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004152e beq.w 0x41f2e                                     |         goto label_102;
                                                                 |     }
    0x00041532 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00041534 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x00041538 ldr r5, [pc, 0x3bc]                               |     
    0x0004153a subs r6, r2, 1                                    |     r6 = r2 - 1;
    0x0004153c subs r1, 1                                        |     r1--;
    0x0004153e mov r0, r6                                        |     r0 = r6;
    0x00041540 add r5, pc                                        |     r5 = 0x82e3c;
                                                                 |     do {
                                                                 | label_38:
    0x00041542 ldrb r2, [r0, 1]!                                 |         r2 = *((r0 += 1));
    0x00041546 ldrb r7, [r1, 1]!                                 |         r7 = *((r1 += 1));
    0x0004154a cmp r2, r7                                        |         
                                                                 |         if (r2 == r7) {
    0x0004154c beq.w 0x41d24                                     |             goto label_103;
                                                                 |         }
    0x00041550 add r2, r5                                        |         r2 += r5;
    0x00041552 add r7, r5                                        |         r7 += r5;
    0x00041554 ldrb.w ip, [r2, 0x140]                            |         ip = *((r2 + 0x140));
    0x00041558 ldrb.w r2, [r7, 0x140]                            |         r2 = *((r7 + 0x140));
    0x0004155c cmp ip, r2                                        |         
    0x0004155e beq 0x41542                                       |         
                                                                 |     } while (ip == r2);
    0x00041560 tst.w r8, 0x200                                   |     
                                                                 |     if ((r8 & 0x200) == 0) {
    0x00041564 beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
                                                                 | label_56:
    0x00041568 ldr.w r5, [fp, 8]                                 |     r5 = *(arg_8h);
    0x0004156c mov.w sb, 0                                       |     sb = 0;
    0x00041570 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00041572 beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
                                                                 | label_40:
    0x00041576 ldr r1, [pc, 0x384]                               |     
    0x00041578 mov r0, r6                                        |     r0 = r6;
    0x0004157a ldr r6, [pc, 0x384]                               |     
    0x0004157c add r1, pc                                        |     r1 = 0x82e7e;
    0x0004157e add r6, pc                                        |     r6 = 0x82e84;
                                                                 |     do {
                                                                 | label_10:
    0x00041580 ldrb r3, [r1], 1                                  |         r3 = *(r1);
                                                                 |         r1++;
    0x00041584 ldrb r2, [r0, 1]!                                 |         r2 = *((r0 += 1));
    0x00041588 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0004158a beq.w 0x417cc                                     |             goto label_104;
                                                                 |         }
    0x0004158e add r3, r6                                        |         r3 += r6;
    0x00041590 add r2, r6                                        |         r2 += r6;
    0x00041592 ldrb.w r7, [r3, 0x140]                            |         r7 = *((r3 + 0x140));
    0x00041596 ldrb.w r3, [r2, 0x140]                            |         r3 = *((r2 + 0x140));
    0x0004159a cmp r7, r3                                        |         
    0x0004159c beq 0x41580                                       |         
                                                                 |     } while (r7 == r3);
                                                                 | label_11:
    0x0004159e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x000415a2 beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
                                                                 | label_39:
    0x000415a6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000415a8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000415aa beq.w 0x41fa2                                     |         goto label_105;
                                                                 |     }
    0x000415ae ldrb r3, [r2]                                     |     r3 = *(r2);
    0x000415b0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000415b2 beq.w 0x421dc                                     |         goto label_106;
                                                                 |     }
    0x000415b6 ldr r1, [pc, 0x34c]                               |     
    0x000415b8 movs r6, 0                                        |     r6 = 0;
    0x000415ba add r1, pc                                        |     r1 = 0x82ec4;
                                                                 |     do {
    0x000415bc add r3, r1                                        |         r3 += r1;
    0x000415be ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x000415c2 add r6, r3                                        |         r6 += r3;
    0x000415c4 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x000415c8 uxtb r6, r6                                       |         r6 = (int8_t) r6;
    0x000415ca cmp r3, 0                                         |         
    0x000415cc bne 0x415bc                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_59:
    0x000415ce ldrsh.w r5, [sb, 0x22]                            |     r5 = *((sb + 0x22));
    0x000415d2 ldr.w r3, [sb, 0x3c]                              |     r3 = *((sb + 0x3c));
    0x000415d6 ldr.w r7, [sb, 4]                                 |     r7 = *((sb + 4));
    0x000415da cmp r5, 0                                         |     
    0x000415dc str r3, [sp, 0x3c]                                |     x = r3;
                                                                 |     if (r5 <= 0) {
    0x000415de ble.w 0x41ca4                                     |         goto label_107;
                                                                 |     }
    0x000415e2 ldr r0, [pc, 0x324]                               |     
    0x000415e4 adds r7, 0xc                                      |     r7 += 0xc;
    0x000415e6 ldr.w ip, [sp, 0x1c]                              |     ip = var_1ch;
    0x000415ea add r0, pc                                        |     r0 = 0x82ef8;
    0x000415ec b 0x415f8                                         |     
                                                                 |     while (r3 != r6) {
                                                                 | label_3:
    0x000415ee adds r4, 1                                        |         r4++;
    0x000415f0 adds r7, 0xc                                      |         r7 += 0xc;
    0x000415f2 cmp r4, r5                                        |         
                                                                 |         if (r4 == r5) {
    0x000415f4 beq.w 0x41ecc                                     |             goto label_108;
                                                                 |         }
    0x000415f8 ldrb r3, [r7, -0x5]                               |         r3 = *((r7 - 0x5));
    0x000415fc cmp r3, r6                                        |         
    0x000415fe bne 0x415ee                                       |         
                                                                 |     }
    0x00041600 ldr r3, [r7, -0xc]                                |     r3 = *((r7 - 0xc));
    0x00041604 add.w r1, ip, -1                                  |     r1 = ip + -1;
    0x00041608 add.w lr, r3, -1                                  |     lr = r3 + -1;
                                                                 | label_5:
    0x0004160c ldrb r3, [lr, 1]!                                 |     r3 = *((lr += 1));
    0x00041610 ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x00041614 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00041616 beq 0x41634                                       |         goto label_109;
                                                                 |     }
                                                                 | label_4:
    0x00041618 add r3, r0                                        |     r3 += r0;
    0x0004161a add r2, r0                                        |     r2 += r0;
    0x0004161c ldrb.w r3, [r3, 0x140]                            |     r3 = *((r3 + 0x140));
    0x00041620 ldrb.w r2, [r2, 0x140]                            |     r2 = *((r2 + 0x140));
    0x00041624 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00041626 bne 0x415ee                                       |         goto label_3;
                                                                 |     }
    0x00041628 ldrb r3, [lr, 1]!                                 |     r3 = *((lr += 1));
    0x0004162c ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x00041630 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00041632 bne 0x41618                                       |         goto label_4;
                                                                 |     }
                                                                 | label_109:
    0x00041634 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041636 bne 0x4160c                                       |         goto label_5;
                                                                 |     }
    0x00041638 ldrsh.w r3, [sb, 0x20]                            |     r3 = *((sb + 0x20));
    0x0004163c cmp r3, r4                                        |     
                                                                 |     if (r3 == r4) {
    0x0004163e beq.w 0x42090                                     |         goto label_110;
                                                                 |     }
    0x00041642 cmp r5, r4                                        |     
                                                                 |     if (r5 <= r4) {
    0x00041644 ble.w 0x41ecc                                     |         goto label_108;
                                                                 |     }
                                                                 | label_33:
    0x00041648 mov r8, fp                                        |     r8 = fp;
                                                                 | label_53:
    0x0004164a sxth r1, r4                                       |     __asm ("sxth r1, r4");
                                                                 | label_62:
    0x0004164c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0004164e ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00041650 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00041652 beq.w 0x41f88                                     |         goto label_111;
                                                                 |     }
    0x00041656 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041658 str.w sb, [r2, 0x2c]                              |     __asm ("str.w sb, [r2, 0x2c]");
    0x0004165c ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0004165e ldrb.w r2, [r2, 0x95]                             |     r2 = *((r2 + 0x95));
    0x00041662 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00041664 bne.w 0x4217a                                     |         goto label_112;
                                                                 |     }
    0x00041668 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0004166a adds r0, r4, 1                                    |     r0 = r4 + 1;
    0x0004166c it eq                                             |     
                                                                 |     if (r0 != r4) {
    0x0004166e moveq r3, 0x44                                    |         r3 = 0x44;
                                                                 |     }
    0x00041670 strh r1, [r2, 0x20]                               |     *((r2 + 0x20)) = r1;
    0x00041672 it eq                                             |     
                                                                 |     if (r0 != r4) {
    0x00041674 strbeq r3, [r2, 1]                                |         *((r2 + 1)) = r3;
                                                                 |     }
                                                                 |     if (r0 != r4) {
    0x00041676 beq 0x41698                                       |         
    0x00041678 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0004167a bne.w 0x4209c                                     |             goto label_113;
                                                                 |         }
    0x0004167e ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00041680 cmp r4, 0x1f                                      |         
    0x00041682 ldr.w r2, [r3, 0x8c]                              |         r2 = *((r3 + 0x8c));
    0x00041686 ittet le                                          |         
                                                                 |         if (r4 > 0x1f) {
    0x00041688 movle r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r4 > 0x1f) {
    0x0004168a lslle r3, r4                                      |             r3 <<= r4;
                                                                 |         }
                                                                 |         if (r4 <= 0x1f) {
    0x0004168c movgt r3, -1                                      |             r3 = -1;
                                                                 |         }
                                                                 |         if (r4 <= 0x1f) {
    0x00041690 orrs r3, r2                                       |             r3 |= r2;
                                                                 |         }
    0x00041692 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00041694 str.w r3, [r2, 0x8c]                              |         __asm ("str.w r3, [r2, 0x8c]");
                                                                 |     }
                                                                 | label_63:
    0x00041698 movs r4, 0x4d                                     |     r4 = 0x4d;
                                                                 | label_58:
    0x0004169a movs r3, 0                                        |     r3 = 0;
    0x0004169c str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_74:
    0x0004169e uxtb r4, r4                                       |     r4 = (int8_t) r4;
    0x000416a0 movs r3, 1                                        |     r3 = 1;
    0x000416a2 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_13:
    0x000416a4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000416a6 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000416a8 tst.w r3, 0x810000                                |     
                                                                 |     if ((r3 & 0x810000) == 0) {
    0x000416ac bne 0x416d8                                       |         
                                                                 | label_46:
    0x000416ae ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x000416b0 ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
                                                                 |         if (r1 != 0) {
    0x000416b2 cbz r1, 0x416ba                                   |             
    0x000416b4 ldr r0, [sp, 0x40]                                |             r0 = var_40h;
    0x000416b6 bl 0x16c0c                                        |             fcn_00016c0c (r0, r1);
                                                                 |         }
    0x000416ba ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x000416bc movs r3, 0                                        |         r3 = 0;
    0x000416be ldr r1, [r2, 0x10]                                |         r1 = *((r2 + 0x10));
    0x000416c0 str r3, [r2, 0xc]                                 |         *((r2 + 0xc)) = r3;
                                                                 |         if (r1 != 0) {
    0x000416c2 cbz r1, 0x416ca                                   |             
    0x000416c4 ldr r0, [sp, 0x40]                                |             r0 = var_40h;
    0x000416c6 bl 0x16c0c                                        |             fcn_00016c0c (r0, r1);
                                                                 |         }
    0x000416ca ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x000416cc ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x000416ce orr r3, r3, 0x800000                              |         r3 |= 0x800000;
    0x000416d2 str r3, [r2, 4]                                   |         *((r2 + 4)) = r3;
    0x000416d4 movs r3, 0                                        |         r3 = 0;
    0x000416d6 str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
                                                                 |     }
    0x000416d8 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000416da ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x000416dc ldrsh.w r0, [r2, 0x20]                            |     r0 = *((r2 + 0x20));
    0x000416e0 cmp r5, 0                                         |     
    0x000416e2 mvn.w r3, r0                                      |     r3 = ~r0;
    0x000416e6 lsr.w r3, r3, 0x1f                                |     r3 >>= 0x1f;
    0x000416ea it eq                                             |     
                                                                 |     if (r5 != 0) {
    0x000416ec moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000416ee cbz r3, 0x41702                                   |         
    0x000416f0 ldr r1, [r2, 0x2c]                                |         r1 = *((r2 + 0x2c));
    0x000416f2 bl 0x10a48                                        |         fcn_00010a48 (r0, r1, r2);
    0x000416f6 ldr r3, [r5, 0x30]                                |         r3 = *((r5 + 0x30));
    0x000416f8 orrs r3, r0                                       |         r3 |= r0;
    0x000416fa str r3, [r5, 0x30]                                |         *((r5 + 0x30)) = r3;
    0x000416fc ldr r3, [r5, 0x34]                                |         r3 = *((r5 + 0x34));
    0x000416fe orrs r3, r1                                       |         r3 |= r1;
    0x00041700 str r3, [r5, 0x34]                                |         *((r5 + 0x34)) = r3;
                                                                 |     }
    0x00041702 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00041704 strb r4, [r3]                                     |     *(r3) = r4;
    0x00041706 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00041708 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004170a beq.w 0x420c0                                     |         goto label_64;
                                                                 |     }
                                                                 | label_81:
    0x0004170e movs r0, 2                                        |     r0 = 2;
    0x00041710 b 0x40f34                                         |     goto label_1;
                                                                 | label_95:
    0x00041712 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041714 ldrb r1, [r2]                                     |     r1 = *(r2);
    0x00041716 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00041718 cmp r1, 0x33                                      |     
                                                                 |     if (r1 == 0x33) {
    0x0004171a beq.w 0x42326                                     |         goto label_114;
                                                                 |     }
    0x0004171e ldr r1, [pc, 0x1ec]                               |     
    0x00041720 orr r2, r2, 0x20000000                            |     r2 |= 0x20000000;
    0x00041724 add r1, pc                                        |     r1 = 0x83036;
                                                                 | label_71:
    0x00041726 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00041728 strd r2, r1, [r0, 4]                              |     __asm ("strd r2, r1, [r0, 4]");
    0x0004172c movs r2, 0xaa                                     |     r2 = 0xaa;
    0x0004172e strb r2, [r0]                                     |     *(r0) = r2;
    0x00041730 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
                                                                 |     do {
    0x00041732 ldr r1, [r5, 4]!                                  |         r1 = *((r5 += 4));
    0x00041736 adds r3, 1                                        |         r3++;
    0x00041738 str r1, [r2, 0x10]                                |         *((r2 + 0x10)) = r1;
    0x0004173a ldr r2, [r2, 0xc]                                 |         r2 = *((r2 + 0xc));
    0x0004173c subs r1, r2, 0                                    |         r1 = r2 - 0;
    0x0004173e it ne                                             |         
                                                                 |         if (r1 == r2) {
    0x00041740 movne r1, 1                                       |             r1 = 1;
                                                                 |         }
    0x00041742 cmp r3, 7                                         |         
    0x00041744 it gt                                             |         
                                                                 |         if (r3 <= 7) {
    0x00041746 movgt r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x00041748 cmp r1, 0                                         |         
    0x0004174a bne 0x41732                                       |         
                                                                 |     } while (r1 != 0);
                                                                 |     if (r4 != 0) {
    0x0004174c cbz r4, 0x41758                                   |         
    0x0004174e ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00041750 mov r1, r4                                        |         r1 = r4;
    0x00041752 ldr r0, [r3]                                      |         r0 = *(r3);
    0x00041754 bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
                                                                 |     }
    0x00041758 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0004175a movs r3, 0                                        |     r3 = 0;
    0x0004175c str r3, [r2, 0xc]                                 |     *((r2 + 0xc)) = r3;
    0x0004175e b 0x410ee                                         |     goto label_6;
                                                                 | label_91:
    0x00041760 ldr r0, [r2, 0x14]                                |     r0 = *((r2 + 0x14));
    0x00041762 ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
    0x00041764 ldrb r1, [r2]                                     |     r1 = *(r2);
    0x00041766 cmp r1, 0xb0                                      |     
    0x00041768 it eq                                             |     
                                                                 |     if (r1 != 0xb0) {
    0x0004176a ldrbeq r1, [r2, 2]                                |         r1 = *((r2 + 2));
                                                                 |     }
    0x0004176c cmp r1, 0xb1                                      |     
                                                                 |     if (r1 == 0xb1) {
    0x0004176e beq.w 0x42440                                     |         goto label_115;
                                                                 |     }
    0x00041772 cmp r1, 0x8a                                      |     
                                                                 |     if (r1 == 0x8a) {
    0x00041774 beq.w 0x42430                                     |         goto label_116;
                                                                 |     }
    0x00041778 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0004177a bne.w 0x4107e                                     |         goto label_7;
                                                                 |     }
                                                                 | label_75:
    0x0004177e ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
    0x00041780 ldrb r1, [r2]                                     |     r1 = *(r2);
    0x00041782 cmp r1, 0xb0                                      |     
                                                                 |     if (r1 != 0xb0) {
    0x00041784 bne.w 0x41066                                     |         goto label_8;
                                                                 |     }
                                                                 | label_92:
    0x00041788 ldrb r1, [r2, 2]                                  |     r1 = *((r2 + 2));
    0x0004178a b 0x41066                                         |     goto label_8;
                                                                 | label_96:
    0x0004178c mov r3, r2                                        |     r3 = r2;
    0x0004178e str r2, [sp]                                      |     *(sp) = r2;
    0x00041790 ldr r2, [pc, 0x17c]                               |     
    0x00041792 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00041794 add r2, pc                                        |     r2 = 0x830a8;
    0x00041796 bl 0x20b50                                        |     fcn_00020b50 (r0, r1, r2, r3);
    0x0004179a b 0x41132                                         |     goto label_9;
                                                                 | label_104:
    0x000417cc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000417ce bne.w 0x41580                                     |         goto label_10;
                                                                 |     }
    0x000417d2 ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x000417d4 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000417d6 ldr.w sb, [r3, 0x18]                              |     sb = *((r3 + 0x18));
    0x000417da movs r3, 2                                        |     r3 = 2;
    0x000417dc str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x000417de b 0x4159e                                         |     goto label_11;
                                                                 | label_98:
    0x000417e0 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000417e2 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000417e4 cmp r3, 0                                         |     
    0x000417e6 it eq                                             |     
                                                                 |     if (r3 == 0) {
    0x000417e8 cmpeq r2, 1                                       |         __asm ("cmpeq r2, 1");
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000417ea bne.w 0x41d48                                     |         goto label_117;
                                                                 |     }
    0x000417ee ldr.w r8, [fp, 0x18]                              |     r8 = *(arg_18h);
                                                                 | label_34:
    0x000417f2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
                                                                 |     if (r3 != 0) {
    0x000417f4 cbz r3, 0x417fe                                   |         
    0x000417f6 tst.w r8, 0x28                                    |         
                                                                 |         if ((r8 & 0x28) == 0) {
    0x000417fa beq.w 0x41e22                                     |             goto label_118;
                                                                 |         }
                                                                 |     }
                                                                 | label_45:
    0x000417fe movs r3, 1                                        |     r3 = 1;
    0x00041800 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_35:
    0x00041802 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041804 clz r3, r3                                        |     r3 &= r3;
    0x00041808 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0004180a ands.w r3, r3, r8, lsr 7                          |     r3 &= (r8 >> 7);
                                                                 |     if (r3 != r3) {
    0x0004180e bne.w 0x41eec                                     |         goto label_119;
                                                                 |     }
                                                                 | label_54:
    0x00041812 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00041814 ldr.w fp, [fp, 0xc]                               |     fp = *(arg_ch);
    0x00041818 adds r3, 1                                        |     r3++;
    0x0004181a str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x0004181c cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00041820 bne.w 0x414ea                                     |         goto label_12;
                                                                 |     }
    0x00041824 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041826 mov r8, fp                                        |     r8 = fp;
    0x00041828 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004182a beq.w 0x41fa8                                     |         goto label_120;
                                                                 |     }
    0x0004182e str.w fp, [sp, 0x10]                              |     __asm ("str.w fp, [var_10h]");
                                                                 | label_73:
    0x00041832 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
                                                                 |     if (r3 != 0) {
    0x00041834 cbz r3, 0x41856                                   |         
    0x00041836 mov r4, r8                                        |         r4 = r8;
    0x00041838 mov r8, r3                                        |         r8 = r3;
    0x0004183a ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0004183c subs r3, 1                                        |         r3--;
                                                                 | label_60:
    0x0004183e ldr.w r2, [r8]                                    |         r2 = *(r8);
    0x00041842 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x00041844 beq.w 0x42342                                     |             goto label_121;
                                                                 |         }
    0x00041848 mov r1, r8                                        |         r1 = r8;
    0x0004184a ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x0004184c mov r8, r4                                        |         r8 = r4;
    0x0004184e bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
    0x00041852 movs r3, 0                                        |         r3 = 0;
    0x00041854 str r3, [sp, 0x80]                                |         var_80h = r3;
                                                                 |     }
    0x00041856 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00041858 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004185a beq.w 0x4229c                                     |         goto label_122;
                                                                 |     }
    0x0004185e ldr r2, [pc, 0xb8]                                |     
    0x00041860 add r2, pc                                        |     r2 = 0x8317e;
                                                                 | label_68:
    0x00041862 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00041864 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041866 beq.w 0x422b6                                     |         goto label_123;
                                                                 |     }
    0x0004186a ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0004186c ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004186e str r1, [sp, 4]                                   |     var_4h = r1;
    0x00041870 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00041872 str r1, [sp]                                      |     *(sp) = r1;
    0x00041874 ldr r1, [pc, 0xa4]                                |     
    0x00041876 add r1, pc                                        |     r1 = 0x83196;
    0x00041878 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_70:
    0x0004187c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
                                                                 |     do {
    0x0004187e ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x00041880 lsls r1, r2, 0x1e                                 |         r1 = r2 << 0x1e;
                                                                 |         if (r1 == r2) {
    0x00041882 bne 0x4188c                                       |             
    0x00041884 ldr r2, [r3, 0x24]                                |             r2 = *((r3 + 0x24));
    0x00041886 cmp r2, 0                                         |             
                                                                 |             if (r2 > 0) {
    0x00041888 bgt.w 0x422a4                                     |                 goto label_124;
                                                                 |             }
                                                                 |         }
    0x0004188c ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x0004188e cmp r3, 0                                         |         
    0x00041890 bne 0x4187e                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_69:
    0x00041892 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00041894 movs r3, 1                                        |     r3 = 1;
    0x00041896 movs r4, 0xa7                                     |     r4 = 0xa7;
    0x00041898 strb r3, [r2, 0x11]                               |     *((r2 + 0x11)) = r3;
    0x0004189a ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0004189c ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x0004189e adds r3, 1                                        |     r3++;
    0x000418a0 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x000418a2 b 0x416a4                                         |     goto label_13;
                                                                 | label_97:
    0x000418a4 mov r8, lr                                        |     r8 = lr;
    0x000418a6 ldr r3, [r8], 8                                   |     r3 = *(r8);
                                                                 |     r8 += 8;
    0x000418aa cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000418ac ble.w 0x4201c                                     |         goto label_125;
                                                                 |     }
    0x000418b0 movs r3, 0                                        |     r3 = 0;
    0x000418b2 str.w fp, [sp, 0x60]                              |     __asm ("str.w fp, [var_60h]");
    0x000418b6 ldr r7, [sp, 0x5c]                                |     r7 = var_5ch;
    0x000418b8 mov fp, r8                                        |     
    0x000418ba str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000418bc str.w lr, [sp, 0x48]                              |     __asm ("str.w lr, [var_48h]");
    0x000418c0 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000418c2 str.w sl, [sp, 0x64]                              |     __asm ("str.w sl, [var_64h]");
    0x000418c4 adr r0, 0x190                                     |     r0 = 0x190;
    0x000418c6 b 0x4194e                                         |     
                                                                 |     while (r2 >= r3) {
    0x00041920 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00041922 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00041924 beq.w 0x41a74                                     |             goto label_42;
                                                                 |         }
    0x00041928 ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x0004192a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004192c beq 0x41a1e                                       |             goto label_29;
                                                                 |         }
                                                                 | label_16:
    0x0004192e ldr.w r3, [sl, 0x3c]                              |         r3 = *((sl + 0x3c));
    0x00041932 ldr r2, [sp, 0x3c]                                |         r2 = x;
    0x00041934 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x00041936 beq.w 0x41c42                                     |             goto label_126;
                                                                 |         }
                                                                 | label_15:
    0x0004193a ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x0004193c add.w fp, fp, 0x40                                |         
    0x00041940 ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x00041942 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00041944 adds r2, 1                                        |         r2++;
    0x00041946 str r2, [sp, 0x34]                                |         var_34h = r2;
    0x00041948 cmp r2, r3                                        |         
                                                                 |         if (r2 >= r3) {
    0x0004194a bge.w 0x41cce                                     |             goto label_127;
                                                                 |         }
    0x0004194e ldrb.w r3, [fp, 0x26]                             |         r3 = *(arg_26h);
    0x00041952 ldr.w sl, [fp, 0x10]                              |         sl = *(arg_10h);
    0x00041956 lsls r2, r3, 0x1a                                 |         r2 = r3 << 0x1a;
    0x00041958 bpl 0x41920                                       |         
                                                                 |     }
    0x0004195a ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0004195e ldr.w sb, [r3, 0x1c]                              |     sb = *((r3 + 0x1c));
    0x00041962 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041964 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x00041968 clz r3, r3                                        |     r3 &= r3;
    0x0004196c lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0004196e cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00041970 ble 0x41a14                                       |         goto label_128;
                                                                 |     }
    0x00041972 ldr.w r4, [pc, 0xb44]                             |     r4 = *(0x000424b8);
    0x00041976 movs r6, 0                                        |     r6 = 0;
    0x00041978 mov r5, r6                                        |     r5 = r6;
    0x0004197a str.w sl, [sp, 0x54]                              |     __asm ("str.w sl, [var_54h]");
    0x0004197e str r6, [sp, 0x30]                                |     var_30h = r6;
    0x00041980 add.w r8, sb, 8                                   |     r8 = sb + 8;
    0x00041984 ldr r6, [sp, 0x38]                                |     r6 = var_38h;
    0x00041986 add r4, pc                                        |     r4 += pc;
    0x00041988 ldr.w sl, [sp, 0x10]                              |     sl = var_10h;
    0x0004198c str r3, [sp, 0x58]                                |     var_58h = r3;
    0x0004198e str r7, [sp, 0x44]                                |     var_44h = r7;
    0x00041990 b 0x419e6                                         |     
                                                                 |     while (r0 != 0) {
    0x00041992 cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x00041996 beq.w 0x41c3c                                     |             goto label_129;
                                                                 |         }
    0x0004199a ldrb.w r3, [fp, 0x26]                             |         r3 = *(arg_26h);
    0x0004199e lsls r3, r3, 0x1d                                 |         r3 <<= 0x1d;
                                                                 |         if (r3 < r3) {
    0x000419a0 bmi.w 0x41bc8                                     |             goto label_130;
                                                                 |         }
                                                                 | label_24:
    0x000419a4 ldr r1, [sp, 0x80]                                |         r1 = var_80h;
                                                                 |         if (r1 != 0) {
    0x000419a6 cbz r1, 0x419ae                                   |             
    0x000419a8 ldr r0, [sp, 0x40]                                |             r0 = var_40h;
    0x000419aa bl 0x16c98                                        |             fcn_00016c98 (r0, r1);
                                                                 |         }
    0x000419ae add.w sl, sl, 1                                   |         sl++;
    0x000419b2 movs r3, 0                                        |         r3 = 0;
    0x000419b4 str r3, [sp, 0x80]                                |         var_80h = r3;
                                                                 | label_28:
    0x000419b6 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x000419b8 strh r5, [r3, 0x20]                               |         *((r3 + 0x20)) = r5;
    0x000419ba adds r5, 1                                        |         r5++;
    0x000419bc add.w r2, sb, r5, lsl 4                           |         r2 = sb + (r5 << 4);
    0x000419c0 ldrb r3, [r2, 1]                                  |         r3 = *((r2 + 1));
    0x000419c2 orr r3, r3, 0x40                                  |         r3 |= 0x40;
    0x000419c6 strb r3, [r2, 1]                                  |         *((r2 + 1)) = r3;
    0x000419c8 lsrs r3, r3, 7                                    |         r3 >>= 7;
                                                                 |         if (r3 != r3) {
    0x000419ca bne.w 0x41d04                                     |             goto label_131;
                                                                 |         }
    0x000419ce movs r3, 1                                        |         r3 = 1;
    0x000419d0 add.w r8, r8, 0x10                                |         r8 += 0x10;
    0x000419d4 str r3, [sp, 0x30]                                |         var_30h = r3;
    0x000419d6 movs r3, 2                                        |         r3 = 2;
    0x000419d8 str r3, [sp, 0x28]                                |         var_28h = r3;
    0x000419da ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x000419de str.w fp, [sp, 0x24]                              |         __asm ("str.w fp, [var_24h]");
    0x000419e2 cmp r5, r3                                        |         
                                                                 |         if (r5 >= r3) {
    0x000419e4 bge 0x41a06                                       |             goto label_132;
                                                                 |         }
                                                                 | label_14:
    0x000419e6 ldrd r0, r1, [r8, 4]                              |         __asm ("ldrd r0, r1, [r8, 4]");
    0x000419ea ldrd r3, r2, [sp, 0x18]                           |         __asm ("ldrd r3, r2, [var_18h]");
    0x000419ee str r6, [sp]                                      |         *(sp) = r6;
    0x000419f0 bl 0x1aa6c                                        |         r0 = fcn_0001aa6c (r0, r1, r2, r3, r4);
    0x000419f4 cmp r0, 0                                         |         
    0x000419f6 bne 0x41992                                       |         
                                                                 |     }
                                                                 | label_27:
    0x000419f8 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x000419fc adds r5, 1                                        |     r5++;
    0x000419fe add.w r8, r8, 0x10                                |     r8 += 0x10;
    0x00041a02 cmp r5, r3                                        |     
                                                                 |     if (r5 < r3) {
    0x00041a04 blt 0x419e6                                       |         goto label_14;
                                                                 |     }
                                                                 | label_132:
    0x00041a06 ldr r6, [sp, 0x30]                                |     r6 = var_30h;
    0x00041a08 str.w sl, [sp, 0x10]                              |     __asm ("str.w sl, [var_10h]");
    0x00041a0c ldrd sl, r3, [sp, 0x54]                           |     __asm ("ldrd sl, r3, [var_54h]");
    0x00041a10 ldr r7, [sp, 0x44]                                |     r7 = var_44h;
    0x00041a12 orrs r3, r6                                       |     r3 |= r6;
                                                                 | label_128:
    0x00041a14 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041a16 bne 0x4193a                                       |         goto label_15;
                                                                 |     }
    0x00041a18 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00041a1a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041a1c bne 0x4192e                                       |         goto label_16;
                                                                 |     }
                                                                 | label_29:
    0x00041a1e ldr.w r5, [fp, 0xc]                               |     r5 = *(arg_ch);
    0x00041a22 mov r1, r5                                        |     r1 = r5;
    0x00041a24 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00041a26 beq.w 0x41c66                                     |         goto label_133;
                                                                 |     }
                                                                 | label_30:
    0x00041a2a ldr.w r4, [pc, 0xa90]                             |     r4 = *(0x000424bc);
    0x00041a2e subs r1, 1                                        |     r1--;
    0x00041a30 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041a32 add r4, pc                                        |     r4 += pc;
    0x00041a34 subs r0, r3, 1                                    |     r0 = r3 - 1;
                                                                 | label_18:
    0x00041a36 ldrb r3, [r1, 1]!                                 |     r3 = *((r1 += 1));
    0x00041a3a ldrb r2, [r0, 1]!                                 |     r2 = *((r0 += 1));
    0x00041a3e cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00041a40 beq 0x41a60                                       |         goto label_134;
                                                                 |     }
                                                                 | label_17:
    0x00041a42 add r3, r4                                        |     r3 += r4;
    0x00041a44 add r2, r4                                        |     r2 += r4;
    0x00041a46 ldrb.w r6, [r3, 0x140]                            |     r6 = *((r3 + 0x140));
    0x00041a4a ldrb.w r3, [r2, 0x140]                            |     r3 = *((r2 + 0x140));
    0x00041a4e cmp r6, r3                                        |     
                                                                 |     if (r6 != r3) {
    0x00041a50 bne.w 0x4193a                                     |         goto label_15;
                                                                 |     }
    0x00041a54 ldrb r3, [r1, 1]!                                 |     r3 = *((r1 += 1));
    0x00041a58 ldrb r2, [r0, 1]!                                 |     r2 = *((r0 += 1));
    0x00041a5c cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00041a5e bne 0x41a42                                       |         goto label_17;
                                                                 |     }
                                                                 | label_134:
    0x00041a60 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041a62 bne 0x41a36                                       |         goto label_18;
                                                                 |     }
    0x00041a64 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041a66 ldrb.w r3, [r3, 0xd0]                             |     r3 = *((r3 + 0xd0));
    0x00041a6a cmp r5, 0                                         |     
    0x00041a6c it ne                                             |     
                                                                 |     if (r5 != 0) {
    0x00041a6e cmpne r3, 1                                       |         __asm ("cmpne r3, 1");
                                                                 |     }
                                                                 |     if (r5 > 0) {
    0x00041a70 bhi.w 0x41d76                                     |         goto label_135;
                                                                 |     }
                                                                 | label_42:
    0x00041a74 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00041a76 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00041a78 beq.w 0x41d72                                     |         goto label_136;
                                                                 |     }
    0x00041a7c ldrb r3, [r2]                                     |     r3 = *(r2);
    0x00041a7e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041a80 beq.w 0x41e5a                                     |         goto label_137;
                                                                 |     }
    0x00041a84 ldr.w r1, [pc, 0xa38]                             |     r1 = *(0x000424c0);
    0x00041a88 movs r0, 0                                        |     r0 = 0;
    0x00041a8a add r1, pc                                        |     r1 += pc;
                                                                 |     do {
    0x00041a8c add r3, r1                                        |         r3 += r1;
    0x00041a8e ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x00041a92 add r0, r3                                        |         r0 += r3;
    0x00041a94 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x00041a98 uxtb r0, r0                                       |         r0 = (int8_t) r0;
    0x00041a9a cmp r3, 0                                         |         
    0x00041a9c bne 0x41a8c                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_41:
    0x00041a9e ldrsh.w r8, [sl, 0x22]                            |     r8 = *((sl + 0x22));
    0x00041aa2 ldr.w r5, [sl, 4]                                 |     r5 = *((sl + 4));
    0x00041aa6 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x00041aaa ble.w 0x41c6e                                     |         goto label_138;
                                                                 |     }
    0x00041aae ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041ab0 adds r5, 0xc                                      |     r5 += 0xc;
    0x00041ab2 ldr r6, [sp, 0x50]                                |     r6 = var_50h;
    0x00041ab4 movs r4, 0                                        |     r4 = 0;
    0x00041ab6 mov r2, sl                                        |     r2 = sl;
    0x00041ab8 add.w lr, r3, -1                                  |     lr = r3 + -1;
    0x00041abc b 0x41ac8                                         |     
                                                                 |     while (r3 != r0) {
                                                                 | label_19:
    0x00041abe adds r4, 1                                        |         r4++;
    0x00041ac0 adds r5, 0xc                                      |         r5 += 0xc;
    0x00041ac2 cmp r4, r8                                        |         
                                                                 |         if (r4 == r8) {
    0x00041ac4 beq.w 0x41c6c                                     |             goto label_139;
                                                                 |         }
    0x00041ac8 ldrb r3, [r5, -0x5]                               |         r3 = *((r5 - 0x5));
    0x00041acc cmp r3, r0                                        |         
    0x00041ace bne 0x41abe                                       |         
                                                                 |     }
    0x00041ad0 ldr r3, [r5, -0xc]                                |     r3 = *((r5 - 0xc));
    0x00041ad4 mov sb, lr                                        |     sb = lr;
    0x00041ad6 subs r3, 1                                        |     r3--;
                                                                 | label_21:
    0x00041ad8 ldrb r1, [r3, 1]!                                 |     r1 = *((r3 += 1));
    0x00041adc ldrb ip, [sb, 1]!                                 |     ip = *((sb += 1));
    0x00041ae0 cmp r1, ip                                        |     
                                                                 |     if (r1 == ip) {
    0x00041ae2 beq 0x41b00                                       |         goto label_140;
                                                                 |     }
                                                                 | label_20:
    0x00041ae4 add r1, r6                                        |     r1 += r6;
    0x00041ae6 add ip, r6                                        |     
    0x00041ae8 ldrb.w sl, [r1, 0x140]                            |     sl = *((r1 + 0x140));
    0x00041aec ldrb.w r1, [ip, 0x140]                            |     r1 = *((ip + 0x140));
    0x00041af0 cmp sl, r1                                        |     
                                                                 |     if (sl != r1) {
    0x00041af2 bne 0x41abe                                       |         goto label_19;
                                                                 |     }
    0x00041af4 ldrb r1, [r3, 1]!                                 |     r1 = *((r3 += 1));
    0x00041af8 ldrb ip, [sb, 1]!                                 |     ip = *((sb += 1));
    0x00041afc cmp r1, ip                                        |     
                                                                 |     if (r1 != ip) {
    0x00041afe bne 0x41ae4                                       |         goto label_20;
                                                                 |     }
                                                                 | label_140:
    0x00041b00 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00041b02 bne 0x41ad8                                       |         goto label_21;
                                                                 |     }
    0x00041b04 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00041b06 ldrb.w r3, [fp, 0x26]                             |     r3 = *(arg_26h);
    0x00041b0a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00041b0c beq.w 0x422ae                                     |         goto label_141;
                                                                 |     }
    0x00041b10 lsls r1, r3, 0x1d                                 |     r1 = r3 << 0x1d;
                                                                 |     if (r1 >= r3) {
    0x00041b12 bpl.w 0x41c88                                     |         goto label_142;
                                                                 |     }
    0x00041b16 ldr.w sb, [fp, 0x2c]                              |     sb = *(arg_2ch);
    0x00041b1a ldr.w sl, [sb]                                    |     sl = *(sb);
    0x00041b1e cmp.w sl, 0                                       |     
                                                                 |     if (sl <= 0) {
    0x00041b22 ble.w 0x41c88                                     |         goto label_142;
                                                                 |     }
    0x00041b26 mov.w ip, 1                                       |     
    0x00041b2a str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00041b2c str r5, [sp, 0x30]                                |     var_30h = r5;
    0x00041b2e str.w r8, [sp, 0x44]                              |     __asm ("str.w r8, [var_44h]");
                                                                 | label_22:
    0x00041b32 ldr.w r1, [sb, ip, lsl 3]                         |     offset_1 = ip << 3;
                                                                 |     r1 = *((sb + offset_1));
    0x00041b36 mov r5, lr                                        |     r5 = lr;
    0x00041b38 add.w r8, r1, -1                                  |     r8 = r1 + -1;
                                                                 |     do {
                                                                 | label_23:
    0x00041b3c ldrb r1, [r8, 1]!                                 |         r1 = *((r8 += 1));
    0x00041b40 ldrb r0, [r5, 1]!                                 |         r0 = *((r5 += 1));
    0x00041b44 cmp r1, r0                                        |         
                                                                 |         if (r1 == r0) {
    0x00041b46 beq 0x41b66                                       |             goto label_143;
                                                                 |         }
    0x00041b48 add r1, r7                                        |         r1 += r7;
    0x00041b4a add r0, r7                                        |         r0 += r7;
    0x00041b4c ldrb.w r1, [r1, 0x140]                            |         r1 = *((r1 + 0x140));
    0x00041b50 ldrb.w r0, [r0, 0x140]                            |         r0 = *((r0 + 0x140));
    0x00041b54 cmp r1, r0                                        |         
    0x00041b56 beq 0x41b3c                                       |         
                                                                 |     } while (r1 == r0);
    0x00041b58 cmp ip, sl                                        |     
    0x00041b5a add.w r1, ip, 1                                   |     r1 = ip + 1;
                                                                 |     if (ip == sl) {
    0x00041b5e beq.w 0x41c88                                     |         goto label_142;
                                                                 |     }
    0x00041b62 mov ip, r1                                        |     
    0x00041b64 b 0x41b32                                         |     goto label_22;
                                                                 | label_143:
    0x00041b66 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00041b68 bne 0x41b3c                                       |         goto label_23;
                                                                 |     }
    0x00041b6a ldrb.w r1, [fp, 0x24]                             |     r1 = *(arg_24h);
    0x00041b6e ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00041b70 ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x00041b72 tst.w r1, 0x10                                    |     
    0x00041b76 ldr.w r8, [sp, 0x44]                              |     r8 = var_44h;
                                                                 |     if ((r1 & 0x10) == 0) {
    0x00041b7a beq 0x41abe                                       |         goto label_19;
                                                                 |     }
    0x00041b7c lsls r6, r1, 0x1c                                 |     r6 = r1 << 0x1c;
    0x00041b7e mov sl, r2                                        |     sl = r2;
                                                                 |     if (r6 < r1) {
    0x00041b80 bmi.w 0x41d56                                     |         goto label_144;
                                                                 |     }
    0x00041b84 ldr r1, [sp, 0x80]                                |     r1 = var_80h;
                                                                 |     if (r1 != 0) {
    0x00041b86 cbz r1, 0x41b92                                   |         
    0x00041b88 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00041b8a bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
    0x00041b8e ldrb.w r3, [fp, 0x26]                             |         r3 = *(arg_26h);
                                                                 |     }
    0x00041b92 movs r2, 0                                        |     r2 = 0;
    0x00041b94 str r2, [sp, 0x80]                                |     var_80h = r2;
    0x00041b96 movs r2, 1                                        |     r2 = 1;
    0x00041b98 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_32:
    0x00041b9a ldrsh.w r2, [sl, 0x20]                            |     r2 = *((sl + 0x20));
    0x00041b9e and r3, r3, 0x20                                  |     r3 &= 0x20;
    0x00041ba2 cmp r2, r4                                        |     
                                                                 |     if (r2 == r4) {
    0x00041ba4 beq.w 0x41d14                                     |         goto label_145;
                                                                 |     }
    0x00041ba8 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041baa strh r4, [r2, 0x20]                               |     *((r2 + 0x20)) = r4;
                                                                 |     if (r3 != 0) {
    0x00041bac cbz r3, 0x41bc2                                   |         
                                                                 | label_37:
    0x00041bae ldr.w r3, [fp, 0x14]                              |         r3 = *(arg_14h);
    0x00041bb2 adds r4, 1                                        |         r4++;
    0x00041bb4 ldr r3, [r3, 0x1c]                                |         r3 = *((r3 + 0x1c));
    0x00041bb6 add.w r3, r3, r4, lsl 4                           |         r3 += (r4 << 4);
    0x00041bba ldrb r2, [r3, 1]                                  |         r2 = *((r3 + 1));
    0x00041bbc orr r2, r2, 0x40                                  |         r2 |= 0x40;
    0x00041bc0 strb r2, [r3, 1]                                  |         *((r3 + 1)) = r2;
                                                                 |     }
                                                                 | label_31:
    0x00041bc2 str.w fp, [sp, 0x24]                              |     __asm ("str.w fp, [var_24h]");
    0x00041bc6 b 0x4193a                                         |     goto label_15;
                                                                 | label_130:
    0x00041bc8 ldr.w r7, [fp, 0x2c]                              |     r7 = *(arg_2ch);
    0x00041bcc ldr r3, [r7]                                      |     r3 = *(r7);
    0x00041bce cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00041bd0 ble.w 0x419a4                                     |         goto label_24;
                                                                 |     }
    0x00041bd4 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00041bd6 adds r7, 8                                        |     r7 += 8;
    0x00041bd8 movs r1, 0                                        |     r1 = 0;
    0x00041bda add.w lr, r2, -1                                  |     lr = r2 + -1;
    0x00041bde mov r2, sb                                        |     r2 = sb;
                                                                 | label_25:
    0x00041be0 ldr.w r0, [r7, r1, lsl 3]                         |     offset_2 = r1 << 3;
                                                                 |     r0 = *((r7 + offset_2));
    0x00041be4 strd lr, r3, [sp, 0x10]                           |     __asm ("strd lr, r3, [sp, 0x10]");
    0x00041be8 add.w sb, r0, -1                                  |     sb = r0 + -1;
                                                                 |     do {
                                                                 | label_26:
    0x00041bec ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00041bee ldrb r0, [sb, 1]!                                 |         r0 = *((sb += 1));
    0x00041bf2 ldrb ip, [r3, 1]!                                 |         ip = *((r3 += 1));
    0x00041bf6 cmp r0, ip                                        |         
    0x00041bf8 str r3, [sp, 0x10]                                |         var_10h = r3;
                                                                 |         if (r0 == ip) {
    0x00041bfa beq 0x41c18                                       |             goto label_146;
                                                                 |         }
    0x00041bfc add r0, r4                                        |         r0 += r4;
    0x00041bfe add ip, r4                                        |         
    0x00041c00 ldrb.w r0, [r0, 0x140]                            |         r0 = *((r0 + 0x140));
    0x00041c04 ldrb.w ip, [ip, 0x140]                            |         ip = *((ip + 0x140));
    0x00041c08 cmp r0, ip                                        |         
    0x00041c0a beq 0x41bec                                       |         
                                                                 |     } while (r0 == ip);
    0x00041c0c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00041c0e adds r1, 1                                        |     r1++;
    0x00041c10 cmp r3, r1                                        |     
                                                                 |     if (r3 != r1) {
    0x00041c12 bne 0x41be0                                       |         goto label_25;
                                                                 |     }
    0x00041c14 mov sb, r2                                        |     sb = r2;
    0x00041c16 b 0x419a4                                         |     goto label_24;
                                                                 | label_146:
    0x00041c18 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00041c1a bne 0x41bec                                       |         goto label_26;
                                                                 |     }
    0x00041c1c ldrb.w r3, [fp, 0x24]                             |     r3 = *(arg_24h);
    0x00041c20 mov sb, r2                                        |     sb = r2;
    0x00041c22 lsls r2, r3, 0x1b                                 |     r2 = r3 << 0x1b;
                                                                 |     if (r2 >= r3) {
    0x00041c24 bpl.w 0x419f8                                     |         goto label_27;
                                                                 |     }
    0x00041c28 lsls r7, r3, 0x1c                                 |     r7 = r3 << 0x1c;
                                                                 |     if (r7 < r3) {
    0x00041c2a bmi.w 0x41d9a                                     |         goto label_147;
                                                                 |     }
    0x00041c2e ldr r1, [sp, 0x80]                                |     r1 = var_80h;
                                                                 |     if (r1 != 0) {
    0x00041c30 cbz r1, 0x41c38                                   |         
    0x00041c32 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00041c34 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 |     }
    0x00041c38 movs r3, 0                                        |     r3 = 0;
    0x00041c3a str r3, [sp, 0x80]                                |     var_80h = r3;
                                                                 | label_129:
    0x00041c3c mov.w sl, 1                                       |     sl = 1;
    0x00041c40 b 0x419b6                                         |     goto label_28;
                                                                 | label_126:
    0x00041c42 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00041c44 bne.w 0x41a1e                                     |         goto label_29;
                                                                 |     }
    0x00041c48 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00041c4a ldrb r3, [r2]                                     |     r3 = *(r2);
    0x00041c4c cmp r3, 0x2a                                      |     
                                                                 |     if (r3 != 0x2a) {
    0x00041c4e bne.w 0x4193a                                     |         goto label_15;
                                                                 |     }
    0x00041c52 ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
    0x00041c54 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041c56 bne.w 0x4193a                                     |         goto label_15;
                                                                 |     }
    0x00041c5a ldr.w r5, [fp, 0xc]                               |     r5 = *(arg_ch);
    0x00041c5e mov r1, r5                                        |     r1 = r5;
    0x00041c60 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00041c62 bne.w 0x41a2a                                     |         goto label_30;
                                                                 |     }
                                                                 | label_133:
    0x00041c66 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00041c6a b 0x41a2a                                         |     goto label_30;
                                                                 | label_139:
    0x00041c6c mov sl, r2                                        |     sl = r2;
                                                                 | label_138:
    0x00041c6e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00041c70 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041c72 bne.w 0x4193a                                     |         goto label_15;
                                                                 |     }
    0x00041c76 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00041c7a lsls r0, r3, 0x16                                 |     r0 = r3 << 0x16;
                                                                 |     if (r0 < r3) {
    0x00041c7c bmi.w 0x4193a                                     |         goto label_15;
                                                                 |     }
    0x00041c80 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00041c82 adds r3, 1                                        |     r3++;
    0x00041c84 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00041c86 b 0x41bc2                                         |     goto label_31;
                                                                 | label_142:
    0x00041c88 ldr r1, [sp, 0x80]                                |     r1 = var_80h;
    0x00041c8a mov sl, r2                                        |     sl = r2;
                                                                 |     if (r1 != 0) {
    0x00041c8c cbz r1, 0x41c98                                   |         
    0x00041c8e ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00041c90 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
    0x00041c94 ldrb.w r3, [fp, 0x26]                             |         r3 = *(arg_26h);
                                                                 |     }
    0x00041c98 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00041c9a adds r2, 1                                        |     r2++;
    0x00041c9c str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00041c9e movs r2, 0                                        |     r2 = 0;
    0x00041ca0 str r2, [sp, 0x80]                                |     var_80h = r2;
    0x00041ca2 b 0x41b9a                                         |     goto label_32;
                                                                 | label_107:
    0x00041ca4 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00041ca6 bl 0x1a774                                        |     r0 = fcn_0001a774 (r0);
                                                                 |     if (r0 == 0) {
    0x00041caa cbz r0, 0x41cbe                                   |         goto label_148;
                                                                 |     }
    0x00041cac ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x00041cb0 lsls r1, r3, 0x16                                 |     r1 = r3 << 0x16;
                                                                 |     if (r1 < r3) {
    0x00041cb2 bmi 0x41cbe                                       |         goto label_148;
                                                                 |     }
    0x00041cb4 mov.w r4, -1                                      |     r4 = -1;
                                                                 | label_52:
    0x00041cb8 cmp r4, r5                                        |     
                                                                 |     if (r4 < r5) {
    0x00041cba blt.w 0x41648                                     |         goto label_33;
                                                                 |     }
                                                                 | label_148:
    0x00041cbe ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00041cc0 adds r3, 1                                        |     r3++;
    0x00041cc2 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_44:
    0x00041cc4 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00041cc6 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00041cc8 beq.w 0x417f2                                     |         goto label_34;
                                                                 |     }
    0x00041ccc b 0x41802                                         |     goto label_35;
                                                                 | label_127:
    0x00041cce ldrd fp, sl, [sp, 0x60]                           |     __asm ("ldrd fp, sl, [var_60h]");
    0x00041cd2 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00041cd4 orr.w r4, r3, sl                                  |     r4 = r3 | sl;
                                                                 | label_61:
    0x00041cd8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00041cda cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00041cdc beq.w 0x414fc                                     |         goto label_36;
                                                                 |     }
    0x00041ce0 ldr r3, [r2, 0x28]                                |     r3 = *((r2 + 0x28));
    0x00041ce2 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00041ce4 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x00041ce6 str r3, [r0, 0x1c]                                |     *((r0 + 0x1c)) = r3;
    0x00041ce8 str r1, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r1;
    0x00041cea ldrb.w r3, [r2, 0x24]                             |     r3 = *((r2 + 0x24));
    0x00041cee tst.w r3, 0x48                                    |     
    0x00041cf2 ittt ne                                           |     
                                                                 |     if ((r3 & 0x48) == 0) {
    0x00041cf4 ldrne r3, [r0, 4]                                 |         r3 = *((r0 + 4));
                                                                 |     }
                                                                 |     if ((r3 & 0x48) == 0) {
    0x00041cf6 orrne r3, r3, 0x200000                            |         r3 |= 0x200000;
                                                                 |     }
                                                                 |     if ((r3 & 0x48) != 0) {
    0x00041cfa str r3, [r0, 4]                                   |         *((r0 + 4)) = r3;
                                                                 |     }
    0x00041cfc ldr r3, [r1, 0x3c]                                |     r3 = *((r1 + 0x3c));
    0x00041cfe str r3, [sp, 0x3c]                                |     x = r3;
    0x00041d00 b.w 0x414fc                                       |     goto label_36;
                                                                 | label_131:
    0x00041d04 movs r3, 2                                        |     r3 = 2;
    0x00041d06 ldr r7, [sp, 0x44]                                |     r7 = var_44h;
    0x00041d08 str.w sl, [sp, 0x10]                              |     __asm ("str.w sl, [var_10h]");
    0x00041d0c str.w fp, [sp, 0x24]                              |     __asm ("str.w fp, [var_24h]");
    0x00041d10 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00041d12 b 0x4193a                                         |     goto label_15;
                                                                 | label_145:
    0x00041d14 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00041d16 movw r2, 0xffff                                   |     r2 = 0xffff;
    0x00041d1a strh r2, [r1, 0x20]                               |     *((r1 + 0x20)) = r2;
    0x00041d1c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041d1e bne.w 0x41bae                                     |         goto label_37;
                                                                 |     }
    0x00041d22 b 0x41bc2                                         |     goto label_31;
                                                                 | label_103:
    0x00041d24 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00041d26 bne.w 0x41542                                     |         goto label_38;
                                                                 |     }
    0x00041d2a subs r3, 0x80                                     |     r3 -= 0x80;
    0x00041d2c ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041d2e it ne                                             |     
                                                                 |     if (r3 == 0x80) {
    0x00041d30 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00041d32 tst.w r8, 0x200                                   |     
    0x00041d36 str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
                                                                 |     if ((r8 & 0x200) == 0) {
    0x00041d38 beq.w 0x415a6                                     |         goto label_39;
                                                                 |     }
                                                                 | label_51:
    0x00041d3c ldr.w r5, [fp, 8]                                 |     r5 = *(arg_8h);
    0x00041d40 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00041d42 bne.w 0x41576                                     |         goto label_40;
                                                                 |     }
    0x00041d46 b 0x415a6                                         |     goto label_39;
                                                                 | label_117:
    0x00041d48 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00041d4a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041d4c bne.w 0x4239e                                     |         goto label_149;
                                                                 |     }
    0x00041d50 ldr.w r8, [fp, 0x18]                              |     r8 = *(arg_18h);
    0x00041d54 b 0x41802                                         |     goto label_35;
                                                                 | label_144:
    0x00041d56 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00041d58 add r1, sp, 0x80                                  |     r1 += var_80h;
    0x00041d5a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00041d5c ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00041d5e adds r3, 1                                        |     r3++;
    0x00041d60 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00041d62 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00041d64 ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x00041d68 bl 0x2c038                                        |     fcn_0002c038 (r0, r1, r2, r3);
    0x00041d6c ldrb.w r3, [fp, 0x26]                             |     r3 = *(arg_26h);
    0x00041d70 b 0x41b9a                                         |     goto label_32;
                                                                 | label_136:
    0x00041d72 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00041d74 b 0x41a9e                                         |     goto label_41;
                                                                 | label_135:
    0x00041d76 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041d78 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041d7a ldr.w r3, [r3, 0x10c]                             |     r3 = *((r3 + 0x10c));
    0x00041d7e add.w r1, r2, 0x2c                                |     r1 = r2 + 0x2c;
                                                                 |     if (r3 != 0) {
    0x00041d82 cbnz r3, 0x41d8e                                  |         goto label_150;
                                                                 |     }
    0x00041d84 b 0x41a74                                         |     goto label_42;
                                                                 | label_43:
    0x00041d86 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00041d88 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041d8a beq.w 0x41a74                                     |         goto label_42;
                                                                 |     }
                                                                 | label_150:
    0x00041d8e ldr r2, [r3]                                      |     r2 = *(r3);
    0x00041d90 cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00041d92 bne 0x41d86                                       |         goto label_43;
                                                                 |     }
    0x00041d94 movs r2, 0                                        |     r2 = 0;
    0x00041d96 str r2, [r3]                                      |     *(r3) = r2;
    0x00041d98 b 0x41a74                                         |     goto label_42;
                                                                 | label_147:
    0x00041d9a ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00041d9c add r1, sp, 0x80                                  |     r1 += var_80h;
    0x00041d9e ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00041da0 add.w sl, sl, 1                                   |     sl++;
    0x00041da4 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00041da6 ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x00041daa bl 0x2c038                                        |     fcn_0002c038 (r0, r1, r2, r3);
    0x00041dae b 0x419b6                                         |     goto label_28;
                                                                 | label_100:
    0x00041db0 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00041db2 subs r7, r2, 0                                    |     r7 = r2 - 0;
    0x00041db4 it ne                                             |     
                                                                 |     if (r7 == r2) {
    0x00041db6 movne r7, 1                                       |         r7 = 1;
                                                                 |     }
    0x00041db8 cmp r3, 0x80                                      |     
    0x00041dba ite eq                                            |     
                                                                 |     if (r3 != 0x80) {
    0x00041dbc moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0x80) {
    0x00041dbe andne r2, r7, 1                                   |         r2 = r7 & 1;
                                                                 |     }
    0x00041dc2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00041dc4 bne 0x41e7a                                       |         goto label_151;
                                                                 |     }
                                                                 | label_48:
    0x00041dc6 cmp r3, 0x7f                                      |     
    0x00041dc8 ite eq                                            |     
                                                                 |     if (r3 != 0x7f) {
    0x00041dca moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0x7f) {
    0x00041dcc andne r2, r7, 1                                   |         r2 = r7 & 1;
                                                                 |     }
    0x00041dd0 and ip, r8, 0x200                                 |     
    0x00041dd4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00041dd6 bne.w 0x41f3c                                     |         goto label_152;
                                                                 |     }
    0x00041dda cmp.w ip, 0                                       |     
    0x00041dde ite eq                                            |     
                                                                 |     if (ip != 0) {
    0x00041de0 moveq r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (ip == 0) {
    0x00041de2 andne r7, r7, 1                                   |         r7 &= 1;
                                                                 |     }
    0x00041de6 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00041de8 beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
    0x00041dec ldr.w r5, [fp, 8]                                 |     r5 = *(arg_8h);
    0x00041df0 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00041df2 beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
    0x00041df6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041df8 mov sb, r2                                        |     sb = r2;
    0x00041dfa subs r6, r3, 1                                    |     r6 = r3 - 1;
    0x00041dfc b.w 0x41576                                       |     goto label_40;
                                                                 | label_99:
    0x00041e00 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041e02 subs r3, 0                                        |     
    0x00041e04 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00041e06 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00041e08 ands.w r3, r3, r8, lsr 9                          |     r3 &= (r8 >> 9);
                                                                 |     if (r3 == r3) {
    0x00041e0c beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
    0x00041e10 ldr.w r5, [fp, 8]                                 |     r5 = *(arg_8h);
    0x00041e14 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00041e16 beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
                                                                 | label_47:
    0x00041e1a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041e1c subs r6, r3, 1                                    |     r6 = r3 - 1;
    0x00041e1e b.w 0x41576                                       |     goto label_40;
                                                                 | label_118:
    0x00041e22 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00041e24 bl 0x1a774                                        |     r0 = fcn_0001a774 (r0);
    0x00041e28 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00041e2a beq.w 0x417fe                                     |         goto label_45;
                                                                 |     }
    0x00041e2e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00041e30 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00041e32 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00041e34 lsls r1, r3, 0x16                                 |     r1 = r3 << 0x16;
                                                                 |     if (r1 < r3) {
    0x00041e36 bmi.w 0x417fe                                     |         goto label_45;
                                                                 |     }
    0x00041e3a ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00041e3c movw r2, 0xffff                                   |     r2 = 0xffff;
    0x00041e40 mov r8, fp                                        |     r8 = fp;
    0x00041e42 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00041e44 strh r2, [r1, 0x20]                               |     *((r1 + 0x20)) = r2;
    0x00041e46 movs r2, 0x44                                     |     r2 = 0x44;
    0x00041e48 strb r2, [r1, 1]                                  |     *((r1 + 1)) = r2;
    0x00041e4a tst.w r3, 0x810000                                |     
                                                                 |     if ((r3 & 0x810000) != 0) {
    0x00041e4e bne.w 0x420ba                                     |         goto label_153;
                                                                 |     }
    0x00041e52 movs r3, 1                                        |     r3 = 1;
    0x00041e54 movs r4, 0xa7                                     |     r4 = 0xa7;
    0x00041e56 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00041e58 b 0x416ae                                         |     goto label_46;
                                                                 | label_137:
    0x00041e5a mov r0, r3                                        |     r0 = r3;
    0x00041e5c b 0x41a9e                                         |     goto label_41;
                                                                 | label_101:
    0x00041e5e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041e60 subs r3, 0                                        |     
    0x00041e62 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00041e64 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00041e66 ands.w r3, r3, r8, lsr 9                          |     r3 &= (r8 >> 9);
                                                                 |     if (r3 == r3) {
    0x00041e6a beq.w 0x41cc4                                     |         goto label_44;
                                                                 |     }
    0x00041e6e ldr.w r5, [fp, 8]                                 |     r5 = *(arg_8h);
    0x00041e72 mov sb, r4                                        |     sb = r4;
    0x00041e74 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00041e76 bne 0x41e1a                                       |         goto label_47;
                                                                 |     }
    0x00041e78 b 0x41cc4                                         |     goto label_44;
                                                                 | label_151:
    0x00041e7a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00041e7c ldr.w r0, [pc, 0x644]                             |     r0 = *(0x000424c4);
    0x00041e80 ldr.w r5, [pc, 0x644]                             |     r5 = *(0x000424c8);
    0x00041e84 subs r6, r2, 1                                    |     r6 = r2 - 1;
    0x00041e86 add r0, pc                                        |     r0 += pc;
    0x00041e88 mov r1, r6                                        |     r1 = r6;
    0x00041e8a add r5, pc                                        |     r5 += pc;
                                                                 | label_50:
    0x00041e8c ldrb r2, [r0], 1                                  |     r2 = *(r0);
                                                                 |     r0++;
    0x00041e90 ldrb ip, [r1, 1]!                                 |     ip = *((r1 += 1));
    0x00041e94 cmp r2, ip                                        |     
                                                                 |     if (r2 == ip) {
    0x00041e96 beq 0x41eb4                                       |         goto label_154;
                                                                 |     }
                                                                 | label_49:
    0x00041e98 add r2, r5                                        |     r2 += r5;
    0x00041e9a add ip, r5                                        |     
    0x00041e9c ldrb.w lr, [r2, 0x140]                            |     
    0x00041ea0 ldrb.w r2, [ip, 0x140]                            |     r2 = *((ip + 0x140));
    0x00041ea4 cmp lr, r2                                        |     
                                                                 |     if (lr != r2) {
    0x00041ea6 bne 0x41dc6                                       |         goto label_48;
                                                                 |     }
    0x00041ea8 ldrb r2, [r0], 1                                  |     r2 = *(r0);
                                                                 |     r0++;
    0x00041eac ldrb ip, [r1, 1]!                                 |     ip = *((r1 += 1));
    0x00041eb0 cmp r2, ip                                        |     
                                                                 |     if (r2 != ip) {
    0x00041eb2 bne 0x41e98                                       |         goto label_49;
                                                                 |     }
                                                                 | label_154:
    0x00041eb4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00041eb6 bne 0x41e8c                                       |         goto label_50;
                                                                 |     }
    0x00041eb8 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041eba tst.w r8, 0x200                                   |     
    0x00041ebe mov.w r3, 1                                       |     r3 = 1;
    0x00041ec2 str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
                                                                 |     if ((r8 & 0x200) != 0) {
    0x00041ec4 bne.w 0x41d3c                                     |         goto label_51;
                                                                 |     }
    0x00041ec8 b.w 0x415a6                                       |     goto label_39;
                                                                 | label_108:
    0x00041ecc ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00041ece bl 0x1a774                                        |     r0 = fcn_0001a774 (r0);
    0x00041ed2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00041ed4 beq.w 0x41cb8                                     |         goto label_52;
                                                                 |     }
    0x00041ed8 ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x00041edc lsls r1, r3, 0x16                                 |     r1 = r3 << 0x16;
                                                                 |     if (r1 < r3) {
    0x00041ede bmi.w 0x41cb8                                     |         goto label_52;
                                                                 |     }
    0x00041ee2 mov r8, fp                                        |     r8 = fp;
    0x00041ee4 mov.w r4, -1                                      |     r4 = -1;
    0x00041ee8 b.w 0x4164a                                       |     goto label_53;
                                                                 | label_119:
    0x00041eec ldr.w sb, [fp, 8]                                 |     sb = *(arg_8h);
    0x00041ef0 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00041ef4 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00041ef6 ble.w 0x41812                                     |         goto label_54;
                                                                 |     }
    0x00041efa mov r5, sb                                        |     r5 = sb;
    0x00041efc movs r4, 0                                        |     r4 = 0;
    0x00041efe b 0x41f0c                                         |     goto label_155;
                                                                 | label_55:
    0x00041f00 cmp r6, r3                                        |     
    0x00041f02 mov r4, r6                                        |     r4 = r6;
    0x00041f04 add.w r5, r5, 0x10                                |     r5 += 0x10;
                                                                 |     if (r6 >= r3) {
    0x00041f08 bge.w 0x41812                                     |         goto label_54;
                                                                 |     }
                                                                 | label_155:
    0x00041f0c adds r6, r4, 1                                    |     r6 = r4 + 1;
    0x00041f0e ldr r7, [r5, 0xc]                                 |     r7 = *((r5 + 0xc));
    0x00041f10 add.w r2, sb, r6, lsl 4                           |     r2 = sb + (r6 << 4);
    0x00041f14 ldrb r2, [r2, 1]                                  |     r2 = *((r2 + 1));
    0x00041f16 lsls r2, r2, 0x1e                                 |     r2 <<= 0x1e;
                                                                 |     if (r2 != r2) {
    0x00041f18 bne 0x41f00                                       |         goto label_55;
                                                                 |     }
    0x00041f1a ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00041f1c mov r0, r7                                        |     r0 = r7;
    0x00041f1e blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x00041f22 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00041f24 beq.w 0x420fc                                     |         goto label_156;
                                                                 |     }
    0x00041f28 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00041f2c b 0x41f00                                         |     goto label_55;
                                                                 | label_102:
    0x00041f2e ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041f30 subs r3, 0x80                                     |     r3 -= 0x80;
    0x00041f32 it ne                                             |     
                                                                 |     if (r3 == 0x80) {
    0x00041f34 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00041f36 str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x00041f38 b.w 0x415a6                                       |     goto label_39;
                                                                 | label_152:
    0x00041f3c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041f3e ldr.w r0, [pc, 0x58c]                             |     
    0x00041f42 ldr.w r5, [pc, 0x58c]                             |     
    0x00041f46 subs r6, r3, 1                                    |     r6 = r3 - 1;
    0x00041f48 add r0, pc                                        |     r0 = 0x8441a;
    0x00041f4a mov r1, r6                                        |     r1 = r6;
    0x00041f4c add r5, pc                                        |     r5 = 0x84422;
                                                                 |     do {
                                                                 | label_57:
    0x00041f4e ldrb r3, [r0], 1                                  |         r3 = *(r0);
                                                                 |         r0++;
    0x00041f52 ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x00041f56 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x00041f58 beq 0x41f74                                       |             goto label_157;
                                                                 |         }
    0x00041f5a add r3, r5                                        |         r3 += r5;
    0x00041f5c add r2, r5                                        |         r2 += r5;
    0x00041f5e ldrb.w r7, [r3, 0x140]                            |         r7 = *((r3 + 0x140));
    0x00041f62 ldrb.w r3, [r2, 0x140]                            |         r3 = *((r2 + 0x140));
    0x00041f66 cmp r7, r3                                        |         
    0x00041f68 beq 0x41f4e                                       |         
                                                                 |     } while (r7 == r3);
    0x00041f6a cmp.w ip, 0                                       |     
                                                                 |     if (ip != 0) {
    0x00041f6e bne.w 0x41568                                     |         goto label_56;
                                                                 |     }
    0x00041f72 b 0x41cc4                                         |     goto label_44;
                                                                 | label_157:
    0x00041f74 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041f76 bne 0x41f4e                                       |         goto label_57;
                                                                 |     }
    0x00041f78 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041f7a str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x00041f7c cmp.w ip, 0                                       |     
                                                                 |     if (ip != 0) {
    0x00041f80 bne.w 0x41d3c                                     |         goto label_51;
                                                                 |     }
    0x00041f84 b.w 0x415a6                                       |     goto label_39;
                                                                 | label_111:
    0x00041f88 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041f8a ldrb.w r3, [r3, 0xd0]                             |     r3 = *((r3 + 0xd0));
    0x00041f8e cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00041f90 bls.w 0x421b0                                     |         goto label_158;
                                                                 |     }
    0x00041f94 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00041f96 movs r4, 0xa7                                     |     r4 = 0xa7;
    0x00041f98 strh r1, [r3, 0x20]                               |     *((r3 + 0x20)) = r1;
    0x00041f9a str.w sb, [r3, 0x2c]                              |     __asm ("str.w sb, [r3, 0x2c]");
    0x00041f9e b.w 0x4169a                                       |     goto label_58;
                                                                 | label_105:
    0x00041fa2 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00041fa4 b.w 0x415ce                                       |     goto label_59;
                                                                 | label_120:
    0x00041fa8 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00041faa ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00041fac lsls r3, r3, 0x18                                 |     r3 <<= 0x18;
                                                                 |     if (r3 >= r3) {
    0x00041fae bpl 0x41ffa                                       |         goto label_76;
                                                                 |     }
    0x00041fb0 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00041fb2 ldrb.w r3, [r1, 0xb1]                             |     r3 = *((r1 + 0xb1));
                                                                 |     if (r3 != 0) {
    0x00041fb6 cbnz r3, 0x41fd4                                  |         goto label_77;
                                                                 |     }
    0x00041fb8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00041fba ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x00041fbc ldr r3, [r1, 0x20]                                |     r3 = *((r1 + 0x20));
    0x00041fbe lsls r7, r2, 0xf                                  |     r7 = r2 << 0xf;
                                                                 |     if (r7 >= r2) {
    0x00041fc0 bpl.w 0x4285c                                     |         goto label_159;
                                                                 |     }
    0x00041fc4 movs r2, 1                                        |     
    0x00041fc6 movt r2, 0x1000                                   |     r2 = 0x10000001;
    0x00041fca ands r2, r3                                       |     r2 &= r3;
    0x00041fcc cmp r2, 1                                         |     
                                                                 |     if (r2 != 1) {
    0x00041fce bne 0x41ff6                                       |         goto label_160;
                                                                 |     }
    0x00041fd0 lsls r6, r3, 1                                    |     r6 = r3 << 1;
    0x00041fd2 bpl 0x41ff6                                       |     
                                                                 |     while (r5 < r3) {
                                                                 | label_77:
    0x00041fd4 ldr.w r1, [pc, 0x4fc]                             |         
    0x00041fd8 movs r0, 0x1c                                     |         r0 = 0x1c;
    0x00041fda ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00041fdc add r1, pc                                        |         r1 = 0x844b4;
    0x00041fde blx 0x9f00                                        |         fcn_00009f00 ();
    0x00041fe2 ldr r0, [sp, 0xc]                                 |         r0 = var_ch;
    0x00041fe4 movs r2, 0                                        |         r2 = 0;
    0x00041fe6 movs r1, 0x75                                     |         r1 = 0x75;
    0x00041fe8 mov r3, r0                                        |         r3 = r0;
    0x00041fea strb r1, [r3], 0x2c                               |         *(r3) = r1;
                                                                 |         r3 += 0x2c;
    0x00041fee str r2, [r0, 0x2c]                                |         *((r0 + 0x2c)) = r2;
    0x00041ff0 str r2, [r3, 4]                                   |         *((r3 + 4)) = r2;
    0x00041ff2 b.w 0x410ee                                       |         goto label_6;
                                                                 | label_160:
    0x00041ff6 lsls r5, r3, 2                                    |         r5 = r3 << 2;
    0x00041ff8 bmi 0x41fd4                                       |         
                                                                 |     }
                                                                 | label_76:
    0x00041ffa ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00041ffc bl 0x1a5dc                                        |     fcn_0001a5dc (r0);
    0x00042000 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x00042002 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00042004 bne.w 0x410ee                                     |         goto label_6;
                                                                 |     }
    0x00042008 ldr.w r8, [sp, 0x80]                              |     r8 = var_80h;
    0x0004200c cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00042010 beq.w 0x42396                                     |         goto label_161;
                                                                 |     }
    0x00042014 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00042016 mov.w r3, -1                                      |     r3 = -1;
    0x0004201a b 0x4183e                                         |     goto label_60;
                                                                 | label_125:
    0x0004201c movs r3, 0                                        |     r3 = 0;
    0x0004201e mov r4, sl                                        |     r4 = sl;
    0x00042020 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00042022 b 0x41cd8                                         |     goto label_61;
                                                                 | label_94:
    0x00042072 str r3, [r2, 0x44]                                |     *((r2 + 0x44)) = r3;
    0x00042074 b.w 0x40f28                                       |     goto label_0;
                                                                 | label_110:
    0x00042090 mov.w r4, -1                                      |     r4 = -1;
    0x00042094 mov r8, fp                                        |     r8 = fp;
    0x00042096 mov r1, r4                                        |     r1 = r4;
    0x00042098 b.w 0x4164c                                       |     goto label_62;
                                                                 | label_113:
    0x0004209c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004209e cmp r4, 0x1f                                      |     
    0x000420a0 ldr.w r2, [r3, 0x90]                              |     r2 = *((r3 + 0x90));
    0x000420a4 ittet le                                          |     
                                                                 |     if (r4 > 0x1f) {
    0x000420a6 movle r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r4 > 0x1f) {
    0x000420a8 lslle r3, r4                                      |         r3 <<= r4;
                                                                 |     }
                                                                 |     if (r4 <= 0x1f) {
    0x000420aa movgt r3, -1                                      |         r3 = -1;
                                                                 |     }
                                                                 |     if (r4 <= 0x1f) {
    0x000420ae orrs r3, r2                                       |         r3 |= r2;
                                                                 |     }
    0x000420b0 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000420b2 str.w r3, [r2, 0x90]                              |     __asm ("str.w r3, [r2, 0x90]");
    0x000420b6 b.w 0x41698                                       |     goto label_63;
                                                                 | label_153:
    0x000420ba ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000420bc movs r3, 0xa7                                     |     r3 = 0xa7;
    0x000420be strb r3, [r2]                                     |     *(r2) = r3;
                                                                 | label_64:
    0x000420c0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000420c2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000420c4 ldr.w r2, [r3, 0x168]                             |     r2 = *((r3 + 0x168));
                                                                 |     if (r2 != 0) {
    0x000420c8 cbz r2, 0x420d8                                   |         
    0x000420ca ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x000420cc ldrb r4, [r2]                                     |         r4 = *(r2);
    0x000420ce cmp r4, 0x4d                                      |         
    0x000420d0 it ne                                             |         
                                                                 |         if (r4 != 0x4d) {
    0x000420d2 cmpne r4, 0xa7                                    |             __asm ("cmpne r4, 0xa7");
                                                                 |         }
                                                                 |         if (r4 == 0x4d) {
    0x000420d4 beq.w 0x42896                                     |             goto label_162;
                                                                 |         }
                                                                 |     }
                                                                 | label_72:
    0x000420d8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000420da ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x000420dc cmp r2, r8                                        |     
    0x000420de add.w r3, r3, 1                                   |     r3++;
    0x000420e2 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x000420e4 mov r3, r2                                        |     r3 = r2;
                                                                 |     if (r2 == r8) {
    0x000420e6 beq.w 0x410ee                                     |         goto label_6;
                                                                 |     }
                                                                 |     do {
    0x000420ea ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000420ec ldr r2, [r3, 0x10]                                |         r2 = *((r3 + 0x10));
    0x000420ee cmp r3, r8                                        |         
    0x000420f0 add.w r2, r2, 1                                   |         r2++;
    0x000420f4 str r2, [r3, 0x10]                                |         *((r3 + 0x10)) = r2;
    0x000420f6 bne 0x420ea                                       |         
                                                                 |     } while (r3 != r8);
    0x000420f8 b.w 0x410ee                                       |     goto label_6;
                                                                 | label_156:
    0x000420fc add.w r3, sb, r4, lsl 4                           |     r3 = sb + (r4 << 4);
    0x00042100 mov r8, fp                                        |     r8 = fp;
    0x00042102 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00042104 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00042108 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x0004210a lsls r5, r3, 0x1f                                 |     r5 = r3 << 0x1f;
                                                                 |     if (r5 >= r3) {
    0x0004210c bmi 0x42114                                       |         
    0x0004210e lsls r0, r1, 0x1b                                 |         r0 = r1 << 0x1b;
                                                                 |         if (r0 < r1) {
    0x00042110 bmi.w 0x4294a                                     |             goto label_163;
                                                                 |         }
                                                                 |     }
    0x00042114 lsls r1, r1, 0x10                                 |     r1 <<= 0x10;
                                                                 |     if (r1 < r1) {
    0x00042116 bpl 0x42130                                       |         
    0x00042118 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0004211a eor r3, r3, 0x4000                                |         r3 ^= 0x4000;
    0x0004211e ubfx r3, r3, 0xe, 1                               |         r3 = (r3 >> 0xe) & ((1 << 1) - 1);
    0x00042122 cmp r1, r8                                        |         
    0x00042124 it ne                                             |         
                                                                 |         if (r1 == r8) {
    0x00042126 orrne r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x0004212a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0004212c bne.w 0x4295a                                     |             goto label_164;
                                                                 |         }
                                                                 |     }
    0x00042130 ldrb r3, [r2]                                     |     r3 = *(r2);
    0x00042132 cmp r3, 0xb0                                      |     
    0x00042134 it eq                                             |     
                                                                 |     if (r3 != 0xb0) {
    0x00042136 ldrbeq r3, [r2, 2]                                |         r3 = *((r2 + 2));
                                                                 |     }
    0x00042138 cmp r3, 0xb1                                      |     
                                                                 |     if (r3 == 0xb1) {
    0x0004213a beq.w 0x42930                                     |         goto label_165;
                                                                 |     }
    0x0004213e cmp r3, 0x8a                                      |     
                                                                 |     if (r3 == 0x8a) {
    0x00042140 beq.w 0x42916                                     |         goto label_166;
                                                                 |     }
                                                                 | label_80:
    0x00042144 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00042146 mov r2, r4                                        |     r2 = r4;
    0x00042148 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x0004214a mov r1, sb                                        |     r1 = sb;
    0x0004214c str r3, [sp]                                      |     *(sp) = r3;
    0x0004214e mov r0, r4                                        |     r0 = r4;
    0x00042150 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00042152 bl 0x2e444                                        |     fcn_0002e444 (r0, r1, r2, r3, r4);
    0x00042156 ldrb.w r3, [r4, 0xd0]                             |     r3 = *((r4 + 0xd0));
    0x0004215a cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x0004215c bls 0x420c0                                       |         goto label_64;
                                                                 |     }
    0x0004215e ldr.w r3, [r4, 0x10c]                             |     r3 = *((r4 + 0x10c));
                                                                 |     if (r3 != 0) {
    0x00042162 cbnz r3, 0x4216c                                  |         goto label_167;
                                                                 |     }
    0x00042164 b 0x420c0                                         |     goto label_64;
                                                                 | label_65:
    0x00042166 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00042168 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004216a beq 0x420c0                                       |         goto label_64;
                                                                 |     }
                                                                 | label_167:
    0x0004216c ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004216e ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00042170 cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00042172 bne 0x42166                                       |         goto label_65;
                                                                 |     }
    0x00042174 movs r2, 0                                        |     r2 = 0;
    0x00042176 str r2, [r3]                                      |     *(r3) = r2;
    0x00042178 b 0x420c0                                         |     goto label_64;
                                                                 | label_112:
    0x0004217a ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0004217c mla r3, r5, r3, r3                                |     __asm ("mla r3, r5, r3, r3");
    0x00042180 movs r2, 0xa7                                     |     r2 = 0xa7;
    0x00042182 strb r2, [r0, 2]                                  |     *((r0 + 2)) = r2;
    0x00042184 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x00042188 adds r5, r3, r2                                   |     r5 = r3 + r2;
    0x0004218a ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x0004218e lsls r7, r3, 0x1a                                 |     r7 = r3 << 0x1a;
    0x00042190 it pl                                             |     
                                                                 |     if (r7 < r3) {
    0x00042192 movpl r4, r1                                      |         r4 = r1;
                                                                 |     }
                                                                 |     if (r7 < r3) {
    0x00042194 bpl 0x421a2                                       |         
    0x00042196 adds r6, r4, 1                                    |         r6 = r4 + 1;
                                                                 |         if (r6 == r4) {
    0x00042198 beq 0x421a2                                       |             goto label_168;
                                                                 |         }
    0x0004219a mov r0, sb                                        |         r0 = sb;
    0x0004219c bl 0xf6c8                                         |         r0 = fcn_0000f6c8 (r0, r1);
    0x000421a0 mov r4, r0                                        |         r4 = r0;
                                                                 |     }
                                                                 | label_168:
    0x000421a2 add r5, r4                                        |     r5 += r4;
    0x000421a4 adds r5, 1                                        |     r5++;
                                                                 |     do {
    0x000421a6 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x000421a8 movs r4, 0xb0                                     |         r4 = 0xb0;
    0x000421aa str r5, [r3, 0x1c]                                |         *((r3 + 0x1c)) = r5;
    0x000421ac b.w 0x4169a                                       |         goto label_58;
                                                                 | label_158:
    0x000421b0 ldr.w r3, [r8, 8]                                 |         r3 = *((r8 + 8));
    0x000421b4 ldr r5, [r3, 0x24]                                |         r5 = *((r3 + 0x24));
    0x000421b6 ldr.w r3, [sb, 0x1c]                              |         r3 = *((sb + 0x1c));
    0x000421ba lsls r2, r3, 0x1a                                 |         r2 = r3 << 0x1a;
    0x000421bc it pl                                             |         
                                                                 |         if (r2 < r3) {
    0x000421be movpl r4, r1                                      |             r4 = r1;
                                                                 |         }
                                                                 |         if (r2 < r3) {
    0x000421c0 bpl 0x421ce                                       |             
    0x000421c2 adds r3, r4, 1                                    |             r3 = r4 + 1;
                                                                 |             if (r3 == r4) {
    0x000421c4 beq 0x421ce                                       |                 goto label_169;
                                                                 |             }
    0x000421c6 mov r0, sb                                        |             r0 = sb;
    0x000421c8 bl 0xf6c8                                         |             r0 = fcn_0000f6c8 (r0, r1);
    0x000421cc mov r4, r0                                        |             r4 = r0;
                                                                 |         }
                                                                 | label_169:
    0x000421ce add r5, r4                                        |         r5 += r4;
    0x000421d0 b 0x421a6                                         |         
                                                                 |     } while (1);
                                                                 | label_106:
    0x000421dc mov r6, r3                                        |     r6 = r3;
    0x000421de b.w 0x415ce                                       |     goto label_59;
                                                                 | label_90:
    0x0004227c ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0004227e ldr r3, [r3]                                      |     r3 = *(r3);
    0x00042280 b.w 0x41050                                       |     goto label_66;
                                                                 | label_78:
    0x0004228a ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0004228c movs r3, 0x79                                     |     r3 = 0x79;
    0x0004228e strb r3, [r2]                                     |     *(r2) = r3;
    0x00042290 b.w 0x410ee                                       |     goto label_6;
                                                                 | label_93:
    0x00042294 ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x00042296 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00042298 b.w 0x41078                                       |     goto label_67;
                                                                 | label_122:
    0x0004229c ldr r2, [pc, 0x244]                               |     
    0x0004229e add r2, pc                                        |     r2 = 0x84786;
    0x000422a0 b.w 0x41862                                       |     goto label_68;
                                                                 | label_124:
    0x000422a4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000422a6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000422a8 str r2, [r3, 0x44]                                |     *((r3 + 0x44)) = r2;
    0x000422aa b.w 0x41892                                       |     goto label_69;
                                                                 | label_141:
    0x000422ae mov sl, r2                                        |     sl = r2;
    0x000422b0 movs r2, 1                                        |     r2 = 1;
    0x000422b2 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x000422b4 b 0x41b9a                                         |     goto label_32;
                                                                 | label_123:
    0x000422b6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000422b8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000422ba beq 0x42332                                       |         
    0x000422bc ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x000422be ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x000422c0 str r1, [sp]                                      |         *(sp) = r1;
    0x000422c2 ldr r1, [pc, 0x224]                               |         
    0x000422c4 add r1, pc                                        |         r1 = 0x847b2;
    0x000422c6 bl 0x1d554                                        |         fcn_0001d554 (r0, r1);
    0x000422ca b.w 0x4187c                                       |         goto label_70;
                                                                 | label_114:
    0x00042326 ldr r1, [pc, 0x1c8]                               |         
    0x00042328 orr r2, r2, 0x10000000                            |         r2 |= 0x10000000;
    0x0004232c add r1, pc                                        |         r1 = 0x84822;
    0x0004232e b.w 0x41726                                       |         goto label_71;
                                                                 |     }
    0x00042332 ldr r1, [pc, 0x1c0]                               |     
    0x00042334 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00042336 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042338 add r1, pc                                        |     r1 = 0x84832;
    0x0004233a bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0004233e b.w 0x4187c                                       |     goto label_70;
                                                                 | label_121:
    0x00042342 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00042344 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00042346 lsls r0, r3, 8                                    |     r0 = r3 << 8;
    0x00042348 itt mi                                            |     
                                                                 |     if (r0 < r3) {
    0x0004234a bicmi r3, r3, 0x800000                            |         __asm ("bicmi r3, r3, aav.0x000000ff");
                                                                 |     }
                                                                 |     if (r0 < r3) {
    0x0004234e str r3, [r2, 4]                                   |         *((r2 + 4)) = r3;
                                                                 |     }
                                                                 |     if (r0 >= r3) {
    0x00042350 bmi 0x42374                                       |         
    0x00042352 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00042354 ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
                                                                 |         if (r1 != 0) {
    0x00042356 cbz r1, 0x4235e                                   |             
    0x00042358 ldr r0, [sp, 0x40]                                |             r0 = var_40h;
    0x0004235a bl 0x16c0c                                        |             fcn_00016c0c (r0, r1);
                                                                 |         }
    0x0004235e ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x00042360 movs r3, 0                                        |         r3 = 0;
    0x00042362 ldr r1, [r2, 0x10]                                |         r1 = *((r2 + 0x10));
    0x00042364 str r3, [r2, 0xc]                                 |         *((r2 + 0xc)) = r3;
                                                                 |         if (r1 != 0) {
    0x00042366 cbz r1, 0x4236e                                   |             
    0x00042368 ldr r0, [sp, 0x40]                                |             r0 = var_40h;
    0x0004236a bl 0x16c0c                                        |             fcn_00016c0c (r0, r1);
                                                                 |         }
    0x0004236e ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x00042370 movs r3, 0                                        |         r3 = 0;
    0x00042372 str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
                                                                 |     }
    0x00042374 mov r8, r4                                        |     r8 = r4;
    0x00042376 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00042378 ldrd r0, r2, [sp, 0x20]                           |     __asm ("ldrd r0, r2, [var_20h]");
    0x0004237c add r1, sp, 0x80                                  |     r1 += var_80h;
    0x0004237e ldrsh.w r3, [r4, 0x20]                            |     r3 = *((r4 + 0x20));
    0x00042382 bl 0x2c038                                        |     fcn_0002c038 (r0, r1, r2, r3);
    0x00042386 ldr r3, [pc, 0x170]                               |     
    0x00042388 movs r1, 0xac                                     |     r1 = 0xac;
    0x0004238a ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x0004238c strb r1, [r4]                                     |     *(r4) = r1;
    0x0004238e add r3, pc                                        |     r3 = 0x8488c;
    0x00042390 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x00042392 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x00042394 b 0x420d8                                         |     goto label_72;
                                                                 | label_161:
    0x00042396 ldr r2, [pc, 0x164]                               |     
    0x00042398 add r2, pc                                        |     r2 = 0x8489a;
    0x0004239a b.w 0x41862                                       |     goto label_68;
                                                                 | label_149:
    0x0004239e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000423a0 mov r8, fp                                        |     r8 = fp;
    0x000423a2 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000423a4 bne.w 0x41832                                     |         goto label_73;
                                                                 |     }
    0x000423a8 movs r4, 0xa7                                     |     r4 = 0xa7;
    0x000423aa b.w 0x4169e                                       |     goto label_74;
                                                                 | label_116:
    0x00042430 ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x00042432 ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x00042434 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00042436 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00042438 bne.w 0x4107e                                     |         goto label_7;
                                                                 |     }
    0x0004243c b.w 0x4177e                                       |     goto label_75;
                                                                 | label_115:
    0x00042440 ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x00042442 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00042444 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00042446 bne.w 0x4107e                                     |         goto label_7;
                                                                 |     }
    0x0004244a b.w 0x4177e                                       |     goto label_75;
                                                                 | label_159:
    0x0004285c lsls r4, r3, 1                                    |     r4 = r3 << 1;
                                                                 |     if (r4 >= r3) {
    0x0004285e bpl.w 0x41ffa                                     |         goto label_76;
                                                                 |     }
    0x00042862 b.w 0x41fd4                                       |     goto label_77;
                                                                 | label_87:
    0x0004287c blx 0x9b44                                        |     fcn_00009b44 ();
    0x00042880 ldr r1, [pc, 0x138]                               |     
    0x00042882 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00042884 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042886 add r1, pc                                        |     r1 = 0x85246;
    0x00042888 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0004288c ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0004288e ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x00042890 adds r3, 1                                        |     r3++;
    0x00042892 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x00042894 b 0x4228a                                         |     goto label_78;
                                                                 | label_162:
    0x00042896 ldr r0, [sp, 0x3c]                                |     r0 = x;
    0x00042898 ldr.w r1, [r8, 4]                                 |     r1 = *((r8 + 4));
    0x0004289c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004289e beq.w 0x420d8                                     |         goto label_72;
                                                                 |     }
    0x000428a2 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x000428a4 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000428a6 cmp r3, r0                                        |     
    0x000428a8 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r3 == r0) {
    0x000428ac beq 0x428ba                                       |         goto label_170;
                                                                 |     }
                                                                 |     do {
    0x000428ae ldr r5, [sp, 0x3c]                                |         r5 = x;
    0x000428b0 adds r2, 0x10                                     |         r2 += 0x10;
    0x000428b2 ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x000428b4 adds r3, 1                                        |         r3++;
    0x000428b6 cmp r0, r5                                        |         
    0x000428b8 bne 0x428ae                                       |         
                                                                 |     } while (r0 != r5);
                                                                 | label_170:
    0x000428ba cmp r4, 0x4d                                      |     
                                                                 |     if (r4 == 0x4d) {
    0x000428bc beq 0x42936                                       |         goto label_171;
                                                                 |     }
    0x000428be ldr r5, [r1]                                      |     r5 = *(r1);
    0x000428c0 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x000428c2 ble.w 0x420d8                                     |         goto label_72;
                                                                 |     }
    0x000428c6 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000428c8 mov r4, r1                                        |     r4 = r1;
    0x000428ca ldr r7, [r2, 0x1c]                                |     r7 = *((r2 + 0x1c));
    0x000428cc movs r2, 0                                        |     r2 = 0;
    0x000428ce b 0x428da                                         |     goto label_172;
                                                                 | label_79:
    0x000428d0 adds r2, 1                                        |     r2++;
    0x000428d2 adds r4, 0x40                                     |     r4 += 0x40;
    0x000428d4 cmp r5, r2                                        |     
                                                                 |     if (r5 == r2) {
    0x000428d6 beq.w 0x420d8                                     |         goto label_72;
                                                                 |     }
                                                                 | label_172:
    0x000428da ldr r0, [r4, 0x30]                                |     r0 = *((r4 + 0x30));
    0x000428dc cmp r7, r0                                        |     
                                                                 |     if (r7 != r0) {
    0x000428de bne 0x428d0                                       |         goto label_79;
                                                                 |     }
    0x000428e0 add.w r1, r1, r2, lsl 6                           |     r1 += (r2 << 6);
    0x000428e4 ldr r1, [r1, 0x18]                                |     r1 = *((r1 + 0x18));
                                                                 | label_83:
    0x000428e6 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000428e8 ldrsh.w r2, [r2, 0x20]                            |     r2 = *((r2 + 0x20));
    0x000428ec cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000428ee beq.w 0x420d8                                     |         goto label_72;
                                                                 |     }
    0x000428f2 cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x000428f4 blt 0x4293c                                       |         goto label_173;
                                                                 |     }
                                                                 | label_84:
    0x000428f6 ldr r0, [r1, 4]                                   |     r0 = *((r1 + 4));
    0x000428f8 add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x000428fc ldr.w r2, [r0, r2, lsl 2]                         |     offset_3 = r2 << 2;
                                                                 |     r2 = *((r0 + offset_3));
                                                                 | label_85:
    0x00042900 ldr r1, [r1]                                      |     r1 = *(r1);
    0x00042902 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042904 bl 0x40db4                                        |     r0 = fcn_00040db4 (r0, r1, r2, r3);
    0x00042908 cmp r0, 2                                         |     
    0x0004290a ittt eq                                           |     
                                                                 |     if (r0 != 2) {
    0x0004290c ldreq r2, [sp, 0xc]                               |         r2 = var_ch;
                                                                 |     }
                                                                 |     if (r0 != 2) {
    0x0004290e moveq r3, 0x79                                    |         r3 = 0x79;
                                                                 |     }
                                                                 |     if (r0 != 2) {
    0x00042910 strbeq r3, [r2]                                   |         *(r2) = r3;
                                                                 |     }
    0x00042912 b.w 0x420d8                                       |     goto label_72;
                                                                 | label_166:
    0x00042916 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x00042918 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0004291a ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 | label_82:
    0x0004291c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004291e beq.w 0x42144                                     |         goto label_80;
                                                                 |     }
    0x00042922 ldr r1, [pc, 0x9c]                                |     
    0x00042924 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042926 add r1, pc                                        |     r1 = 0x852ec;
    0x00042928 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0004292c b.w 0x4170e                                       |     goto label_81;
                                                                 | label_165:
    0x00042930 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x00042932 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00042934 b 0x4291c                                         |     goto label_82;
                                                                 | label_171:
    0x00042936 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00042938 ldr r1, [r2, 0x78]                                |     r1 = *((r2 + 0x78));
    0x0004293a b 0x428e6                                         |     goto label_83;
                                                                 | label_173:
    0x0004293c ldrsh.w r2, [r1, 0x20]                            |     r2 = *((r1 + 0x20));
    0x00042940 cmp r2, 0                                         |     
                                                                 |     if (r2 >= 0) {
    0x00042942 bge 0x428f6                                       |         goto label_84;
                                                                 |     }
    0x00042944 ldr r2, [pc, 0x7c]                                |     
    0x00042946 add r2, pc                                        |     r2 = 0x8530e;
    0x00042948 b 0x42900                                         |     goto label_85;
                                                                 | label_163:
    0x0004294a ldr r1, [pc, 0x7c]                                |     
    0x0004294c mov r2, r7                                        |     r2 = r7;
    0x0004294e ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042950 add r1, pc                                        |     r1 = 0x8531e;
    0x00042952 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00042956 b.w 0x4170e                                       |     goto label_81;
                                                                 | label_164:
    0x0004295a ldr r1, [pc, 0x70]                                |     
    0x0004295c mov r2, r7                                        |     r2 = r7;
    0x0004295e ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042960 add r1, pc                                        |     r1 = 0x85332;
    0x00042962 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00042966 b.w 0x4170e                                       |     goto label_81;
    0x000544b4 cmp ip, r1                                        |     
    0x000544b6 it ge                                             |     
                                                                 |     if (ip < r1) {
    0x000544b8 movge ip, r1                                      |         
                                                                 |     }
    0x000544ba cmp r2, ip                                        |     
                                                                 |     if (r2 <= ip) {
    0x000544bc bhi 0x544cc                                       |         
    0x000544be movw r1, 0x4010                                   |         r1 = 0x4010;
    0x000544c2 movs r0, 0                                        |         r0 = 0;
    0x000544c4 pop {r4, r5, r6}                                  |         
    0x000544c6 str r2, [r3, 0xc]                                 |         *((r3 + 0xc)) = r2;
    0x000544c8 strh r1, [r3, 0x10]                               |         *((r3 + 0x10)) = r1;
    0x000544ca bx lr                                             |         return;
                                                                 |     }
    0x000544cc pop {r4, r5, r6}                                  |     
    0x000544ce movs r1, 0                                        |     r1 = 0;
    0x000544d0 b 0x543e8                                         |     return void (*0x543e8)() ();
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4545c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0004545c ()                                      | void fcn_0004545c (int16_t arg_0h, 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;
    0x0004545c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00045460 mov sb, r2                                        |     sb = r2;
    0x00045462 ldr r5, [r2]                                      |     r5 = *(r2);
    0x00045464 sub sp, 0x1c                                      |     
    0x00045466 mov sl, r0                                        |     sl = r0;
    0x00045468 mov fp, r3                                        |     
    0x0004546a mov r6, r1                                        |     r6 = r1;
    0x0004546c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004546e beq.w 0x45688                                     |         goto label_16;
                                                                 |     }
    0x00045472 mov r0, r1                                        |     r0 = r1;
    0x00045474 blx 0x9e8c                                        |     fcn_00009e8c ();
    0x00045478 lsls r3, r5, 0x19                                 |     r3 = r5 << 0x19;
    0x0004547a bic r7, r0, 0xc0000000                            |     r7 = BIT_MASK (r0, 0xc0000000);
                                                                 |     if (r3 >= r5) {
    0x0004547e bpl.w 0x455de                                     |         goto label_17;
                                                                 |     }
                                                                 | label_3:
    0x00045482 cmp r7, 4                                         |     
                                                                 |     if (r7 < 4) {
    0x00045484 bls.w 0x455ea                                     |         goto label_18;
                                                                 |     }
    0x00045488 ldr.w r1, [pc, 0x454]                             |     
    0x0004548c movs r2, 5                                        |     r2 = 5;
    0x0004548e mov r0, r6                                        |     r0 = r6;
    0x00045490 add r1, pc                                        |     r1 = 0x8ad74;
    0x00045492 blx 0xa0b4                                        |     r0 = fcn_0000a0b4 ();
    0x00045496 mov r8, r0                                        |     r8 = r0;
    0x00045498 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004549a bne.w 0x455ea                                     |         goto label_18;
                                                                 |     }
    0x0004549e subs r2, r6, 1                                    |     r2 = r6 - 1;
    0x000454a0 add.w r0, r7, 8                                   |     r0 = r7 + 8;
    0x000454a4 adds r4, r2, r7                                   |     r4 = r2 + r7;
    0x000454a6 orr r5, r5, 0x40                                  |     r5 |= 0x40;
    0x000454aa movs r1, 0                                        |     r1 = 0;
    0x000454ac mov r7, r8                                        |     r7 = r8;
                                                                 |     do {
    0x000454ae ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x000454b2 sub.w r3, r3, 0x26                                |         r3 -= 0x26;
    0x000454b6 clz r3, r3                                        |         r3 &= r3;
    0x000454ba lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x000454bc adds r0, r3, r0                                   |         r0 = r3 + r0;
    0x000454be adc r1, r1, 0                                     |         __asm ("adc r1, r1, 0");
    0x000454c2 cmp r2, r4                                        |         
    0x000454c4 bne 0x454ae                                       |         
                                                                 |     } while (r2 != r4);
    0x000454c6 blx 0xa1f8                                        |     r0 = fcn_0000a1f8 ();
    0x000454ca mov r4, r0                                        |     r4 = r0;
    0x000454cc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000454ce beq.w 0x4567e                                     |         goto label_19;
                                                                 |     }
    0x000454d2 str r7, [r4], 4                                   |     *(r4) = r7;
                                                                 |     r4 += 4;
    0x000454d6 ldrb r3, [r6, 5]                                  |     r3 = *((r6 + 5));
    0x000454d8 cmp r3, 0x2f                                      |     
                                                                 |     if (r3 == 0x2f) {
    0x000454da beq.w 0x45806                                     |         goto label_20;
                                                                 |     }
    0x000454de mov.w ip, 5                                       |     
    0x000454e2 subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x000454e4 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x000454e6 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x000454e8 mov r7, ip                                        |     r7 = ip;
                                                                 | label_12:
    0x000454ea cmp r3, 0x23                                      |     
    0x000454ec ite eq                                            |     
                                                                 |     if (r3 != 0x23) {
    0x000454ee moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0x23) {
    0x000454f0 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x000454f4 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000454f6 beq.w 0x458ba                                     |         goto label_21;
                                                                 |     }
                                                                 | label_11:
    0x000454fa ldr r1, [pc, 0x3e8]                               |     
    0x000454fc movs r2, 0                                        |     r2 = 0;
    0x000454fe strd r5, sb, [sp]                                 |     __asm ("strd r5, sb, [sp]");
    0x00045502 add r1, pc                                        |     r1 = 0x8adec;
    0x00045504 mov sb, r1                                        |     sb = r1;
    0x00045506 b 0x45534                                         |     
                                                                 |     while (r3 != 0x25) {
    0x00045508 cmp r2, 1                                         |         
                                                                 |         if (r2 == 1) {
    0x0004550a beq.w 0x45638                                     |             goto label_22;
                                                                 |         }
    0x0004550e cmp r2, 0                                         |         
    0x00045510 it eq                                             |         
                                                                 |         if (r2 == 0) {
    0x00045512 cmpeq r3, 0x3f                                    |             __asm ("cmpeq r3, 0x3f");
                                                                 |         }
    0x00045514 itt eq                                            |         
                                                                 |         if (r2 != 0) {
    0x00045516 moveq r2, 1                                       |             r2 = 1;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x00045518 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x0004551a bne.w 0x45668                                     |             goto label_23;
                                                                 |         }
                                                                 | label_0:
    0x0004551e add.w r8, r8, 1                                   |         r8++;
    0x00045522 mov r7, r1                                        |         r7 = r1;
    0x00045524 strb r3, [r4, r0]                                 |         *((r4 + r0)) = r3;
                                                                 | label_2:
    0x00045526 ldrb r3, [r6, r7]                                 |         r3 = *((r6 + r7));
    0x00045528 mov ip, r7                                        |         
    0x0004552a cmp r3, 0                                         |         
    0x0004552c it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x0004552e cmpne r3, 0x23                                    |             __asm ("cmpne r3, 0x23");
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x00045530 beq.w 0x456ba                                     |             goto label_24;
                                                                 |         }
    0x00045534 cmp r3, 0x25                                      |         
    0x00045536 add.w r1, r7, 1                                   |         r1 = r7 + 1;
    0x0004553a mov r0, r8                                        |         r0 = r8;
    0x0004553c bne 0x45508                                       |         
                                                                 |     }
    0x0004553e ldrb r5, [r6, r1]                                 |     r5 = *((r6 + r1));
    0x00045540 add.w lr, sb, r5                                  |     lr = sb + r5;
    0x00045544 ldrb.w lr, [lr, 0x40]                             |     
    0x00045548 tst.w lr, 8                                       |     
                                                                 |     if ((lr & 8) == 0) {
    0x0004554c beq 0x4551e                                       |         goto label_0;
                                                                 |     }
    0x0004554e add ip, r6                                        |     
    0x00045550 ldrb.w ip, [ip, 2]                                |     ip = *((ip + 2));
    0x00045554 add.w lr, sb, ip                                  |     lr = sb + ip;
    0x00045558 ldrb.w lr, [lr, 0x40]                             |     
    0x0004555c tst.w lr, 8                                       |     
                                                                 |     if ((lr & 8) == 0) {
    0x00045560 beq 0x4551e                                       |         goto label_0;
                                                                 |     }
    0x00045562 ubfx r3, r5, 6, 1                                 |     r3 = (r5 >> 6) & ((1 << 1) - 1);
    0x00045566 ubfx r1, ip, 6, 1                                 |     r1 = (ip >> 6) & ((1 << 1) - 1);
    0x0004556a add.w r1, r1, r1, lsl 3                           |     r1 += (r1 << 3);
    0x0004556e add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x00045572 add r3, r5                                        |     r3 += r5;
    0x00045574 add.w r5, r1, ip                                  |     r5 = r1 + ip;
    0x00045578 and r3, r3, 0xf                                   |     r3 &= 0xf;
    0x0004557c and r5, r5, 0xf                                   |     r5 &= 0xf;
    0x00045580 adds.w r3, r5, r3, lsl 4                          |     r3 = r5 + (r3 << 4);
    0x00045584 add.w r1, r7, 3                                   |     r1 = r7 + 3;
    0x00045588 it ne                                             |     
                                                                 |     if (r3 == r5) {
    0x0004558a uxtbne r3, r3                                     |         __asm ("uxtbne r3, r3");
                                                                 |         goto label_25;
                                                                 |     }
                                                                 |     if (r3 != r5) {
                                                                 | label_25:
    0x0004558c bne 0x4551e                                       |         goto label_0;
                                                                 |     }
    0x0004558e ldrb r3, [r6, r1]                                 |     r3 = *((r6 + r1));
    0x00045590 cmp r3, 0                                         |     
    0x00045592 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00045594 cmpne r3, 0x23                                    |         __asm ("cmpne r3, 0x23");
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00045596 beq.w 0x456ba                                     |         goto label_24;
                                                                 |     }
    0x0004559a adds r1, r7, 4                                    |     r1 = r7 + 4;
    0x0004559c subs r5, r2, 0                                    |     r5 = r2 - 0;
    0x0004559e add r1, r6                                        |     r1 += r6;
    0x000455a0 it ne                                             |     
                                                                 |     if (r5 == r2) {
    0x000455a2 movne r5, 1                                       |         r5 = 1;
                                                                 |     }
    0x000455a4 b 0x455bc                                         |     
                                                                 |     while (r2 != 1) {
    0x000455a6 cmp r3, 0x26                                      |         
    0x000455a8 it eq                                             |         
                                                                 |         if (r3 == 0x26) {
    0x000455aa cmpeq r2, 2                                       |             __asm ("cmpeq r2, 2");
                                                                 |         }
                                                                 |         if (r3 == 0x26) {
    0x000455ac beq.w 0x458d0                                     |             goto label_26;
                                                                 |         }
                                                                 | label_1:
    0x000455b0 ldrb r3, [r1], 1                                  |         r3 = *(r1);
                                                                 |         r1++;
    0x000455b4 cmp r3, 0x23                                      |         
    0x000455b6 it ne                                             |         
                                                                 |         if (r3 != 0x23) {
    0x000455b8 cmpne r3, 0                                       |             __asm ("cmpne r3, 0");
                                                                 |         }
                                                                 |         if (r3 == 0x23) {
    0x000455ba beq 0x456ba                                       |             goto label_24;
                                                                 |         }
    0x000455bc cmp r3, 0x3f                                      |         
    0x000455be ite eq                                            |         
                                                                 |         if (r3 != 0x3f) {
    0x000455c0 moveq r0, r5                                      |             r0 = r5;
                                                                 |         }
                                                                 |         if (r3 == 0x3f) {
    0x000455c2 orrne r0, r5, 1                                   |             r0 = r5 | 1;
                                                                 |         }
    0x000455c6 subs r7, r1, r6                                   |         r7 = r1 - r6;
    0x000455c8 subs r7, 1                                        |         r7--;
    0x000455ca cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000455cc beq.w 0x458d4                                     |             goto label_27;
                                                                 |         }
    0x000455d0 cmp r2, 1                                         |         
    0x000455d2 bne 0x455a6                                       |         
                                                                 |     }
    0x000455d4 cmp r3, 0x3d                                      |     
    0x000455d6 it ne                                             |     
                                                                 |     if (r3 == 0x3d) {
    0x000455d8 cmpne r3, 0x26                                    |         __asm ("cmpne r3, 0x26");
                                                                 |         goto label_28;
                                                                 |     }
                                                                 |     if (r3 != 0x3d) {
                                                                 | label_28:
    0x000455da bne 0x455b0                                       |         goto label_1;
                                                                 |     }
    0x000455dc b 0x45526                                         |     goto label_2;
                                                                 | label_17:
    0x000455de ldr r3, [pc, 0x308]                               |     
    0x000455e0 add r3, pc                                        |     r3 = 0x8aece;
    0x000455e2 ldrb r3, [r3, 6]                                  |     r3 = *((r3 + 6));
    0x000455e4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000455e6 bne.w 0x45482                                     |         goto label_3;
                                                                 |     }
                                                                 | label_18:
    0x000455ea add.w r0, r7, 8                                   |     r0 = r7 + 8;
    0x000455ee movs r1, 0                                        |     r1 = 0;
    0x000455f0 blx 0xa1f8                                        |     r0 = fcn_0000a1f8 ();
    0x000455f4 mov r4, r0                                        |     r4 = r0;
    0x000455f6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000455f8 beq 0x4567e                                       |         goto label_19;
                                                                 |     }
    0x000455fa movs r3, 0                                        |     r3 = 0;
    0x000455fc str r3, [r4], 4                                   |     *(r4) = r3;
                                                                 |     r4 += 4;
    0x00045600 cbnz r7, 0x4562c                                  |     
                                                                 |     while (1) {
    0x00045602 add r7, r4                                        |         r7 += r4;
                                                                 | label_4:
    0x00045604 bic r5, r5, 0x40                                  |         r5 = BIT_MASK (r5, 0x40);
    0x00045608 movs r3, 0                                        |         r3 = 0;
    0x0004560a str r3, [r7]                                      |         *(r7) = r3;
                                                                 | label_6:
    0x0004560c mov r0, sl                                        |         r0 = sl;
    0x0004560e movs r6, 0                                        |         r6 = 0;
    0x00045610 blx 0x9f8c                                        |         fcn_00009f8c ();
    0x00045614 str.w r0, [fp]                                    |         __asm ("str.w r0, [fp]");
    0x00045618 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0004561a beq 0x4569e                                       |             goto label_29;
                                                                 |         }
                                                                 | label_5:
    0x0004561c ldr r3, [sp, 0x40]                                |         r3 = *(arg_0h);
    0x0004561e mov r0, r6                                        |         r0 = r6;
    0x00045620 str.w r5, [sb]                                    |         __asm ("str.w r5, [sb]");
    0x00045624 str r4, [r3]                                      |         *(r3) = r4;
    0x00045626 add sp, 0x1c                                      |         
    0x00045628 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0004562c mov r1, r6                                        |         r1 = r6;
    0x0004562e mov r2, r7                                        |         r2 = r7;
    0x00045630 mov r0, r4                                        |         r0 = r4;
    0x00045632 blx 0x9e2c                                        |         fcn_00009e2c ();
    0x00045636 b 0x45602                                         |         
                                                                 |     }
                                                                 | label_22:
    0x00045638 cmp r3, 0x3d                                      |     
    0x0004563a it ne                                             |     
                                                                 |     if (r3 == 0x3d) {
    0x0004563c cmpne r3, 0x26                                    |         __asm ("cmpne r3, 0x26");
                                                                 |         goto label_30;
                                                                 |     }
                                                                 |     if (r3 != 0x3d) {
                                                                 | label_30:
    0x0004563e bne.w 0x4551e                                     |         goto label_0;
                                                                 |     }
    0x00045642 add.w ip, r4, r8                                  |     
    0x00045646 ldrb r5, [ip, -0x1]                               |     r5 = *((ip - 0x1));
    0x0004564a cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004564c beq.w 0x4588e                                     |         goto label_31;
                                                                 |     }
    0x00045650 cmp r3, 0x26                                      |     
    0x00045652 itt ne                                            |     
                                                                 |     if (r3 == 0x26) {
    0x00045654 movne r2, 2                                       |         r2 = 2;
                                                                 |     }
                                                                 |     if (r3 != 0x26) {
    0x00045656 movne r3, 0                                       |         r3 = 0;
                                                                 |         goto label_32;
                                                                 |     }
                                                                 |     if (r3 != 0x26) {
                                                                 | label_32:
    0x00045658 bne.w 0x4551e                                     |         goto label_0;
                                                                 |     }
    0x0004565c add.w r8, r8, 1                                   |     r8++;
    0x00045660 movs r3, 0                                        |     r3 = 0;
    0x00045662 strb r3, [r4, r0]                                 |     *((r4 + r0)) = r3;
    0x00045664 mov r0, r8                                        |     r0 = r8;
    0x00045666 b 0x4551e                                         |     goto label_0;
                                                                 | label_23:
    0x00045668 cmp r2, 2                                         |     
    0x0004566a it eq                                             |     
                                                                 |     if (r2 == 2) {
    0x0004566c cmpeq r3, 0x26                                    |         __asm ("cmpeq r3, 0x26");
                                                                 |     }
    0x0004566e ite eq                                            |     
                                                                 |     if (r2 != 2) {
    0x00045670 moveq r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r2 == 2) {
    0x00045672 movne r5, 0                                       |         r5 = 0;
                                                                 |     }
    0x00045674 cmp r5, 0                                         |     
    0x00045676 itt ne                                            |     
                                                                 |     if (r5 == 0) {
    0x00045678 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x0004567a movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004567c b 0x4551e                                         |     goto label_0;
                                                                 |     do {
                                                                 | label_19:
    0x0004567e movs r6, 7                                        |         r6 = 7;
    0x00045680 mov r0, r6                                        |         r0 = r6;
    0x00045682 add sp, 0x1c                                      |         
    0x00045684 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_16:
    0x00045688 movs r0, 8                                        |         r0 = 8;
    0x0004568a movs r1, 0                                        |         r1 = 0;
    0x0004568c blx 0xa1f8                                        |         r0 = fcn_0000a1f8 ();
    0x00045690 mov r4, r0                                        |         r4 = r0;
    0x00045692 cmp r0, 0                                         |         
    0x00045694 beq 0x4567e                                       |         
                                                                 |     } while (r0 == 0);
    0x00045696 str r6, [r4], 4                                   |     *(r4) = r6;
                                                                 |     r4 += 4;
    0x0004569a mov r7, r4                                        |     r7 = r4;
    0x0004569c b 0x45604                                         |     goto label_4;
                                                                 | label_29:
    0x0004569e ldr r0, [pc, 0x24c]                               |     
    0x000456a0 mov r1, sl                                        |     r1 = sl;
    0x000456a2 movs r6, 1                                        |     r6 = 1;
    0x000456a4 add r0, pc                                        |     r0 = 0x8af96;
    0x000456a6 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x000456aa mov r3, r0                                        |     r3 = r0;
                                                                 | label_9:
    0x000456ac ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x000456ae mov r0, r4                                        |     r0 = r4;
    0x000456b0 movs r4, 0                                        |     r4 = 0;
    0x000456b2 str r3, [r2]                                      |     *(r2) = r3;
    0x000456b4 blx 0xa020                                        |     fcn_0000a020 ();
    0x000456b8 b 0x4561c                                         |     goto label_5;
                                                                 | label_24:
    0x000456ba cmp r2, 1                                         |     
    0x000456bc ldrd r5, sb, [sp]                                 |     __asm ("ldrd r5, sb, [sp]");
    0x000456c0 add.w ip, r4, r8                                  |     
                                                                 |     if (r2 == 1) {
    0x000456c4 beq.w 0x4586a                                     |         goto label_33;
                                                                 |     }
                                                                 | label_13:
    0x000456c8 movs r3, 0                                        |     r3 = 0;
    0x000456ca mov r0, r4                                        |     r0 = r4;
    0x000456cc str.w r3, [ip]                                    |     __asm ("str.w r3, [ip]");
    0x000456d0 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x000456d4 bic r1, r0, 0xc0000000                            |     r1 = BIT_MASK (r0, 0xc0000000);
    0x000456d8 adds r1, 1                                        |     r1++;
    0x000456da ldrb r3, [r4, r1]                                 |     r3 = *((r4 + r1));
    0x000456dc adds r7, r4, r1                                   |     r7 = r4 + r1;
    0x000456de cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000456e0 beq 0x4560c                                       |         goto label_6;
                                                                 |     }
    0x000456e2 ldr.w r8, [pc, 0x20c]                             |     
    0x000456e6 str.w sl, [sp, 0x10]                              |     __asm ("str.w sl, [var_10h]");
    0x000456ea mov sl, r7                                        |     sl = r7;
    0x000456ec str.w fp, [sp, 0x14]                              |     __asm ("str.w fp, [var_14h]");
    0x000456f0 add r8, pc                                        |     r8 = 0x8afe6;
    0x000456f2 addw r3, r8, 0xa48                                |     __asm ("addw r3, r8, aav.0x000000ff");
    0x000456f6 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000456f8 ldr r3, [pc, 0x1f8]                               |     
    0x000456fa add r3, pc                                        |     r3 = 0x8aff2;
    0x000456fc strd r3, r4, [sp]                                 |     __asm ("strd r3, r4, [sp]");
    0x00045700 b 0x45720                                         |     
                                                                 |     while (r4 != 3) {
    0x00045702 cmp r4, 5                                         |         
                                                                 |         if (r4 == 5) {
    0x00045704 beq 0x4575e                                       |             goto label_34;
                                                                 |         }
    0x00045706 cmp r4, 4                                         |         
                                                                 |         if (r4 == 4) {
    0x00045708 bne 0x45712                                       |             
    0x0004570a ldrb.w r2, [sl]                                   |             r2 = *(sl);
    0x0004570e cmp r2, 0x6d                                      |             
                                                                 |             if (r2 == 0x6d) {
    0x00045710 beq 0x457cc                                       |                 goto label_35;
                                                                 |             }
                                                                 |         }
                                                                 | label_7:
    0x00045712 adds r6, 1                                        |         r6++;
    0x00045714 ldrb.w r3, [r8, r6]                               |         r3 = *((r8 + r6));
    0x00045718 add.w sl, r8, r6                                  |         sl = r8 + r6;
    0x0004571c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004571e beq 0x457fe                                       |             goto label_36;
                                                                 |         }
    0x00045720 mov r0, sl                                        |         r0 = sl;
    0x00045722 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00045726 bic r4, r0, 0xc0000000                            |         r4 = BIT_MASK (r0, 0xc0000000);
    0x0004572a adds r3, r4, 1                                    |         r3 = r4 + 1;
    0x0004572c add.w r8, sl, r3                                  |         r8 = sl + r3;
    0x00045730 mov r0, r8                                        |         r0 = r8;
    0x00045732 blx 0x9e8c                                        |         fcn_00009e8c ();
    0x00045736 cmp r4, 3                                         |         
    0x00045738 bic r6, r0, 0xc0000000                            |         r6 = BIT_MASK (r0, 0xc0000000);
    0x0004573c bne 0x45702                                       |         
                                                                 |     }
    0x0004573e ldrb.w r2, [sl]                                   |     r2 = *(sl);
    0x00045742 cmp r2, 0x76                                      |     
                                                                 |     if (r2 != 0x76) {
    0x00045744 bne 0x45712                                       |         goto label_7;
                                                                 |     }
    0x00045746 ldrb.w r2, [sl, 1]                                |     r2 = *((sl + 1));
    0x0004574a cmp r2, 0x66                                      |     
                                                                 |     if (r2 != 0x66) {
    0x0004574c bne 0x45712                                       |         goto label_7;
                                                                 |     }
    0x0004574e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00045750 ldrb.w r2, [sl, 2]                                |     r2 = *((sl + 2));
    0x00045754 cmp r2, 0x73                                      |     
    0x00045756 it eq                                             |     
                                                                 |     if (r2 != 0x73) {
    0x00045758 moveq r3, r8                                      |         r3 = r8;
                                                                 |     }
    0x0004575a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0004575c b 0x45712                                         |     goto label_7;
                                                                 | label_34:
    0x0004575e ldr r0, [sp]                                      |     r0 = *(sp);
    0x00045760 mov r2, r4                                        |     r2 = r4;
    0x00045762 mov r1, sl                                        |     r1 = sl;
    0x00045764 blx 0xa0b4                                        |     r0 = fcn_0000a0b4 ();
    0x00045768 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004576a bne 0x45712                                       |         goto label_7;
                                                                 |     }
    0x0004576c ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0004576e mov.w sl, 0x60000                                 |     sl = 0x60000;
    0x00045772 ldr r3, [sp]                                      |     r3 = *(sp);
    0x00045774 mov fp, sl                                        |     
    0x00045776 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_10:
    0x00045778 ldr r4, [r2]                                      |     r4 = *(r2);
                                                                 |     if (r4 == 0) {
    0x0004577a cbz r4, 0x457b8                                   |         goto label_37;
                                                                 |     }
    0x0004577c mov r7, r2                                        |     r7 = r2;
    0x0004577e b 0x45786                                         |     
                                                                 |     while (r6 != r0) {
                                                                 | label_8:
    0x00045780 ldr r4, [r7, 8]!                                  |         r4 = *((r7 += 8));
                                                                 |         if (r4 == 0) {
    0x00045784 cbz r4, 0x457b8                                   |             goto label_37;
                                                                 |         }
    0x00045786 mov r0, r4                                        |         r0 = r4;
    0x00045788 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x0004578c bic r0, r0, 0xc0000000                            |         r0 = BIT_MASK (r0, 0xc0000000);
    0x00045790 cmp r6, r0                                        |         
    0x00045792 bne 0x45780                                       |         
                                                                 |     }
    0x00045794 mov r1, r4                                        |     r1 = r4;
    0x00045796 mov r2, r6                                        |     r2 = r6;
    0x00045798 mov r0, r8                                        |     r0 = r8;
    0x0004579a blx 0xa0b4                                        |     r0 = fcn_0000a0b4 ();
    0x0004579e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000457a0 bne 0x45780                                       |         goto label_8;
                                                                 |     }
    0x000457a2 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
                                                                 |     if (r2 != 0) {
    0x000457a4 cbz r2, 0x457b8                                   |         
    0x000457a6 bic r1, r2, 0x80                                  |         r1 = BIT_MASK (r2, 0x80);
    0x000457aa cmp r1, fp                                        |         
                                                                 |         if (r1 > fp) {
    0x000457ac bgt 0x4587a                                       |             goto label_38;
                                                                 |         }
    0x000457ae bic.w ip, r5, sl                                  |         ip = BIT_MASK (r5, sl);
    0x000457b2 orr.w r5, r2, ip                                  |         r5 = r2 | ip;
    0x000457b6 b 0x45712                                         |         goto label_7;
                                                                 |     }
                                                                 | label_37:
    0x000457b8 ldr r0, [pc, 0x13c]                               |     
    0x000457ba mov r2, r8                                        |     r2 = r8;
    0x000457bc ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000457be movs r6, 1                                        |     r6 = 1;
    0x000457c0 ldr r4, [sp, 4]                                   |     r4 = var_4h;
    0x000457c2 add r0, pc                                        |     r0 = 0x8b0be;
    0x000457c4 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x000457c8 mov r3, r0                                        |     r3 = r0;
    0x000457ca b 0x456ac                                         |     goto label_9;
                                                                 | label_35:
    0x000457cc ldrb.w r2, [sl, 1]                                |     r2 = *((sl + 1));
    0x000457d0 add.w r1, sl, 1                                   |     r1 = sl + 1;
    0x000457d4 cmp r2, 0x6f                                      |     
                                                                 |     if (r2 != 0x6f) {
    0x000457d6 bne 0x45712                                       |         goto label_7;
                                                                 |     }
    0x000457d8 ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x000457dc cmp r2, 0x64                                      |     
                                                                 |     if (r2 != 0x64) {
    0x000457de bne 0x45712                                       |         goto label_7;
                                                                 |     }
    0x000457e0 ldrb r2, [r1, 1]                                  |     r2 = *((r1 + 1));
    0x000457e2 cmp r2, 0x65                                      |     
                                                                 |     if (r2 != 0x65) {
    0x000457e4 bne 0x45712                                       |         goto label_7;
                                                                 |     }
    0x000457e6 ldr r2, [pc, 0x114]                               |     
    0x000457e8 and fp, r5, 0x87                                  |     
    0x000457ec ldr r3, [pc, 0x110]                               |     
    0x000457ee mov.w sl, 0x87                                    |     sl = 0x87;
    0x000457f2 add r2, pc                                        |     
    0x000457f4 add r3, pc                                        |     r3 = 0x8b0f8;
    0x000457f6 add.w r2, r2, 0xa60                               |     r2 = 0x8bb54;
    0x000457fa str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000457fc b 0x45778                                         |     goto label_10;
                                                                 | label_36:
    0x000457fe ldr r4, [sp, 4]                                   |     r4 = var_4h;
    0x00045800 ldrd sl, fp, [sp, 0x10]                           |     __asm ("ldrd sl, fp, [var_10h]");
    0x00045804 b 0x4560c                                         |     goto label_6;
                                                                 | label_20:
    0x00045806 ldrb r2, [r6, 6]                                  |     r2 = *((r6 + 6));
    0x00045808 cmp r2, 0x2f                                      |     
    0x0004580a itt ne                                            |     
                                                                 |     if (r2 == 0x2f) {
    0x0004580c movne ip, 5                                       |         
                                                                 |     }
                                                                 |     if (r2 == 0x2f) {
    0x00045810 mov r7, ip                                        |         r7 = ip;
                                                                 |         goto label_39;
                                                                 |     }
                                                                 |     if (r2 != 0x2f) {
                                                                 | label_39:
    0x00045812 bne.w 0x454fa                                     |         goto label_11;
                                                                 |     }
    0x00045816 ldrb r3, [r6, 7]                                  |     r3 = *((r6 + 7));
    0x00045818 adds r1, r6, 7                                    |     r1 = r6 + 7;
    0x0004581a subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x0004581c it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x0004581e movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00045820 cmp r3, 0x2f                                      |     
    0x00045822 ite eq                                            |     
                                                                 |     if (r3 != 0x2f) {
    0x00045824 moveq r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0x2f) {
    0x00045826 andne r0, r2, 1                                   |         r0 = r2 & 1;
                                                                 |     }
    0x0004582a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004582c beq 0x458d8                                       |         goto label_40;
                                                                 |     }
    0x0004582e mov r0, r1                                        |     r0 = r1;
    0x00045830 movs r7, 7                                        |     r7 = 7;
                                                                 |     do {
    0x00045832 ldrb r2, [r0, 1]!                                 |         r2 = *((r0 += 1));
    0x00045836 mov r3, r7                                        |         r3 = r7;
    0x00045838 adds r7, 1                                        |         r7++;
    0x0004583a cmp r2, 0                                         |         
    0x0004583c it ne                                             |         
                                                                 |         if (r2 != 0) {
    0x0004583e cmpne r2, 0x2f                                    |             __asm ("cmpne r2, 0x2f");
                                                                 |         }
    0x00045840 bne 0x45832                                       |         
                                                                 |     } while (r2 != 0);
    0x00045842 cmp r7, 0x10                                      |     
                                                                 |     if (r7 != 0x10) {
    0x00045844 bne 0x458be                                       |         goto label_41;
                                                                 |     }
    0x00045846 ldr r0, [pc, 0xbc]                                |     
    0x00045848 movs r2, 9                                        |     r2 = 9;
    0x0004584a str r3, [sp, 4]                                   |     var_4h = r3;
    0x0004584c str r1, [sp]                                      |     *(sp) = r1;
    0x0004584e add r0, pc                                        |     r0 = 0x8b158;
    0x00045850 blx 0xa0b4                                        |     fcn_0000a0b4 ();
    0x00045854 ldrd r1, r3, [sp]                                 |     __asm ("ldrd r1, r3, [sp]");
                                                                 |     if (r0 != 0) {
    0x00045858 cbnz r0, 0x458be                                  |         goto label_41;
                                                                 |     }
    0x0004585a ldrb r3, [r6, 0x10]                               |     r3 = *((r6 + 0x10));
    0x0004585c mov ip, r7                                        |     
    0x0004585e subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x00045860 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00045862 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00045864 b 0x454ea                                         |     goto label_12;
                                                                 |     do {
                                                                 | label_14:
    0x00045866 ldrd r5, sb, [sp]                                 |         __asm ("ldrd r5, sb, [sp]");
                                                                 | label_33:
    0x0004586a add.w r8, r8, 1                                   |         r8++;
    0x0004586e movs r3, 0                                        |         r3 = 0;
    0x00045870 strb.w r3, [ip]                                   |         *(ip) = r3;
    0x00045874 add.w ip, r4, r8                                  |         
    0x00045878 b 0x456c8                                         |         goto label_13;
                                                                 | label_38:
    0x0004587a ldr r0, [pc, 0x8c]                                |         
    0x0004587c mov r2, r8                                        |         r2 = r8;
    0x0004587e ldr r1, [sp, 0xc]                                 |         r1 = var_ch;
    0x00045880 movs r6, 3                                        |         r6 = 3;
    0x00045882 ldr r4, [sp, 4]                                   |         r4 = var_4h;
    0x00045884 add r0, pc                                        |         r0 = 0x8b192;
    0x00045886 blx 0x97f0                                        |         r0 = fcn_000097f0 ();
    0x0004588a mov r3, r0                                        |         r3 = r0;
    0x0004588c b 0x456ac                                         |         goto label_9;
                                                                 | label_31:
    0x0004588e ldrb r3, [r6, r1]                                 |         r3 = *((r6 + r1));
    0x00045890 cmp r3, 0x23                                      |         
    0x00045892 it ne                                             |         
                                                                 |         if (r3 != 0x23) {
    0x00045894 cmpne r3, 0                                       |             __asm ("cmpne r3, 0");
                                                                 |         }
    0x00045896 beq 0x45866                                       |         
                                                                 |     } while (r3 == 0x23);
    0x00045898 subs r3, r7, 1                                    |     r3 = r7 - 1;
    0x0004589a add r3, r6                                        |     r3 += r6;
    0x0004589c b 0x458a8                                         |     goto label_42;
                                                                 | label_15:
    0x0004589e ldrb r1, [r3, 2]                                  |     r1 = *((r3 + 2));
    0x000458a0 cmp r1, 0                                         |     
    0x000458a2 it ne                                             |     
                                                                 |     if (r1 == 0) {
    0x000458a4 cmpne r1, 0x23                                    |         __asm ("cmpne r1, 0x23");
                                                                 |         goto label_43;
                                                                 |     }
                                                                 |     if (r1 == 0) {
                                                                 | label_43:
    0x000458a6 beq 0x45866                                       |         goto label_14;
                                                                 |     }
                                                                 | label_42:
    0x000458a8 mov r0, r3                                        |     r0 = r3;
    0x000458aa ldrb r1, [r3, 1]!                                 |     r1 = *((r3 += 1));
    0x000458ae cmp r1, 0x26                                      |     
                                                                 |     if (r1 != 0x26) {
    0x000458b0 bne 0x4589e                                       |         goto label_15;
                                                                 |     }
    0x000458b2 rsb.w r7, r6, 2                                   |     r7 = 2 - r6;
    0x000458b6 add r7, r0                                        |     r7 += r0;
    0x000458b8 b 0x45526                                         |     goto label_2;
                                                                 | label_21:
    0x000458ba mov ip, r4                                        |     
    0x000458bc b 0x456c8                                         |     goto label_13;
                                                                 | label_41:
    0x000458be ldr r0, [pc, 0x4c]                                |     
    0x000458c0 mov r2, r1                                        |     r2 = r1;
    0x000458c2 subs r1, r3, 6                                    |     r1 = r3 - 6;
    0x000458c4 movs r6, 1                                        |     r6 = 1;
    0x000458c6 add r0, pc                                        |     r0 = 0x8b1d8;
    0x000458c8 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x000458cc mov r3, r0                                        |     r3 = r0;
    0x000458ce b 0x456ac                                         |     goto label_9;
                                                                 | label_26:
    0x000458d0 movs r2, 2                                        |     r2 = 2;
    0x000458d2 b 0x45526                                         |     goto label_2;
                                                                 | label_27:
    0x000458d4 mov r2, r0                                        |     r2 = r0;
    0x000458d6 b 0x45526                                         |     goto label_2;
                                                                 | label_40:
    0x000458d8 mov.w ip, 7                                       |     
    0x000458dc mov r7, ip                                        |     r7 = ip;
    0x000458de b 0x454ea                                         |     goto label_12;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x46964 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00046964 ()                                      | void fcn_00046964 (arithmetic x, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, int16_t arg_12ch, int16_t arg_370h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_40h;
                                                                 |     int32_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h_2;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int32_t var_7ch_2;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_f0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00046964 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00046968 mov r6, r2                                        |     r6 = r2;
    0x0004696a sub sp, 0xf4                                      |     
    0x0004696c ldr.w r2, [pc, 0x890]                             |     r2 = *(0x00047200);
    0x00046970 mov r4, r0                                        |     r4 = r0;
    0x00046972 mov r8, r3                                        |     r8 = r3;
    0x00046974 ldr r0, [sp, 0x118]                               |     r0 = *(x);
    0x00046976 mov.w fp, 8                                       |     
    0x0004697a ldr.w r3, [pc, 0x888]                             |     
    0x0004697e add r2, pc                                        |     r2 += pc;
    0x00046980 strd r0, r1, [sp, 8]                              |     __asm ("strd r0, r1, [var_8h]");
    0x00046984 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00046986 movs r2, 0                                        |     r2 = 0;
    0x00046988 ldr r3, [r3]                                      |     r3 = *(0x47206);
    0x0004698a str r3, [sp, 0xec]                                |     var_ech = r3;
    0x0004698c mov.w r3, 0                                       |     r3 = 0;
    0x00046990 str r2, [sp, 0x68]                                |     var_68h = r2;
    0x00046992 ldr r2, [sp, 0x124]                               |     r2 = *(arg_124h);
    0x00046994 ldrb.w r3, [r4, 0x2e]                             |     r3 = *((r4 + 0x2e));
    0x00046998 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0004699a ldr r2, [sp, 0x128]                               |     r2 = *(arg_128h);
    0x0004699c str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0004699e ldr r2, [sp, 0x12c]                               |     r2 = *(arg_12ch);
    0x000469a0 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x000469a2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000469a4 bne.w 0x46b1c                                     |         goto label_9;
                                                                 |     }
    0x000469a8 ldrb.w r3, [r4, 0x2b]                             |     r3 = *((r4 + 0x2b));
                                                                 |     if (r3 == 0) {
    0x000469ac cbnz r3, 0x469c4                                  |         
    0x000469ae ldr r0, [r4, 4]                                   |         r0 = *((r4 + 4));
    0x000469b0 movs r2, 1                                        |         r2 = 1;
    0x000469b2 movs r3, 0xa                                      |         r3 = 0xa;
    0x000469b4 mov r1, r2                                        |         r1 = r2;
    0x000469b6 ldr r5, [r0]                                      |         r5 = *(r0);
    0x000469b8 ldr r5, [r5, 0x38]                                |         r5 = *((r5 + 0x38));
    0x000469ba blx r5                                            |         r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000469bc mov fp, r0                                        |         
    0x000469be cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000469c0 bne.w 0x46ae4                                     |             goto label_4;
                                                                 |         }
                                                                 |     }
    0x000469c4 mov.w sl, 1                                       |     sl = 1;
    0x000469c8 strb.w sl, [r4, 0x2d]                             |     *((r4 + 0x2d)) = sl;
    0x000469cc cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000469ce bne.w 0x46b72                                     |         goto label_36;
                                                                 |     }
                                                                 | label_3:
    0x000469d2 add r1, sp, 0x68                                  |     r1 += var_68h;
    0x000469d4 mov r0, r4                                        |     r0 = r4;
    0x000469d6 bl 0x3cf48                                        |     fcn_0003cf48 (r0, r1);
    0x000469da ldr r5, [sp, 0x68]                                |     r5 = var_68h;
    0x000469dc mov fp, r0                                        |     
    0x000469de cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000469e0 beq 0x46ae0                                       |         goto label_37;
                                                                 |     }
    0x000469e2 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x000469e4 ldr r3, [r0]                                      |     r3 = *(r0);
    0x000469e6 ldr r2, [r3]                                      |     r2 = *(r3);
    0x000469e8 cmp r2, 2                                         |     
                                                                 |     if (r2 > 2) {
    0x000469ea ble 0x469f8                                       |         
    0x000469ec movs r2, 0                                        |         r2 = 0;
    0x000469ee str r2, [sp]                                      |         *(sp) = r2;
    0x000469f0 movs r2, 0                                        |         r2 = 0;
    0x000469f2 ldr r1, [r3, 0x48]                                |         r1 = *((r3 + 0x48));
    0x000469f4 movs r3, 0                                        |         r3 = 0;
    0x000469f6 blx r1                                            |         uint32_t (*r1)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                 |     }
    0x000469f8 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x000469fc bne.w 0x46c08                                     |         goto label_38;
                                                                 |     }
                                                                 | label_0:
    0x00046a00 ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x00046a02 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00046a04 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00046a06 beq.w 0x46c0e                                     |         goto label_39;
                                                                 |     }
    0x00046a0a ldrh.w r3, [r4, 0x42]                             |     r3 = *((r4 + 0x42));
    0x00046a0e and r2, r3, 0xfe00                                |     r2 = r3 & 0xfe00;
    0x00046a12 lsls r3, r3, 0x10                                 |     r3 <<= 0x10;
    0x00046a14 and r3, r3, 0x10000                               |     r3 &= 0x10000;
    0x00046a18 orrs r3, r2                                       |     r3 |= r2;
    0x00046a1a ldr r2, [sp, 0x120]                               |     r2 = *(arg_120h);
    0x00046a1c str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00046a1e cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00046a20 bne.w 0x46b9a                                     |         goto label_40;
                                                                 |     }
    0x00046a24 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00046a26 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00046a28 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00046a2a ldr r3, [r2, 0x60]                                |     r3 = *((r2 + 0x60));
    0x00046a2c str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00046a2e cmp r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00046a30 bls.w 0x46c7c                                     |         goto label_41;
                                                                 |     }
    0x00046a34 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x00046a36 movs r5, 1                                        |     r5 = 1;
    0x00046a38 str r6, [sp, 0x24]                                |     var_24h = r6;
    0x00046a3a add.w r7, r2, 0x68                                |     r7 = r2 + 0x68;
    0x00046a3e mov.w fp, 0                                       |     
    0x00046a42 mov sb, r4                                        |     sb = r4;
    0x00046a44 mov r6, r1                                        |     r6 = r1;
    0x00046a46 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00046a48 str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch_2]");
                                                                 |     do {
    0x00046a4c ldr r4, [r7]                                      |         r4 = *(r7);
    0x00046a4e cmp r4, r6                                        |         
                                                                 |         if (r4 <= r6) {
    0x00046a50 blo.w 0x46bc6                                     |             goto label_42;
                                                                 |         }
                                                                 | label_6:
    0x00046a54 adds r5, 1                                        |         r5++;
    0x00046a56 adds r7, 4                                        |         r7 += 4;
    0x00046a58 cmp r5, 5                                         |         
    0x00046a5a bne 0x46a4c                                       |         
                                                                 |     } while (r5 != 5);
    0x00046a5c ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00046a5e mov r2, r6                                        |     r2 = r6;
    0x00046a60 ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch_2;
    0x00046a64 mov r4, sb                                        |     r4 = sb;
    0x00046a66 str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00046a68 ldr r3, [r3, 0x60]                                |     r3 = *((r3 + 0x60));
    0x00046a6a ldr r6, [sp, 0x24]                                |     r6 = var_24h;
    0x00046a6c cmp r3, r2                                        |     
    0x00046a6e itt hs                                            |     
                                                                 |     if (r3 < r2) {
    0x00046a70 movhs r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x00046a72 strhs r3, [sp, 0x1c]                              |         var_1ch_2 = r3;
                                                                 |     }
                                                                 |     if (r3 <= r2) {
    0x00046a74 blo.w 0x46c88                                     |         goto label_43;
                                                                 |     }
                                                                 | label_23:
    0x00046a78 cmp.w fp, 5                                       |     
                                                                 |     if (fp == 5) {
    0x00046a7c beq.w 0x46c80                                     |         goto label_13;
                                                                 |     }
    0x00046a80 clz r5, fp                                        |     r5 &= fp;
    0x00046a84 lsrs r5, r5, 5                                    |     r5 >>= 5;
    0x00046a86 cmp r6, 0                                         |     
    0x00046a88 ite eq                                            |     
                                                                 |     if (r6 != 0) {
    0x00046a8a moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x00046a8c andne r3, r5, 1                                   |         r3 = r5 & 1;
                                                                 |     }
    0x00046a90 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00046a92 beq.w 0x46d40                                     |         goto label_26;
                                                                 |     }
                                                                 | label_11:
    0x00046a96 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00046a98 ldr r2, [r3, 0x60]                                |     r2 = *((r3 + 0x60));
    0x00046a9a ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x00046a9c cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00046a9e bhs.w 0x46c30                                     |         goto label_44;
                                                                 |     }
    0x00046aa2 mov.w sl, 1                                       |     sl = 1;
    0x00046aa6 mov.w fp, 5                                       |     
    0x00046aaa ldr r0, [sp, 0x1c]                                |     r0 = var_1ch_2;
    0x00046aac blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_8:
    0x00046ab0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
                                                                 |     if (r2 != 0) {
    0x00046ab2 cbz r2, 0x46ab8                                   |         
    0x00046ab4 ldr r3, [r4, 0x44]                                |         r3 = *((r4 + 0x44));
    0x00046ab6 str r3, [r2]                                      |         *(r2) = r3;
                                                                 |     }
    0x00046ab8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
                                                                 |     if (r3 != 0) {
    0x00046aba cbz r3, 0x46ac6                                   |         
    0x00046abc ldr r3, [r4, 0x20]                                |         r3 = *((r4 + 0x20));
    0x00046abe ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00046ac0 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00046ac2 ldr r3, [r3, 0x60]                                |         r3 = *((r3 + 0x60));
    0x00046ac4 str r3, [r2]                                      |         *(r2) = r3;
                                                                 |     }
                                                                 | label_10:
    0x00046ac6 ldr r5, [sp, 0x68]                                |     r5 = var_68h;
                                                                 |     if (r5 != 0) {
                                                                 | label_5:
    0x00046ac8 cbz r5, 0x46ad6                                   |         
                                                                 | label_7:
    0x00046aca movs r2, 0x30                                     |         r2 = 0x30;
    0x00046acc movs r1, 0                                        |         r1 = 0;
    0x00046ace add.w r0, r4, 0x34                                |         r0 = r4 + 0x34;
    0x00046ad2 blx 0x97d4                                        |         fcn_000097d4 ();
                                                                 |     }
    0x00046ad6 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x00046ada cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00046adc beq 0x46b60                                       |         goto label_45;
                                                                 |     }
    0x00046ade b 0x46b42                                         |     goto label_46;
                                                                 | label_37:
    0x00046ae0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00046ae2 beq 0x46a00                                       |         goto label_0;
                                                                 |     }
                                                                 | label_4:
    0x00046ae4 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
                                                                 |     if (r3 != 0) {
    0x00046ae8 cbnz r3, 0x46b3e                                  |         goto label_47;
                                                                 |     }
    0x00046aea ldrb.w r2, [r4, 0x2d]                             |     r2 = *((r4 + 0x2d));
                                                                 |     if (r2 == 0) {
    0x00046aee cbz r2, 0x46b1c                                   |         goto label_9;
                                                                 |     }
    0x00046af0 ldrb.w r2, [r4, 0x2b]                             |     r2 = *((r4 + 0x2b));
    0x00046af4 mov.w sl, 1                                       |     sl = 1;
    0x00046af8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00046afa bne.w 0x46c24                                     |         goto label_48;
                                                                 |     }
                                                                 | label_1:
    0x00046afe ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00046b00 movs r2, 1                                        |     r2 = 1;
    0x00046b02 mov r1, r2                                        |     r1 = r2;
    0x00046b04 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00046b06 ldr r5, [r3, 0x38]                                |     r5 = *((r3 + 0x38));
    0x00046b08 movs r3, 9                                        |     r3 = 9;
    0x00046b0a blx r5                                            |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 | label_2:
    0x00046b0c movs r3, 0                                        |     r3 = 0;
    0x00046b0e strb.w r3, [r4, 0x2d]                             |     *((r4 + 0x2d)) = r3;
                                                                 |     do {
    0x00046b12 cmp.w sl, 0                                       |         
    0x00046b16 it eq                                             |         
                                                                 |         if (sl != 0) {
    0x00046b18 moveq fp, 5                                       |             
                                                                 |         }
                                                                 | label_9:
    0x00046b1c ldr.w r2, [pc, 0x6e8]                             |         
    0x00046b20 ldr.w r3, [pc, 0x6e0]                             |         r3 = *(0x47204);
    0x00046b24 add r2, pc                                        |         r2 = 0x8dd30;
    0x00046b26 ldr r3, [r2, r3]                                  |         r3 = *(0x8dd30);
    0x00046b28 ldr r2, [r3]                                      |         r2 = *(0x8dd30);
    0x00046b2a ldr r3, [sp, 0xec]                                |         r3 = var_ech;
    0x00046b2c eors r2, r3                                       |         r2 ^= r3;
    0x00046b2e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00046b32 bne.w 0x471fa                                     |             goto label_49;
                                                                 |         }
    0x00046b36 mov r0, fp                                        |         r0 = fp;
    0x00046b38 add sp, 0xf4                                      |         
    0x00046b3a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_47:
    0x00046b3e mov.w sl, 1                                       |         sl = 1;
                                                                 | label_46:
    0x00046b42 ldrb.w r1, [r4, 0x2b]                             |         r1 = *((r4 + 0x2b));
                                                                 |         if (r1 == 0) {
    0x00046b46 cbnz r1, 0x46b54                                  |             
    0x00046b48 ldr r0, [r4, 4]                                   |             r0 = *((r4 + 4));
    0x00046b4a movs r3, 9                                        |             r3 = 9;
    0x00046b4c movs r2, 1                                        |             r2 = 1;
    0x00046b4e ldr r5, [r0]                                      |             r5 = *(r0);
    0x00046b50 ldr r5, [r5, 0x38]                                |             r5 = *((r5 + 0x38));
    0x00046b52 blx r5                                            |             uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
                                                                 |         }
    0x00046b54 movs r3, 0                                        |         r3 = 0;
    0x00046b56 strb.w r3, [r4, 0x2c]                             |         *((r4 + 0x2c)) = r3;
    0x00046b5a str r3, [r4, 0x68]                                |         *((r4 + 0x68)) = r3;
    0x00046b5c strb.w r3, [r4, 0x2f]                             |         *((r4 + 0x2f)) = r3;
                                                                 | label_45:
    0x00046b60 ldrb.w r3, [r4, 0x2d]                             |         r3 = *((r4 + 0x2d));
    0x00046b64 cmp r3, 0                                         |         
    0x00046b66 beq 0x46b12                                       |         
                                                                 |     } while (r3 == 0);
    0x00046b68 ldrb.w r3, [r4, 0x2b]                             |     r3 = *((r4 + 0x2b));
    0x00046b6c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00046b6e beq 0x46afe                                       |         goto label_1;
                                                                 |     }
    0x00046b70 b 0x46b0c                                         |     goto label_2;
                                                                 | label_36:
    0x00046b72 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00046b74 movs r3, 0                                        |     r3 = 0;
    0x00046b76 mov r1, r8                                        |     r1 = r8;
    0x00046b78 mov r0, r4                                        |     r0 = r4;
    0x00046b7a str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00046b7e bl 0x1288c                                        |     r0 = fcn_0001288c (r0, r1, r2, r3, r4);
    0x00046b82 mov fp, r0                                        |     
                                                                 |     if (r0 == 0) {
    0x00046b84 cbnz r0, 0x46b8c                                  |         
    0x00046b86 strb.w sl, [r4, 0x2c]                             |         *((r4 + 0x2c)) = sl;
    0x00046b8a b 0x469d2                                         |         goto label_3;
                                                                 |     }
    0x00046b8c cmp r0, 5                                         |     
                                                                 |     if (r0 != 5) {
    0x00046b8e bne 0x46ae4                                       |         goto label_4;
                                                                 |     }
    0x00046b90 mov.w r8, 0                                       |     r8 = 0;
    0x00046b94 mov sl, r8                                        |     sl = r8;
    0x00046b96 mov r6, r8                                        |     r6 = r8;
    0x00046b98 b 0x469d2                                         |     goto label_3;
                                                                 | label_40:
    0x00046b9a blx 0xa230                                        |     fcn_0000a230 ();
    0x00046b9e ldr.w r2, [pc, 0x66c]                             |     r2 = *(0x0004720c);
    0x00046ba2 adds r0, 0x14                                     |     r0 += 0x14;
    0x00046ba4 ldr.w r1, [pc, 0x668]                             |     r1 = *(0x00047210);
    0x00046ba8 movw r3, 0x15f                                    |     
    0x00046bac str r0, [sp]                                      |     *(sp) = r0;
    0x00046bae movt r3, 1                                        |     r3 = 0x1015f;
    0x00046bb2 add r2, pc                                        |     r2 += pc;
    0x00046bb4 movs r0, 0xb                                      |     r0 = 0xb;
    0x00046bb6 add r1, pc                                        |     r1 += pc;
    0x00046bb8 mov.w sl, 1                                       |     sl = 1;
    0x00046bbc mov.w fp, 0xb                                     |     
    0x00046bc0 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00046bc4 b 0x46ac8                                         |     goto label_5;
                                                                 | label_42:
    0x00046bc6 movs r3, 1                                        |     r3 = 1;
    0x00046bc8 add.w sl, r5, 3                                   |     sl = r5 + 3;
    0x00046bcc str r3, [sp]                                      |     *(sp) = r3;
    0x00046bce mov r1, r8                                        |     r1 = r8;
    0x00046bd0 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00046bd2 mov r3, sl                                        |     r3 = sl;
    0x00046bd4 mov r0, sb                                        |     r0 = sb;
    0x00046bd6 bl 0x1288c                                        |     r0 = fcn_0001288c (r0, r1, r2, r3, r4);
    0x00046bda mov fp, r0                                        |     
    0x00046bdc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00046bde bne 0x46c6e                                       |         goto label_50;
                                                                 |     }
    0x00046be0 cmp r5, 1                                         |     
    0x00046be2 ite eq                                            |     
                                                                 |     if (r5 != 1) {
    0x00046be4 moveq r2, r6                                      |         r2 = r6;
                                                                 |     }
                                                                 |     if (r5 == 1) {
    0x00046be6 movne r2, -1                                      |         r2 = -1;
                                                                 |     }
    0x00046bea str r2, [r7]                                      |     *(r7) = r2;
    0x00046bec ldrb.w r2, [sb, 0x2b]                             |     r2 = *((sb + 0x2b));
    0x00046bf0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00046bf2 bne.w 0x46a54                                     |         goto label_6;
                                                                 |     }
    0x00046bf6 ldr.w r0, [sb, 4]                                 |     r0 = *((sb + 4));
    0x00046bfa mov r1, sl                                        |     r1 = sl;
    0x00046bfc movs r3, 9                                        |     r3 = 9;
    0x00046bfe movs r2, 1                                        |     r2 = 1;
    0x00046c00 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00046c02 ldr r4, [r4, 0x38]                                |     r4 = *((r4 + 0x38));
    0x00046c04 blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00046c06 b 0x46a54                                         |     goto label_6;
                                                                 | label_38:
    0x00046c08 mov.w sl, 1                                       |     sl = 1;
    0x00046c0c b 0x46aca                                         |     goto label_7;
                                                                 | label_39:
    0x00046c0e ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00046c10 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00046c12 ldr r2, [r3, 0x60]                                |     r2 = *((r3 + 0x60));
                                                                 |     if (r6 != 0) {
    0x00046c14 cbnz r6, 0x46c2a                                  |         goto label_51;
                                                                 |     }
    0x00046c16 str r6, [sp, 0x1c]                                |     var_1ch_2 = r6;
                                                                 |     do {
                                                                 | label_12:
    0x00046c18 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch_2;
    0x00046c1a mov.w fp, 0                                       |         
    0x00046c1e blx 0x9c24                                        |         fcn_00009c24 ();
    0x00046c22 b 0x46ab0                                         |         goto label_8;
                                                                 | label_48:
    0x00046c24 strb.w r3, [r4, 0x2d]                             |         *((r4 + 0x2d)) = r3;
    0x00046c28 b 0x46b1c                                         |         goto label_9;
                                                                 | label_51:
    0x00046c2a ldr r3, [r3, 0x60]                                |         r3 = *((r3 + 0x60));
    0x00046c2c ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00046c2e str r3, [sp, 0x1c]                                |         var_1ch_2 = r3;
                                                                 | label_44:
    0x00046c30 cmp r6, 1                                         |         
    0x00046c32 ble 0x46c18                                       |         
                                                                 |     } while (r6 <= 1);
    0x00046c34 add r1, sp, 0x78                                  |     r1 += var_78h;
    0x00046c36 movs r0, 4                                        |     r0 = 4;
    0x00046c38 blx 0xa0d8                                        |     fcn_0000a0d8 ();
    0x00046c3c movs r3, 4                                        |     r3 = 4;
    0x00046c3e ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00046c40 mov r1, r8                                        |     r1 = r8;
    0x00046c42 mov r0, r4                                        |     r0 = r4;
    0x00046c44 str r3, [sp]                                      |     *(sp) = r3;
    0x00046c46 bl 0x1288c                                        |     r0 = fcn_0001288c (r0, r1, r2, r3, r4);
    0x00046c4a mov fp, r0                                        |     
    0x00046c4c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00046c4e beq.w 0x4708e                                     |         goto label_52;
                                                                 |     }
    0x00046c52 sub.w r5, r0, 5                                   |     r5 = r0 - 5;
    0x00046c56 mov.w sl, 1                                       |     sl = 1;
    0x00046c5a clz r5, r5                                        |     r5 &= r5;
    0x00046c5e lsrs r5, r5, 5                                    |     r5 >>= 5;
                                                                 | label_14:
    0x00046c60 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch_2;
    0x00046c62 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00046c66 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00046c68 beq.w 0x46ac6                                     |         goto label_10;
                                                                 |     }
    0x00046c6c b 0x46ab0                                         |     goto label_8;
                                                                 | label_50:
    0x00046c6e cmp r0, 5                                         |     
                                                                 |     if (r0 != 5) {
    0x00046c70 bne.w 0x47168                                     |         goto label_53;
                                                                 |     }
    0x00046c74 mov r6, r4                                        |     r6 = r4;
    0x00046c76 mov.w r8, 0                                       |     r8 = 0;
    0x00046c7a b 0x46a54                                         |     goto label_6;
                                                                 | label_41:
    0x00046c7c movs r3, 0                                        |     r3 = 0;
    0x00046c7e str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
                                                                 | label_13:
    0x00046c80 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00046c82 bne.w 0x46a96                                     |         goto label_11;
                                                                 |     }
    0x00046c86 b 0x46c18                                         |     goto label_12;
                                                                 | label_43:
    0x00046c88 ldr.w r2, [sb, 0x44]                              |     r2 = *((sb + 0x44));
    0x00046c8c movs r1, 0                                        |     r1 = 0;
    0x00046c8e ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00046c90 str r2, [sp, 0x64]                                |     var_64h = r2;
    0x00046c92 ldr.w sb, [r3, 0x60]                              |     sb = *((r3 + 0x60));
    0x00046c96 add.w r3, r2, 0x21                                |     r3 = r2 + 0x21;
    0x00046c9a lsrs r0, r3, 0xc                                  |     r0 = r3 >> 0xc;
    0x00046c9c adds r2, 0xe                                      |     r2 += 0xe;
    0x00046c9e add.w r3, r0, r0, lsl 2                           |     r3 = r0 + (r0 << 2);
    0x00046ca2 str r0, [sp, 0x50]                                |     var_50h = r0;
    0x00046ca4 adds r5, r0, 1                                    |     r5 = r0 + 1;
    0x00046ca6 add.w r2, r2, r3, lsl 1                           |     r2 += (r3 << 1);
    0x00046caa lsls r7, r2, 1                                    |     r7 = r2 << 1;
    0x00046cac mov r0, r7                                        |     r0 = r7;
    0x00046cae blx 0xa1f8                                        |     fcn_0000a1f8 ();
    0x00046cb2 str r0, [sp, 0x1c]                                |     var_1ch_2 = r0;
    0x00046cb4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00046cb6 beq.w 0x470f0                                     |         goto label_54;
                                                                 |     }
    0x00046cba mov r2, r7                                        |     r2 = r7;
    0x00046cbc movs r1, 0                                        |     r1 = 0;
    0x00046cbe blx 0x97d4                                        |     fcn_000097d4 ();
    0x00046cc2 ldr r0, [sp, 0x64]                                |     r0 = var_64h;
    0x00046cc4 movs r1, 0                                        |     r1 = 0;
    0x00046cc6 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x00046cc8 cmp.w r0, 0x1000                                  |     
    0x00046ccc it hs                                             |     
                                                                 |     if (r0 < 0x1000) {
    0x00046cce movhs r0, 0x1000                                  |         r0 = 0x1000;
                                                                 |     }
    0x00046cd2 str r5, [r3, 4]                                   |     *((r3 + 4)) = r5;
    0x00046cd4 lsls r0, r0, 1                                    |     r0 <<= 1;
    0x00046cd6 blx 0xa1f8                                        |     r0 = fcn_0000a1f8 ();
    0x00046cda mov r7, r0                                        |     r7 = r0;
    0x00046cdc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00046cde beq.w 0x470dc                                     |         goto label_55;
                                                                 |     }
    0x00046ce2 add.w r2, sb, 0x22                                |     r2 = sb + 0x22;
    0x00046ce6 lsrs r2, r2, 0xc                                  |     r2 >>= 0xc;
    0x00046ce8 cmp r5, r2                                        |     
                                                                 |     if (r5 <= r2) {
    0x00046cea ble.w 0x46e6e                                     |         goto label_56;
                                                                 |     }
    0x00046cee ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x00046cf0 add.w r3, r2, r2, lsl 2                           |     r3 = r2 + (r2 << 2);
    0x00046cf4 strd sl, r6, [sp, 0x40]                           |     __asm ("strd sl, r6, [var_44h]");
    0x00046cf8 add.w sb, sp, 0x6c                                |     sb += var_6ch;
    0x00046cfc str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00046cfe str.w r8, [sp, 0x48]                              |     __asm ("str.w r8, [var_48h]");
    0x00046d02 add.w r3, r1, r3, lsl 2                           |     r3 = r1 + (r3 << 2);
    0x00046d06 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00046d08 add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00046d0a str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00046d0c add r3, sp, 0x70                                  |     r3 += var_70h;
    0x00046d0e mov sl, r3                                        |     sl = r3;
                                                                 | label_17:
    0x00046d10 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00046d12 mov r0, r4                                        |     r0 = r4;
    0x00046d14 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x00046d16 bl 0x18c88                                        |     r0 = fcn_00018c88 (r0, r1, r2);
    0x00046d1a mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 == 0) {
    0x00046d1c cbz r0, 0x46d4c                                   |         goto label_57;
                                                                 |     }
    0x00046d1e mov fp, r0                                        |     
    0x00046d20 mov r0, r7                                        |     r0 = r7;
    0x00046d22 ldr.w sl, [sp, 0x40]                              |     sl = var_40h_2;
    0x00046d26 ldrd r6, r8, [sp, 0x44]                           |     __asm ("ldrd r6, r8, [var_44h]");
    0x00046d2a blx 0x9c24                                        |     fcn_00009c24 ();
    0x00046d2e ldr r0, [sp, 0x1c]                                |     r0 = var_1ch_2;
    0x00046d30 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00046d34 movs r3, 0                                        |     r3 = 0;
    0x00046d36 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
                                                                 | label_19:
    0x00046d38 cmp.w fp, 5                                       |     
                                                                 |     if (fp == 5) {
    0x00046d3c beq 0x46c80                                       |         goto label_13;
                                                                 |     }
                                                                 | label_25:
    0x00046d3e movs r5, 0                                        |     r5 = 0;
                                                                 | label_26:
    0x00046d40 cmp.w fp, 0                                       |     
    0x00046d44 it ne                                             |     
                                                                 |     if (fp == 0) {
    0x00046d46 orrne sl, sl, 1                                   |         sl |= 1;
                                                                 |     }
    0x00046d4a b 0x46c60                                         |     goto label_14;
                                                                 | label_57:
    0x00046d4c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00046d4e ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x00046d50 ldrd r8, r2, [sp, 0x7c]                           |     __asm ("ldrd r8, r2, [var_7ch]");
    0x00046d54 cmp r3, r1                                        |     
    0x00046d56 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x00046d58 itete ne                                          |     
                                                                 |     if (r3 == r1) {
    0x00046d5a ldrne r3, [sp, 0x78]                              |         r3 = var_78h;
                                                                 |     }
                                                                 |     if (r3 != r1) {
    0x00046d5c ldreq r3, [sp, 0x64]                              |         r3 = var_64h;
                                                                 |     }
                                                                 |     if (r3 == r1) {
    0x00046d5e subne r3, r3, r8                                  |         r3 -= r8;
                                                                 |     }
                                                                 |     if (r3 == r1) {
    0x00046d62 sub.w fp, r3, r2                                  |         
                                                                 |     }
    0x00046d66 it ne                                             |     
                                                                 |     if (r3 != r1) {
    0x00046d68 asrne fp, r3, 2                                   |         __asm ("asrne fp, r3, 2");
                                                                 |     }
    0x00046d6c ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00046d6e cmp.w fp, 0                                       |     
    0x00046d72 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00046d76 lsl.w r3, r3, 2                                   |     r3 <<= 2;
    0x00046d7a add.w r3, r3, 8                                   |     r3 += 8;
    0x00046d7e add.w r3, r3, r2, lsl 1                           |     r3 += (r2 << 1);
    0x00046d82 add.w r2, r2, 1                                   |     r2++;
    0x00046d86 str r2, [sp, 0x58]                                |     var_58h = r2;
    0x00046d88 add r3, r1                                        |     r3 += r1;
    0x00046d8a str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 |     if (fp <= 0) {
    0x00046d8c ble.w 0x47100                                     |         goto label_58;
                                                                 |     }
    0x00046d90 subs r2, r3, 2                                    |     r2 = r3 - 2;
    0x00046d92 movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x00046d94 strh r3, [r2, 2]!                                 |         *((r2 += 2)) = r3;
    0x00046d98 adds r3, 1                                        |         r3++;
    0x00046d9a cmp r3, fp                                        |         
    0x00046d9c bne 0x46d94                                       |         
                                                                 |     } while (r3 != fp);
    0x00046d9e ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00046da0 add r0, sp, 0x84                                  |     r0 += var_84h;
    0x00046da2 movs r2, 0x68                                     |     r2 = 0x68;
    0x00046da4 movs r1, 0                                        |     r1 = 0;
    0x00046da6 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00046da8 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00046daa blx 0x97d4                                        |     fcn_000097d4 ();
    0x00046dae ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00046db0 str.w fp, [sp, 0x24]                              |     __asm ("str.w fp, [var_24h]");
    0x00046db4 mov fp, r6                                        |     
    0x00046db6 mov r6, sb                                        |     r6 = sb;
    0x00046db8 str r4, [sp, 0x5c]                                |     var_5ch = r4;
    0x00046dba mov sb, r3                                        |     sb = r3;
                                                                 | label_15:
    0x00046dbc movs r3, 1                                        |     r3 = 1;
    0x00046dbe mov r4, sb                                        |     r4 = sb;
    0x00046dc0 ands.w r5, fp, r3                                 |     r5 = fp & r3;
    0x00046dc4 strd r3, sb, [sp, 0x6c]                           |     __asm ("strd r3, sb, [var_70h]");
                                                                 |     if (r5 == fp) {
    0x00046dc8 beq 0x46e60                                       |         goto label_59;
                                                                 |     }
    0x00046dca ldr r4, [sp, 0x28]                                |     r4 = var_28h;
    0x00046dcc movs r5, 0                                        |     r5 = 0;
                                                                 |     do {
    0x00046dce mov r3, sl                                        |         r3 = sl;
    0x00046dd0 strd r6, r7, [sp]                                 |         __asm ("strd r6, r7, [sp]");
    0x00046dd4 adds r5, 1                                        |         r5++;
    0x00046dd6 ldrd r2, r1, [r4]                                 |         __asm ("ldrd r2, r1, [r4]");
    0x00046dda mov r0, r8                                        |         r0 = r8;
    0x00046ddc adds r4, 8                                        |         r4 += 8;
    0x00046dde bl 0xd640                                         |         fcn_0000d640 (r0, r1, r2, r3, r4, r5);
    0x00046de2 asr.w r3, fp, r5                                  |         r3 = fp >> r5;
    0x00046de6 lsls r1, r3, 0x1f                                 |         r1 = r3 << 0x1f;
    0x00046de8 bmi 0x46dce                                       |         
                                                                 |     } while (r1 < r3);
    0x00046dea ldrd r0, r4, [sp, 0x6c]                           |     __asm ("ldrd r0, r4, [var_70h]");
                                                                 | label_18:
    0x00046dee add r3, sp, 0xf0                                  |     r3 += var_f0h;
    0x00046df0 add.w fp, fp, 1                                   |     
    0x00046df4 add.w r2, r3, r5, lsl 3                           |     r2 = r3 + (r5 << 3);
    0x00046df8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00046dfa add.w sb, sb, 2                                   |     sb += 2;
    0x00046dfe strd r0, r4, [r2, -0x6c]                          |     __asm ("strd r0, r4, [var_84h]");
    0x00046e02 cmp fp, r3                                        |     
                                                                 |     if (fp != r3) {
    0x00046e04 bne 0x46dbc                                       |         goto label_15;
                                                                 |     }
    0x00046e06 adds r5, 1                                        |     r5++;
    0x00046e08 ldr r4, [sp, 0x5c]                                |     r4 = var_5ch;
    0x00046e0a cmp r5, 0xc                                       |     
    0x00046e0c mov fp, r3                                        |     
    0x00046e0e mov sb, r6                                        |     sb = r6;
                                                                 |     if (r5 > 0xc) {
    0x00046e10 bhi 0x46e3e                                       |         goto label_60;
                                                                 |     }
                                                                 | label_27:
    0x00046e12 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00046e14 add.w r6, r3, r5, lsl 3                           |     r6 = r3 + (r5 << 3);
    0x00046e18 b 0x46e22                                         |     
                                                                 |     while (r2 >= r3) {
                                                                 | label_16:
    0x00046e1a adds r5, 1                                        |         r5++;
    0x00046e1c adds r6, 8                                        |         r6 += 8;
    0x00046e1e cmp r5, 0xd                                       |         
                                                                 |         if (r5 == 0xd) {
    0x00046e20 beq 0x46e3c                                       |             goto label_61;
                                                                 |         }
    0x00046e22 asr.w r3, fp, r5                                  |         r3 = fp >> r5;
    0x00046e26 lsls r2, r3, 0x1f                                 |         r2 = r3 << 0x1f;
    0x00046e28 bpl 0x46e1a                                       |         
                                                                 |     }
    0x00046e2a strd sb, r7, [sp]                                 |     __asm ("strd sb, r7, [sp]");
    0x00046e2e mov r3, sl                                        |     r3 = sl;
    0x00046e30 ldrd r2, r1, [r6]                                 |     __asm ("ldrd r2, r1, [r6]");
    0x00046e34 mov r0, r8                                        |     r0 = r8;
    0x00046e36 bl 0xd640                                         |     fcn_0000d640 (r0, r1, r2, r3, r4, r5);
    0x00046e3a b 0x46e1a                                         |     goto label_16;
                                                                 | label_61:
    0x00046e3c ldr r0, [sp, 0x6c]                                |     r0 = var_6ch;
                                                                 | label_60:
    0x00046e3e ldrd r3, r2, [sp, 0x54]                           |     __asm ("ldrd r3, r2, [var_54h]");
    0x00046e42 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x00046e44 strd r0, r2, [r3, 0x14]                           |     __asm ("strd r0, r2, [r3, 0x14]");
    0x00046e48 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x00046e4a strd r2, r8, [r3, 0xc]                            |     __asm ("strd r2, r8, [r3, 0xc]");
    0x00046e4e adds r3, 0x14                                     |     r3 += 0x14;
    0x00046e50 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00046e52 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00046e54 cmp r2, r1                                        |     
    0x00046e56 add.w r3, r2, 1                                   |     r3 = r2 + 1;
                                                                 |     if (r2 < r1) {
    0x00046e5a bge 0x46e64                                       |         
    0x00046e5c str r3, [sp, 0x34]                                |         var_34h = r3;
    0x00046e5e b 0x46d10                                         |         goto label_17;
                                                                 | label_59:
    0x00046e60 movs r0, 1                                        |         r0 = 1;
    0x00046e62 b 0x46dee                                         |         goto label_18;
                                                                 |     }
    0x00046e64 ldrd sl, r6, [sp, 0x40]                           |     __asm ("ldrd sl, r6, [var_44h]");
    0x00046e68 mov r0, r7                                        |     r0 = r7;
    0x00046e6a ldr.w r8, [sp, 0x48]                              |     r8 = var_48h;
                                                                 | label_56:
    0x00046e6e blx 0x9c24                                        |     fcn_00009c24 ();
    0x00046e72 movs r3, 1                                        |     r3 = 1;
    0x00046e74 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00046e76 str r3, [sp]                                      |     *(sp) = r3;
    0x00046e78 mov r1, r8                                        |     r1 = r8;
    0x00046e7a movs r3, 3                                        |     r3 = 3;
    0x00046e7c mov r0, r4                                        |     r0 = r4;
    0x00046e7e bl 0x1288c                                        |     r0 = fcn_0001288c (r0, r1, r2, r3, r4);
    0x00046e82 mov fp, r0                                        |     
    0x00046e84 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00046e86 bne.w 0x46d38                                     |         goto label_19;
                                                                 |     }
    0x00046e8a ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00046e8c ldr r3, [sp, 0x11c]                               |     r3 = *(arg_11ch);
    0x00046e8e ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00046e90 ldr r1, [r2, 0x60]                                |     r1 = *((r2 + 0x60));
    0x00046e92 ubfx r3, r3, 2, 2                                 |     r3 = (r3 >> 2) & ((1 << 2) - 1);
    0x00046e96 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00046e98 str r1, [sp, 0x24]                                |     var_24h = r1;
    0x00046e9a ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00046e9c str.w r1, [r2, 0x80]                              |     __asm ("str.w r1, [r2, 0x80]");
                                                                 |     if (r3 == 0) {
    0x00046ea0 cbz r3, 0x46ed6                                   |         goto label_62;
                                                                 |     }
    0x00046ea2 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00046ea4 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x00046ea6 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x00046ea8 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x00046eaa str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00046eac cbz r0, 0x46ed6                                   |     
                                                                 |     while (r0 != 0) {
                                                                 | label_22:
    0x00046eae ldr r0, [r4, 4]                                   |         r0 = *((r4 + 4));
    0x00046eb0 ldr r3, [r0]                                      |         r3 = *(r0);
    0x00046eb2 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00046eb4 beq.w 0x471f4                                     |             goto label_63;
                                                                 |         }
                                                                 | label_30:
    0x00046eb8 ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x00046eba movs r2, 0                                        |         r2 = 0;
    0x00046ebc movs r1, 0x25                                     |         r1 = 0x25;
    0x00046ebe blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00046ec0 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00046ec2 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00046ec4 beq.w 0x47062                                     |             goto label_31;
                                                                 |         }
                                                                 | label_28:
    0x00046ec8 mov fp, r3                                        |         
                                                                 | label_35:
    0x00046eca ldrb.w r3, [r4, 0x2b]                             |         r3 = *((r4 + 0x2b));
    0x00046ece cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00046ed0 beq.w 0x4707e                                     |             goto label_24;
                                                                 |         }
    0x00046ed4 b 0x46d38                                         |         goto label_19;
                                                                 | label_62:
    0x00046ed6 ldrd r2, r1, [sp, 0x2c]                           |         __asm ("ldrd r2, r1, [var_30h]");
    0x00046eda ldr r0, [r4, 4]                                   |         r0 = *((r4 + 4));
    0x00046edc umull r1, r2, r2, r1                              |         r1:r2 = r2 * r1;
    0x00046ee0 ldr r3, [r0]                                      |         r3 = *(r0);
    0x00046ee2 strd r1, r2, [sp, 0x70]                           |         __asm ("strd r1, r2, [var_70h]");
                                                                 |         if (r3 != 0) {
    0x00046ee6 cbz r3, 0x46ef2                                   |             
    0x00046ee8 ldr r3, [r3, 0x28]                                |             r3 = *((r3 + 0x28));
    0x00046eea movs r2, 0                                        |             r2 = 0;
    0x00046eec movs r1, 0x27                                     |             r1 = 0x27;
    0x00046eee blx r3                                            |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00046ef0 ldr r0, [r4, 4]                                   |             r0 = *((r4 + 4));
                                                                 |         }
    0x00046ef2 ldr r3, [r0]                                      |         r3 = *(r0);
    0x00046ef4 add r1, sp, 0x78                                  |         r1 += var_78h;
    0x00046ef6 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00046ef8 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00046efa str r0, [sp, 0x28]                                |         var_28h = r0;
    0x00046efc cmp r0, 0                                         |         
    0x00046efe bne 0x46eae                                       |         
                                                                 |     }
    0x00046f00 ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x00046f02 ldr r5, [sp, 0x70]                                |     r5 = var_70h;
    0x00046f04 ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x00046f06 ldr r0, [sp, 0x74]                                |     r0 = var_74h;
    0x00046f08 cmp r2, r5                                        |     
    0x00046f0a sbcs.w r3, r1, r0                                 |     __asm ("sbcs.w r3, r1, r0");
                                                                 |     if (r2 < r5) {
    0x00046f0e bge 0x46f3c                                       |         
    0x00046f10 ldr r3, [r4, 0x44]                                |         r3 = *((r4 + 0x44));
    0x00046f12 adds.w r2, r2, 0x10000                            |         r2 += 0x10000;
    0x00046f16 ldr r7, [sp, 0x30]                                |         r7 = var_30h;
    0x00046f18 adc r1, r1, 0                                     |         __asm ("adc r1, r1, 0");
    0x00046f1c umull r3, r7, r3, r7                              |         r3:r7 = r3 * r7;
    0x00046f20 adds r3, r3, r2                                   |         r3 += r2;
    0x00046f22 adc.w r7, r7, r1                                  |         __asm ("adc.w r7, r7, r1");
    0x00046f26 cmp r3, r5                                        |         
    0x00046f28 sbcs r7, r0                                       |         __asm ("sbcs r7, r0");
                                                                 |         if (r3 < r5) {
    0x00046f2a blt.w 0x47148                                     |             goto label_64;
                                                                 |         }
    0x00046f2e ldr r0, [r4, 4]                                   |         r0 = *((r4 + 4));
    0x00046f30 ldr r3, [r0]                                      |         r3 = *(r0);
                                                                 |         if (r3 == 0) {
    0x00046f32 cbz r3, 0x46f3c                                   |             goto label_65;
                                                                 |         }
    0x00046f34 ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x00046f36 add r2, sp, 0x70                                  |         r2 += var_70h;
    0x00046f38 movs r1, 5                                        |         r1 = 5;
    0x00046f3a blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                 |     }
                                                                 | label_65:
    0x00046f3c ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00046f3e movs r7, 0                                        |     r7 = 0;
    0x00046f40 str.w sl, [sp, 0x34]                              |     __asm ("str.w sl, [var_34h]");
    0x00046f44 str.w fp, [sp, 0x3c]                              |     __asm ("str.w fp, [var_3ch]");
    0x00046f48 adds r3, 0x18                                     |     r3 += 0x18;
    0x00046f4a str r3, [sp, 0x40]                                |     var_40h_2 = r3;
                                                                 | label_21:
    0x00046f4c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x00046f4e ldrd lr, r2, [r3]                                 |     __asm ("ldrd lr, r2, [r3]");
    0x00046f52 subs.w sb, r2, 1                                  |     sb = r2 - 1;
                                                                 |     if (sb < r2) {
    0x00046f56 bmi 0x47044                                       |         goto label_66;
                                                                 |     }
    0x00046f58 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x00046f5c mov.w r5, -1                                      |     r5 = -1;
    0x00046f60 mov sl, r4                                        |     sl = r4;
    0x00046f62 add.w ip, r3, r2, lsl 2                           |     
                                                                 | label_20:
    0x00046f66 ldr r3, [ip, -0xc]                                |     r3 = *((ip - 0xc));
    0x00046f6a ldr.w r4, [ip]                                    |     r4 = *(ip);
    0x00046f6e cmp r3, r4                                        |     
                                                                 |     if (r3 >= r4) {
    0x00046f70 bge 0x46fa8                                       |         goto label_67;
                                                                 |     }
    0x00046f72 ldr r2, [ip, -0x8]                                |     r2 = *((ip - 0x8));
    0x00046f76 ldr fp, [ip, -0x4]                                |     fp = *((ip - 0x4));
    0x00046f7a add.w r2, r2, r3, lsl 1                           |     r2 += (r3 << 1);
    0x00046f7e adds r3, 1                                        |     r3++;
    0x00046f80 b 0x46f90                                         |     
                                                                 |     while (lr >= r1) {
    0x00046f82 cmp r3, r4                                        |         
    0x00046f84 add.w r1, r3, 1                                   |         r1 = r3 + 1;
    0x00046f88 str r3, [ip, -0xc]                                |         *((ip - 0xc)) = r3;
                                                                 |         if (r3 == r4) {
    0x00046f8c beq 0x46fa8                                       |             goto label_67;
                                                                 |         }
    0x00046f8e mov r3, r1                                        |         r3 = r1;
    0x00046f90 ldrh r0, [r2], 2                                  |         r0 = *(r2);
                                                                 |         r2 += 2;
    0x00046f94 ldr.w r1, [fp, r0, lsl 2]                         |         offset_0 = r0 << 2;
                                                                 |         r1 = *((fp + offset_0));
    0x00046f98 cmp lr, r1                                        |         
    0x00046f9a bhs 0x46f82                                       |         
                                                                 |     }
    0x00046f9c cmp r1, r5                                        |     
                                                                 |     if (r1 < r5) {
    0x00046f9e bhs 0x46fa8                                       |         
    0x00046fa0 ldr.w r7, [ip, 4]                                 |         r7 = *((ip + 4));
    0x00046fa4 mov r5, r1                                        |         r5 = r1;
    0x00046fa6 add r7, r0                                        |         r7 += r0;
                                                                 |     }
                                                                 | label_67:
    0x00046fa8 add.w sb, sb, -1                                  |     sb += -1;
    0x00046fac sub.w ip, ip, 0x14                                |     
    0x00046fb0 cmp.w sb, -1                                      |     
                                                                 |     if (sb != -1) {
    0x00046fb4 bne 0x46f66                                       |         goto label_20;
                                                                 |     }
    0x00046fb6 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x00046fb8 mov r4, sl                                        |     r4 = sl;
    0x00046fba str r5, [r3]                                      |     *(r3) = r5;
    0x00046fbc adds r3, r5, 1                                    |     r3 = r5 + 1;
                                                                 |     if (r3 == r5) {
    0x00046fbe beq.w 0x47176                                     |         goto label_68;
                                                                 |     }
    0x00046fc2 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x00046fc4 ldr.w r2, [r3, 0x128]                             |     r2 = *((r3 + 0x128));
    0x00046fc8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00046fca bne 0x470b0                                       |         goto label_69;
                                                                 |     }
    0x00046fcc ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00046fce cmp r3, r7                                        |     
    0x00046fd0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00046fd2 ite lo                                            |     
                                                                 |     if (r3 >= r7) {
    0x00046fd4 movlo r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 < r7) {
    0x00046fd6 movhs r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00046fd8 cmp r3, r7                                        |     
    0x00046fda it lo                                             |     
                                                                 |     if (r3 >= r7) {
    0x00046fdc orrlo r2, r2, 1                                   |         r2 |= 1;
                                                                 |     }
    0x00046fe0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00046fe2 cmp r3, r5                                        |     
    0x00046fe4 it lo                                             |     
                                                                 |     if (r3 >= r5) {
    0x00046fe6 orrlo r2, r2, 1                                   |         r2 |= 1;
                                                                 |     }
    0x00046fea cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00046fec bne 0x46f4c                                       |         goto label_21;
                                                                 |     }
    0x00046fee ldr r3, [sp, 0x40]                                |     r3 = var_40h_2;
    0x00046ff0 subs r2, r7, 1                                    |     r2 = r7 - 1;
    0x00046ff2 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00046ff4 ldr.w fp, [sp, 0x30]                              |     fp = var_30h;
    0x00046ff8 ldr.w sl, [sp, 0x18]                              |     sl = var_18h;
    0x00046ffc umull r2, r1, r2, r3                              |     r2:r1 = r2 * r3;
    0x00047000 ldr.w ip, [r0]                                    |     ip = *(r0);
    0x00047004 adds r2, 0x38                                     |     r2 += 0x38;
    0x00047006 adc r1, r1, 0                                     |     __asm ("adc r1, r1, 0");
    0x0004700a strd r2, r1, [sp]                                 |     __asm ("strd r2, r1, [sp]");
    0x0004700e mov r2, fp                                        |     r2 = fp;
    0x00047010 ldr.w sb, [ip, 8]                                 |     sb = *((ip + 8));
    0x00047014 mov r1, sl                                        |     r1 = sl;
    0x00047016 blx sb                                            |     r0 = sb (r0, r1, r2, r3);
                                                                 |     if (r0 != 0) {
    0x00047018 cbnz r0, 0x47038                                  |         goto label_70;
                                                                 |     }
    0x0004701a ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x0004701c subs r5, 1                                        |     r5--;
    0x0004701e umull r5, lr, r5, fp                              |     r5:lr = r5 * fp;
    0x00047022 mov r2, fp                                        |     r2 = fp;
    0x00047024 mov r1, sl                                        |     r1 = sl;
    0x00047026 ldr.w ip, [r0]                                    |     ip = *(r0);
    0x0004702a strd r5, lr, [sp]                                 |     __asm ("strd r5, lr, [sp]");
    0x0004702e ldr.w r5, [ip, 0xc]                               |     r5 = *((ip + 0xc));
    0x00047032 blx r5                                            |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00047034 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00047036 beq 0x46f4c                                       |         goto label_21;
                                                                 |     }
                                                                 | label_70:
    0x00047038 ldr.w sl, [sp, 0x34]                              |     sl = var_34h;
    0x0004703c ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x00047040 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00047042 b 0x46eae                                         |     goto label_22;
                                                                 | label_66:
    0x00047044 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00047046 mov.w r3, -1                                      |     r3 = -1;
    0x0004704a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch_2;
    0x0004704c ldr.w sl, [sp, 0x34]                              |     sl = var_34h;
    0x00047050 ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x00047054 str r3, [r2]                                      |     *(r2) = r3;
    0x00047056 ldr r3, [r0]                                      |     r3 = *(r0);
                                                                 |     if (r3 != 0) {
    0x00047058 cbz r3, 0x47062                                   |         
    0x0004705a ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x0004705c movs r2, 0                                        |         r2 = 0;
    0x0004705e movs r1, 0x25                                     |         r1 = 0x25;
    0x00047060 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                 |     }
                                                                 | label_31:
    0x00047062 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00047064 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00047066 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00047068 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004706a cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x0004706c beq 0x47116                                       |         goto label_71;
                                                                 |     }
                                                                 | label_29:
    0x0004706e ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00047070 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00047072 str r2, [r3, 0x60]                                |     *((r3 + 0x60)) = r2;
    0x00047074 ldrb.w r3, [r4, 0x2b]                             |     r3 = *((r4 + 0x2b));
    0x00047078 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004707a bne.w 0x46c80                                     |         goto label_13;
                                                                 |     }
                                                                 | label_24:
    0x0004707e ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00047080 movs r3, 9                                        |     r3 = 9;
    0x00047082 movs r2, 1                                        |     r2 = 1;
    0x00047084 movs r1, 3                                        |     r1 = 3;
    0x00047086 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00047088 ldr r5, [r5, 0x38]                                |     r5 = *((r5 + 0x38));
    0x0004708a blx r5                                            |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004708c b 0x46a78                                         |     goto label_23;
                                                                 | label_52:
    0x0004708e cmp r6, 3                                         |     
    0x00047090 it ne                                             |     
                                                                 |     if (r6 == 3) {
    0x00047092 movne r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r6 == 3) {
    0x00047094 beq 0x4718a                                       |         goto label_72;
                                                                 |     }
                                                                 | label_32:
    0x00047096 ldrb.w r3, [r4, 0x2b]                             |     r3 = *((r4 + 0x2b));
    0x0004709a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004709c bne.w 0x46c60                                     |         goto label_14;
                                                                 |     }
    0x000470a0 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x000470a2 movs r2, 4                                        |     r2 = 4;
    0x000470a4 movs r3, 9                                        |     r3 = 9;
    0x000470a6 mov r1, r2                                        |     r1 = r2;
    0x000470a8 ldr r6, [r0]                                      |     r6 = *(r0);
    0x000470aa ldr r6, [r6, 0x38]                                |     r6 = *((r6 + 0x38));
    0x000470ac blx r6                                            |     uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000470ae b 0x46c60                                         |     goto label_14;
                                                                 | label_69:
    0x000470b0 ldrb.w r2, [r3, 0x57]                             |     r2 = *((r3 + 0x57));
    0x000470b4 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x000470b6 ldr.w sl, [sp, 0x34]                              |     sl = var_34h;
    0x000470ba ldr r3, [r0]                                      |     r3 = *(r0);
    0x000470bc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000470be beq 0x471bc                                       |         goto label_73;
                                                                 |     }
    0x000470c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000470c2 beq.w 0x471ca                                     |         goto label_74;
                                                                 |     }
    0x000470c6 mov.w fp, 7                                       |     
    0x000470ca ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x000470cc movs r2, 0                                        |     r2 = 0;
    0x000470ce movs r1, 0x25                                     |     r1 = 0x25;
    0x000470d0 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                 | label_33:
    0x000470d2 ldrb.w r3, [r4, 0x2b]                             |     r3 = *((r4 + 0x2b));
    0x000470d6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000470d8 beq 0x4707e                                       |         goto label_24;
                                                                 |     }
    0x000470da b 0x46d3e                                         |     goto label_25;
                                                                 | label_55:
    0x000470dc blx 0x9c24                                        |     fcn_00009c24 ();
    0x000470e0 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch_2;
    0x000470e2 mov r5, r7                                        |     r5 = r7;
    0x000470e4 blx 0x9c24                                        |     fcn_00009c24 ();
    0x000470e8 mov.w fp, 7                                       |     
    0x000470ec str r7, [sp, 0x1c]                                |     var_1ch_2 = r7;
    0x000470ee b 0x46d40                                         |     goto label_26;
                                                                 | label_54:
    0x000470f0 blx 0x9c24                                        |     fcn_00009c24 ();
    0x000470f4 mov.w sl, 1                                       |     sl = 1;
    0x000470f8 ldr r5, [sp, 0x68]                                |     r5 = var_68h;
    0x000470fa mov.w fp, 7                                       |     
    0x000470fe b 0x46ac8                                         |     goto label_5;
                                                                 | label_58:
    0x00047100 add r3, sp, 0x84                                  |     r3 += var_84h;
    0x00047102 movs r1, 0                                        |     r1 = 0;
    0x00047104 movs r2, 0x68                                     |     r2 = 0x68;
    0x00047106 mov r0, r3                                        |     r0 = r3;
    0x00047108 strd r1, r1, [sp, 0x6c]                           |     __asm ("strd r1, r1, [var_70h]");
    0x0004710c movs r5, 1                                        |     r5 = 1;
    0x0004710e str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00047110 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00047114 b 0x46e12                                         |     goto label_27;
                                                                 | label_71:
    0x00047116 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00047118 ldr r2, [r4, 0x48]                                |     r2 = *((r4 + 0x48));
    0x0004711a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0004711c ldr r1, [r0]                                      |     r1 = *(r0);
    0x0004711e umull r2, r3, r2, r3                              |     r2:r3 = r2 * r3;
    0x00047122 ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x00047124 blx r1                                            |     r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00047126 mov r3, r0                                        |     r3 = r0;
    0x00047128 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004712a bne.w 0x46ec8                                     |         goto label_28;
                                                                 |     }
    0x0004712e ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00047130 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00047132 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00047134 beq 0x4706e                                       |         goto label_29;
                                                                 |     }
    0x00047136 mov r1, r3                                        |     r1 = r3;
    0x00047138 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0004713a ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0004713c blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x0004713e mov r3, r0                                        |     r3 = r0;
    0x00047140 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00047142 bne.w 0x46ec8                                     |         goto label_28;
                                                                 |     }
    0x00047146 b 0x4706e                                         |     goto label_29;
                                                                 | label_64:
    0x00047148 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004714c ldr r2, [pc, 0xc4]                                |     
    0x0004714e adds r0, 0x14                                     |     r0 += 0x14;
    0x00047150 ldr r1, [pc, 0xc4]                                |     
    0x00047152 movw r3, 0xfa4a                                   |     r3 = 0xfa4a;
    0x00047156 str r0, [sp]                                      |     *(sp) = r0;
    0x00047158 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004715a add r2, pc                                        |     r2 = 0x8e372;
    0x0004715c add r1, pc                                        |     r1 = 0x8e378;
    0x0004715e blx 0x9f00                                        |     fcn_00009f00 ();
    0x00047162 movs r3, 0xb                                      |     r3 = 0xb;
    0x00047164 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00047166 b 0x46eae                                         |     goto label_22;
                                                                 | label_53:
    0x00047168 movs r0, 0                                        |     r0 = 0;
    0x0004716a mov r4, sb                                        |     r4 = sb;
    0x0004716c mov.w sl, 1                                       |     sl = 1;
    0x00047170 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00047174 b 0x46ac6                                         |     goto label_10;
                                                                 | label_68:
    0x00047176 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00047178 ldr.w sl, [sp, 0x34]                              |     sl = var_34h;
    0x0004717c ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x00047180 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00047182 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00047184 bne.w 0x46eb8                                     |         goto label_30;
                                                                 |     }
    0x00047188 b 0x47062                                         |     goto label_31;
                                                                 | label_72:
    0x0004718a ldr r1, [sp, 0x78]                                |     r1 = var_78h;
    0x0004718c mov r0, r4                                        |     r0 = r4;
    0x0004718e bl 0x153c4                                        |     fcn_000153c4 (r0, r1);
    0x00047192 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00047194 movs r2, 0                                        |     r2 = 0;
    0x00047196 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00047198 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0004719a movs r3, 0                                        |     r3 = 0;
    0x0004719c blx r1                                            |     r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004719e sub.w r5, r0, 5                                   |     r5 = r0 - 5;
    0x000471a2 cmp r0, 0                                         |     
    0x000471a4 clz r5, r5                                        |     r5 &= r5;
    0x000471a8 mov fp, r0                                        |     
    0x000471aa lsr.w r5, r5, 5                                   |     r5 >>= 5;
    0x000471ae it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x000471b0 orrne sl, sl, 1                                   |         sl |= 1;
                                                                 |     }
    0x000471b4 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x000471b6 orreq r5, r5, 1                                   |         r5 |= 1;
                                                                 |     }
    0x000471ba b 0x47096                                         |     goto label_32;
                                                                 |     if (r3 == 0) {
                                                                 | label_73:
    0x000471bc cbz r3, 0x471e4                                   |         goto label_75;
                                                                 |     }
    0x000471be ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x000471c0 movs r1, 0x25                                     |     r1 = 0x25;
    0x000471c2 mov.w fp, 9                                       |     
    0x000471c6 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x000471c8 b 0x470d2                                         |     goto label_33;
                                                                 | label_74:
    0x000471ca ldrb.w r3, [r4, 0x2b]                             |     r3 = *((r4 + 0x2b));
    0x000471ce mov.w fp, 7                                       |     
    0x000471d2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000471d4 beq.w 0x4707e                                     |         goto label_24;
                                                                 |     }
                                                                 | label_34:
    0x000471d8 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch_2;
    0x000471da mov.w sl, 1                                       |     sl = 1;
    0x000471de blx 0x9c24                                        |     fcn_00009c24 ();
    0x000471e2 b 0x46ac6                                         |     goto label_10;
                                                                 | label_75:
    0x000471e4 ldrb.w r3, [r4, 0x2b]                             |     r3 = *((r4 + 0x2b));
    0x000471e8 mov.w fp, 9                                       |     
    0x000471ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000471ee beq.w 0x4707e                                     |         goto label_24;
                                                                 |     }
    0x000471f2 b 0x471d8                                         |     goto label_34;
                                                                 | label_63:
    0x000471f4 ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x000471f8 b 0x46eca                                         |     goto label_35;
                                                                 | label_49:
    0x000471fa blx 0x9b44                                        |     fcn_00009b44 ();
    0x000471fe nop                                               |     
    0x00047200 adr r1, 0x208                                     |     r1 = 0x208;
    0x00047202 movs r5, r0                                       |     r5 = r0;
    0x00047204 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00047206 movs r0, r0                                       |     
    0x00047208 ldr r7, [sp, 0x370]                               |     r7 = *(arg_370h);
    0x0004720a movs r5, r0                                       |     r5 = r0;
    0x0004720c ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x0004720e movs r4, r0                                       |     r4 = r0;
    0x00047210 str r2, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r2;
    0x00047212 movs r4, r0                                       |     r4 = r0;
    0x00047214 str r2, [r7, 0x30]                                |     *((r7 + 0x30)) = r2;
    0x00047216 movs r4, r0                                       |     r4 = r0;
    0x00047218 str r4, [r1, 0x14]                                |     *((r1 + 0x14)) = r4;
    0x0004721a movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x47b78 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                     |                                ((n & 0x0000ff00) <<  8) | \
                                                     |                                ((n & 0x00ff0000) >>  8) | \
                                                     |                                ((n & 0xff000000) >> 24)))
                                                     |  
    ; (fcn) fcn.00047b78 ()                          | void fcn_00047b78 (arithmetic x) {
                                                     |     arithmetic var_8h;
                                                     |     int32_t var_8h_2;
                                                     |     int32_t var_10h;
                                                     |     int32_t var_10h_2;
                                                     |     r0 = x;
    0x00047b78 mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x00047b7c mov r4, r0                            |     r4 = r0;
    0x00047b7e ldr.w r8, [r0, 0x9c]                  |     r8 = *((r0 + 0x9c));
    0x00047b82 sub sp, 0x18                          |     
    0x00047b84 ldr.w r5, [r0, 0xa8]                  |     r5 = *((r0 + 0xa8));
    0x00047b88 ldr r3, [r0, 0x68]                    |     r3 = *((r0 + 0x68));
    0x00047b8a ldr.w r6, [r0, 0xf0]                  |     r6 = *((r0 + 0xf0));
    0x00047b8e cmp r5, r8                            |     
    0x00047b90 ldr r0, [r0, 0x50]                    |     r0 = *((r0 + 0x50));
    0x00047b92 it hs                                 |     
                                                     |     if (r5 < r8) {
    0x00047b94 movhs r5, r8                          |         r5 = r8;
                                                     |     }
    0x00047b96 cmp r3, 0                             |     
    0x00047b98 ldr r1, [r4, 0x54]                    |     r1 = *((r4 + 0x54));
                                                     |     if (r3 <= 0) {
    0x00047b9a ble 0x47bb8                           |         goto label_1;
                                                     |     }
    0x00047b9c add.w ip, r3, r3, lsl 1               |     
    0x00047ba0 ldr r3, [r4, 0x64]                    |     r3 = *((r4 + 0x64));
    0x00047ba2 add.w ip, r3, ip, lsl 4               |     
                                                     |     do {
    0x00047ba6 ldrd r2, r7, [r3, 8]                  |         __asm ("ldrd r2, r7, [r3, 8]");
    0x00047baa orrs r7, r2                           |         r7 |= r2;
    0x00047bac it eq                                 |         
                                                     |         if (r7 == r2) {
    0x00047bae strdeq r0, r1, [r3, 8]                |             __asm ("strdeq r0, r1, [r3, 8]");
                                                     |         }
    0x00047bb2 adds r3, 0x30                         |         r3 += 0x30;
    0x00047bb4 cmp ip, r3                            |         
    0x00047bb6 bne 0x47ba6                           |         
                                                     |     } while (ip != r3);
                                                     | label_1:
    0x00047bb8 orrs.w r3, r0, r1                     |     r3 = r0 | r1;
                                                     |     if (r3 != r0) {
    0x00047bbc beq 0x47bdc                           |         
    0x00047bbe subs r0, 1                            |         r0--;
    0x00047bc0 mov.w r3, 0                           |         r3 = 0;
    0x00047bc4 sbc r1, r1, 0                         |         __asm ("sbc r1, r1, 0");
    0x00047bc8 mov r2, r8                            |         r2 = r8;
    0x00047bca bl 0x8ca4c                            |         fcn_0008ca4c (r0, r1, r2, r3);
    0x00047bce adds r0, 1                            |         r0++;
    0x00047bd0 adc r3, r1, 0                         |         __asm ("adc r3, r1, 0");
    0x00047bd4 umull r0, r1, r0, r8                  |         r0:r1 = r0 * r8;
    0x00047bd8 mla r1, r8, r3, r1                    |         __asm ("mla r1, r8, r3, r1");
                                                     |     }
    0x00047bdc strd r0, r1, [sp, 8]                  |     __asm ("strd r0, r1, [var_8h]");
    0x00047be0 strd r0, r1, [sp, 0x10]               |     __asm ("strd r0, r1, [var_10h]");
    0x00047be4 ldrb r3, [r4, 7]                      |     r3 = *((r4 + 7));
    0x00047be6 vldr d16, [sp, 8]                     |     __asm ("vldr d16, [sp, 8]");
    0x00047bea vldr d17, [sp, 0x10]                  |     __asm ("vldr d17, [sp, 0x10]");
    0x00047bee vstr d16, [r4, 0x50]                  |     __asm ("vstr d16, [r4, 0x50]");
    0x00047bf2 vstr d17, [r4, 0x58]                  |     __asm ("vstr d17, [r4, 0x58]");
                                                     |     if (r3 == 0) {
    0x00047bf6 cbnz r3, 0x47c0e                      |         
    0x00047bf8 ldrb r3, [r4, 5]                      |         r3 = *((r4 + 5));
    0x00047bfa cmp r3, 4                             |         
                                                     |         if (r3 == 4) {
    0x00047bfc beq 0x47c0e                           |             goto label_2;
                                                     |         }
    0x00047bfe ldr r0, [r4, 0x40]                    |         r0 = *((r4 + 0x40));
    0x00047c00 ldr r3, [r0]                          |         r3 = *(r0);
    0x00047c02 cmp r3, 0                             |         
                                                     |         if (r3 == 0) {
    0x00047c04 beq 0x47c8c                           |             goto label_3;
                                                     |         }
    0x00047c06 ldr r3, [r3, 0x30]                    |         r3 = *((r3 + 0x30));
    0x00047c08 blx r3                                |         r0 = uint32_t (*r3)(uint32_t) (r3);
    0x00047c0a lsls r3, r0, 0x16                     |         r3 = r0 << 0x16;
                                                     |         if (r3 >= r0) {
    0x00047c0c bpl 0x47c8c                           |             goto label_3;
                                                     |         }
                                                     |     }
                                                     | label_2:
    0x00047c0e ldr r3, [pc, 0x88]                    |     
    0x00047c10 add r3, pc                            |     r3 = 0x8f8ae;
    0x00047c12 ldm r3!, {r0, r1}                     |     r0 = *(r3!);
                                                     |     r1 = *((r3! + 4));
    0x00047c14 mov.w r3, -1                          |     r3 = -1;
    0x00047c18 str r3, [r6, 8]                       |     *((r6 + 8)) = r3;
    0x00047c1a str r0, [r6]                          |     *(r6) = r0;
    0x00047c1c str r1, [r6, 4]                       |     *((r6 + 4)) = r1;
                                                     | label_0:
    0x00047c1e add.w r1, r4, 0x34                    |     r1 = r4 + 0x34;
    0x00047c22 movs r0, 4                            |     r0 = 4;
    0x00047c24 blx 0xa0d8                            |     fcn_0000a0d8 ();
    0x00047c28 ldr r3, [r4, 0x34]                    |     r3 = *((r4 + 0x34));
    0x00047c2a sub.w r2, r5, 0x1c                    |     r2 = r5 - 0x1c;
    0x00047c2e movs r1, 0                            |     r1 = 0;
    0x00047c30 add.w r0, r6, 0x1c                    |     r0 = r6 + 0x1c;
    0x00047c34 movs r7, 0                            |     r7 = 0;
    0x00047c36 rev r3, r3                            |     r3 = SWAP32 (r3);
    0x00047c38 str r3, [r6, 0xc]                     |     *((r6 + 0xc)) = r3;
    0x00047c3a ldr r3, [r4, 0x20]                    |     r3 = *((r4 + 0x20));
    0x00047c3c rev r3, r3                            |     r3 = SWAP32 (r3);
    0x00047c3e str r3, [r6, 0x10]                    |     *((r6 + 0x10)) = r3;
    0x00047c40 ldr.w r3, [r4, 0x9c]                  |     r3 = *((r4 + 0x9c));
    0x00047c44 rev r3, r3                            |     r3 = SWAP32 (r3);
    0x00047c46 str r3, [r6, 0x14]                    |     *((r6 + 0x14)) = r3;
    0x00047c48 ldr.w r3, [r4, 0xa8]                  |     r3 = *((r4 + 0xa8));
    0x00047c4c rev r3, r3                            |     r3 = SWAP32 (r3);
    0x00047c4e str r3, [r6, 0x18]                    |     *((r6 + 0x18)) = r3;
    0x00047c50 blx 0x97d4                            |     fcn_000097d4 ();
    0x00047c54 b 0x47c76                             |     
                                                     |     while (r7 <= r3) {
    0x00047c56 ldr r0, [r4, 0x44]                    |         r0 = *((r4 + 0x44));
    0x00047c58 vldr d16, [r4, 0x50]                  |         __asm ("vldr d16, [r4, 0x50]");
    0x00047c5c ldr r3, [r0]                          |         r3 = *(r0);
    0x00047c5e vstr d16, [sp]                        |         __asm ("vstr d16, [sp]");
    0x00047c62 ldr r3, [r3, 0xc]                     |         r3 = *((r3 + 0xc));
    0x00047c64 blx r3                                |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00047c66 ldrd r3, r2, [r4, 0x50]               |         __asm ("ldrd r3, r2, [r4, 0x50]");
    0x00047c6a adds r3, r3, r5                       |         r3 += r5;
    0x00047c6c adc r2, r2, 0                         |         __asm ("adc r2, r2, 0");
    0x00047c70 strd r3, r2, [r4, 0x50]               |         __asm ("strd r3, r2, [r4, 0x50]");
                                                     |         if (r0 != 0) {
    0x00047c74 cbnz r0, 0x47c86                      |             goto label_4;
                                                     |         }
    0x00047c76 ldr.w r3, [r4, 0x9c]                  |         r3 = *((r4 + 0x9c));
    0x00047c7a mov r2, r5                            |         r2 = r5;
    0x00047c7c mov r1, r6                            |         r1 = r6;
    0x00047c7e cmp r7, r3                            |         
    0x00047c80 add r7, r5                            |         r7 += r5;
    0x00047c82 blo 0x47c56                           |         
                                                     |     }
    0x00047c84 movs r0, 0                            |     r0 = 0;
                                                     | label_4:
    0x00047c86 add sp, 0x18                          |     
    0x00047c88 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_3:
    0x00047c8c movs r3, 0                            |     r3 = 0;
    0x00047c8e str r3, [r6]                          |     *(r6) = r3;
    0x00047c90 str r3, [r6, 4]                       |     *((r6 + 4)) = r3;
    0x00047c92 str r3, [r6, 8]                       |     *((r6 + 8)) = r3;
    0x00047c94 b 0x47c1e                             |     goto label_0;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x481c8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.000481c8 ()                                      | void fcn_000481c8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000481c8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000481cc sub sp, 0x34                                      |     
    0x000481ce strd r2, r3, [sp, 0x18]                           |     __asm ("strd r2, r3, [var_18h]");
    0x000481d2 mov sl, r0                                        |     sl = r0;
    0x000481d4 mov r4, r1                                        |     r4 = r1;
    0x000481d6 ldr r2, [pc, 0x228]                               |     
    0x000481d8 ldr r3, [pc, 0x228]                               |     r3 = *(0x48404);
    0x000481da ldr r5, [r0, 4]                                   |     r5 = *((r0 + 4));
    0x000481dc add r2, pc                                        |     r2 = 0x905e2;
    0x000481de ldr r3, [r2, r3]                                  |     
    0x000481e0 ldrb r2, [r5, 9]                                  |     r2 = *((r5 + 9));
    0x000481e2 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x000481e4 ldr r3, [r3]                                      |     r3 = *(0x905e2);
    0x000481e6 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000481e8 mov.w r3, 0                                       |     r3 = 0;
    0x000481ec ldr r3, [r0, 0x18]                                |     r3 = *((r0 + 0x18));
    0x000481ee ldr.w sb, [r1]                                    |     sb = *(r1);
    0x000481f2 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000481f4 ldr.w fp, [r1, 0x24]                              |     fp = *((r1 + 0x24));
    0x000481f8 ldr r0, [r3, 0x24]                                |     r0 = *((r3 + 0x24));
    0x000481fa ldr r6, [r3, 0x28]                                |     r6 = *((r3 + 0x28));
    0x000481fc str r0, [sp, 0x10]                                |     var_10h = r0;
    0x000481fe subs r6, r0, r6                                   |     r6 = r0 - r6;
    0x00048200 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00048202 beq.w 0x483e2                                     |         goto label_8;
                                                                 |     }
    0x00048206 ldr r2, [r5, 0xc]                                 |     r2 = *((r5 + 0xc));
    0x00048208 ldrb r3, [r5, 0xa]                                |     r3 = *((r5 + 0xa));
    0x0004820a adds r0, r2, 1                                    |     r0 = r2 + 1;
    0x0004820c str r0, [r5, 0xc]                                 |     *((r5 + 0xc)) = r0;
    0x0004820e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00048210 beq.w 0x4837c                                     |         goto label_9;
                                                                 |     }
    0x00048214 ldr r3, [r1, 0x28]                                |     r3 = *((r1 + 0x28));
    0x00048216 ldrb r7, [r1, 0x16]                               |     r7 = *((r1 + 0x16));
    0x00048218 str r2, [r5, 0xc]                                 |     *((r5 + 0xc)) = r2;
    0x0004821a sub.w r8, fp, r3                                  |     r8 = fp - r3;
    0x0004821e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00048220 beq.w 0x483a2                                     |         goto label_10;
                                                                 |     }
                                                                 | label_2:
    0x00048224 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00048226 cmp r7, r8                                        |     
    0x00048228 it lt                                             |     
                                                                 |     if (r7 >= r8) {
    0x0004822a movlt r7, r8                                      |         r7 = r8;
                                                                 |     }
    0x0004822c cmp fp, r3                                        |     
                                                                 |     if (fp == r3) {
    0x0004822e beq.w 0x483b6                                     |         goto label_11;
                                                                 |     }
                                                                 | label_3:
    0x00048232 ldrb.w r3, [sb, 0xc]                              |     r3 = *((sb + 0xc));
    0x00048236 movs r5, 8                                        |     r5 = 8;
                                                                 |     if (r3 == 0) {
    0x00048238 cbnz r3, 0x48246                                  |         
    0x0004823a ldrb.w r5, [sb, 0x10]                             |         r5 = *((sb + 0x10));
    0x0004823e subs r5, 0                                        |         
    0x00048240 it ne                                             |         
                                                                 |         if (r5 == 0) {
    0x00048242 movne r5, 1                                       |             r5 = 1;
                                                                 |         }
    0x00048244 lsls r5, r5, 3                                    |         r5 <<= 3;
                                                                 |     }
    0x00048246 mov r0, sb                                        |     r0 = sb;
    0x00048248 blx 0x98c4                                        |     r0 = fcn_000098c4 ();
    0x0004824c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004824e beq.w 0x483b8                                     |         goto label_12;
                                                                 |     }
    0x00048252 cmp r6, r7                                        |     
    0x00048254 it eq                                             |     
                                                                 |     if (r6 != r7) {
    0x00048256 moveq r5, 8                                       |         r5 = 8;
                                                                 |     }
                                                                 |     if (r6 == r7) {
    0x00048258 beq.w 0x483c6                                     |         goto label_13;
                                                                 |     }
                                                                 | label_5:
    0x0004825c mov r2, r6                                        |     r2 = r6;
    0x0004825e ldr r6, [sp, 0x10]                                |     r6 = var_10h;
    0x00048260 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x00048262 mov r0, sb                                        |     r0 = sb;
    0x00048264 str r6, [sp, 0x28]                                |     var_28h = r6;
    0x00048266 bl 0x1906c                                        |     r0 = fcn_0001906c (r0, r1, r2);
    0x0004826a mov r5, r0                                        |     r5 = r0;
    0x0004826c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004826e bne.w 0x483c6                                     |         goto label_13;
                                                                 |     }
    0x00048272 ldr r5, [sp, 0x28]                                |     r5 = var_28h;
    0x00048274 subs r5, r5, r6                                   |     r5 -= r6;
    0x00048276 it ne                                             |     
                                                                 |     if (r5 == r5) {
    0x00048278 movne r5, 1                                       |         r5 = 1;
                                                                 |     }
    0x0004827a lsls r5, r5, 3                                    |     r5 <<= 3;
                                                                 | label_4:
    0x0004827c ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0004827e umull lr, ip, r4, r2                              |     lr:ip = r4 * r2;
    0x00048282 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x00048284 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00048286 mla ip, r4, r3, ip                                |     __asm ("mla ip, r4, r3, ip");
    0x0004828a subs.w r4, lr, r2                                 |     r4 = lr - r2;
    0x0004828e sbc.w r6, ip, r3                                  |     __asm ("sbc.w r6, ip, r3");
    0x00048292 cmp r4, lr                                        |     
    0x00048294 sbcs.w r3, r6, ip                                 |     __asm ("sbcs.w r3, r6, ip");
    0x00048298 ite lt                                            |     
                                                                 |     if (r4 >= lr) {
    0x0004829a movlt r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r4 < lr) {
    0x0004829c movge r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004829e cmp r5, 0                                         |     
    0x000482a0 ite ne                                            |     
                                                                 |     if (r5 == 0) {
    0x000482a2 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r5 != 0) {
    0x000482a4 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x000482a8 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000482aa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000482ac beq.w 0x483c6                                     |         goto label_13;
                                                                 |     }
    0x000482b0 ldr r3, [pc, 0x154]                               |     
    0x000482b2 cmp r2, fp                                        |     
    0x000482b4 it ge                                             |     
                                                                 |     if (r2 < fp) {
    0x000482b6 movge r2, fp                                      |         r2 = fp;
                                                                 |     }
    0x000482b8 asr.w r8, fp, 0x1f                                |     r8 = fp >> 0x1f;
    0x000482bc str r2, [sp, 0x20]                                |     var_20h = r2;
    0x000482be add r3, pc                                        |     r3 = 0x906ca;
    0x000482c0 strd lr, ip, [sp, 8]                              |     __asm ("strd lr, ip, [var_8h]");
    0x000482c4 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000482c6 b 0x482f0                                         |     
                                                                 |     while (r0 != 0) {
                                                                 | label_0:
    0x000482c8 movs r7, 0                                        |         r7 = 0;
                                                                 | label_1:
    0x000482ca ldr r0, [sp, 0x28]                                |         r0 = var_28h;
                                                                 |         if (r0 != 0) {
    0x000482cc cbz r0, 0x482d2                                   |             
    0x000482ce bl 0x10f18                                        |             fcn_00010f18 (r0);
                                                                 |         }
                                                                 | label_6:
    0x000482d2 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x000482d4 adds.w r4, r4, fp                                 |         r4 += fp;
    0x000482d8 adc.w r6, r8, r6                                  |         __asm ("adc.w r6, r8, r6");
    0x000482dc and r7, r7, 1                                     |         r7 &= 1;
    0x000482e0 cmp r4, r3                                        |         
    0x000482e2 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x000482e4 sbcs.w r3, r6, r3                                 |         __asm ("sbcs.w r3, r6, r3");
    0x000482e8 it ge                                             |         
                                                                 |         if (r4 < r3) {
    0x000482ea movge r7, 0                                       |             r7 = 0;
                                                                 |         }
    0x000482ec cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x000482ee beq 0x483c6                                       |             goto label_13;
                                                                 |         }
    0x000482f0 movs r3, 0                                        |         r3 = 0;
    0x000482f2 mov r2, fp                                        |         r2 = fp;
    0x000482f4 str r3, [sp, 0x28]                                |         var_28h = r3;
    0x000482f6 mov r0, r4                                        |         r0 = r4;
    0x000482f8 mov r3, r8                                        |         r3 = r8;
    0x000482fa mov r1, r6                                        |         r1 = r6;
    0x000482fc bl 0x8ca4c                                        |         fcn_0008ca4c (r0, r1, r2, r3);
    0x00048300 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x00048304 mov r5, r0                                        |         r5 = r0;
    0x00048306 mov r7, r2                                        |         r7 = r2;
    0x00048308 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004830a ldr r1, [r3, 0x24]                                |         r1 = *((r3 + 0x24));
    0x0004830c ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x0004830e ldr.w r0, [r3, 0x118]                             |         r0 = *((r3 + 0x118));
    0x00048312 bl 0x8bf90                                        |         r0 = fcn_0008bf90 (r0, r1, r2);
    0x00048316 cmp r5, r0                                        |         
    0x00048318 add.w r1, r5, 1                                   |         r1 = r5 + 1;
                                                                 |         if (r5 == r0) {
    0x0004831c beq 0x483c0                                       |             goto label_14;
                                                                 |         }
    0x0004831e ldr.w r5, [sb, 0xdc]                              |         r5 = *((sb + 0xdc));
    0x00048322 movs r3, 0                                        |         r3 = 0;
    0x00048324 add r2, sp, 0x28                                  |         r2 += var_28h;
    0x00048326 mov r0, sb                                        |         r0 = sb;
    0x00048328 blx r5                                            |         r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0004832a mov r5, r0                                        |         r5 = r0;
    0x0004832c cmp r0, 0                                         |         
    0x0004832e bne 0x482c8                                       |         
                                                                 |     }
    0x00048330 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00048332 bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x00048336 mov r5, r0                                        |     r5 = r0;
    0x00048338 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004833a bne 0x482c8                                       |         goto label_0;
                                                                 |     }
    0x0004833c ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0004833e mov r0, r4                                        |     r0 = r4;
    0x00048340 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00048342 mov r1, r6                                        |     r1 = r6;
    0x00048344 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00048346 add r7, r3                                        |     r7 += r3;
    0x00048348 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0004834a bl 0x8ca4c                                        |     fcn_0008ca4c (r0, r1, r2, r3);
    0x0004834e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00048350 mov r1, r2                                        |     r1 = r2;
    0x00048352 mov r0, r7                                        |     r0 = r7;
    0x00048354 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00048356 add r1, r3                                        |     r1 += r3;
    0x00048358 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004835c orrs.w r3, r4, r6                                 |     r3 = r4 | r6;
    0x00048360 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00048362 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00048364 strb r5, [r3]                                     |     *(r3) = r5;
    0x00048366 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00048368 eor r3, r3, 1                                     |     r3 ^= 1;
    0x0004836c and r3, r3, 1                                     |     r3 &= 1;
    0x00048370 it ne                                             |     
                                                                 |     if (r3 == r4) {
    0x00048372 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00048374 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00048376 bne 0x483ec                                       |         goto label_15;
                                                                 |     }
                                                                 | label_7:
    0x00048378 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0004837a b 0x482ca                                         |     goto label_1;
                                                                 | label_9:
    0x0004837c mov r0, r5                                        |     r0 = r5;
    0x0004837e bl 0x11258                                        |     fcn_00011258 (r0);
    0x00048382 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x00048384 ldrb r2, [r5, 9]                                  |     r2 = *((r5 + 9));
    0x00048386 ldrd r3, r1, [r0, 0x24]                           |     __asm ("ldrd r3, r1, [r0, 0x24]");
    0x0004838a ldrb r7, [r0, 0x16]                               |     r7 = *((r0 + 0x16));
    0x0004838c sub.w r8, r3, r1                                  |     r8 = r3 - r1;
    0x00048390 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00048392 beq.w 0x48224                                     |         goto label_2;
                                                                 |     }
    0x00048396 ldr r2, [r5, 0xc]                                 |     r2 = *((r5 + 0xc));
    0x00048398 subs r2, 1                                        |     r2--;
    0x0004839a str r2, [r5, 0xc]                                 |     *((r5 + 0xc)) = r2;
    0x0004839c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004839e bne.w 0x48224                                     |         goto label_2;
                                                                 |     }
                                                                 | label_10:
    0x000483a2 mov r0, r5                                        |     r0 = r5;
    0x000483a4 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x000483a8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000483aa cmp r7, r8                                        |     
    0x000483ac it lt                                             |     
                                                                 |     if (r7 >= r8) {
    0x000483ae movlt r7, r8                                      |         r7 = r8;
                                                                 |     }
    0x000483b0 cmp fp, r3                                        |     
                                                                 |     if (fp != r3) {
    0x000483b2 bne.w 0x48232                                     |         goto label_3;
                                                                 |     }
                                                                 | label_11:
    0x000483b6 movs r5, 0                                        |     r5 = 0;
                                                                 | label_12:
    0x000483b8 cmp r6, r7                                        |     
                                                                 |     if (r6 == r7) {
    0x000483ba beq.w 0x4827c                                     |         goto label_4;
                                                                 |     }
    0x000483be b 0x4825c                                         |     goto label_5;
                                                                 | label_14:
    0x000483c0 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x000483c2 movs r5, 0                                        |     r5 = 0;
    0x000483c4 b 0x482d2                                         |     goto label_6;
                                                                 | label_13:
    0x000483c6 ldr r2, [pc, 0x44]                                |     
    0x000483c8 ldr r3, [pc, 0x38]                                |     r3 = *(0x48404);
    0x000483ca add r2, pc                                        |     r2 = 0x907dc;
    0x000483cc ldr r3, [r2, r3]                                  |     r3 = *(0x907dc);
    0x000483ce ldr r2, [r3]                                      |     r2 = *(0x907dc);
    0x000483d0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000483d2 eors r2, r3                                       |     r2 ^= r3;
    0x000483d4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x000483d8 bne 0x483fa                                       |         
    0x000483da mov r0, r5                                        |         r0 = r5;
    0x000483dc add sp, 0x34                                      |         
    0x000483de pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_8:
    0x000483e2 ldr r3, [r1, 0x28]                                |         r3 = *((r1 + 0x28));
    0x000483e4 ldrb r7, [r1, 0x16]                               |         r7 = *((r1 + 0x16));
    0x000483e6 sub.w r8, fp, r3                                  |         r8 = fp - r3;
    0x000483ea b 0x48224                                         |         goto label_2;
                                                                 | label_15:
    0x000483ec ldr.w r3, [sl, 0x18]                              |         r3 = *((sl + 0x18));
    0x000483f0 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x000483f2 ldr r3, [r3, 0x30]                                |         r3 = *((r3 + 0x30));
    0x000483f4 rev r3, r3                                        |         r3 = SWAP32 (r3);
    0x000483f6 str r3, [r7, 0x1c]                                |         *((r7 + 0x1c)) = r3;
    0x000483f8 b 0x48378                                         |         goto label_7;
                                                                 |     }
    0x000483fa blx 0x9b44                                        |     fcn_00009b44 ();
    0x000483fe nop                                               |     
    0x00048400 ldrh r4, [r4, 8]                                  |     r4 = *((r4 + 8));
    0x00048402 movs r5, r0                                       |     r5 = r0;
    0x00048404 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00048406 movs r0, r0                                       |     
    0x00048408 ldrh r6, [r0, 0x2a]                               |     r6 = *((r0 + 0x2a));
    0x0004840a movs r5, r0                                       |     r5 = r0;
    0x0004840c strh r6, [r6, 0x38]                               |     *((r6 + 0x38)) = r6;
    0x0004840e movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4845c */
                                                                 | #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.0004845c ()                                      | void fcn_0004845c (int16_t arg_58h, 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;
                                                                 |     int32_t var_18h_2;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0004845c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00048460 mov r6, r1                                        |     r6 = r1;
    0x00048462 sub sp, 0x34                                      |     
    0x00048464 ldr r1, [pc, 0x3d8]                               |     
    0x00048466 mov r4, r0                                        |     r4 = r0;
    0x00048468 mov r7, r3                                        |     r7 = r3;
    0x0004846a str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0004846c ldr r2, [pc, 0x3d4]                               |     r2 = *(0x48844);
    0x0004846e add r1, pc                                        |     r1 = 0x90cb2;
    0x00048470 ldr.w sb, [r0, 0xf0]                              |     sb = *((r0 + 0xf0));
    0x00048474 ldr r2, [r1, r2]                                  |     
    0x00048476 ldr r2, [r2]                                      |     r2 = *(0x90cb2);
    0x00048478 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0004847a mov.w r2, 0                                       |     r2 = 0;
    0x0004847e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00048480 bne 0x48538                                       |         goto label_16;
                                                                 |     }
    0x00048482 ldrb.w r8, [r0, 0x16]                             |     r8 = *((r0 + 0x16));
    0x00048486 ldr.w sl, [r0, 0x48]                              |     sl = *((r0 + 0x48));
    0x0004848a clz r8, r8                                        |     r8 &= r8;
    0x0004848e lsr.w r8, r8, 5                                   |     r8 >>= 5;
                                                                 |     do {
    0x00048492 ldr.w r5, [sl]                                    |         r5 = *(sl);
    0x00048496 add.w fp, sp, 0x28                                |         
    0x0004849a vldr d16, [r6]                                    |         __asm ("vldr d16, [r6]");
    0x0004849e movs r2, 4                                        |         r2 = 4;
    0x000484a0 mov r1, fp                                        |         r1 = fp;
    0x000484a2 mov r0, sl                                        |         r0 = sl;
    0x000484a4 vstr d16, [sp]                                    |         __asm ("vstr d16, [sp]");
    0x000484a8 ldr r5, [r5, 8]                                   |         r5 = *((r5 + 8));
    0x000484aa blx r5                                            |         r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x000484ac mov r5, r0                                        |         r5 = r0;
    0x000484ae cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000484b0 bne 0x4851a                                       |             
    0x000484b2 ldr r2, [r6]                                      |             r2 = *(r6);
    0x000484b4 ldr r1, [r6, 4]                                   |             r1 = *((r6 + 4));
    0x000484b6 ldr.w r0, [sl]                                    |             r0 = *(sl);
    0x000484ba adds r2, 4                                        |             r2 += 4;
    0x000484bc ldr r3, [sp, 0x28]                                |             r3 = var_28h;
    0x000484be adc r1, r1, 0                                     |             __asm ("adc r1, r1, 0");
    0x000484c2 strd r2, r1, [sp]                                 |             __asm ("strd r2, r1, [sp]");
    0x000484c6 mov r1, sb                                        |             r1 = sb;
    0x000484c8 ldr r5, [r0, 8]                                   |             r5 = *((r0 + 8));
    0x000484ca mov r0, sl                                        |             r0 = sl;
    0x000484cc ldr.w r2, [r4, 0xa8]                              |             r2 = *((r4 + 0xa8));
    0x000484d0 str r3, [sp, 0xc]                                 |             var_ch = r3;
    0x000484d2 blx r5                                            |             r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000484d4 mov r5, r0                                        |             r5 = r0;
                                                                 |             if (r0 != 0) {
    0x000484d6 cbnz r0, 0x4851a                                  |                 goto label_0;
                                                                 |             }
    0x000484d8 ldr.w r2, [r4, 0xa8]                              |             r2 = *((r4 + 0xa8));
    0x000484dc lsls r0, r7, 2                                    |             r0 = r7 << 2;
    0x000484de ldr.w r1, [r4, 0xac]                              |             r1 = *((r4 + 0xac));
    0x000484e2 adds r2, 4                                        |             r2 += 4;
    0x000484e4 adc r1, r1, 0                                     |             __asm ("adc r1, r1, 0");
    0x000484e8 adds r2, r2, r0                                   |             r2 += r0;
    0x000484ea adc.w r1, r1, r0, asr 31                          |             __asm ("adc.w r1, r1, r0, asr 31");
    0x000484ee ldr r0, [r6]                                      |             r0 = *(r6);
    0x000484f0 adds r2, r2, r0                                   |             r2 += r0;
    0x000484f2 ldr r0, [r6, 4]                                   |             r0 = *((r6 + 4));
    0x000484f4 str r2, [r6]                                      |             *(r6) = r2;
    0x000484f6 adc.w r3, r1, r0                                  |             __asm ("adc.w r3, r1, r0");
    0x000484fa ldr r1, [sp, 0xc]                                 |             r1 = var_ch;
    0x000484fc str r3, [r6, 4]                                   |             *((r6 + 4)) = r3;
    0x000484fe cmp r1, 0                                         |             
                                                                 |             if (r1 == 0) {
    0x00048500 beq.w 0x4865a                                     |                 goto label_4;
                                                                 |             }
    0x00048504 ldr r0, [sp, 0xc]                                 |             r0 = var_ch;
    0x00048506 ldr.w r1, [r4, 0xa4]                              |             r1 = *((r4 + 0xa4));
    0x0004850a rev r0, r0                                        |             r0 = SWAP32 (r0);
    0x0004850c cmp r1, r0                                        |             
    0x0004850e str r0, [sp, 0x14]                                |             var_14h = r0;
                                                                 |             if (r1 == r0) {
    0x00048510 beq.w 0x4865a                                     |                 goto label_4;
                                                                 |             }
    0x00048514 ldr r1, [r4, 0x1c]                                |             r1 = *((r4 + 0x1c));
    0x00048516 cmp r1, r0                                        |             
                                                                 |             if (r1 >= r0) {
    0x00048518 bhs 0x48540                                       |                 goto label_17;
                                                                 |             }
                                                                 |         }
                                                                 | label_0:
    0x0004851a ldr r2, [pc, 0x32c]                               |         
    0x0004851c ldr r3, [pc, 0x324]                               |         r3 = *(0x48844);
    0x0004851e add r2, pc                                        |         r2 = "double-quoted string literal: \"%w\";
    0x00048520 ldr r3, [r2, r3]                                  |         r3 = "double-quoted string literal: \"%w\";
    0x00048522 ldr r2, [r3]                                      |         r2 = "double-quoted string literal: \"%w\";
    0x00048524 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00048526 eors r2, r3                                       |         r2 ^= r3;
    0x00048528 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004852c bne.w 0x48830                                     |             goto label_18;
                                                                 |         }
    0x00048530 mov r0, r5                                        |         r0 = r5;
    0x00048532 add sp, 0x34                                      |         
    0x00048534 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_16:
    0x00048538 ldr.w sl, [r0, 0x44]                              |         sl = *((r0 + 0x44));
    0x0004853c mov r8, r3                                        |         r8 = r3;
    0x0004853e b 0x48492                                         |         
                                                                 |     } while (1);
                                                                 | label_17:
    0x00048540 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00048542 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00048544 beq.w 0x48670                                     |         goto label_19;
                                                                 |     }
    0x00048548 mov r1, r0                                        |     r1 = r0;
    0x0004854a ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0004854c strd r2, r3, [sp, 0x18]                           |     __asm ("strd r2, r3, [var_18h]");
    0x00048550 bl 0xb2f4                                         |     r0 = fcn_0000b2f4 (r0, r1, r2);
    0x00048554 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048556 bne 0x4851a                                       |         goto label_0;
                                                                 |     }
    0x00048558 ldrd r2, r3, [sp, 0x18]                           |     __asm ("ldrd r2, r3, [var_18h]");
    0x0004855c cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x0004855e bne.w 0x486a8                                     |         goto label_20;
                                                                 |     }
                                                                 | label_6:
    0x00048562 ldrd r0, r1, [sp, 0x10]                           |     __asm ("ldrd r0, r1, [var_10h]");
    0x00048566 bl 0x154c4                                        |     r0 = fcn_000154c4 (r0, r1, r2);
    0x0004856a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004856c bne.w 0x486f2                                     |         goto label_21;
                                                                 |     }
                                                                 | label_5:
    0x00048570 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00048572 cmp.w r3, 0x1000000                               |     
                                                                 |     if (r3 == 0x1000000) {
    0x00048576 beq.w 0x486f6                                     |         goto label_22;
                                                                 |     }
                                                                 | label_7:
    0x0004857a ldr.w r3, [r4, 0xf8]                              |     r3 = *((r4 + 0xf8));
    0x0004857e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00048580 beq.w 0x487dc                                     |         goto label_23;
                                                                 |     }
    0x00048584 movs r3, 0                                        |     r3 = 0;
    0x00048586 str r3, [sp, 0x24]                                |     x = r3;
    0x00048588 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004858a beq.w 0x48834                                     |         goto label_24;
                                                                 |     }
                                                                 | label_11:
    0x0004858e ldrb r3, [r4, 7]                                  |     r3 = *((r4 + 7));
    0x00048590 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00048592 bne.w 0x4871e                                     |         goto label_25;
                                                                 |     }
    0x00048596 ldrd r3, r2, [r6]                                 |     __asm ("ldrd r3, r2, [r6]");
    0x0004859a ldr r1, [r4, 0x58]                                |     r1 = *((r4 + 0x58));
    0x0004859c cmp r1, r3                                        |     
    0x0004859e ldr r3, [r4, 0x5c]                                |     r3 = *((r4 + 0x5c));
    0x000485a0 sbcs r3, r2                                       |     __asm ("sbcs r3, r2");
    0x000485a2 ite ge                                            |     
                                                                 |     if (r1 < r3) {
    0x000485a4 movge r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 >= r3) {
    0x000485a6 movlt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 | label_8:
    0x000485a8 ldr r0, [r4, 0x40]                                |     r0 = *((r4 + 0x40));
    0x000485aa ldr r1, [r0]                                      |     r1 = *(r0);
    0x000485ac cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000485ae beq 0x4869e                                       |         goto label_9;
                                                                 |     }
                                                                 | label_2:
    0x000485b0 ldrb r2, [r4, 0x11]                               |     r2 = *((r4 + 0x11));
    0x000485b2 subs r2, 1                                        |     r2--;
    0x000485b4 cmp r2, 2                                         |     
    0x000485b6 ite ls                                            |     
                                                                 |     if (r2 > 2) {
    0x000485b8 movls r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 2) {
    0x000485ba andhi r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x000485be cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000485c0 bne.w 0x48722                                     |         goto label_26;
                                                                 |     }
                                                                 | label_15:
    0x000485c4 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x000485c6 eor r7, r7, 1                                     |     r7 ^= 1;
    0x000485ca cmp r0, 0                                         |     
    0x000485cc ite ne                                            |     
                                                                 |     if (r0 == 0) {
    0x000485ce movne r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x000485d0 andeq r7, r7, 1                                   |         r7 &= 1;
                                                                 |     }
    0x000485d4 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000485d6 beq 0x486a0                                       |         goto label_10;
                                                                 |     }
                                                                 | label_1:
    0x000485d8 ldrb r3, [r4, 0x15]                               |     r3 = *((r4 + 0x15));
    0x000485da add r2, sp, 0x24                                  |     r2 += x;
    0x000485dc ldr.w r5, [r4, 0xdc]                              |     r5 = *((r4 + 0xdc));
    0x000485e0 mov r0, r4                                        |     r0 = r4;
    0x000485e2 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000485e4 orr r3, r3, 2                                     |     r3 |= 2;
    0x000485e8 strb r3, [r4, 0x15]                               |     *((r4 + 0x15)) = r3;
    0x000485ea movs r3, 1                                        |     r3 = 1;
    0x000485ec blx r5                                            |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000485ee ldrb r3, [r4, 0x15]                               |     r3 = *((r4 + 0x15));
    0x000485f0 mov r5, r0                                        |     r5 = r0;
    0x000485f2 bic r3, r3, 2                                     |     r3 = BIT_MASK (r3, 2);
    0x000485f6 strb r3, [r4, 0x15]                               |     *((r4 + 0x15)) = r3;
    0x000485f8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000485fa bne 0x4851a                                       |         goto label_0;
                                                                 |     }
    0x000485fc ldr r0, [sp, 0x24]                                |     r0 = x;
    0x000485fe ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x00048600 tst.w r3, 0x11                                    |     
                                                                 |     if ((r3 & 0x11) != 0) {
    0x00048604 beq 0x48614                                       |         
    0x00048606 movw r2, 0xffef                                   |         r2 = 0xffef;
    0x0004860a ands r2, r3                                       |         r2 &= r3;
    0x0004860c lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x0004860e it pl                                             |         
                                                                 |         if (r3 >= r3) {
    0x00048610 strhpl r2, [r0, 0x1c]                             |             __asm ("strhpl r2, [r0, 0x1c]");
                                                                 |         }
                                                                 |         if (r3 < r3) {
    0x00048612 bmi 0x48692                                       |             goto label_27;
                                                                 |         }
                                                                 |     }
                                                                 | label_3:
    0x00048614 ldr r6, [r0, 4]                                   |     r6 = *((r0 + 4));
    0x00048616 mov r1, sb                                        |     r1 = sb;
    0x00048618 ldr.w r2, [r4, 0xa8]                              |     r2 = *((r4 + 0xa8));
    0x0004861c mov r0, r6                                        |     r0 = r6;
    0x0004861e blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00048622 ldr.w r3, [r4, 0xd8]                              |     r3 = *((r4 + 0xd8));
    0x00048626 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00048628 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0004862a ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0004862c cmp.w r3, 0x1000000                               |     
    0x00048630 beq 0x4865e                                       |     
                                                                 |     while (1) {
    0x00048632 cmp.w r8, 0                                       |         
                                                                 |         if (r8 != 0) {
    0x00048636 beq 0x48652                                       |             
    0x00048638 ldr.w r7, [r4, 0xe0]                              |             r7 = *((r4 + 0xe0));
                                                                 |             if (r7 == 0) {
    0x0004863c cbz r7, 0x48652                                   |                 goto label_28;
                                                                 |             }
    0x0004863e ldr r3, [sp, 0x24]                                |             r3 = x;
    0x00048640 mov r1, r6                                        |             r1 = r6;
    0x00048642 ldr.w r0, [r4, 0xec]                              |             r0 = *((r4 + 0xec));
    0x00048646 ldr r2, [r3, 0x18]                                |             r2 = *((r3 + 0x18));
    0x00048648 movs r3, 3                                        |             r3 = 3;
    0x0004864a blx r7                                            |             r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004864c cmp r0, 0                                         |             
    0x0004864e it eq                                             |             
                                                                 |             if (r0 == 0) {
    0x00048650 moveq r5, 7                                       |                 r5 = 7;
                                                                 |                 goto label_28;
                                                                 |             }
                                                                 |         }
                                                                 | label_28:
    0x00048652 ldr r0, [sp, 0x24]                                |         r0 = x;
    0x00048654 bl 0x10ed0                                        |         fcn_00010ed0 (r0);
    0x00048658 b 0x4851a                                         |         goto label_0;
                                                                 | label_4:
    0x0004865a movs r5, 0x65                                     |         r5 = 0x65;
    0x0004865c b 0x4851a                                         |         goto label_0;
    0x0004865e ldr r0, [r6, 0x18]                                |         r0 = *((r6 + 0x18));
    0x00048660 ldr r1, [r6, 0x1c]                                |         r1 = *((r6 + 0x1c));
    0x00048662 ldr r2, [r6, 0x20]                                |         r2 = *((r6 + 0x20));
    0x00048664 ldr r3, [r6, 0x24]                                |         r3 = *((r6 + 0x24));
    0x00048666 str r0, [r4, 0x70]                                |         *((r4 + 0x70)) = r0;
    0x00048668 str r1, [r4, 0x74]                                |         *((r4 + 0x74)) = r1;
    0x0004866a str r2, [r4, 0x78]                                |         *((r4 + 0x78)) = r2;
    0x0004866c str r3, [r4, 0x7c]                                |         *((r4 + 0x7c)) = r3;
    0x0004866e b 0x48632                                         |         
                                                                 |     }
                                                                 |     if (r7 != 0) {
                                                                 | label_19:
    0x00048670 cbnz r7, 0x486a8                                  |         goto label_20;
                                                                 |     }
    0x00048672 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00048674 cmp.w r3, 0x1000000                               |     
                                                                 |     if (r3 == 0x1000000) {
    0x00048678 beq 0x486f6                                       |         goto label_22;
                                                                 |     }
    0x0004867a ldr.w r3, [r4, 0xf8]                              |     r3 = *((r4 + 0xf8));
    0x0004867e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00048680 beq.w 0x48808                                     |         goto label_29;
                                                                 |     }
    0x00048684 ldr r0, [r4, 0x40]                                |     r0 = *((r4 + 0x40));
    0x00048686 str r7, [sp, 0x24]                                |     x = r7;
    0x00048688 ldr r1, [r0]                                      |     r1 = *(r0);
    0x0004868a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004868c beq 0x485d8                                       |         goto label_1;
                                                                 |     }
                                                                 | label_14:
    0x0004868e movs r3, 1                                        |     r3 = 1;
    0x00048690 b 0x485b0                                         |     goto label_2;
                                                                 | label_27:
    0x00048692 eor r2, r2, 3                                     |     r2 ^= 3;
    0x00048696 movs r1, 2                                        |     r1 = 2;
    0x00048698 strh r2, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r2;
    0x0004869a bl 0xb380                                         |     fcn_0000b380 (r0, r1);
                                                                 | label_9:
    0x0004869e ldr r0, [sp, 0x24]                                |     r0 = x;
                                                                 | label_10:
    0x000486a0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000486a2 beq.w 0x4851a                                     |         goto label_0;
                                                                 |     }
    0x000486a6 b 0x48614                                         |     goto label_3;
                                                                 | label_20:
    0x000486a8 ldr.w ip, [sl]                                    |     ip = *(sl);
    0x000486ac subs r2, 4                                        |     r2 -= 4;
    0x000486ae adc r0, r3, -1                                    |     __asm ("adc r0, r3, -1");
    0x000486b2 mov r1, fp                                        |     r1 = fp;
    0x000486b4 strd r2, r0, [sp]                                 |     __asm ("strd r2, r0, [sp]");
    0x000486b8 mov r0, sl                                        |     r0 = sl;
    0x000486ba ldr.w r3, [ip, 8]                                 |     r3 = *((ip + 8));
    0x000486be movs r2, 4                                        |     r2 = 4;
    0x000486c0 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     if (r0 != 0) {
    0x000486c2 cbnz r0, 0x486f2                                  |         goto label_21;
                                                                 |     }
    0x000486c4 ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x000486c6 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
                                                                 |     if (r3 != 0) {
    0x000486c8 cbnz r3, 0x486e8                                  |         goto label_30;
                                                                 |     }
    0x000486ca ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x000486ce ldr r2, [r4, 0x34]                                |     r2 = *((r4 + 0x34));
    0x000486d0 subs r3, 0xc8                                     |     r3 -= 0xc8;
    0x000486d2 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000486d4 ble 0x486e2                                       |         goto label_31;
                                                                 |     }
                                                                 |     do {
    0x000486d6 ldrb.w r1, [sb, r3]                               |         r1 = *((sb + r3));
    0x000486da subs r3, 0xc8                                     |         r3 -= 0xc8;
    0x000486dc cmp r3, 0                                         |         
    0x000486de add r2, r1                                        |         r2 += r1;
    0x000486e0 bgt 0x486d6                                       |         
                                                                 |     } while (r3 > 0);
                                                                 | label_31:
    0x000486e2 rev r0, r0                                        |     r0 = SWAP32 (r0);
    0x000486e4 cmp r2, r0                                        |     
                                                                 |     if (r2 != r0) {
    0x000486e6 bne 0x4865a                                       |         goto label_4;
                                                                 |     }
                                                                 | label_30:
    0x000486e8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000486ea cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000486ec beq.w 0x48570                                     |         goto label_5;
                                                                 |     }
    0x000486f0 b 0x48562                                         |     goto label_6;
                                                                 | label_21:
    0x000486f2 mov r5, r0                                        |     r5 = r0;
    0x000486f4 b 0x4851a                                         |     goto label_0;
                                                                 | label_22:
    0x000486f6 ldrb.w r2, [sb, 0x14]                             |     r2 = *((sb + 0x14));
    0x000486fa ldrsh.w r3, [r4, 0x96]                            |     r3 = *((r4 + 0x96));
    0x000486fe cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00048700 beq.w 0x4857a                                     |         goto label_7;
                                                                 |     }
    0x00048704 ldr.w r3, [r4, 0xe4]                              |     r3 = *((r4 + 0xe4));
    0x00048708 strh.w r2, [r4, 0x96]                             |     *((r4 + 0x96)) = r2;
    0x0004870c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004870e beq.w 0x4857a                                     |         goto label_7;
                                                                 |     }
    0x00048712 ldr.w r1, [r4, 0xa8]                              |     r1 = *((r4 + 0xa8));
    0x00048716 ldr.w r0, [r4, 0xec]                              |     r0 = *((r4 + 0xec));
    0x0004871a blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
    0x0004871c b 0x4857a                                         |     goto label_7;
                                                                 | label_25:
    0x0004871e movs r3, 1                                        |     r3 = 1;
    0x00048720 b 0x485a8                                         |     goto label_8;
                                                                 | label_26:
    0x00048722 ldr.w r2, [r4, 0xa8]                              |     r2 = *((r4 + 0xa8));
    0x00048726 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00048728 ldr.w r7, [r4, 0xac]                              |     r7 = *((r4 + 0xac));
    0x0004872c subs r3, 1                                        |     r3--;
    0x0004872e umull r6, r5, r3, r2                              |     r6:r5 = r3 * r2;
    0x00048732 mla r5, r3, r7, r5                                |     __asm ("mla r5, r3, r7, r5");
    0x00048736 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0004873a bne 0x487fa                                       |         goto label_32;
                                                                 |     }
    0x0004873c ldr.w r7, [r4, 0xe0]                              |     r7 = *((r4 + 0xe0));
                                                                 |     if (r7 != 0) {
    0x00048740 cbz r7, 0x48756                                   |         
    0x00048742 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00048744 mov r1, sb                                        |         r1 = sb;
    0x00048746 ldr.w r0, [r4, 0xec]                              |         r0 = *((r4 + 0xec));
    0x0004874a movs r3, 7                                        |         r3 = 7;
    0x0004874c blx r7                                            |         uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004874e ldr.w r2, [r4, 0xa8]                              |         r2 = *((r4 + 0xa8));
    0x00048752 mov sb, r0                                        |         sb = r0;
    0x00048754 ldr r0, [r4, 0x40]                                |         r0 = *((r4 + 0x40));
                                                                 |     }
    0x00048756 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00048758 mov r1, sb                                        |     r1 = sb;
    0x0004875a strd r6, r5, [sp]                                 |     __asm ("strd r6, r5, [sp]");
    0x0004875e ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00048760 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00048762 ldr.w r6, [r4, 0xe0]                              |     r6 = *((r4 + 0xe0));
    0x00048766 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r6 != 0) {
    0x00048768 cbz r6, 0x4877c                                   |         
    0x0004876a ldr.w r0, [r4, 0xec]                              |         r0 = *((r4 + 0xec));
    0x0004876e movs r3, 3                                        |         r3 = 3;
    0x00048770 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00048772 mov r1, sb                                        |         r1 = sb;
    0x00048774 blx r6                                            |         r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00048776 cmp r0, 0                                         |         
    0x00048778 it eq                                             |         
                                                                 |         if (r0 == 0) {
    0x0004877a moveq r5, 7                                       |             r5 = 7;
                                                                 |             goto label_12;
                                                                 |         }
                                                                 |     }
                                                                 | label_12:
    0x0004877c ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x0004877e ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00048780 ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x00048782 cmp r3, r2                                        |     
    0x00048784 it lo                                             |     
                                                                 |     if (r3 >= r2) {
    0x00048786 strlo r2, [r4, 0x24]                              |         *((r4 + 0x24)) = r2;
                                                                 |     }
    0x00048788 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004878a beq 0x4869e                                       |         goto label_9;
                                                                 |     }
    0x0004878c cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00048790 beq 0x4881e                                       |         goto label_33;
                                                                 |     }
    0x00048792 ldr.w r6, [r4, 0xe0]                              |     r6 = *((r4 + 0xe0));
    0x00048796 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00048798 beq 0x48814                                       |         goto label_34;
                                                                 |     }
    0x0004879a ldr.w r0, [r4, 0xec]                              |     r0 = *((r4 + 0xec));
    0x0004879e movs r3, 3                                        |     r3 = 3;
    0x000487a0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000487a2 mov r1, sb                                        |     r1 = sb;
    0x000487a4 blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000487a6 cmp r0, 0                                         |     
    0x000487a8 ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x000487aa it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x000487ac moveq r5, 7                                       |         r5 = 7;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x000487ae cbnz r0, 0x48814                                  |         goto label_34;
                                                                 |     }
                                                                 | label_13:
    0x000487b0 ldr.w r6, [r4, 0xe0]                              |     r6 = *((r4 + 0xe0));
    0x000487b4 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000487b6 beq.w 0x4869e                                     |         goto label_9;
                                                                 |     }
    0x000487ba mov r1, sb                                        |     r1 = sb;
    0x000487bc ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000487be ldr.w r0, [r4, 0xec]                              |     r0 = *((r4 + 0xec));
    0x000487c2 movs r3, 7                                        |     r3 = 7;
    0x000487c4 blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000487c6 mov sb, r0                                        |     sb = r0;
    0x000487c8 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x000487ca cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x000487ce bne.w 0x486a0                                     |         goto label_10;
                                                                 |     }
    0x000487d2 movs r5, 7                                        |     r5 = 7;
    0x000487d4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000487d6 beq.w 0x4851a                                     |         goto label_0;
                                                                 |     }
    0x000487da b 0x48614                                         |     goto label_3;
                                                                 | label_23:
    0x000487dc ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000487de mov r0, r4                                        |     r0 = r4;
    0x000487e0 bl 0x12d5c                                        |     fcn_00012d5c (r0, r1);
    0x000487e4 str r0, [sp, 0x24]                                |     x = r0;
    0x000487e6 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000487e8 bne.w 0x4858e                                     |         goto label_11;
                                                                 |     }
                                                                 |     if (r0 == 0) {
                                                                 |         do {
    0x000487ec cbz r0, 0x48834                                   |             goto label_24;
                                                                 |         }
    0x000487ee ldrh r3, [r0, 0x1c]                               |         r3 = *((r0 + 0x1c));
    0x000487f0 eor r3, r3, 8                                     |         r3 ^= 8;
    0x000487f4 ubfx r3, r3, 3, 1                                 |         r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x000487f8 b 0x485a8                                         |         goto label_8;
                                                                 | label_32:
    0x000487fa strd r6, r5, [sp]                                 |         __asm ("strd r6, r5, [sp]");
    0x000487fe ldr r3, [r1, 0xc]                                 |         r3 = *((r1 + 0xc));
    0x00048800 mov r1, sb                                        |         r1 = sb;
    0x00048802 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x00048804 mov r5, r0                                        |         r5 = r0;
    0x00048806 b 0x4877c                                         |         goto label_12;
                                                                 | label_29:
    0x00048808 ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x0004880a mov r0, r4                                        |         r0 = r4;
    0x0004880c bl 0x12d5c                                        |         fcn_00012d5c (r0, r1);
    0x00048810 str r0, [sp, 0x24]                                |         x = r0;
    0x00048812 b 0x487ec                                         |         
                                                                 |     } while (1);
                                                                 | label_34:
    0x00048814 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00048816 mov r2, sb                                        |     r2 = sb;
    0x00048818 bl 0x48410                                        |     fcn_00048410 (r0, r1, r2);
    0x0004881c b 0x487b0                                         |     goto label_13;
                                                                 | label_33:
    0x0004881e ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00048820 mov r2, sb                                        |     r2 = sb;
    0x00048822 bl 0x48410                                        |     fcn_00048410 (r0, r1, r2);
    0x00048826 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00048828 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004882a beq.w 0x4851a                                     |         goto label_0;
                                                                 |     }
    0x0004882e b 0x48614                                         |     goto label_3;
                                                                 | label_18:
    0x00048830 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_24:
    0x00048834 ldr r0, [r4, 0x40]                                |     r0 = *((r4 + 0x40));
    0x00048836 ldr r1, [r0]                                      |     r1 = *(r0);
    0x00048838 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0004883a bne.w 0x4868e                                     |         goto label_14;
                                                                 |     }
    0x0004883e b 0x485c4                                         |     goto label_15;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4884c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0004884c ()                                      | void fcn_0004884c (int16_t arg_64h, int16_t arg_68h, uint32_t arg1, uint32_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h_2;
                                                                 |     int32_t var_18h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0004884c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00048850 mov r4, r0                                        |     r4 = r0;
    0x00048852 ldr.w r5, [pc, 0x474]                             |     r5 = *(0x00048cc8);
    0x00048856 sub sp, 0x2c                                      |     
    0x00048858 ldr.w r3, [pc, 0x470]                             |     
    0x0004885c ldr r0, [r0, 0x68]                                |     r0 = *((r0 + 0x68));
    0x0004885e add r5, pc                                        |     r5 += pc;
    0x00048860 ldr r3, [r5, r3]                                  |     r3 = *((r5 + r3));
    0x00048862 cmp r0, r2                                        |     
    0x00048864 ldr r3, [r3]                                      |     r3 = *(0x48ccc);
    0x00048866 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00048868 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r0 <= r2) {
    0x0004886c bgt 0x48894                                       |         
                                                                 | label_5:
    0x0004886e mov.w fp, 0                                       |         
                                                                 | label_1:
    0x00048872 ldr.w r1, [pc, 0x45c]                             |         r1 = *(0x00048cd0);
    0x00048876 ldr.w r3, [pc, 0x454]                             |         r3 = *(0x48cce);
    0x0004887a add r1, pc                                        |         r1 += pc;
    0x0004887c ldr r3, [r1, r3]                                  |         r3 = *((r1 + r3));
    0x0004887e ldr r1, [r3]                                      |         r1 = *(0x48cce);
    0x00048880 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00048882 eors r1, r3                                       |         r1 ^= r3;
    0x00048884 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r1 != r3) {
    0x00048888 bne.w 0x48cc2                                     |             goto label_20;
                                                                 |         }
    0x0004888c mov r0, fp                                        |         r0 = fp;
    0x0004888e add sp, 0x2c                                      |         
    0x00048890 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00048894 cmp r1, 1                                         |     
    0x00048896 ite eq                                            |     
                                                                 |     if (r1 != 1) {
    0x00048898 moveq r5, r2                                      |         r5 = r2;
                                                                 |     }
                                                                 |     if (r1 == 1) {
    0x0004889a addne r5, r2, 1                                   |         r5 = r2 + 1;
                                                                 |     }
    0x0004889c mov r6, r1                                        |     r6 = r1;
    0x0004889e cmp r0, r5                                        |     
                                                                 |     if (r0 <= r5) {
    0x000488a0 ble 0x488e8                                       |         goto label_21;
                                                                 |     }
    0x000488a2 add.w r8, r5, r5, lsl 1                           |     r8 = r5 + (r5 << 1);
    0x000488a6 mov sb, r5                                        |     sb = r5;
    0x000488a8 mov fp, r4                                        |     
    0x000488aa lsl.w r8, r8, 4                                   |     r8 <<= 4;
                                                                 | label_0:
    0x000488ae ldr.w r3, [fp, 0x64]                              |     r3 = *(arg_64h);
    0x000488b2 add r3, r8                                        |     r3 += r8;
    0x000488b4 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
                                                                 |     if (r4 == 0) {
    0x000488b6 cbz r4, 0x488da                                   |         goto label_22;
                                                                 |     }
    0x000488b8 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
                                                                 |     if (r3 == 0) {
    0x000488ba cbz r3, 0x488d0                                   |         goto label_23;
                                                                 |     }
    0x000488bc add.w r7, r4, 8                                   |     r7 = r4 + 8;
    0x000488c0 add.w sl, r4, 0x1fc                               |     sl = r4 + 0x1fc;
                                                                 |     do {
    0x000488c4 ldr r0, [r7, 4]!                                  |         r0 = *((r7 += 4));
    0x000488c8 bl 0x191d4                                        |         fcn_000191d4 (r0);
    0x000488cc cmp r7, sl                                        |         
    0x000488ce bne 0x488c4                                       |         
                                                                 |     } while (r7 != sl);
                                                                 | label_23:
    0x000488d0 mov r0, r4                                        |     r0 = r4;
    0x000488d2 blx 0x9c24                                        |     fcn_00009c24 ();
    0x000488d6 ldr.w r0, [fp, 0x68]                              |     r0 = *(arg_68h);
                                                                 | label_22:
    0x000488da add.w sb, sb, 1                                   |     sb++;
    0x000488de add.w r8, r8, 0x30                                |     r8 += 0x30;
    0x000488e2 cmp sb, r0                                        |     
                                                                 |     if (sb < r0) {
    0x000488e4 blt 0x488ae                                       |         goto label_0;
                                                                 |     }
    0x000488e6 mov r4, fp                                        |     r4 = fp;
                                                                 | label_21:
    0x000488e8 cmp r6, 1                                         |     
    0x000488ea str r5, [r4, 0x68]                                |     *((r4 + 0x68)) = r5;
                                                                 |     if (r6 == 1) {
    0x000488ec beq.w 0x489f8                                     |         goto label_24;
                                                                 |     }
    0x000488f0 ldr.w r6, [r4, 0xf8]                              |     r6 = *((r4 + 0xf8));
    0x000488f4 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000488f6 beq.w 0x48b64                                     |         goto label_25;
                                                                 |     }
    0x000488fa cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000488fc beq.w 0x48a28                                     |         goto label_26;
                                                                 |     }
    0x00048900 add.w r3, r5, r5, lsl 1                           |     r3 = r5 + (r5 << 1);
    0x00048904 ldr r2, [r4, 0x64]                                |     r2 = *((r4 + 0x64));
    0x00048906 lsls r3, r3, 4                                    |     r3 <<= 4;
    0x00048908 subs r3, 0x30                                     |     r3 -= 0x30;
    0x0004890a adds r5, r2, r3                                   |     r5 = r2 + r3;
                                                                 |     if (r5 == r2) {
    0x0004890c beq.w 0x48a28                                     |         goto label_26;
                                                                 |     }
                                                                 | label_18:
    0x00048910 mov.w r0, 0x200                                   |     r0 = 0x200;
    0x00048914 movs r1, 0                                        |     r1 = 0;
    0x00048916 ldr r7, [r5, 0x14]                                |     r7 = *((r5 + 0x14));
    0x00048918 mov.w fp, 7                                       |     
    0x0004891c bl 0x18ae0                                        |     r0 = fcn_00018ae0 (r0);
    0x00048920 mov r6, r0                                        |     r6 = r0;
    0x00048922 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00048924 beq 0x48872                                       |         goto label_1;
                                                                 |     }
    0x00048926 str r7, [r0]                                      |     *(r0) = r7;
    0x00048928 ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x0004892a ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x0004892c ldrd r7, r8, [r4, 0x50]                           |     __asm ("ldrd r7, r8, [r4, 0x50]");
    0x00048930 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x00048932 ldr.w r3, [r4, 0xf8]                              |     r3 = *((r4 + 0xf8));
    0x00048936 str r2, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r2;
    0x00048938 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004893a beq.w 0x48b88                                     |         goto label_27;
                                                                 |     }
                                                                 | label_8:
    0x0004893e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00048942 movs r2, 0                                        |     r2 = 0;
    0x00048944 mov r3, r2                                        |     r3 = r2;
    0x00048946 vstr d16, [r4, 0x50]                              |     __asm ("vstr d16, [r4, 0x50]");
                                                                 | label_10:
    0x0004894a mov fp, r6                                        |     
    0x0004894c add.w r1, r4, 0x50                                |     r1 = r4 + 0x50;
    0x00048950 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00048952 str r5, [sp, 0xc]                                 |     var_ch_2 = r5;
                                                                 |     do {
                                                                 | label_2:
    0x00048954 cmp r2, r7                                        |         
    0x00048956 sbcs.w r3, r3, r8                                 |         __asm ("sbcs.w r3, r3, r8");
                                                                 |         if (r2 >= r7) {
    0x0004895a bge.w 0x48a7a                                     |             goto label_28;
                                                                 |         }
    0x0004895e add r3, sp, 0x18                                  |         r3 += var_18h_2;
    0x00048960 movs r1, 0                                        |         r1 = 0;
    0x00048962 str r3, [sp, 4]                                   |         var_4h_2 = r3;
    0x00048964 add r3, sp, 0x14                                  |         r3 += var_14h_2;
    0x00048966 str r3, [sp]                                      |         *(sp) = r3;
    0x00048968 mov r2, r7                                        |         r2 = r7;
    0x0004896a mov r3, r8                                        |         r3 = r8;
    0x0004896c mov r0, r4                                        |         r0 = r4;
    0x0004896e str r1, [sp, 0x14]                                |         var_14h_2 = r1;
    0x00048970 bl 0x1a82c                                        |         fcn_0001a82c (r0, r1, r2, r3, r4, r5);
    0x00048974 ldr r3, [sp, 0x14]                                |         r3 = var_14h_2;
    0x00048976 mov r5, r0                                        |         r5 = r0;
                                                                 |         if (r3 == 0) {
    0x00048978 cbnz r3, 0x48994                                  |             
    0x0004897a ldr r2, [r4, 0x58]                                |             r2 = *((r4 + 0x58));
    0x0004897c ldr.w r3, [r4, 0x9c]                              |             r3 = *((r4 + 0x9c));
    0x00048980 ldrd r0, r6, [r4, 0x50]                           |             __asm ("ldrd r0, r6, [r4, 0x50]");
    0x00048984 adds r3, r3, r2                                   |             r3 += r2;
    0x00048986 ldr r2, [r4, 0x5c]                                |             r2 = *((r4 + 0x5c));
    0x00048988 adc r2, r2, 0                                     |             __asm ("adc r2, r2, 0");
    0x0004898c cmp r2, r6                                        |             
    0x0004898e it eq                                             |             
                                                                 |             if (r2 == r6) {
    0x00048990 cmpeq r3, r0                                      |                 __asm ("cmpeq r3, r0");
                                                                 |             }
                                                                 |             if (r2 == r6) {
    0x00048992 beq 0x489da                                       |                 goto label_29;
                                                                 |             }
                                                                 |         }
                                                                 | label_4:
    0x00048994 cmp r5, 0                                         |         
                                                                 |         if (r5 != 0) {
    0x00048996 bne.w 0x48b04                                     |             goto label_30;
                                                                 |         }
    0x0004899a mov sb, r5                                        |         sb = r5;
    0x0004899c ldr.w sl, [sp, 0x14]                              |         sl = var_14h_2;
    0x000489a0 ldr r5, [sp, 8]                                   |         r5 = var_8h;
    0x000489a2 movs r6, 1                                        |         r6 = 1;
                                                                 | label_3:
    0x000489a4 cmp sb, sl                                        |         
    0x000489a6 ldrd r2, r3, [r4, 0x50]                           |         __asm ("ldrd r2, r3, [r4, 0x50]");
    0x000489aa beq 0x48954                                       |         
                                                                 |     } while (sb == sl);
    0x000489ac cmp r2, r7                                        |     
    0x000489ae sbcs.w r1, r3, r8                                 |     __asm ("sbcs.w r1, r3, r8");
                                                                 |     if (r2 >= r7) {
    0x000489b2 bge 0x48954                                       |         goto label_2;
                                                                 |     }
    0x000489b4 movs r3, 1                                        |     r3 = 1;
    0x000489b6 mov r2, fp                                        |     r2 = fp;
    0x000489b8 mov r1, r5                                        |     r1 = r5;
    0x000489ba mov r0, r4                                        |     r0 = r4;
    0x000489bc str r6, [sp]                                      |     *(sp) = r6;
    0x000489be add sb, r3                                        |     sb += r3;
    0x000489c0 bl 0x4845c                                        |     r0 = fcn_0004845c (r0, r1, r2, r3, r4);
    0x000489c4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000489c6 beq 0x489a4                                       |         goto label_3;
                                                                 |     }
    0x000489c8 ldr r5, [sp, 0xc]                                 |     r5 = var_ch_2;
    0x000489ca mov r6, fp                                        |     r6 = fp;
    0x000489cc mov fp, r0                                        |     
    0x000489ce cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000489d0 bne.w 0x48b10                                     |         goto label_16;
                                                                 |     }
                                                                 | label_6:
    0x000489d4 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000489d6 bne 0x48ad4                                       |         goto label_14;
                                                                 |     }
    0x000489d8 b 0x48872                                         |     goto label_1;
                                                                 | label_29:
    0x000489da ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x000489de subs r0, r7, r0                                   |     r0 = r7 - r0;
    0x000489e0 sbc.w r1, r8, r6                                  |     __asm ("sbc.w r1, r8, r6");
    0x000489e4 adds.w r2, r3, 8                                  |     r2 = r3 + 8;
    0x000489e8 ldr.w r3, [r4, 0xac]                              |     r3 = *((r4 + 0xac));
    0x000489ec adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x000489f0 bl 0x8ca4c                                        |     fcn_0008ca4c (r0, r1, r2, r3);
    0x000489f4 str r0, [sp, 0x14]                                |     var_14h_2 = r0;
    0x000489f6 b 0x48994                                         |     goto label_4;
                                                                 | label_24:
    0x000489f8 ldr r3, [r4, 0x64]                                |     r3 = *((r4 + 0x64));
    0x000489fa add.w r5, r5, r5, lsl 1                           |     r5 += (r5 << 1);
    0x000489fe add.w r5, r3, r5, lsl 4                           |     r5 = r3 + (r5 << 4);
    0x00048a02 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x00048a04 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00048a06 beq.w 0x4886e                                     |         goto label_5;
                                                                 |     }
    0x00048a0a ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x00048a0c ldr r2, [r0]                                      |     r2 = *(r0);
    0x00048a0e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00048a10 beq.w 0x4886e                                     |         goto label_5;
                                                                 |     }
    0x00048a14 ldr r3, [pc, 0x2bc]                               |     
    0x00048a16 ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x00048a18 add r3, pc                                        |     
    0x00048a1a add.w r3, r3, 0x1d4                               |     r3 = 0x918c4;
    0x00048a1e cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00048a20 beq.w 0x48c6e                                     |         goto label_31;
                                                                 |     }
                                                                 | label_13:
    0x00048a24 str r1, [r4, 0x38]                                |     *((r4 + 0x38)) = r1;
    0x00048a26 b 0x4886e                                         |     goto label_5;
                                                                 | label_26:
    0x00048a28 ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00048a2a movs r7, 1                                        |     r7 = 1;
    0x00048a2c ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x00048a2e str r2, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r2;
    0x00048a30 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x00048a32 ldrb.w r2, [r6, 0x2c]                             |     r2 = *((r6 + 0x2c));
    0x00048a36 mov fp, r2                                        |     
    0x00048a38 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00048a3a bne.w 0x48bde                                     |         goto label_32;
                                                                 |     }
                                                                 | label_12:
    0x00048a3e ldr.w r3, [r4, 0xf4]                              |     r3 = *((r4 + 0xf4));
    0x00048a42 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00048a44 bl 0x124c4                                        |     r0 = fcn_000124c4 (r0);
    0x00048a48 cmp r0, 0                                         |     
    0x00048a4a ite eq                                            |     
                                                                 |     if (r0 != 0) {
    0x00048a4c moveq r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x00048a4e andne r7, r7, 1                                   |         r7 &= 1;
                                                                 |     }
    0x00048a52 mov r5, r0                                        |     r5 = r0;
    0x00048a54 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00048a56 beq.w 0x48872                                     |         goto label_1;
                                                                 |     }
                                                                 |     do {
    0x00048a5a mov r3, r5                                        |         r3 = r5;
    0x00048a5c ldr r5, [r5, 0x10]                                |         r5 = *((r5 + 0x10));
    0x00048a5e ldr r1, [r3, 0x18]                                |         r1 = *((r3 + 0x18));
    0x00048a60 mov r0, r4                                        |         r0 = r4;
    0x00048a62 bl 0x221dc                                        |         fcn_000221dc (r0, r1);
    0x00048a64 invalid                                           |         
    0x00048a68 mov fp, r0                                        |         
    0x00048a6a it ne                                             |         
                                                                 |         if (r7 == 0) {
    0x00048a6c movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00048a6e cmp r0, 0                                         |         
    0x00048a70 it ne                                             |         
                                                                 |         if (r0 == 0) {
    0x00048a72 movne r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00048a74 cmp r3, 0                                         |         
    0x00048a76 bne 0x48a5a                                       |         
                                                                 |     } while (r3 != 0);
    0x00048a78 b 0x48872                                         |     goto label_1;
                                                                 | label_28:
    0x00048a7a ldr r5, [sp, 0xc]                                 |     r5 = var_ch_2;
    0x00048a7c mov r6, fp                                        |     r6 = fp;
    0x00048a7e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00048a80 beq.w 0x48c9a                                     |         goto label_33;
                                                                 |     }
    0x00048a84 ldr.w sb, [r5, 0x18]                              |     sb = *((r5 + 0x18));
    0x00048a88 ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x00048a8c ldr.w r2, [r4, 0xac]                              |     r2 = *((r4 + 0xac));
    0x00048a90 ldr.w r0, [r4, 0xf8]                              |     r0 = *((r4 + 0xf8));
    0x00048a94 adds r3, 4                                        |     r3 += 4;
    0x00048a96 adc r1, r2, 0                                     |     __asm ("adc r1, r2, 0");
    0x00048a9a umull r3, r2, r3, sb                              |     r3:r2 = r3 * sb;
    0x00048a9e mla r2, sb, r1, r2                                |     __asm ("mla r2, sb, r1, r2");
    0x00048aa2 strd r3, r2, [sp, 0x18]                           |     __asm ("strd r3, r2, [var_18h_2]");
    0x00048aa6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048aa8 bne 0x48b36                                       |         goto label_34;
                                                                 |     }
                                                                 | label_7:
    0x00048aaa add.w sl, sp, 0x18                                |     sl += var_18h_2;
    0x00048aae movs r5, 1                                        |     r5 = 1;
    0x00048ab0 b 0x48ac8                                         |     
                                                                 |     while (sb <= r3) {
    0x00048ab2 movs r3, 0                                        |         r3 = 0;
    0x00048ab4 mov r2, r6                                        |         r2 = r6;
    0x00048ab6 mov r1, sl                                        |         r1 = sl;
    0x00048ab8 mov r0, r4                                        |         r0 = r4;
    0x00048aba str r5, [sp]                                      |         *(sp) = r5;
    0x00048abc add.w sb, sb, 1                                   |         sb++;
    0x00048ac0 bl 0x4845c                                        |         r0 = fcn_0004845c (r0, r1, r2, r3, r4);
    0x00048ac4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00048ac6 bne 0x48b84                                       |             goto label_35;
                                                                 |         }
    0x00048ac8 ldr r3, [r4, 0x38]                                |         r3 = *((r4 + 0x38));
    0x00048aca cmp sb, r3                                        |         
    0x00048acc blo 0x48ab2                                       |         
                                                                 |     }
    0x00048ace mov.w fp, 0                                       |     
                                                                 |     if (r6 == 0) {
                                                                 | label_9:
    0x00048ad2 cbz r6, 0x48af2                                   |         goto label_36;
                                                                 |     }
                                                                 | label_14:
    0x00048ad4 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
                                                                 |     if (r3 == 0) {
    0x00048ad6 cbz r3, 0x48aec                                   |         goto label_37;
                                                                 |     }
                                                                 | label_11:
    0x00048ad8 add.w r5, r6, 8                                   |     r5 = r6 + 8;
    0x00048adc add.w sb, r6, 0x1fc                               |     sb = r6 + 0x1fc;
                                                                 |     do {
    0x00048ae0 ldr r0, [r5, 4]!                                  |         r0 = *((r5 += 4));
    0x00048ae4 bl 0x191d4                                        |         fcn_000191d4 (r0);
    0x00048ae8 cmp sb, r5                                        |         
    0x00048aea bne 0x48ae0                                       |         
                                                                 |     } while (sb != r5);
                                                                 | label_37:
    0x00048aec mov r0, r6                                        |     r0 = r6;
    0x00048aee blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_36:
    0x00048af2 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00048af6 bne.w 0x48872                                     |         goto label_1;
                                                                 |     }
                                                                 | label_15:
    0x00048afa mov.w fp, 0                                       |     
    0x00048afe strd r7, r8, [r4, 0x50]                           |     __asm ("strd r7, r8, [r4, 0x50]");
    0x00048b02 b 0x48872                                         |     goto label_1;
                                                                 | label_30:
    0x00048b04 mov r6, fp                                        |     r6 = fp;
    0x00048b06 mov fp, r5                                        |     
    0x00048b08 ldr r5, [sp, 0xc]                                 |     r5 = var_ch_2;
    0x00048b0a cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00048b0c beq.w 0x489d4                                     |         goto label_6;
                                                                 |     }
                                                                 | label_16:
    0x00048b10 ldr.w sb, [r5, 0x18]                              |     sb = *((r5 + 0x18));
    0x00048b14 ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x00048b18 ldr.w r1, [r4, 0xac]                              |     r1 = *((r4 + 0xac));
    0x00048b1c adds r3, 4                                        |     r3 += 4;
    0x00048b1e adc r0, r1, 0                                     |     __asm ("adc r0, r1, 0");
    0x00048b22 umull r3, r1, r3, sb                              |     r3:r1 = r3 * sb;
    0x00048b26 mla r1, sb, r0, r1                                |     __asm ("mla r1, sb, r0, r1");
    0x00048b2a ldr.w r0, [r4, 0xf8]                              |     r0 = *((r4 + 0xf8));
    0x00048b2e strd r3, r1, [sp, 0x18]                           |     __asm ("strd r3, r1, [var_18h_2]");
    0x00048b32 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00048b34 beq 0x48bca                                       |         goto label_38;
                                                                 |     }
                                                                 | label_34:
    0x00048b36 ldr r3, [r0, 0x70]                                |     r3 = *((r0 + 0x70));
    0x00048b38 ldr r2, [r5, 0x2c]                                |     r2 = *((r5 + 0x2c));
    0x00048b3a cmp r2, r3                                        |     
    0x00048b3c itett ne                                          |     
                                                                 |     if (r2 == r3) {
    0x00048b3e movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x00048b40 ldreq r3, [r5, 0x20]                              |         r3 = *((r5 + 0x20));
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x00048b42 strne r3, [r5, 0x20]                              |         *((r5 + 0x20)) = r3;
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x00048b44 ldrne r2, [r0, 0x70]                              |         r2 = *((r0 + 0x70));
                                                                 |     }
    0x00048b46 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00048b48 strne r2, [r5, 0x2c]                              |         *((r5 + 0x2c)) = r2;
                                                                 |     }
    0x00048b4a ldr r2, [r0, 0x44]                                |     r2 = *((r0 + 0x44));
    0x00048b4c cmp r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00048b4e bls 0x48aaa                                       |         goto label_7;
                                                                 |     }
    0x00048b50 str r3, [r0, 0x44]                                |     *((r0 + 0x44)) = r3;
    0x00048b52 ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x00048b54 str r3, [r0, 0x4c]                                |     *((r0 + 0x4c)) = r3;
    0x00048b56 ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x00048b58 str r3, [r0, 0x50]                                |     *((r0 + 0x50)) = r3;
    0x00048b5a bl 0x18ccc                                        |     fcn_00018ccc (r0);
    0x00048b5e ldr.w sb, [r5, 0x18]                              |     sb = *((r5 + 0x18));
    0x00048b60 str r0, [sp, 0x60]                                |     *((sp + 0x60)) = r0;
    0x00048b62 b 0x48aaa                                         |     goto label_7;
                                                                 | label_25:
    0x00048b64 ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x00048b66 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00048b68 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00048b6a beq.w 0x4886e                                     |         goto label_5;
                                                                 |     }
    0x00048b6e cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00048b70 bne.w 0x48ca8                                     |         goto label_39;
                                                                 |     }
                                                                 | label_17:
    0x00048b74 ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00048b76 movs r5, 0                                        |     r5 = 0;
    0x00048b78 ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x00048b7a ldrd r7, r8, [r4, 0x50]                           |     __asm ("ldrd r7, r8, [r4, 0x50]");
    0x00048b7e str r2, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r2;
    0x00048b80 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x00048b82 b 0x4893e                                         |     goto label_8;
                                                                 | label_35:
    0x00048b84 mov fp, r0                                        |     
    0x00048b86 b 0x48ad2                                         |     goto label_9;
                                                                 | label_27:
    0x00048b88 ldrd sb, sl, [r5, 8]                              |     __asm ("ldrd sb, sl, [r5, 8]");
    0x00048b8c add.w r1, r4, 0x50                                |     r1 = r4 + 0x50;
    0x00048b90 mov fp, r1                                        |     
    0x00048b92 orrs.w r3, sb, sl                                 |     r3 = sb | sl;
    0x00048b96 ldrd r2, r3, [r5]                                 |     __asm ("ldrd r2, r3, [r5]");
    0x00048b9a itt eq                                            |     
                                                                 |     if (r3 != sb) {
    0x00048b9c moveq sb, r7                                      |         sb = r7;
                                                                 |     }
                                                                 |     if (r3 != sb) {
    0x00048b9e moveq sl, r8                                      |         sl = r8;
                                                                 |     }
    0x00048ba0 strd r2, r3, [r4, 0x50]                           |     __asm ("strd r2, r3, [r4, 0x50]");
    0x00048ba4 b 0x48bbc                                         |     
                                                                 |     while (r2 < sb) {
    0x00048ba6 movs r3, 1                                        |         r3 = 1;
    0x00048ba8 mov r2, r6                                        |         r2 = r6;
    0x00048baa mov r1, fp                                        |         r1 = fp;
    0x00048bac mov r0, r4                                        |         r0 = r4;
    0x00048bae str r3, [sp]                                      |         *(sp) = r3;
    0x00048bb0 bl 0x4845c                                        |         r0 = fcn_0004845c (r0, r1, r2, r3, r4);
    0x00048bb4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00048bb6 bne 0x48ca4                                       |             goto label_40;
                                                                 |         }
    0x00048bb8 ldrd r2, r3, [r4, 0x50]                           |         __asm ("ldrd r2, r3, [r4, 0x50]");
    0x00048bbc cmp r2, sb                                        |         
    0x00048bbe sbcs.w r3, r3, sl                                 |         __asm ("sbcs.w r3, r3, sl");
    0x00048bc2 blt 0x48ba6                                       |         
                                                                 |     }
    0x00048bc4 ldrd r2, r3, [r4, 0x50]                           |     __asm ("ldrd r2, r3, [r4, 0x50]");
    0x00048bc8 b 0x4894a                                         |     goto label_10;
                                                                 | label_38:
    0x00048bca cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00048bcc beq.w 0x48872                                     |         goto label_1;
                                                                 |     }
    0x00048bd0 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x00048bd2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00048bd4 bne 0x48ad8                                       |         goto label_11;
                                                                 |     }
    0x00048bd6 mov r0, r6                                        |     r0 = r6;
    0x00048bd8 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00048bdc b 0x48872                                         |     goto label_1;
                                                                 | label_32:
    0x00048bde ldr r1, [r6, 0x20]                                |     r1 = *((r6 + 0x20));
    0x00048be0 add.w r2, r6, 0x34                                |     r2 = r6 + 0x34;
    0x00048be4 ldr.w r8, [r6, 0x44]                              |     r8 = *((r6 + 0x44));
    0x00048be8 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00048bea add.w r0, r3, 0x30                                |     r0 = r3 + 0x30;
                                                                 |     do {
    0x00048bee ldr.w lr, [r3]                                    |         
    0x00048bf2 adds r3, 0x10                                     |         r3 += 0x10;
    0x00048bf4 ldr ip, [r3, -0xc]                                |         ip = *((r3 - 0xc));
    0x00048bf8 adds r2, 0x10                                     |         r2 += 0x10;
    0x00048bfa ldr r7, [r3, -0x8]                                |         r7 = *((r3 - 0x8));
    0x00048bfe ldr r5, [r3, -0x4]                                |         r5 = *((r3 - 0x4));
    0x00048c02 cmp r3, r0                                        |         
    0x00048c04 str lr, [r2, -0x10]                               |         
    0x00048c08 str ip, [r2, -0xc]                                |         *((r2 - 0xc)) = ip;
    0x00048c0c str r7, [r2, -0x8]                                |         *((r2 - 0x8)) = r7;
    0x00048c10 str r5, [r2, -0x4]                                |         *((r2 - 0x4)) = r5;
    0x00048c14 bne 0x48bee                                       |         
                                                                 |     } while (r3 != r0);
    0x00048c16 ldr r5, [r6, 0x44]                                |     r5 = *((r6 + 0x44));
    0x00048c18 adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x00048c1a cmp r8, r2                                        |     
                                                                 |     if (r8 <= r2) {
    0x00048c1c blo 0x48cba                                       |         goto label_41;
                                                                 |     }
    0x00048c1e adds r5, 0x22                                     |     r5 += 0x22;
    0x00048c20 b 0x48c24                                         |     
                                                                 |     while (r2 != 0) {
    0x00048c22 ldr r1, [r6, 0x20]                                |         r1 = *((r6 + 0x20));
    0x00048c24 lsrs r3, r5, 0xc                                  |         r3 = r5 >> 0xc;
    0x00048c26 mov r0, r4                                        |         r0 = r4;
    0x00048c28 iteet eq                                          |         
                                                                 |         if (r3 != r5) {
    0x00048c2a ldreq r3, [r1]                                    |             r3 = *(r1);
                                                                 |         }
                                                                 |         if (r3 != r5) {
    0x00048c2c ubfxne r2, r5, 0, 0xc                             |             __asm ("ubfxne r2, r5, 0, 0xc");
                                                                 |         }
                                                                 |         if (r3 != r5) {
    0x00048c30 ldreq r3, [r1, r3, lsl 2]                         |             offset_0 = r3 << 2;
                                                                 |             r3 = *((r1 + offset_0));
                                                                 |         }
                                                                 |         if (r3 == r5) {
    0x00048c34 ldr.w r1, [r3, r5, lsl 2]                         |             offset_1 = r5 << 2;
                                                                 |             r1 = *((r3 + offset_1));
                                                                 |         }
    0x00048c38 it ne                                             |         
                                                                 |         if (r3 == r5) {
    0x00048c3a ldrne r1, [r3, r2, lsl 2]                         |             offset_2 = r2 << 2;
                                                                 |             r1 = *((r3 + offset_2));
                                                                 |         }
    0x00048c3e bl 0x221dc                                        |         r0 = fcn_000221dc (r0, r1);
    0x00048c42 clz r7, r0                                        |         r7 &= r0;
    0x00048c46 sub.w r3, r5, 0x20                                |         r3 = r5 - 0x20;
    0x00048c4a lsrs r7, r7, 5                                    |         r7 >>= 5;
    0x00048c4c mov fp, r0                                        |         
    0x00048c4e adds r5, 1                                        |         r5++;
    0x00048c50 cmp r3, r8                                        |         
    0x00048c52 ite hi                                            |         
                                                                 |         if (r3 <= r8) {
    0x00048c54 movhi r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r3 > r8) {
    0x00048c56 andls r2, r7, 1                                   |             r2 = r7 & 1;
                                                                 |         }
    0x00048c5a cmp r2, 0                                         |         
    0x00048c5c bne 0x48c22                                       |         
                                                                 |     }
    0x00048c5e ldr r5, [r6, 0x44]                                |     r5 = *((r6 + 0x44));
                                                                 | label_19:
    0x00048c60 cmp r5, r8                                        |     
                                                                 |     if (r5 == r8) {
    0x00048c62 beq.w 0x48a3e                                     |         goto label_12;
                                                                 |     }
    0x00048c66 mov r0, r6                                        |     r0 = r6;
    0x00048c68 bl 0x18ccc                                        |     fcn_00018ccc (r0);
    0x00048c6c b 0x48a3e                                         |     goto label_12;
                                                                 | label_31:
    0x00048c6e ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x00048c72 ldr.w r2, [r4, 0xac]                              |     r2 = *((r4 + 0xac));
    0x00048c76 adds r3, 4                                        |     r3 += 4;
    0x00048c78 adc r6, r2, 0                                     |     __asm ("adc r6, r2, 0");
    0x00048c7c umull r2, r3, r3, r1                              |     r2:r3 = r3 * r1;
    0x00048c80 mla r3, r1, r6, r3                                |     __asm ("mla r3, r1, r6, r3");
    0x00048c84 ldrd r7, r6, [r0, 0x10]                           |     __asm ("ldrd r7, r6, [r0, 0x10]");
    0x00048c88 cmp r2, r7                                        |     
    0x00048c8a sbcs.w r6, r3, r6                                 |     __asm ("sbcs.w r6, r3, r6");
                                                                 |     if (r2 >= r7) {
    0x00048c8e bge.w 0x48a24                                     |         goto label_13;
                                                                 |     }
    0x00048c92 bl 0xf498                                         |     fcn_0000f498 (r0, r1, r2);
    0x00048c96 ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x00048c98 b 0x48a24                                         |     goto label_13;
                                                                 | label_33:
    0x00048c9a mov fp, r5                                        |     
    0x00048c9c cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00048c9e bne.w 0x48ad4                                     |         goto label_14;
                                                                 |     }
    0x00048ca2 b 0x48afa                                         |     goto label_15;
                                                                 | label_40:
    0x00048ca4 mov fp, r0                                        |     
    0x00048ca6 b 0x48b10                                         |     goto label_16;
                                                                 | label_39:
    0x00048ca8 add.w r3, r5, r5, lsl 1                           |     r3 = r5 + (r5 << 1);
    0x00048cac ldr r2, [r4, 0x64]                                |     r2 = *((r4 + 0x64));
    0x00048cae lsls r3, r3, 4                                    |     r3 <<= 4;
    0x00048cb0 subs r3, 0x30                                     |     r3 -= 0x30;
    0x00048cb2 adds r5, r2, r3                                   |     r5 = r2 + r3;
                                                                 |     if (r5 == r2) {
    0x00048cb4 beq.w 0x48b74                                     |         goto label_17;
                                                                 |     }
    0x00048cb8 b 0x48910                                         |     goto label_18;
                                                                 | label_41:
    0x00048cba movs r7, 1                                        |     r7 = 1;
    0x00048cbc mov.w fp, 0                                       |     
    0x00048cc0 b 0x48c60                                         |     goto label_19;
                                                                 | label_20:
    0x00048cc2 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00048cc6 nop                                               |     
    0x00048cc8 strh r2, [r4, 0x14]                               |     *((r4 + 0x14)) = r2;
    0x00048cca movs r5, r0                                       |     r5 = r0;
    0x00048ccc lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00048cce movs r0, r0                                       |     
    0x00048cd0 strh r6, [r0, 0x14]                               |     *((r0 + 0x14)) = r6;
    0x00048cd2 movs r5, r0                                       |     r5 = r0;
    0x00048cd4 ldr r4, [r2, 0x54]                                |     r4 = *((r2 + 0x54));
    0x00048cd6 movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x48cd8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00048cd8 ()                                      | void fcn_00048cd8 (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00048cd8 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00048cdc sub sp, 0x5c                                      |     
    0x00048cde str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00048ce0 movs r4, 1                                        |     r4 = 1;
    0x00048ce2 movs r2, 0                                        |     r2 = 0;
    0x00048ce4 mov r5, r0                                        |     r5 = r0;
    0x00048ce6 ldr.w r1, [pc, 0x4b8]                             |     r1 = *(0x000491a0);
    0x00048cea strd r2, r4, [sp, 0x30]                           |     __asm ("strd r2, r4, [sp, 0x30]");
    0x00048cee ldr.w r2, [pc, 0x4b4]                             |     
    0x00048cf2 add r1, pc                                        |     r1 += pc;
    0x00048cf4 ldr.w r3, [r5, 0xa8]                              |     r3 = *((r5 + 0xa8));
    0x00048cf8 ldr r0, [r0, 0x44]                                |     r0 = *(var_0hx44);
    0x00048cfa ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x00048cfc add r1, sp, 0x40                                  |     r1 += var_40h;
    0x00048cfe ldr r4, [r5]                                      |     r4 = *(r5);
    0x00048d00 ldr r2, [r2]                                      |     r2 = *(0x491a6);
    0x00048d02 str r2, [sp, 0x54]                                |     var_54h = r2;
    0x00048d04 mov.w r2, 0                                       |     r2 = 0;
    0x00048d08 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00048d0a ldr r3, [r0]                                      |     r3 = *(r0);
    0x00048d0c ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00048d0e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     if (r0 == 0) {
    0x00048d10 cbz r0, 0x48d40                                   |         goto label_11;
                                                                 |     }
    0x00048d12 ldrb r3, [r5, 0xc]                                |     r3 = *((r5 + 0xc));
    0x00048d14 mov r6, r0                                        |     r6 = r0;
    0x00048d16 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
                                                                 |     do {
                                                                 | label_1:
    0x00048d18 mov r0, r5                                        |         r0 = r5;
    0x00048d1a bl 0x127a4                                        |         fcn_000127a4 (r0);
    0x00048d1e ldr.w r2, [pc, 0x488]                             |         r2 = *(0x000491a8);
    0x00048d22 ldr.w r3, [pc, 0x480]                             |         r3 = *(0x491a6);
    0x00048d26 add r2, pc                                        |         r2 += pc;
    0x00048d28 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00048d2a ldr r2, [r3]                                      |         r2 = *(0x491a6);
    0x00048d2c ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00048d2e eors r2, r3                                       |         r2 ^= r3;
    0x00048d30 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00048d34 bne.w 0x4916c                                     |             goto label_12;
                                                                 |         }
    0x00048d38 mov r0, r6                                        |         r0 = r6;
    0x00048d3a add sp, 0x5c                                      |         
    0x00048d3c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_11:
    0x00048d40 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00048d42 ldr.w r7, [r5, 0xf0]                              |         r7 = *((r5 + 0xf0));
    0x00048d46 ldr r0, [r5, 0x44]                                |         r0 = *((r5 + 0x44));
    0x00048d48 ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
    0x00048d4a mov r1, r7                                        |         r1 = r7;
    0x00048d4c adds r2, 1                                        |         r2++;
    0x00048d4e bl 0x19ab0                                        |         r0 = fcn_00019ab0 (r0, r1, r2);
    0x00048d52 mov r6, r0                                        |         r6 = r0;
    0x00048d54 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00048d56 bne.w 0x49106                                     |             goto label_13;
                                                                 |         }
    0x00048d5a ldrb r3, [r7]                                     |         r3 = *(r7);
                                                                 |         if (r3 == 0) {
    0x00048d5c cbz r3, 0x48d74                                   |             goto label_14;
                                                                 |         }
    0x00048d5e mov r1, r7                                        |         r1 = r7;
    0x00048d60 mov r0, r4                                        |         r0 = r4;
    0x00048d62 ldr r7, [r4, 0x20]                                |         r7 = *((r4 + 0x20));
    0x00048d64 add r3, sp, 0x34                                  |         r3 += var_34h;
    0x00048d66 mov r2, r6                                        |         r2 = r6;
    0x00048d68 blx r7                                            |         r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |         if (r0 == 0) {
    0x00048d6a cbz r0, 0x48d74                                   |             goto label_14;
                                                                 |         }
    0x00048d6c ldrb r3, [r5, 0xc]                                |         r3 = *((r5 + 0xc));
    0x00048d6e mov r6, r0                                        |         r6 = r0;
    0x00048d70 strb r3, [r5, 0x13]                               |         *((r5 + 0x13)) = r3;
    0x00048d72 b 0x48d18                                         |         
                                                                 |     } while (1);
                                                                 | label_14:
    0x00048d74 ldr.w r8, [sp, 0x34]                              |     r8 = var_34h;
    0x00048d78 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00048d7c beq 0x48e64                                       |         goto label_15;
                                                                 |     }
    0x00048d7e add r3, sp, 0x30                                  |     r3 += var_30h;
    0x00048d80 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00048d82 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00048d84 add r3, sp, 0x2c                                  |     r3 += var_2ch;
    0x00048d86 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00048d88 add.w sl, r5, 0x50                                |     sl = r5 + 0x50;
    0x00048d8c ldrd r2, r3, [sp, 0x40]                           |     __asm ("ldrd r2, r3, [var_40h]");
    0x00048d90 mov.w r8, 0                                       |     r8 = 0;
    0x00048d94 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00048d98 mov fp, sl                                        |     
    0x00048d9a and sb, r4, 1                                     |     sb = r4 & 1;
    0x00048d9e str.w sb, [sp, 0x20]                              |     __asm ("str.w sb, [var_20h]");
    0x00048da2 vstr d16, [r5, 0x50]                              |     __asm ("vstr d16, [r5, 0x50]");
                                                                 | label_0:
    0x00048da6 movs r7, 1                                        |     r7 = 1;
                                                                 | label_2:
    0x00048da8 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00048daa mov r0, r5                                        |     r0 = r5;
    0x00048dac str r1, [sp, 4]                                   |     var_4h = r1;
    0x00048dae ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00048db0 str r1, [sp]                                      |     *(sp) = r1;
    0x00048db2 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00048db4 bl 0x1a82c                                        |     r0 = fcn_0001a82c (r0, r1, r2, r3, r4, r5);
    0x00048db8 mov sl, r0                                        |     sl = r0;
    0x00048dba cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048dbc bne.w 0x4910c                                     |         goto label_16;
                                                                 |     }
    0x00048dc0 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00048dc2 ldr.w sb, [r5, 0x9c]                              |     sb = *((r5 + 0x9c));
    0x00048dc6 adds r3, r0, 1                                    |     r3 = r0 + 1;
                                                                 |     if (r3 == r0) {
    0x00048dc8 bne 0x48dec                                       |         
    0x00048dca ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x00048dcc subs.w r0, r3, sb                                 |         r0 = r3 - sb;
    0x00048dd0 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x00048dd2 sbc r1, r3, 0                                     |         __asm ("sbc r1, r3, 0");
    0x00048dd6 ldr.w r3, [r5, 0xa8]                              |         r3 = *((r5 + 0xa8));
    0x00048dda adds.w r2, r3, 8                                  |         r2 = r3 + 8;
    0x00048dde ldr.w r3, [r5, 0xac]                              |         r3 = *((r5 + 0xac));
    0x00048de2 adc r3, r3, 0                                     |         __asm ("adc r3, r3, 0");
    0x00048de6 bl 0x8ca4c                                        |         fcn_0008ca4c (r0, r1, r2, r3);
    0x00048dea str r0, [sp, 0x2c]                                |         var_2ch = r0;
                                                                 |     }
    0x00048dec ldr r3, [r5, 0x50]                                |     r3 = *((r5 + 0x50));
    0x00048dee str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00048df0 ldr r3, [r5, 0x54]                                |     r3 = *((r5 + 0x54));
    0x00048df2 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00048df4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00048df6 orrs r0, r3                                       |     r0 |= r3;
                                                                 |     if (r0 == r3) {
    0x00048df8 beq.w 0x4909c                                     |         goto label_17;
                                                                 |     }
                                                                 | label_4:
    0x00048dfc ldrd r3, r2, [sp, 0x10]                           |     __asm ("ldrd r3, r2, [var_10h]");
    0x00048e00 cmp sl, r2                                        |     
    0x00048e02 it eq                                             |     
                                                                 |     if (sl == r2) {
    0x00048e04 cmpeq sb, r3                                      |         __asm ("cmpeq sb, r3");
                                                                 |     }
                                                                 |     if (sl == r2) {
    0x00048e06 beq.w 0x490c0                                     |         goto label_18;
                                                                 |     }
                                                                 | label_3:
    0x00048e0a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00048e0c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00048e0e beq.w 0x49168                                     |         goto label_19;
                                                                 |     }
    0x00048e12 add.w sb, r6, r3                                  |     sb = r6 + r3;
                                                                 |     if (r4 == 0) {
    0x00048e16 cbz r4, 0x48e3e                                   |         goto label_20;
                                                                 |     }
    0x00048e18 ldr r2, [r5, 0x6c]                                |     r2 = *((r5 + 0x6c));
    0x00048e1a ldr r3, [r5, 0x60]                                |     r3 = *((r5 + 0x60));
    0x00048e1c adds r2, 1                                        |     r2++;
    0x00048e1e str r2, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r2;
                                                                 |     if (r3 == 0) {
    0x00048e20 cbz r3, 0x48e2a                                   |         goto label_21;
                                                                 |     }
                                                                 |     do {
    0x00048e22 str r7, [r3, 0x10]                                |         *((r3 + 0x10)) = r7;
    0x00048e24 ldr r3, [r3, 0x2c]                                |         r3 = *((r3 + 0x2c));
    0x00048e26 cmp r3, 0                                         |         
    0x00048e28 bne 0x48e22                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_21:
    0x00048e2a ldr.w r0, [r5, 0xf4]                              |     r0 = *((r5 + 0xf4));
    0x00048e2e movs r1, 0                                        |     r1 = 0;
    0x00048e30 bl 0x136cc                                        |     fcn_000136cc (r0);
    0x00048e34 b 0x48e3e                                         |     
                                                                 |     while (r0 == 0) {
    0x00048e36 adds r6, 1                                        |         r6++;
    0x00048e38 cmp r6, sb                                        |         
                                                                 |         if (r6 == sb) {
    0x00048e3a beq.w 0x49092                                     |             goto label_22;
                                                                 |         }
                                                                 | label_20:
    0x00048e3e movs r3, 1                                        |         r3 = 1;
    0x00048e40 movs r2, 0                                        |         r2 = 0;
    0x00048e42 mov r1, fp                                        |         r1 = fp;
    0x00048e44 mov r0, r5                                        |         r0 = r5;
    0x00048e46 str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x00048e4a bl 0x4845c                                        |         r0 = fcn_0004845c (r0, r1, r2, r3, r4);
    0x00048e4e cmp r0, 0                                         |         
    0x00048e50 beq 0x48e36                                       |         
                                                                 |     }
    0x00048e52 cmp r0, 0x65                                      |     
                                                                 |     if (r0 != 0x65) {
    0x00048e54 bne.w 0x4913e                                     |         goto label_23;
                                                                 |     }
    0x00048e58 ldrd r2, r3, [sp, 0x40]                           |     __asm ("ldrd r2, r3, [var_40h]");
    0x00048e5c movs r4, 0                                        |     r4 = 0;
    0x00048e5e strd r2, r3, [r5, 0x50]                           |     __asm ("strd r2, r3, [r5, 0x50]");
    0x00048e62 b 0x48da6                                         |     goto label_0;
                                                                 | label_15:
    0x00048e64 str.w r8, [sp, 0xc]                               |     __asm ("str.w r8, [var_ch]");
                                                                 | label_8:
    0x00048e68 mov.w r2, -1                                      |     r2 = -1;
    0x00048e6c add r1, sp, 0x38                                  |     r1 += var_38h;
    0x00048e6e mov r0, r5                                        |     r0 = r5;
    0x00048e70 bl 0x1906c                                        |     fcn_0001906c (r0, r1, r2);
    0x00048e74 ldrb r3, [r5, 0xc]                                |     r3 = *((r5 + 0xc));
    0x00048e76 mov r6, r0                                        |     r6 = r0;
    0x00048e78 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x00048e7a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048e7c bne.w 0x49076                                     |         goto label_5;
                                                                 |     }
    0x00048e80 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00048e82 ldr.w r4, [r5, 0xf0]                              |     r4 = *((r5 + 0xf0));
    0x00048e86 ldr r0, [r5, 0x44]                                |     r0 = *((r5 + 0x44));
    0x00048e88 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00048e8a add.w sl, r4, 4                                   |     sl = r4 + 4;
    0x00048e8e mov r1, sl                                        |     r1 = sl;
    0x00048e90 adds r2, 1                                        |     r2++;
    0x00048e92 bl 0x19ab0                                        |     r0 = fcn_00019ab0 (r0, r1, r2);
    0x00048e96 mov r6, r0                                        |     r6 = r0;
    0x00048e98 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048e9a bne.w 0x49076                                     |         goto label_5;
                                                                 |     }
    0x00048e9e ldrb r3, [r5, 0x11]                               |     r3 = *((r5 + 0x11));
    0x00048ea0 subs r3, 1                                        |     r3--;
    0x00048ea2 cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x00048ea4 bhi.w 0x4912e                                     |         goto label_24;
                                                                 |     }
                                                                 | label_6:
    0x00048ea8 ldrb r1, [r4, 4]                                  |     r1 = *((r4 + 4));
    0x00048eaa movs r2, 0                                        |     r2 = 0;
    0x00048eac mov r0, r5                                        |     r0 = r5;
    0x00048eae subs r1, 0                                        |     
    0x00048eb0 it ne                                             |     
                                                                 |     if (r1 == 0) {
    0x00048eb2 movne r1, 1                                       |         r1 = 1;
                                                                 |     }
    0x00048eb4 bl 0x1a188                                        |     r0 = fcn_0001a188 (r0, r1, r2);
    0x00048eb8 mov r6, r0                                        |     r6 = r0;
    0x00048eba cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048ebc bne.w 0x49076                                     |         goto label_5;
                                                                 |     }
    0x00048ec0 ldrb r3, [r4, 4]                                  |     r3 = *((r4 + 4));
    0x00048ec2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00048ec4 beq.w 0x49076                                     |         goto label_5;
                                                                 |     }
    0x00048ec8 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x00048eca cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00048ecc beq.w 0x49076                                     |         goto label_5;
                                                                 |     }
    0x00048ed0 str r0, [r4]                                      |     *(r4) = r0;
    0x00048ed2 mov r7, r0                                        |     r7 = r0;
    0x00048ed4 ldr.w sb, [r5]                                    |     sb = *(r5);
    0x00048ed8 ldr.w r6, [sb, 4]                                 |     r6 = *((sb + 4));
    0x00048edc lsls r6, r6, 1                                    |     r6 <<= 1;
    0x00048ede asrs r1, r6, 0x1f                                 |     r1 = r6 >> 0x1f;
    0x00048ee0 mov r0, r6                                        |     r0 = r6;
    0x00048ee2 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x00048ee6 mov r4, r0                                        |     r4 = r0;
    0x00048ee8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00048eea beq.w 0x49188                                     |         goto label_25;
                                                                 |     }
    0x00048eee mov r2, r6                                        |     r2 = r6;
    0x00048ef0 mov r1, r7                                        |     r1 = r7;
    0x00048ef2 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00048ef6 str r7, [sp]                                      |     *(sp) = r7;
    0x00048ef8 movw r3, 0x4001                                   |     r3 = 0x4001;
    0x00048efc ldr.w r6, [sb, 0x18]                              |     r6 = *((sb + 0x18));
    0x00048f00 mov r2, r4                                        |     r2 = r4;
    0x00048f02 mov r1, sl                                        |     r1 = sl;
    0x00048f04 mov r0, sb                                        |     r0 = sb;
    0x00048f06 blx r6                                            |     uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00048f08 ldr.w fp, [sb, 4]                                 |     fp = *((sb + 4));
    0x00048f0c mov r6, r0                                        |     r6 = r0;
    0x00048f0e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048f10 bne.w 0x49198                                     |         goto label_26;
                                                                 |     }
    0x00048f14 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00048f16 add r1, sp, 0x48                                  |     r1 += var_48h;
    0x00048f18 mov r0, r4                                        |     r0 = r4;
    0x00048f1a ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00048f1c blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00048f1e mov r6, r0                                        |     r6 = r0;
    0x00048f20 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048f22 bne.w 0x49198                                     |         goto label_26;
                                                                 |     }
    0x00048f26 ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x00048f2a ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x00048f2c adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00048f2e ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00048f30 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x00048f32 adds r3, 4                                        |     r3 += 4;
    0x00048f34 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x00048f38 adds r3, r3, r1                                   |     r3 += r1;
    0x00048f3a adc.w r1, r2, r1, asr 31                          |     __asm ("adc.w r1, r2, r1, asr 31");
    0x00048f3e adds r0, r3, 2                                    |     r0 = r3 + 2;
    0x00048f40 adc r1, r1, 0                                     |     __asm ("adc r1, r1, 0");
    0x00048f44 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x00048f48 mov r7, r0                                        |     r7 = r0;
    0x00048f4a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00048f4c beq.w 0x49190                                     |         goto label_27;
                                                                 |     }
    0x00048f50 mov r1, r0                                        |     r1 = r0;
    0x00048f52 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00048f56 str r6, [r1], 4                                   |     *(r1) = r6;
                                                                 |     r1 += 4;
    0x00048f5a mov r0, r4                                        |     r0 = r4;
    0x00048f5c ldr r3, [r4]                                      |     r3 = *(r4);
    0x00048f5e ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00048f60 vstr d16, [sp]                                    |     __asm ("vstr d16, [sp]");
    0x00048f64 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00048f66 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x00048f68 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00048f6a blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00048f6c mov r6, r0                                        |     r6 = r0;
    0x00048f6e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00048f70 bne.w 0x49198                                     |         goto label_26;
                                                                 |     }
    0x00048f74 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00048f76 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00048f78 strb r0, [r1, r3]                                 |     *((r1 + r3)) = r0;
    0x00048f7a ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00048f7c add r3, r1                                        |     r3 += r1;
    0x00048f7e strb r0, [r3, 1]                                  |     *((r3 + 1)) = r0;
    0x00048f80 ldrd r0, r3, [sp, 0x48]                           |     __asm ("ldrd r0, r3, [var_48h]");
    0x00048f84 cmp r0, 1                                         |     
    0x00048f86 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r0 < 1) {
    0x00048f8a blt 0x4903a                                       |         goto label_28;
                                                                 |     }
    0x00048f8c ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00048f8e add.w r3, r4, fp                                  |     r3 = r4 + fp;
    0x00048f92 strd r8, r7, [sp, 0x14]                           |     __asm ("strd r8, r7, [sp, 0x14]");
    0x00048f96 mov fp, r1                                        |     
    0x00048f98 str r5, [sp, 0x1c]                                |     var_1ch = r5;
    0x00048f9a mov r7, r1                                        |     r7 = r1;
    0x00048f9c adds r2, 2                                        |     r2 += 2;
    0x00048f9e mov r8, r4                                        |     r8 = r4;
    0x00048fa0 adds r2, r1, r2                                   |     r2 = r1 + r2;
    0x00048fa2 mov r5, r3                                        |     r5 = r3;
    0x00048fa4 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00048fa6 add r2, sp, 0x3c                                  |     r2 += var_3ch;
    0x00048fa8 str r2, [sp, 0x24]                                |     var_24h_2 = r2;
                                                                 |     do {
    0x00048faa ldr.w r4, [sb, 0x20]                              |         r4 = *((sb + 0x20));
    0x00048fae movs r2, 0                                        |         r2 = 0;
    0x00048fb0 ldr r3, [sp, 0x24]                                |         r3 = var_24h_2;
    0x00048fb2 mov r1, fp                                        |         r1 = fp;
    0x00048fb4 mov r0, sb                                        |         r0 = sb;
    0x00048fb6 blx r4                                            |         r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00048fb8 mov r4, r0                                        |         r4 = r0;
    0x00048fba cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00048fbc bne.w 0x49170                                     |             goto label_29;
                                                                 |         }
    0x00048fc0 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
                                                                 |         if (r3 != 0) {
    0x00048fc2 cbz r3, 0x49012                                   |             
    0x00048fc4 str r0, [sp]                                      |             *(sp) = r0;
    0x00048fc6 movw r3, 0x4001                                   |             r3 = 0x4001;
    0x00048fca ldr.w r4, [sb, 0x18]                              |             r4 = *((sb + 0x18));
    0x00048fce mov r2, r5                                        |             r2 = r5;
    0x00048fd0 mov r1, fp                                        |             r1 = fp;
    0x00048fd2 mov r0, sb                                        |             r0 = sb;
    0x00048fd4 blx r4                                            |             r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00048fd6 mov r4, r0                                        |             r4 = r0;
    0x00048fd8 cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x00048fda bne.w 0x49170                                     |                 goto label_29;
                                                                 |             }
    0x00048fde ldr r2, [sp, 0x20]                                |             r2 = var_20h;
    0x00048fe0 mov r0, r5                                        |             r0 = r5;
    0x00048fe2 ldr r1, [sp, 0x10]                                |             r1 = var_10h;
    0x00048fe4 bl 0x19ab0                                        |             fcn_00019ab0 (r0, r1, r2);
    0x00048fe8 ldr r3, [r5]                                      |             r3 = *(r5);
    0x00048fea mov r4, r0                                        |             r4 = r0;
                                                                 |             if (r3 != 0) {
    0x00048fec cbz r3, 0x48ff8                                   |                 
    0x00048fee ldr r3, [r3, 4]                                   |                 r3 = *((r3 + 4));
    0x00048ff0 mov r0, r5                                        |                 r0 = r5;
    0x00048ff2 blx r3                                            |                 uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00048ff4 movs r3, 0                                        |                 r3 = 0;
    0x00048ff6 str r3, [r5]                                      |                 *(r5) = r3;
                                                                 |             }
    0x00048ff8 cmp r4, 0                                         |             
                                                                 |             if (r4 != 0) {
    0x00048ffa bne.w 0x49170                                     |                 goto label_29;
                                                                 |             }
    0x00048ffe ldr r0, [sp, 0x10]                                |             r0 = var_10h;
    0x00049000 ldrb r3, [r0]                                     |             r3 = *(r0);
                                                                 |             if (r3 == 0) {
    0x00049002 cbz r3, 0x49012                                   |                 goto label_30;
                                                                 |             }
    0x00049004 mov r1, sl                                        |             r1 = sl;
    0x00049006 blx 0x9fb0                                        |             r0 = fcn_00009fb0 ();
    0x0004900a mov r4, r0                                        |             r4 = r0;
    0x0004900c cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0004900e beq.w 0x49170                                     |                 goto label_29;
                                                                 |             }
                                                                 |         }
                                                                 | label_30:
    0x00049012 mov r0, fp                                        |         r0 = fp;
    0x00049014 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00049018 bic r3, r0, 0xc0000000                            |         r3 = BIT_MASK (r0, 0xc0000000);
    0x0004901c ldrd r0, r1, [sp, 0x48]                           |         __asm ("ldrd r0, r1, [var_48h]");
    0x00049020 adds r3, 1                                        |         r3++;
    0x00049022 add fp, r3                                        |         
    0x00049024 sub.w r2, fp, r7                                  |         r2 = fp - r7;
    0x00049028 asrs r3, r2, 0x1f                                 |         r3 = r2 >> 0x1f;
    0x0004902a cmp r2, r0                                        |         
    0x0004902c sbcs r3, r1                                       |         __asm ("sbcs r3, r1");
    0x0004902e blt 0x48faa                                       |         
                                                                 |     } while (r2 < r0);
    0x00049030 mov r4, r8                                        |     r4 = r8;
    0x00049032 ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x00049034 ldr.w r8, [sp, 0x14]                              |     r8 = var_14h;
    0x00049038 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
                                                                 | label_28:
    0x0004903a ldr r3, [r4]                                      |     r3 = *(r4);
                                                                 |     if (r3 != 0) {
    0x0004903c cbz r3, 0x49048                                   |         
    0x0004903e ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00049040 mov r0, r4                                        |         r0 = r4;
    0x00049042 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00049044 movs r3, 0                                        |         r3 = 0;
    0x00049046 str r3, [r4]                                      |         *(r4) = r3;
                                                                 |     }
    0x00049048 ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x0004904c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004904e beq.w 0x49198                                     |         goto label_26;
                                                                 |     }
    0x00049052 mov r1, sl                                        |     r1 = sl;
    0x00049054 mov r0, sb                                        |     r0 = sb;
    0x00049056 movs r2, 0                                        |     r2 = 0;
    0x00049058 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0004905a mov r6, r0                                        |     r6 = r0;
    0x0004905c mov r0, r7                                        |     r0 = r7;
    0x0004905e blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_10:
    0x00049062 ldr r3, [r4]                                      |     r3 = *(r4);
                                                                 |     if (r3 != 0) {
    0x00049064 cbz r3, 0x49070                                   |         
    0x00049066 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00049068 mov r0, r4                                        |         r0 = r4;
    0x0004906a blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0004906c movs r3, 0                                        |         r3 = 0;
    0x0004906e str r3, [r4]                                      |         *(r4) = r3;
                                                                 |     }
    0x00049070 mov r0, r4                                        |     r0 = r4;
    0x00049072 blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_5:
    0x00049076 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00049078 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004907a beq.w 0x48d18                                     |         goto label_1;
                                                                 |     }
    0x0004907e ldr r1, [pc, 0x12c]                               |     
    0x00049080 mov r2, r8                                        |     r2 = r8;
    0x00049082 ldr.w r3, [r5, 0xbc]                              |     r3 = *((r5 + 0xbc));
    0x00049086 movw r0, 0x21b                                    |     r0 = 0x21b;
    0x0004908a add r1, pc                                        |     r1 = 0x9223c;
    0x0004908c blx 0x9f00                                        |     fcn_00009f00 ();
    0x00049090 b 0x48d18                                         |     goto label_1;
                                                                 | label_22:
    0x00049092 mov r4, r0                                        |     r4 = r0;
                                                                 | label_9:
    0x00049094 ldrd r2, r3, [sp, 0x40]                           |     __asm ("ldrd r2, r3, [var_40h]");
    0x00049098 mov r6, sb                                        |     r6 = sb;
    0x0004909a b 0x48da8                                         |     goto label_2;
                                                                 | label_17:
    0x0004909c ldr r3, [r5, 0x58]                                |     r3 = *((r5 + 0x58));
    0x0004909e ldr r2, [r5, 0x5c]                                |     r2 = *((r5 + 0x5c));
    0x000490a0 ldrd r1, r0, [sp, 0x10]                           |     __asm ("ldrd r1, r0, [var_10h]");
    0x000490a4 adds.w r3, sb, r3                                 |     r3 = sb + r3;
    0x000490a8 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x000490ac cmp r2, r0                                        |     
    0x000490ae it eq                                             |     
                                                                 |     if (r2 == r0) {
    0x000490b0 cmpeq r3, r1                                      |         __asm ("cmpeq r3, r1");
                                                                 |     }
                                                                 |     if (r2 != r0) {
    0x000490b2 beq 0x490e2                                       |         
    0x000490b4 ldrd r3, r2, [sp, 0x10]                           |         __asm ("ldrd r3, r2, [var_10h]");
    0x000490b8 cmp sl, r2                                        |         
    0x000490ba it eq                                             |         
                                                                 |         if (sl == r2) {
    0x000490bc cmpeq sb, r3                                      |             __asm ("cmpeq sb, r3");
                                                                 |         }
                                                                 |         if (sl != r2) {
    0x000490be bne 0x49168                                       |             goto label_19;
                                                                 |         }
                                                                 | label_18:
    0x000490c0 ldr.w sb, [sp, 0x30]                              |         sb = var_30h;
    0x000490c4 mov r0, r5                                        |         r0 = r5;
    0x000490c6 mov r1, sb                                        |         r1 = sb;
    0x000490c8 bl 0xd090                                         |         r0 = fcn_0000d090 (r0, r1);
    0x000490cc cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000490ce bne 0x49160                                       |             goto label_31;
                                                                 |         }
    0x000490d0 ldr.w r3, [r5, 0xa0]                              |         r3 = *((r5 + 0xa0));
    0x000490d4 str.w sb, [r5, 0x1c]                              |         __asm ("str.w sb, [r5, 0x1c]");
    0x000490d8 cmp sb, r3                                        |         
    0x000490da it hi                                             |         
                                                                 |         if (sb <= r3) {
    0x000490dc strhi sb, [r5, 0xa0]                              |             *((r5 + 0xa0)) = sb;
                                                                 |         }
    0x000490e0 b 0x48e0a                                         |         goto label_3;
                                                                 |     }
    0x000490e2 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000490e4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000490e6 subs r0, r3, r1                                   |     r0 = r3 - r1;
    0x000490e8 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000490ea sbc.w r1, r3, r2                                  |     __asm ("sbc.w r1, r3, r2");
    0x000490ee ldr.w r3, [r5, 0xa8]                              |     r3 = *((r5 + 0xa8));
    0x000490f2 adds.w r2, r3, 8                                  |     r2 = r3 + 8;
    0x000490f6 ldr.w r3, [r5, 0xac]                              |     r3 = *((r5 + 0xac));
    0x000490fa adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x000490fe bl 0x8ca4c                                        |     fcn_0008ca4c (r0, r1, r2, r3);
    0x00049102 str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x00049104 b 0x48dfc                                         |     goto label_4;
                                                                 | label_13:
    0x00049106 ldrb r3, [r5, 0xc]                                |     r3 = *((r5 + 0xc));
    0x00049108 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0004910a b 0x48d18                                         |     goto label_1;
                                                                 | label_16:
    0x0004910c cmp r0, 0x65                                      |     
    0x0004910e ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x00049110 str r0, [sp, 0x80]                                |     *((sp + 0x80)) = r0;
    0x00049112 mov fp, r0                                        |     
                                                                 |     if (r0 == 0x65) {
    0x00049114 beq 0x4914e                                       |         goto label_32;
                                                                 |     }
                                                                 | label_7:
    0x00049116 ldrb r3, [r5, 0xc]                                |     r3 = *((r5 + 0xc));
    0x00049118 mov r2, sb                                        |     r2 = sb;
    0x0004911a cmp r6, 0                                         |     
    0x0004911c ite eq                                            |     
                                                                 |     if (r6 != 0) {
    0x0004911e moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x00049120 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x00049124 mov r8, r6                                        |     r8 = r6;
    0x00049126 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00049128 mov r6, fp                                        |     r6 = fp;
    0x0004912a strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0004912c b 0x49076                                         |     goto label_5;
                                                                 | label_24:
    0x0004912e mov r1, r0                                        |     r1 = r0;
    0x00049130 mov r0, r5                                        |     r0 = r5;
    0x00049132 bl 0x13324                                        |     r0 = fcn_00013324 (r0, r1);
    0x00049136 mov r6, r0                                        |     r6 = r0;
    0x00049138 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004913a bne 0x49076                                       |         goto label_5;
                                                                 |     }
    0x0004913c b 0x48ea8                                         |     goto label_6;
                                                                 | label_23:
    0x0004913e movw r3, 0x20a                                    |     r3 = 0x20a;
    0x00049142 ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x00049146 cmp r0, r3                                        |     
    0x00049148 it ne                                             |     
                                                                 |     if (r0 != r3) {
    0x0004914a movne fp, r0                                      |         goto label_33;
                                                                 |     }
                                                                 |     if (r0 != r3) {
                                                                 | label_33:
    0x0004914c bne 0x49116                                       |         goto label_7;
                                                                 |     }
                                                                 | label_32:
    0x0004914e mov r3, sb                                        |     r3 = sb;
    0x00049150 mov r8, r6                                        |     r8 = r6;
    0x00049152 cmp r6, 0                                         |     
    0x00049154 ite eq                                            |     
                                                                 |     if (r6 != 0) {
    0x00049156 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x00049158 andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x0004915c str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0004915e b 0x48e68                                         |     goto label_8;
                                                                 | label_31:
    0x00049160 ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x00049164 mov fp, r0                                        |     
    0x00049166 b 0x49116                                         |     goto label_7;
                                                                 | label_19:
    0x00049168 mov sb, r6                                        |     sb = r6;
    0x0004916a b 0x49094                                         |     goto label_9;
                                                                 | label_12:
    0x0004916c blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_29:
    0x00049170 ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x00049172 str r4, [sp, 0x10]                                |     var_10h = r4;
    0x00049174 mov r4, r8                                        |     r4 = r8;
    0x00049176 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x00049178 mov r0, r7                                        |     r0 = r7;
    0x0004917a ldr.w r8, [sp, 0x14]                              |     r8 = var_14h;
    0x0004917e blx 0x9c24                                        |     fcn_00009c24 ();
    0x00049182 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00049184 mov r6, r3                                        |     r6 = r3;
    0x00049186 b 0x49062                                         |     goto label_10;
                                                                 | label_25:
    0x00049188 movs r6, 7                                        |     r6 = 7;
    0x0004918a blx 0x9c24                                        |     fcn_00009c24 ();
    0x0004918e b 0x49076                                         |     goto label_5;
                                                                 | label_27:
    0x00049190 movs r6, 7                                        |     r6 = 7;
    0x00049192 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00049196 b 0x49062                                         |     goto label_10;
                                                                 | label_26:
    0x00049198 mov r0, r7                                        |     r0 = r7;
    0x0004919a blx 0x9c24                                        |     fcn_00009c24 ();
    0x0004919e b 0x49062                                         |     goto label_10;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x497e8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000497e8 ()                                      | void fcn_000497e8 (int16_t arg_c8h, arithmetic arg_cch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_1h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     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;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_49h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_9ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000497e8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000497ec mov r8, r2                                        |     r8 = r2;
    0x000497ee sub sp, 0xa4                                      |     
    0x000497f0 ldr.w r2, [pc, 0x46c]                             |     r2 = *(0x00049c60);
    0x000497f4 mov sb, r0                                        |     sb = r0;
    0x000497f6 mov r6, r1                                        |     r6 = r1;
    0x000497f8 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000497fa ldr.w r3, [pc, 0x468]                             |     
    0x000497fe add r2, pc                                        |     r2 += pc;
    0x00049800 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00049802 ldr r3, [r3]                                      |     r3 = *(0x49c66);
    0x00049804 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x00049806 mov.w r3, 0                                       |     r3 = 0;
    0x0004980a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004980c beq.w 0x49b06                                     |         goto label_28;
                                                                 |     }
    0x00049810 ldr.w r1, [pc, 0x454]                             |     r1 = *(0x00049c68);
    0x00049814 mov r0, r6                                        |     r0 = r6;
    0x00049816 add r1, pc                                        |     r1 += pc;
    0x00049818 blx 0x9fb0                                        |     fcn_00009fb0 ();
    0x0004981c ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0004981e mov r5, r0                                        |     r5 = r0;
    0x00049820 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00049822 bne.w 0x49ace                                     |         goto label_29;
                                                                 |     }
    0x00049826 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00049828 bne.w 0x49b06                                     |         goto label_28;
                                                                 |     }
                                                                 | label_1:
    0x0004982c movs r5, 1                                        |     r5 = 1;
                                                                 |     do {
                                                                 | label_2:
    0x0004982e ldr r3, [sp, 0xc8]                                |         r3 = *(arg_c8h);
    0x00049830 orr r3, r3, 2                                     |         r3 |= 2;
    0x00049834 str r3, [sp, 0xc8]                                |         *(arg_c8h) = r3;
    0x00049836 ldr r3, [sp, 0xcc]                                |         r3 = *(arg_cch);
    0x00049838 tst.w r3, 0x100                                   |         
    0x0004983c mov.w r3, 1                                       |         r3 = 1;
    0x00049840 str r3, [sp, 0xc]                                 |         var_ch = r3;
                                                                 |         if ((r3 & 0x100) != 0) {
    0x00049842 beq 0x49850                                       |             
                                                                 | label_3:
    0x00049844 ldr r3, [sp, 0xcc]                                |             r3 = *(arg_cch);
    0x00049846 bic r3, r3, 0x300                                 |             r3 = BIT_MASK (r3, 0x300);
    0x0004984a orr r3, r3, 0x200                                 |             r3 |= 0x200;
    0x0004984e str r3, [sp, 0xcc]                                |             *(arg_cch) = r3;
                                                                 |         }
    0x00049850 movs r0, 0x30                                     |         r0 = 0x30;
    0x00049852 movs r1, 0                                        |         r1 = 0;
    0x00049854 bl 0x18ae0                                        |         r0 = fcn_00018ae0 (r0);
    0x00049858 mov r4, r0                                        |         r4 = r0;
    0x0004985a cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0004985c beq.w 0x4a174                                     |             goto label_30;
                                                                 |         }
    0x00049860 movs r7, 0                                        |         r7 = 0;
    0x00049862 movs r3, 1                                        |         r3 = 1;
    0x00049864 str.w r8, [r0]                                    |         __asm ("str.w r8, [r0]");
    0x00049868 str r0, [r0, 0x20]                                |         *((r0 + 0x20)) = r0;
    0x0004986a strb r7, [r0, 8]                                  |         *((r0 + 8)) = r7;
    0x0004986c str r3, [r0, 0x24]                                |         *((r0 + 0x24)) = r3;
    0x0004986e cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00049870 beq.w 0x49b44                                     |             goto label_31;
                                                                 |         }
                                                                 | label_0:
    0x00049874 str r7, [sp, 8]                                   |         var_8h = r7;
                                                                 | label_4:
    0x00049876 movs r0, 0x5c                                     |         r0 = 0x5c;
    0x00049878 movs r1, 0                                        |         r1 = 0;
    0x0004987a bl 0x18ae0                                        |         r0 = fcn_00018ae0 (r0);
    0x0004987e mov r5, r0                                        |         r5 = r0;
    0x00049880 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00049882 beq.w 0x49c84                                     |             goto label_32;
                                                                 |         }
    0x00049886 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x0004988a mov.w r2, 0x1000                                  |         r2 = 0x1000;
    0x0004988e str r2, [sp, 0x30]                                |         var_30h = r2;
    0x00049890 mov.w sl, 0                                       |         sl = 0;
    0x00049894 str.w sl, [r0]                                    |         __asm ("str.w sl, [r0]");
    0x00049898 cmp r3, 0x40                                      |         
    0x0004989a mov r2, r3                                        |         r2 = r3;
    0x0004989c it lt                                             |         
                                                                 |         if (r3 >= 0x40) {
    0x0004989e movlt r2, 0x40                                    |             r2 = 0x40;
                                                                 |         }
    0x000498a0 adds r2, 7                                        |         r2 += 7;
    0x000498a2 bic fp, r2, 7                                     |         fp = BIT_MASK (r2, 7);
    0x000498a6 ldr r2, [sp, 0xc8]                                |         r2 = *(arg_c8h);
    0x000498a8 ands r2, r2, 2                                    |         r2 &= 2;
                                                                 |         if (r2 == r2) {
    0x000498ac beq.w 0x49c2a                                     |             goto label_33;
                                                                 |         }
    0x000498b0 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x000498b2 beq.w 0x49d9a                                     |             goto label_34;
                                                                 |         }
    0x000498b6 ldrb r2, [r6]                                     |         r2 = *(r6);
    0x000498b8 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x000498ba bne.w 0x4a122                                     |             goto label_35;
                                                                 |         }
    0x000498be movs r1, 1                                        |         r1 = 1;
    0x000498c0 str r2, [sp, 0x14]                                |         var_14h = r2;
    0x000498c2 mov r0, r1                                        |         r0 = r1;
    0x000498c4 strd r1, r6, [sp, 0x1c]                           |         __asm ("strd r1, r6, [var_1ch]");
    0x000498c8 mov.w r1, 0x14a                                   |         r1 = 0x14a;
    0x000498cc strd r0, r2, [sp, 0x28]                           |         __asm ("strd r0, r2, [var_28h]");
    0x000498d0 str r2, [sp, 0x18]                                |         var_18h = r2;
                                                                 | label_6:
    0x000498d2 str r2, [sp, 0x24]                                |         var_24h = r2;
    0x000498d4 adds r3, 7                                        |         r3 += 7;
    0x000498d6 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x000498d8 bic r3, r3, 7                                     |         r3 = BIT_MASK (r3, 7);
    0x000498dc add r1, r2                                        |         r1 += r2;
    0x000498de add.w r0, r1, fp, lsl 1                           |         r0 = r1 + (fp << 1);
    0x000498e2 movs r1, 0                                        |         r1 = 0;
    0x000498e4 add r0, r3                                        |         r0 += r3;
    0x000498e6 bl 0x18ae0                                        |         fcn_00018ae0 (r0);
    0x000498ea ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x000498ec mov sl, r0                                        |         sl = r0;
    0x000498ee cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000498f0 beq.w 0x4a112                                     |             goto label_36;
                                                                 |         }
    0x000498f4 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x000498f8 adds r1, r3, 7                                    |         r1 = r3 + 7;
    0x000498fa add.w r3, r0, 0x130                               |         r3 = r0 + 0x130;
    0x000498fe bic r1, r1, 7                                     |         r1 = BIT_MASK (r1, 7);
    0x00049902 str r3, [r0, 0x40]                                |         *((r0 + 0x40)) = r3;
    0x00049904 add r1, r3                                        |         r1 += r3;
    0x00049906 add.w r0, r0, 0x100                               |         r0 += 0x100;
    0x0004990a str r1, [r0, -0xb8]                               |         *((r0 - 0xb8)) = r1;
    0x0004990e add r1, fp                                        |         r1 += fp;
    0x00049910 add.w r3, r1, fp                                  |         r3 = r1 + fp;
    0x00049914 str r1, [r0, -0xbc]                               |         *((r0 - 0xbc)) = r1;
    0x00049918 adds r3, 8                                        |         r3 += 8;
    0x0004991a str.w r0, [sl, 0xf4]                              |         __asm ("str.w r0, [sl, 0xf4]");
    0x0004991e str.w sl, [r1, fp]                                |         __asm ("str.w sl, [r1, fp]");
    0x00049922 str.w r3, [sl, 0xb8]                              |         __asm ("str.w r3, [sl, 0xb8]");
    0x00049926 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00049928 bne.w 0x4a072                                     |             goto label_37;
                                                                 |         }
    0x0004992c str.w r2, [sl, 0xbc]                              |         __asm ("str.w r2, [sl, 0xbc]");
    0x00049930 str.w r2, [sl, 0xfc]                              |         __asm ("str.w r2, [sl, 0xfc]");
                                                                 | label_18:
    0x00049934 ldr r3, [sp, 0xcc]                                |         r3 = *(arg_cch);
    0x00049936 str.w sb, [sl]                                    |         __asm ("str.w sb, [sl]");
    0x0004993a str.w r3, [sl, 0x98]                              |         __asm ("str.w r3, [sl, 0x98]");
    0x0004993e ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00049940 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00049942 beq.w 0x4a0e6                                     |             goto label_38;
                                                                 |         }
    0x00049946 ldrb r3, [r3]                                     |         r3 = *(r3);
    0x00049948 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0004994a bne.w 0x49ffe                                     |             goto label_39;
                                                                 |         }
    0x0004994e ldr r2, [sp, 0xcc]                                |         r2 = *(arg_cch);
    0x00049950 str r3, [sp, 0x18]                                |         var_18h = r3;
    0x00049952 and r2, r2, 1                                     |         r2 &= 1;
    0x00049956 mov r7, r2                                        |         r7 = r2;
                                                                 | label_17:
    0x00049958 movs r3, 1                                        |         r3 = 1;
    0x0004995a strb.w r3, [sl, 0xd]                              |         *((sl + 0xd)) = r3;
    0x0004995e str r3, [sp, 0x14]                                |         var_14h = r3;
    0x00049960 movw r3, 0x401                                    |         r3 = 0x401;
    0x00049964 strh.w r3, [sl, 0x11]                             |         *((sl + 0x11)) = r3;
                                                                 | label_22:
    0x00049968 mov.w r2, -1                                      |         r2 = -1;
    0x0004996c add r1, sp, 0x30                                  |         r1 += var_30h;
    0x0004996e mov r0, sl                                        |         r0 = sl;
    0x00049970 bl 0x1906c                                        |         r0 = fcn_0001906c (r0, r1, r2);
    0x00049974 mov fp, r0                                        |         
    0x00049976 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00049978 bne.w 0x49dc6                                     |             goto label_16;
                                                                 |         }
    0x0004997c ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0004997e str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00049980 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00049982 eor sb, r3, 1                                     |         sb = r3 ^ 1;
                                                                 |         if (r3 == 0) {
    0x00049986 cbnz r3, 0x4998e                                  |             
    0x00049988 ldr.w fp, [pc, 0x2e0]                             |             
    0x0004998c add fp, pc                                        |             fp = "Invalid key value";
                                                                 |         }
    0x0004998e ldr.w r3, [sl, 0xf4]                              |         r3 = *((sl + 0xf4));
    0x00049992 movs r2, 0x30                                     |         r2 = 0x30;
    0x00049994 movs r1, 0                                        |         r1 = 0;
    0x00049996 mov r0, r3                                        |         r0 = r3;
    0x00049998 blx 0x97d4                                        |         fcn_000097d4 ();
    0x0004999c vldr d16, [pc, 0x2b0]                             |         __asm ("vldr d16, aav.0x000000ff");
    0x000499a0 vldr d17, [pc, 0x2b4]                             |         __asm ("vldr d17, aav.0x000000ff");
    0x000499a4 add.w r2, r0, 0x10                                |         r2 = r0 + 0x10;
    0x000499a8 strb.w sb, [r0, 0x20]                             |         *((r0 + 0x20)) = sb;
    0x000499ac mov r3, r0                                        |         r3 = r0;
    0x000499ae str.w fp, [r0, 0x24]                              |         __asm ("str.w fp, [r0, 0x24]");
    0x000499b2 str.w sl, [r0, 0x28]                              |         __asm ("str.w sl, [r0, 0x28]");
    0x000499b6 movs r0, 2                                        |         r0 = 2;
    0x000499b8 strb.w r0, [r3, 0x21]                             |         *((r3 + 0x21)) = r0;
    0x000499bc mov r0, r3                                        |         r0 = r3;
    0x000499be ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x000499c0 vst1.32 {d16, d17}, [r2]                          |         __asm ("vst1.32 {d16, d17}, [r2]");
    0x000499c4 bl 0xb3f0                                         |         r0 = fcn_0000b3f0 (r0, r1);
    0x000499c8 mov sb, r0                                        |         sb = r0;
    0x000499ca cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000499cc bne.w 0x49dc4                                     |             goto label_40;
                                                                 |         }
    0x000499d0 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x000499d2 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x000499d4 strb.w r7, [sl, 0xe]                              |         *((sl + 0xe)) = r7;
    0x000499d8 strb.w r3, [sl, 0xf]                              |         *((sl + 0xf)) = r3;
    0x000499dc uxtb r3, r2                                       |         r3 = (int8_t) r2;
    0x000499de strb.w r3, [sl, 0xc]                              |         *((sl + 0xc)) = r3;
    0x000499e2 strb.w r3, [sl, 4]                                |         *((sl + 4)) = r3;
    0x000499e6 strb.w r3, [sl, 0x13]                             |         *((sl + 0x13)) = r3;
    0x000499ea strb.w r3, [sl, 7]                                |         *((sl + 7)) = r3;
    0x000499ee ldr r3, [sp, 0xc8]                                |         r3 = *(arg_c8h);
    0x000499f0 and fp, r3, 1                                     |         
    0x000499f4 mvn r3, 0xc0000000                                |         r3 = ~0xc0000000;
    0x000499f8 str.w r3, [sl, 0xa0]                              |         __asm ("str.w r3, [sl, 0xa0]");
    0x000499fc eor r3, fp, 1                                     |         r3 = fp ^ 1;
    0x00049a00 strb.w r3, [sl, 6]                                |         *((sl + 6)) = r3;
                                                                 |         if (r2 == 0) {
    0x00049a04 cbnz r2, 0x49a10                                  |             
    0x00049a06 movs r3, 1                                        |             
    0x00049a08 movt r3, 0xa02                                    |             r3 = 0xa020001;
    0x00049a0c str.w r3, [sl, 8]                                 |             __asm ("str.w r3, [sl, 8]");
                                                                 |         }
    0x00049a10 vmov.i8 d16, 0xff                                 |         __asm ("vmov.i8 d16, 0xff");
    0x00049a14 movs r3, 0x58                                     |         r3 = 0x58;
    0x00049a16 mov r0, sl                                        |         r0 = sl;
    0x00049a18 strh.w r3, [sl, 0x94]                             |         *((sl + 0x94)) = r3;
    0x00049a1c vstr d16, [sl, 0xb0]                              |         __asm ("vstr d16, [sl, 0xb0]");
    0x00049a20 bl 0x127a4                                        |         fcn_000127a4 (r0);
    0x00049a24 cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x00049a28 beq.w 0x4a180                                     |             goto label_41;
                                                                 |         }
    0x00049a2c movs r3, 2                                        |         r3 = 2;
    0x00049a2e strb.w r3, [sl, 5]                                |         *((sl + 5)) = r3;
                                                                 | label_21:
    0x00049a32 ldr r2, [pc, 0x23c]                               |         
    0x00049a34 ldr.w r3, [sl, 0x2c]                              |         r3 = *((sl + 0x2c));
    0x00049a38 add r2, pc                                        |         r2 = 0x936ae;
    0x00049a3a str.w r2, [sl, 0xd8]                              |         __asm ("str.w r2, [sl, 0xd8]");
    0x00049a3e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00049a40 bne.w 0x4a17a                                     |             goto label_42;
                                                                 |         }
    0x00049a44 ldrb.w r3, [sl, 0x17]                             |         r3 = *((sl + 0x17));
    0x00049a48 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00049a4a beq.w 0x4a208                                     |             goto label_43;
                                                                 |         }
    0x00049a4e ldr.w r3, [sl, 0xe0]                              |         r3 = *((sl + 0xe0));
    0x00049a52 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00049a54 beq.w 0x4a218                                     |             goto label_44;
                                                                 |         }
    0x00049a58 ldr r3, [pc, 0x218]                               |         
    0x00049a5a add r3, pc                                        |         r3 = 0x936d2;
                                                                 | label_20:
    0x00049a5c str.w r3, [sl, 0xdc]                              |         __asm ("str.w r3, [sl, 0xdc]");
    0x00049a60 ldr.w r3, [sl, 0x40]                              |         r3 = *((sl + 0x40));
    0x00049a64 ldrd r0, r1, [r8, 0x30]                           |         __asm ("ldrd r0, r1, [r8, 0x30]");
    0x00049a68 str.w sl, [r5]                                    |         __asm ("str.w sl, [r5]");
    0x00049a6c ldr r3, [r3]                                      |         r3 = *(r3);
    0x00049a6e strd r0, r1, [sl, 0x88]                           |         __asm ("strd r0, r1, [sl, 0x88]");
                                                                 |         if (r3 != 0) {
    0x00049a72 cbz r3, 0x49a84                                   |             
    0x00049a74 ldr r3, [r3]                                      |             r3 = *(r3);
    0x00049a76 cmp r3, 2                                         |             
                                                                 |             if (r3 <= 2) {
    0x00049a78 ble 0x49a84                                       |                 goto label_45;
                                                                 |             }
    0x00049a7a mov r0, sl                                        |             r0 = sl;
    0x00049a7c bl 0x127e4                                        |             fcn_000127e4 (r0);
    0x00049a80 ldr.w sl, [r5]                                    |             sl = *(r5);
                                                                 |         }
                                                                 | label_45:
    0x00049a84 add r3, sp, 0x38                                  |         r3 += var_38h;
    0x00049a86 movs r2, 0x64                                     |         r2 = 0x64;
    0x00049a88 mov r0, r3                                        |         r0 = r3;
    0x00049a8a movs r1, 0                                        |         r1 = 0;
    0x00049a8c blx 0x97d4                                        |         r0 = fcn_000097d4 ();
    0x00049a90 mov r3, r0                                        |         r3 = r0;
    0x00049a92 ldr.w r0, [sl, 0x40]                              |         r0 = *((sl + 0x40));
    0x00049a96 ldr r2, [r0]                                      |         r2 = *(r0);
    0x00049a98 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00049a9a beq.w 0x49f0a                                     |             goto label_46;
                                                                 |         }
    0x00049a9e vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x00049aa2 mov r1, r3                                        |         r1 = r3;
    0x00049aa4 vstr d16, [sp]                                    |         __asm ("vstr d16, [sp]");
    0x00049aa8 ldr r3, [r2, 8]                                   |         r3 = *((r2 + 8));
    0x00049aaa movs r2, 0x64                                     |         r2 = 0x64;
    0x00049aac blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00049aae movw r3, 0x20a                                    |         r3 = 0x20a;
    0x00049ab2 mov fp, r0                                        |         
    0x00049ab4 cmp r0, 0                                         |         
    0x00049ab6 it ne                                             |         
                                                                 |         if (r0 != 0) {
    0x00049ab8 cmpne r0, r3                                      |             __asm ("cmpne r0, r3");
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x00049aba beq.w 0x49f0a                                     |             goto label_46;
                                                                 |         }
                                                                 | label_7:
    0x00049abe ldr r0, [r5]                                      |         r0 = *(r5);
    0x00049ac0 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00049ac2 beq.w 0x49c88                                     |             goto label_47;
                                                                 |         }
    0x00049ac6 movs r1, 0                                        |         r1 = 0;
    0x00049ac8 bl 0x496c8                                        |         fcn_000496c8 (r0, r1);
    0x00049acc b 0x49c88                                         |         goto label_47;
                                                                 | label_29:
    0x00049ace cmp r0, 0                                         |         
    0x00049ad0 beq.w 0x4982e                                     |         
                                                                 |     } while (r0 == 0);
    0x00049ad4 ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x00049ad6 ands r3, r3, 0x80                                 |     r3 &= 0x80;
    0x00049ada str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     if (r3 != r3) {
    0x00049adc bne.w 0x49c1c                                     |         goto label_48;
                                                                 |     }
    0x00049ae0 movs r0, 0x30                                     |     r0 = 0x30;
    0x00049ae2 movs r1, 0                                        |     r1 = 0;
    0x00049ae4 bl 0x18ae0                                        |     r0 = fcn_00018ae0 (r0);
    0x00049ae8 mov r4, r0                                        |     r4 = r0;
    0x00049aea cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00049aec beq.w 0x4a174                                     |         goto label_30;
                                                                 |     }
    0x00049af0 movs r3, 1                                        |     r3 = 1;
    0x00049af2 ldr r7, [sp, 0xc]                                 |     r7 = var_ch;
    0x00049af4 str r3, [r0, 0x24]                                |     *((r0 + 0x24)) = r3;
    0x00049af6 ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x00049af8 strb r7, [r0, 8]                                  |     *((r0 + 8)) = r7;
    0x00049afa str.w r8, [r0]                                    |     __asm ("str.w r8, [r0]");
    0x00049afe lsls r3, r3, 0xe                                  |     r3 <<= 0xe;
    0x00049b00 str r0, [r0, 0x20]                                |     *((r0 + 0x20)) = r0;
                                                                 |     if (r3 < r3) {
    0x00049b02 bmi 0x49b5c                                       |         goto label_49;
                                                                 |     }
    0x00049b04 b 0x49874                                         |     goto label_0;
                                                                 | label_28:
    0x00049b06 ldrb.w r5, [r8, 0x56]                             |     r5 = *((r8 + 0x56));
    0x00049b0a cmp r5, 1                                         |     
                                                                 |     if (r5 != 1) {
    0x00049b0c bne.w 0x4982c                                     |         goto label_1;
                                                                 |     }
    0x00049b10 ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x00049b12 ands r3, r3, 0x80                                 |     r3 &= 0x80;
    0x00049b16 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     if (r3 != r3) {
    0x00049b18 bne.w 0x4982e                                     |         goto label_2;
                                                                 |     }
    0x00049b1c ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x00049b1e lsls r4, r3, 0x17                                 |     r4 = r3 << 0x17;
                                                                 |     if (r4 < r3) {
    0x00049b20 bmi.w 0x49844                                     |         goto label_3;
                                                                 |     }
    0x00049b24 movs r0, 0x30                                     |     r0 = 0x30;
    0x00049b26 movs r1, 0                                        |     r1 = 0;
    0x00049b28 bl 0x18ae0                                        |     r0 = fcn_00018ae0 (r0);
    0x00049b2c mov r4, r0                                        |     r4 = r0;
    0x00049b2e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00049b30 beq.w 0x4a174                                     |         goto label_30;
                                                                 |     }
    0x00049b34 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00049b36 str r5, [r4, 0x24]                                |     *((r4 + 0x24)) = r5;
    0x00049b38 str.w r8, [r4]                                    |     __asm ("str.w r8, [r4]");
    0x00049b3c strb r3, [r4, 8]                                  |     *((r4 + 8)) = r3;
    0x00049b3e str r4, [r4, 0x20]                                |     *((r4 + 0x20)) = r4;
    0x00049b40 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00049b42 b 0x49876                                         |     goto label_4;
                                                                 | label_31:
    0x00049b44 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
                                                                 |     if (r3 != 0) {
    0x00049b46 cbz r3, 0x49b4e                                   |         
    0x00049b48 ldr r3, [sp, 0xcc]                                |         r3 = *(arg_cch);
    0x00049b4a lsls r0, r3, 0x19                                 |         r0 = r3 << 0x19;
                                                                 |         if (r0 >= r3) {
    0x00049b4c bpl 0x49c18                                       |             goto label_50;
                                                                 |         }
                                                                 |     }
    0x00049b4e ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x00049b50 ands r7, r3, 0x20000                              |     r7 = r3 & 0x20000;
                                                                 |     if (r7 == r3) {
    0x00049b54 beq.w 0x49874                                     |         goto label_0;
                                                                 |     }
    0x00049b58 movs r5, 1                                        |     r5 = 1;
                                                                 |     if (r6 != 0) {
    0x00049b5a cbz r6, 0x49b68                                   |         
                                                                 | label_49:
    0x00049b5c mov r0, r6                                        |         r0 = r6;
    0x00049b5e blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00049b62 bic r5, r0, 0xc0000000                            |         r5 = BIT_MASK (r0, 0xc0000000);
    0x00049b66 adds r5, 1                                        |         r5++;
                                                                 |     }
    0x00049b68 ldr.w r7, [sb, 8]                                 |     r7 = *((sb + 8));
    0x00049b6c adds r7, 1                                        |     r7++;
    0x00049b6e cmp r7, r5                                        |     
    0x00049b70 mov r0, r7                                        |     r0 = r7;
    0x00049b72 it lt                                             |     
                                                                 |     if (r7 >= r5) {
    0x00049b74 movlt r0, r5                                      |         r0 = r5;
                                                                 |     }
    0x00049b76 asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x00049b78 bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x00049b7c movs r3, 1                                        |     r3 = 1;
    0x00049b7e mov sl, r0                                        |     sl = r0;
    0x00049b80 strb r3, [r4, 9]                                  |     *((r4 + 9)) = r3;
    0x00049b82 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00049b84 beq.w 0x4a16e                                     |         goto label_51;
                                                                 |     }
    0x00049b88 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00049b8a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00049b8c bne 0x49c20                                       |         goto label_52;
                                                                 |     }
    0x00049b8e ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00049b90 mov r2, r7                                        |     r2 = r7;
    0x00049b92 mov r1, r6                                        |     r1 = r6;
    0x00049b94 strb r3, [r0]                                     |     *(r0) = r3;
    0x00049b96 mov r3, r0                                        |     r3 = r0;
    0x00049b98 ldr.w r5, [sb, 0x24]                              |     r5 = *((sb + 0x24));
    0x00049b9c mov r0, sb                                        |     r0 = sb;
    0x00049b9e blx r5                                            |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00049ba0 bics r3, r0, 0x200                                |     __asm ("bics r3, r0, aav.0x000000ff");
    0x00049ba4 mov fp, r0                                        |     
                                                                 |     if (r3 != 0) {
    0x00049ba6 bne.w 0x49ef2                                     |         goto label_53;
                                                                 |     }
                                                                 | label_5:
    0x00049baa ldr r3, [pc, 0xcc]                                |     
    0x00049bac add r3, pc                                        |     r3 = 0x9382a;
    0x00049bae ldrb r7, [r3, 4]                                  |     r7 = *((r3 + 4));
    0x00049bb0 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00049bb2 beq.w 0x49ffa                                     |         goto label_54;
                                                                 |     }
    0x00049bb6 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x00049bb8 movs r0, 4                                        |     r0 = 4;
    0x00049bba blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00049bbc str r0, [sp, 8]                                   |     var_8h = r0;
                                                                 | label_15:
    0x00049bbe ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00049bc0 blx 0xa12c                                        |     fcn_0000a12c ();
    0x00049bc4 ldr r3, [pc, 0xb4]                                |     
    0x00049bc6 add r3, pc                                        |     r3 = 0x93846;
    0x00049bc8 ldrb r2, [r3, 4]                                  |     r2 = *((r3 + 4));
    0x00049bca mov fp, r2                                        |     
                                                                 |     if (r2 != 0) {
    0x00049bcc cbz r2, 0x49bd6                                   |         
    0x00049bce ldr r3, [r3, 0x48]                                |         r3 = *((r3 + 0x48));
    0x00049bd0 movs r0, 2                                        |         r0 = 2;
    0x00049bd2 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00049bd4 mov fp, r0                                        |         
                                                                 |     }
    0x00049bd6 mov r0, fp                                        |     r0 = fp;
    0x00049bd8 blx 0xa12c                                        |     fcn_0000a12c ();
    0x00049bdc ldr r3, [pc, 0xa0]                                |     
    0x00049bde add r3, pc                                        |     r3 = 0x93862;
    0x00049be0 ldr.w r5, [r3, 0x510]                             |     r5 = *(0x93d72);
                                                                 |     if (r5 == 0) {
    0x00049be4 cbz r5, 0x49c0a                                   |         goto label_55;
                                                                 |     }
    0x00049be6 ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00049be8 str r6, [sp, 0x14]                                |     var_14h = r6;
                                                                 |     do {
    0x00049bea ldr r6, [r5]                                      |         r6 = *(r5);
    0x00049bec mov r0, sl                                        |         r0 = sl;
    0x00049bee ldr.w r1, [r6, 0xb8]                              |         r1 = *((r6 + 0xb8));
    0x00049bf2 blx 0x9fb0                                        |         r0 = fcn_00009fb0 ();
                                                                 |         if (r0 == 0) {
    0x00049bf6 cbnz r0, 0x49c00                                  |             
    0x00049bf8 ldr r3, [r6]                                      |             r3 = *(r6);
    0x00049bfa cmp sb, r3                                        |             
                                                                 |             if (sb == r3) {
    0x00049bfc beq.w 0x49de8                                     |                 goto label_56;
                                                                 |             }
                                                                 |         }
    0x00049c00 ldr r5, [r5, 0x48]                                |         r5 = *((r5 + 0x48));
    0x00049c02 cmp r5, 0                                         |         
    0x00049c04 bne 0x49bea                                       |         
                                                                 |     } while (r5 != 0);
    0x00049c06 ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x00049c08 str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_55:
    0x00049c0a mov r0, fp                                        |     r0 = fp;
    0x00049c0c blx 0x9d10                                        |     fcn_00009d10 ();
    0x00049c10 mov r0, sl                                        |     r0 = sl;
    0x00049c12 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00049c16 b 0x49876                                         |     goto label_4;
                                                                 | label_50:
    0x00049c18 str r5, [sp, 8]                                   |     var_8h = r5;
    0x00049c1a b 0x49876                                         |     goto label_4;
                                                                 | label_48:
    0x00049c1c movs r5, 0                                        |     r5 = 0;
    0x00049c1e b 0x4982e                                         |     goto label_2;
                                                                 | label_52:
    0x00049c20 mov r2, r5                                        |     r2 = r5;
    0x00049c22 mov r1, r6                                        |     r1 = r6;
    0x00049c24 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00049c28 b 0x49baa                                         |     goto label_5;
                                                                 | label_33:
    0x00049c2a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00049c2c beq.w 0x49db0                                     |         goto label_57;
                                                                 |     }
    0x00049c30 ldrb r1, [r6]                                     |     r1 = *(r6);
    0x00049c32 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00049c34 bne 0x49cc6                                       |         
    0x00049c36 movs r1, 1                                        |         r1 = 1;
    0x00049c38 str r2, [sp, 0x28]                                |         var_28h = r2;
    0x00049c3a str r1, [sp, 0x1c]                                |         var_1ch = r1;
    0x00049c3c mov.w r1, 0x14a                                   |         r1 = 0x14a;
    0x00049c40 str r6, [sp, 0x20]                                |         var_20h = r6;
    0x00049c42 str r2, [sp, 0x14]                                |         var_14h = r2;
    0x00049c44 str r2, [sp, 0x2c]                                |         var_2ch = r2;
    0x00049c46 str r2, [sp, 0x18]                                |         var_18h = r2;
    0x00049c48 b 0x498d2                                         |         goto label_6;
                                                                 | label_32:
    0x00049c84 mov.w fp, 7                                       |         
                                                                 | label_47:
    0x00049c88 mov r0, r5                                        |         r0 = r5;
    0x00049c8a blx 0x9c24                                        |         fcn_00009c24 ();
    0x00049c8e mov r0, r4                                        |         r0 = r4;
    0x00049c90 blx 0x9c24                                        |         fcn_00009c24 ();
    0x00049c94 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00049c96 movs r3, 0                                        |         r3 = 0;
    0x00049c98 str r3, [r2]                                      |         *(r2) = r3;
                                                                 | label_8:
    0x00049c9a ldr r3, [sp, 8]                                   |         r3 = var_8h;
                                                                 |         if (r3 != 0) {
    0x00049c9c cbz r3, 0x49ca4                                   |             
    0x00049c9e mov r0, r3                                        |             r0 = r3;
    0x00049ca0 blx 0x9d10                                        |             fcn_00009d10 ();
                                                                 |         }
                                                                 | label_12:
    0x00049ca4 ldr.w r2, [pc, 0x57c]                             |         
    0x00049ca8 ldr.w r3, [pc, 0x57c]                             |         r3 = *(0x4a228);
    0x00049cac add r2, pc                                        |         r2 = 0x93ed4;
    0x00049cae ldr r3, [r2, r3]                                  |         r3 = *(0x93ed4);
    0x00049cb0 ldr r2, [r3]                                      |         r2 = *(0x93ed4);
    0x00049cb2 ldr r3, [sp, 0x9c]                                |         r3 = var_9ch;
    0x00049cb4 eors r2, r3                                       |         r2 ^= r3;
    0x00049cb6 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00049cba bne.w 0x4a21e                                     |             goto label_58;
                                                                 |         }
    0x00049cbe mov r0, fp                                        |         r0 = fp;
    0x00049cc0 add sp, 0xa4                                      |         
    0x00049cc2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00049cc6 ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x00049cca str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00049ccc add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x00049cd0 lsl.w r0, sl, 1                                   |     r0 = sl << 1;
    0x00049cd4 asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x00049cd6 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x00049cda mov r3, r0                                        |     r3 = r0;
    0x00049cdc str r0, [sp, 0x18]                                |     var_18h = r0;
    0x00049cde cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00049ce0 beq.w 0x4a11c                                     |         goto label_59;
                                                                 |     }
    0x00049ce4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00049ce6 mov r1, r6                                        |     r1 = r6;
    0x00049ce8 strb r2, [r0]                                     |     *(r0) = r2;
    0x00049cea mov r2, sl                                        |     r2 = sl;
    0x00049cec ldr.w r7, [sb, 0x24]                              |     r7 = *((sb + 0x24));
    0x00049cf0 mov r0, sb                                        |     r0 = sb;
    0x00049cf2 blx r7                                            |     uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00049cf4 str r0, [sp, 0x28]                                |     var_28h = r0;
                                                                 |     if (r0 != 0) {
    0x00049cf6 cbz r0, 0x49d0e                                   |         
    0x00049cf8 cmp.w r0, 0x200                                   |         
                                                                 |         if (r0 != 0x200) {
    0x00049cfc bne 0x49d0e                                       |             goto label_60;
                                                                 |         }
    0x00049cfe ldr r2, [sp, 0xcc]                                |         r2 = *(arg_cch);
    0x00049d00 movw r3, 0x60e                                    |         r3 = 0x60e;
    0x00049d04 ands r2, r2, 0x1000000                            |         r2 &= 0x1000000;
    0x00049d08 it eq                                             |         
                                                                 |         if (r2 != r2) {
    0x00049d0a moveq r3, r2                                      |             r3 = r2;
                                                                 |         }
    0x00049d0c str r3, [sp, 0x28]                                |         var_28h = r3;
                                                                 |     }
                                                                 | label_60:
    0x00049d0e ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00049d10 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00049d14 bic r3, r0, 0xc0000000                            |     r3 = BIT_MASK (r0, 0xc0000000);
    0x00049d18 mov r0, r6                                        |     r0 = r6;
    0x00049d1a mov r7, r3                                        |     r7 = r3;
    0x00049d1c str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00049d1e blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00049d22 bic r3, r0, 0xc0000000                            |     r3 = BIT_MASK (r0, 0xc0000000);
    0x00049d26 mov r2, r7                                        |     r2 = r7;
    0x00049d28 adds r3, 1                                        |     r3++;
    0x00049d2a ldrb r1, [r6, r3]                                 |     r1 = *((r6 + r3));
    0x00049d2c adds r3, r6, r3                                   |     r3 = r6 + r3;
    0x00049d2e str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00049d30 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00049d32 beq.w 0x4a20e                                     |         goto label_61;
                                                                 |     }
    0x00049d36 ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00049d38 mov sl, r8                                        |     sl = r8;
    0x00049d3a str r4, [sp, 0x1c]                                |     var_1ch = r4;
    0x00049d3c mov r8, r6                                        |     r8 = r6;
    0x00049d3e mov r4, r3                                        |     r4 = r3;
    0x00049d40 mov r6, r2                                        |     r6 = r2;
                                                                 |     do {
    0x00049d42 mov r0, r4                                        |         r0 = r4;
    0x00049d44 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00049d48 adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x00049d4a add r4, r2                                        |         r4 += r2;
    0x00049d4c mov r0, r4                                        |         r0 = r4;
    0x00049d4e blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00049d52 adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x00049d54 ldrb r1, [r4, r3]                                 |         r1 = *((r4 + r3));
    0x00049d56 add r4, r3                                        |         r4 += r3;
    0x00049d58 cmp r1, 0                                         |         
    0x00049d5a bne 0x49d42                                       |         
                                                                 |     } while (r1 != 0);
    0x00049d5c mov r2, r6                                        |     r2 = r6;
    0x00049d5e mov r6, r8                                        |     r6 = r8;
    0x00049d60 mov r8, sl                                        |     r8 = sl;
    0x00049d62 mov sl, r4                                        |     sl = r4;
    0x00049d64 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00049d66 str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_26:
    0x00049d68 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00049d6a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00049d6c bne.w 0x4a1e0                                     |         goto label_62;
                                                                 |     }
    0x00049d70 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00049d72 ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x00049d76 adds r1, r0, 7                                    |     r1 = r0 + 7;
    0x00049d78 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x00049d7a bge.w 0x4a190                                     |         goto label_63;
                                                                 |     }
    0x00049d7e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00049d80 add.w r1, r0, r0, lsl 1                           |     r1 = r0 + (r0 << 1);
    0x00049d84 add.w sl, sl, 1                                   |     sl++;
    0x00049d88 str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00049d8a add.w r1, r1, 0x14a                               |     r1 += 0x14a;
    0x00049d8e sub.w r3, sl, r3                                  |     r3 = sl - r3;
    0x00049d92 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00049d94 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x00049d98 b 0x498d2                                         |     goto label_6;
                                                                 | label_34:
    0x00049d9a movs r2, 1                                        |     r2 = 1;
    0x00049d9c mov.w r1, 0x14a                                   |     r1 = 0x14a;
    0x00049da0 strd r2, r6, [sp, 0x1c]                           |     __asm ("strd r2, r6, [var_1ch]");
    0x00049da4 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00049da6 mov r2, r6                                        |     r2 = r6;
    0x00049da8 str r6, [sp, 0x2c]                                |     var_2ch = r6;
    0x00049daa str r6, [sp, 0x18]                                |     var_18h = r6;
    0x00049dac str r6, [sp, 0x14]                                |     var_14h = r6;
    0x00049dae b 0x498d2                                         |     goto label_6;
                                                                 | label_57:
    0x00049db0 movs r1, 1                                        |     r1 = 1;
    0x00049db2 str r6, [sp, 0x28]                                |     var_28h = r6;
    0x00049db4 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x00049db6 mov.w r1, 0x14a                                   |     r1 = 0x14a;
    0x00049dba str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00049dbc str r6, [sp, 0x2c]                                |     var_2ch = r6;
    0x00049dbe str r6, [sp, 0x18]                                |     var_18h = r6;
    0x00049dc0 str r6, [sp, 0x14]                                |     var_14h = r6;
    0x00049dc2 b 0x498d2                                         |     goto label_6;
                                                                 | label_40:
    0x00049dc4 mov fp, r0                                        |     
                                                                 | label_16:
    0x00049dc6 ldr.w r6, [sl, 0x40]                              |     r6 = *((sl + 0x40));
    0x00049dca ldr r3, [r6]                                      |     r3 = *(r6);
                                                                 |     if (r3 != 0) {
    0x00049dcc cbz r3, 0x49dd8                                   |         
    0x00049dce ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00049dd0 mov r0, r6                                        |         r0 = r6;
    0x00049dd2 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00049dd4 movs r3, 0                                        |         r3 = 0;
    0x00049dd6 str r3, [r6]                                      |         *(r6) = r3;
                                                                 |     }
    0x00049dd8 ldr.w r0, [sl, 0xf0]                              |     r0 = *((sl + 0xf0));
    0x00049ddc bl 0xec68                                         |     fcn_0000ec68 (r0);
    0x00049de0 mov r0, sl                                        |     r0 = sl;
    0x00049de2 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00049de6 b 0x49abe                                         |     goto label_7;
                                                                 | label_56:
    0x00049de8 ldr.w r1, [r8, 0x14]                              |     r1 = *((r8 + 0x14));
    0x00049dec str r7, [sp, 8]                                   |     var_8h = r7;
    0x00049dee subs r2, r1, 1                                    |     r2 = r1 - 1;
                                                                 |     if (r2 < r1) {
    0x00049df0 bmi 0x49e10                                       |         goto label_64;
                                                                 |     }
    0x00049df2 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x00049df6 add.w r3, r3, r1, lsl 4                           |     r3 += (r1 << 4);
                                                                 |     do {
    0x00049dfa ldr r1, [r3, -0xc]                                |         r1 = *((r3 - 0xc));
                                                                 |         if (r1 != 0) {
    0x00049dfe cbz r1, 0x49e06                                   |             
    0x00049e00 ldr r1, [r1, 4]                                   |             r1 = *((r1 + 4));
    0x00049e02 cmp r1, r5                                        |             
                                                                 |             if (r1 == r5) {
    0x00049e04 beq 0x49ee2                                       |                 goto label_65;
                                                                 |             }
                                                                 |         }
    0x00049e06 subs r2, 1                                        |         r2--;
    0x00049e08 subs r3, 0x10                                     |         r3 -= 0x10;
    0x00049e0a adds r1, r2, 1                                    |         r1 = r2 + 1;
    0x00049e0c bne 0x49dfa                                       |         
                                                                 |     } while (r1 != r2);
    0x00049e0e str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_64:
    0x00049e10 ldr r3, [r5, 0x44]                                |     r3 = *((r5 + 0x44));
    0x00049e12 mov r0, fp                                        |     r0 = fp;
    0x00049e14 str r5, [r4, 4]                                   |     *((r4 + 4)) = r5;
    0x00049e16 adds r3, 1                                        |     r3++;
    0x00049e18 str r3, [r5, 0x44]                                |     *((r5 + 0x44)) = r3;
    0x00049e1a blx 0x9d10                                        |     fcn_00009d10 ();
    0x00049e1e mov r0, sl                                        |     r0 = sl;
    0x00049e20 blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_14:
    0x00049e24 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00049e26 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00049e28 beq 0x49ea2                                       |         goto label_13;
                                                                 |     }
    0x00049e2a ldr.w r6, [r8, 0x14]                              |     r6 = *((r8 + 0x14));
    0x00049e2e cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x00049e30 ble 0x49e4c                                       |         goto label_66;
                                                                 |     }
    0x00049e32 ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x00049e36 movs r1, 0                                        |     r1 = 0;
    0x00049e38 ldr r7, [sp, 8]                                   |     r7 = var_8h;
                                                                 |     do {
    0x00049e3a ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
                                                                 |         if (r3 != 0) {
    0x00049e3c cbz r3, 0x49e42                                   |             
    0x00049e3e ldrb r0, [r3, 9]                                  |             r0 = *((r3 + 9));
                                                                 |             if (r0 != 0) {
    0x00049e40 cbnz r0, 0x49e88                                  |                 goto label_67;
                                                                 |             }
                                                                 |         }
    0x00049e42 adds r1, 1                                        |         r1++;
    0x00049e44 adds r2, 0x10                                     |         r2 += 0x10;
    0x00049e46 cmp r1, r6                                        |         
    0x00049e48 bne 0x49e3a                                       |         
                                                                 |     } while (r1 != r6);
    0x00049e4a str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_66:
    0x00049e4c ldr r6, [r4, 4]                                   |     r6 = *((r4 + 4));
                                                                 | label_9:
    0x00049e4e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00049e50 str r4, [r3]                                      |     *(r3) = r4;
    0x00049e52 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00049e54 ldrb r2, [r4, 0xa]                                |     r2 = *((r4 + 0xa));
    0x00049e56 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00049e58 str r1, [r4, 0xc]                                 |     *((r4 + 0xc)) = r1;
                                                                 |     if (r2 == 0) {
    0x00049e5a cbnz r2, 0x49e6a                                  |         
    0x00049e5c mov r0, r4                                        |         r0 = r4;
    0x00049e5e bl 0x11258                                        |         fcn_00011258 (r0);
    0x00049e62 ldrb r3, [r4, 9]                                  |         r3 = *((r4 + 9));
                                                                 |         if (r3 == 0) {
    0x00049e64 cbz r3, 0x49e6e                                   |             goto label_11;
                                                                 |         }
    0x00049e66 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00049e68 subs r3, 1                                        |         r3--;
                                                                 |     }
    0x00049e6a str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
                                                                 |     if (r3 == 0) {
    0x00049e6c cbz r3, 0x49ebe                                   |         goto label_68;
                                                                 |     }
                                                                 | label_11:
    0x00049e6e ldr r3, [r6, 0x34]                                |     r3 = *((r6 + 0x34));
                                                                 |     if (r3 == 0) {
    0x00049e70 cbz r3, 0x49eae                                   |         goto label_69;
                                                                 |     }
                                                                 | label_10:
    0x00049e72 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00049e74 ldr r0, [r3, 0x40]                                |     r0 = *((r3 + 0x40));
    0x00049e76 ldr r3, [r0]                                      |     r3 = *(r0);
                                                                 |     if (r3 != 0) {
    0x00049e78 cbz r3, 0x49e82                                   |         
    0x00049e7a ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x00049e7c adds r2, r5, 4                                    |         r2 = r5 + 4;
    0x00049e7e movs r1, 0x1e                                     |         r1 = 0x1e;
    0x00049e80 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                 |     }
    0x00049e82 mov.w fp, 0                                       |     
    0x00049e86 b 0x49c9a                                         |     goto label_8;
                                                                 |     do {
                                                                 | label_67:
    0x00049e88 mov r2, r3                                        |         r2 = r3;
    0x00049e8a ldr r3, [r3, 0x1c]                                |         r3 = *((r3 + 0x1c));
    0x00049e8c cmp r3, 0                                         |         
    0x00049e8e bne 0x49e88                                       |         
                                                                 |     } while (r3 != 0);
    0x00049e90 ldr r6, [r4, 4]                                   |     r6 = *((r4 + 4));
    0x00049e92 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00049e94 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00049e96 cmp r1, r6                                        |     
                                                                 |     if (r1 < r6) {
    0x00049e98 bls 0x49ec6                                       |         goto label_70;
                                                                 |     }
    0x00049e9a strd r2, r3, [r4, 0x18]                           |     __asm ("strd r2, r3, [r4, 0x18]");
    0x00049e9e str r4, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r4;
    0x00049ea0 b 0x49e4e                                         |     goto label_9;
                                                                 | label_13:
    0x00049ea2 ldr r6, [r4, 4]                                   |     r6 = *((r4 + 4));
    0x00049ea4 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00049ea6 str r4, [r3]                                      |     *(r3) = r4;
    0x00049ea8 ldr r3, [r6, 0x34]                                |     r3 = *((r6 + 0x34));
    0x00049eaa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00049eac bne 0x49e72                                       |         goto label_10;
                                                                 |     }
                                                                 | label_69:
    0x00049eae movw r1, 0xf830                                   |     
    0x00049eb2 mov r0, r4                                        |     r0 = r4;
    0x00049eb4 movt r1, 0xffff                                   |     r1 = 0xfffff830;
    0x00049eb8 bl 0x16590                                        |     fcn_00016590 (r0, r1);
    0x00049ebc b 0x49e72                                         |     goto label_10;
                                                                 | label_68:
    0x00049ebe mov r0, r4                                        |     r0 = r4;
    0x00049ec0 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00049ec4 b 0x49e6e                                         |     goto label_11;
                                                                 | label_70:
    0x00049ec6 ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00049ec8 b 0x49ed0                                         |     
                                                                 |     while (r2 != 0) {
    0x00049eca ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x00049ecc cmp r3, r6                                        |         
                                                                 |         if (r3 >= r6) {
    0x00049ece bhs 0x49f00                                       |             goto label_71;
                                                                 |         }
    0x00049ed0 mov r1, r2                                        |         r1 = r2;
    0x00049ed2 ldr r2, [r2, 0x18]                                |         r2 = *((r2 + 0x18));
    0x00049ed4 cmp r2, 0                                         |         
    0x00049ed6 bne 0x49eca                                       |         
                                                                 |     }
    0x00049ed8 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00049eda strd r2, r1, [r4, 0x18]                           |     __asm ("strd r2, r1, [r4, 0x18]");
                                                                 |     do {
    0x00049ede str r4, [r1, 0x18]                                |         *((r1 + 0x18)) = r4;
    0x00049ee0 b 0x49e4e                                         |         goto label_9;
                                                                 | label_65:
    0x00049ee2 mov r0, fp                                        |         r0 = fp;
    0x00049ee4 mov.w fp, 0x13                                    |         
    0x00049ee8 blx 0x9d10                                        |         fcn_00009d10 ();
    0x00049eec mov r0, r7                                        |         r0 = r7;
    0x00049eee blx 0x9d10                                        |         fcn_00009d10 ();
                                                                 | label_53:
    0x00049ef2 mov r0, sl                                        |         r0 = sl;
    0x00049ef4 blx 0x9c24                                        |         fcn_00009c24 ();
    0x00049ef8 mov r0, r4                                        |         r0 = r4;
    0x00049efa blx 0x9c24                                        |         fcn_00009c24 ();
    0x00049efe b 0x49ca4                                         |         goto label_12;
                                                                 | label_71:
    0x00049f00 strd r2, r1, [r4, 0x18]                           |         __asm ("strd r2, r1, [r4, 0x18]");
    0x00049f04 str r7, [sp, 8]                                   |         var_8h = r7;
    0x00049f06 str r4, [r2, 0x1c]                                |         *((r2 + 0x1c)) = r4;
    0x00049f08 b 0x49ede                                         |         
                                                                 |     } while (1);
                                                                 | label_46:
    0x00049f0a ldr r3, [sp, 0xc8]                                |     r3 = *(arg_c8h);
    0x00049f0c ldr r0, [r5]                                      |     r0 = *(r5);
    0x00049f0e str.w r8, [r5, 4]                                 |     __asm ("str.w r8, [r5, 4]");
    0x00049f12 strb r3, [r5, 0x10]                               |     *((r5 + 0x10)) = r3;
    0x00049f14 ldr r3, [pc, 0x314]                               |     
    0x00049f16 ldr r1, [r0, 0x40]                                |     r1 = *((r0 + 0x40));
    0x00049f18 str.w r5, [r0, 0xc4]                              |     __asm ("str.w r5, [r0, 0xc4]");
    0x00049f1c add r3, pc                                        |     r3 = 0x9414c;
    0x00049f1e str.w r3, [r0, 0xc0]                              |     __asm ("str.w r3, [r0, 0xc0]");
    0x00049f22 ldr r3, [r1]                                      |     r3 = *(r1);
                                                                 |     if (r3 != 0) {
    0x00049f24 cbz r3, 0x49f34                                   |         
    0x00049f26 add.w r2, r0, 0xc0                                |         r2 = r0 + 0xc0;
    0x00049f2a ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x00049f2c mov r0, r1                                        |         r0 = r1;
    0x00049f2e movs r1, 0xf                                      |         r1 = 0xf;
    0x00049f30 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00049f32 ldr r0, [r5]                                      |         r0 = *(r5);
                                                                 |     }
    0x00049f34 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00049f38 add.w r3, r5, 8                                   |     r3 = r5 + 8;
    0x00049f3c str r5, [r4, 4]                                   |     *((r4 + 4)) = r5;
    0x00049f3e vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
    0x00049f42 ldrb r3, [r0, 0xe]                                |     r3 = *((r0 + 0xe));
                                                                 |     if (r3 != 0) {
    0x00049f44 cbz r3, 0x49f4e                                   |         
    0x00049f46 ldrh r3, [r5, 0x18]                               |         r3 = *((r5 + 0x18));
    0x00049f48 orr r3, r3, 1                                     |         r3 |= 1;
    0x00049f4c strh r3, [r5, 0x18]                               |         *((r5 + 0x18)) = r3;
                                                                 |     }
    0x00049f4e ldrb.w r3, [sp, 0x49]                             |     r3 = var_49h;
    0x00049f52 ldrb.w r2, [sp, 0x48]                             |     r2 = var_48h;
    0x00049f56 lsls r3, r3, 0x10                                 |     r3 <<= 0x10;
    0x00049f58 orr.w r3, r3, r2, lsl 8                           |     r3 |= (r2 << 8);
    0x00049f5c sub.w r2, r3, 0x200                               |     r2 = r3 - 0x200;
    0x00049f60 str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
    0x00049f62 cmp.w r2, 0xfe00                                  |     
                                                                 |     if (r2 > 0xfe00) {
    0x00049f66 bhi.w 0x4a0f4                                     |         goto label_72;
                                                                 |     }
    0x00049f6a subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x00049f6c tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00049f6e bne.w 0x4a0f4                                     |         goto label_72;
                                                                 |     }
    0x00049f72 ldrh r3, [r5, 0x18]                               |     r3 = *((r5 + 0x18));
    0x00049f74 ldrb.w r6, [sp, 0x4c]                             |     r6 = var_4ch;
    0x00049f78 orr r3, r3, 2                                     |     r3 |= 2;
    0x00049f7c strh r3, [r5, 0x18]                               |     *((r5 + 0x18)) = r3;
    0x00049f7e mov sb, r6                                        |     sb = r6;
    0x00049f80 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00049f82 subs r3, 0                                        |     
    0x00049f84 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00049f86 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00049f88 strb r3, [r5, 0x11]                               |     *((r5 + 0x11)) = r3;
    0x00049f8a ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00049f8c subs r3, 0                                        |     
    0x00049f8e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00049f90 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00049f92 strb r3, [r5, 0x12]                               |     *((r5 + 0x12)) = r3;
                                                                 | label_19:
    0x00049f94 mov r2, sb                                        |     r2 = sb;
    0x00049f96 add.w r1, r5, 0x24                                |     r1 = r5 + 0x24;
    0x00049f9a bl 0x1906c                                        |     r0 = fcn_0001906c (r0, r1, r2);
    0x00049f9e mov fp, r0                                        |     
    0x00049fa0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00049fa2 bne.w 0x49abe                                     |         goto label_7;
                                                                 |     }
    0x00049fa6 ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x00049fa8 subs r3, r3, r6                                   |     r3 -= r6;
    0x00049faa str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x00049fac movs r3, 1                                        |     r3 = 1;
    0x00049fae str r3, [r5, 0x44]                                |     *((r5 + 0x44)) = r3;
    0x00049fb0 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00049fb2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00049fb4 beq.w 0x49ea2                                     |         goto label_13;
                                                                 |     }
    0x00049fb8 ldr r6, [pc, 0x274]                               |     
    0x00049fba add r6, pc                                        |     r6 = 0x941ee;
    0x00049fbc ldrb r3, [r6, 4]                                  |     r3 = *((r6 + 4));
    0x00049fbe cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00049fc0 beq.w 0x4a214                                     |         goto label_73;
                                                                 |     }
    0x00049fc4 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x00049fc6 movs r0, 2                                        |     r0 = 2;
    0x00049fc8 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00049fca ldrb r3, [r6, 4]                                  |     r3 = *((r6 + 4));
    0x00049fcc mov sb, r0                                        |     sb = r0;
                                                                 |     if (r3 != 0) {
    0x00049fce cbz r3, 0x49fde                                   |         
    0x00049fd0 ldr r3, [r6, 0x48]                                |         r3 = *((r6 + 0x48));
    0x00049fd2 mov r0, fp                                        |         r0 = fp;
    0x00049fd4 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00049fd6 str r0, [r5, 0x3c]                                |         *((r5 + 0x3c)) = r0;
    0x00049fd8 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00049fda beq.w 0x4a11c                                     |             goto label_59;
                                                                 |         }
                                                                 |     }
                                                                 | label_27:
    0x00049fde mov r0, sb                                        |     r0 = sb;
    0x00049fe0 blx 0xa12c                                        |     fcn_0000a12c ();
    0x00049fe4 ldr r3, [pc, 0x24c]                               |     
    0x00049fe6 mov r0, sb                                        |     r0 = sb;
    0x00049fe8 add r3, pc                                        |     r3 = 0x94220;
    0x00049fea ldr.w r2, [r3, 0x510]                             |     r2 = *(0x94730);
    0x00049fee str.w r5, [r3, 0x510]                             |     __asm ("str.w r5, aav.0x000000ff");
    0x00049ff2 str r2, [r5, 0x48]                                |     *((r5 + 0x48)) = r2;
    0x00049ff4 blx 0x9d10                                        |     fcn_00009d10 ();
    0x00049ff8 b 0x49e24                                         |     goto label_14;
                                                                 | label_54:
    0x00049ffa str r7, [sp, 8]                                   |     var_8h = r7;
    0x00049ffc b 0x49bbe                                         |     goto label_15;
                                                                 | label_39:
    0x00049ffe ldr r0, [sp, 0xcc]                                |     r0 = *(arg_cch);
    0x0004a000 movw r3, 0x7f7f                                   |     
    0x0004a004 movt r3, 0x108                                    |     r3 = 0x1087f7f;
    0x0004a008 ldr.w r2, [sl, 0x40]                              |     r2 = *((sl + 0x40));
    0x0004a00c ldr.w r1, [sl, 0xb8]                              |     r1 = *((sl + 0xb8));
    0x0004a010 ands r3, r0                                       |     r3 &= r0;
    0x0004a012 movs r0, 0                                        |     r0 = 0;
    0x0004a014 str r0, [sp, 0x34]                                |     x = r0;
    0x0004a016 add r0, sp, 0x34                                  |     r0 += x;
    0x0004a018 str r0, [sp]                                      |     *(sp) = r0;
    0x0004a01a mov r0, sb                                        |     r0 = sb;
    0x0004a01c ldr.w fp, [sb, 0x18]                              |     fp = *((sb + 0x18));
    0x0004a020 blx fp                                            |     fp (r0, r1, r2, r3);
    0x0004a022 ldr r3, [sp, 0x34]                                |     r3 = x;
    0x0004a024 mov fp, r0                                        |     
    0x0004a026 ubfx r2, r3, 7, 1                                 |     r2 = (r3 >> 7) & ((1 << 1) - 1);
    0x0004a02a strb.w r2, [sl, 0x10]                             |     *((sl + 0x10)) = r2;
    0x0004a02e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004a030 bne.w 0x49dc6                                     |         goto label_16;
                                                                 |     }
    0x0004a034 ldr.w r0, [sl, 0x40]                              |     r0 = *((sl + 0x40));
    0x0004a038 and r7, r3, 1                                     |     r7 = r3 & 1;
    0x0004a03c str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0004a03e ldr r2, [r0]                                      |     r2 = *(r0);
    0x0004a040 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004a042 beq.w 0x4a1b6                                     |         goto label_74;
                                                                 |     }
    0x0004a046 ldr r3, [r2, 0x30]                                |     r3 = *((r2 + 0x30));
    0x0004a048 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x0004a04a mov sb, r0                                        |     sb = r0;
    0x0004a04c cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004a04e beq.w 0x4a1e8                                     |         goto label_75;
                                                                 |     }
                                                                 | label_25:
    0x0004a052 ldr r1, [pc, 0x1e4]                               |     
    0x0004a054 movs r2, 0                                        |     r2 = 0;
    0x0004a056 ldr.w r0, [sl, 0xb8]                              |     r0 = *((sl + 0xb8));
    0x0004a05a add r1, pc                                        |     r1 = 0x94298;
    0x0004a05c blx 0x9360                                        |     fcn_00009360 ();
    0x0004a060 tst.w sb, 0x2000                                  |     
    0x0004a064 strb.w r0, [sl, 0xd]                              |     *((sl + 0xd)) = r0;
                                                                 |     if ((sb & 0x2000) == 0) {
    0x0004a068 beq.w 0x4a1c8                                     |         goto label_76;
                                                                 |     }
                                                                 | label_23:
    0x0004a06c movs r3, 1                                        |     r3 = 1;
    0x0004a06e mov r7, r3                                        |     r7 = r3;
    0x0004a070 b 0x49958                                         |     goto label_17;
                                                                 | label_37:
    0x0004a072 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0004a074 mov r0, r3                                        |     r0 = r3;
    0x0004a076 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0004a078 mov r2, r7                                        |     r2 = r7;
    0x0004a07a blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004a07e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0004a080 mov r2, r7                                        |     r2 = r7;
    0x0004a082 adds r2, 1                                        |     r2++;
    0x0004a084 add r0, r2                                        |     r0 += r2;
    0x0004a086 add.w fp, r0, 1                                   |     
                                                                 |     if (r1 != 0) {
    0x0004a08a cbz r1, 0x4a096                                   |         
    0x0004a08c ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0004a08e add.w fp, r0, r2                                  |         
    0x0004a092 blx 0x9e2c                                        |         fcn_00009e2c ();
                                                                 |     }
    0x0004a096 ldrd r2, r7, [sp, 0x14]                           |     __asm ("ldrd r2, r7, [var_18h]");
    0x0004a09a mov r0, fp                                        |     r0 = fp;
    0x0004a09c str.w fp, [sl, 0xbc]                              |     __asm ("str.w fp, [sl, 0xbc]");
    0x0004a0a0 mov r1, r7                                        |     r1 = r7;
    0x0004a0a2 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004a0a6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004a0a8 ldr.w ip, [pc, 0x190]                             |     ip = *(0x0004a23c);
    0x0004a0ac add.w lr, fp, r3                                  |     lr = fp + r3;
    0x0004a0b0 mov r2, r3                                        |     r2 = r3;
    0x0004a0b2 add.w r0, lr, 9                                   |     r0 = lr + 9;
    0x0004a0b6 add ip, pc                                        |     
    0x0004a0b8 str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0004a0ba ldm.w ip!, {r0, r1}                               |     r0 = *(ip!);
                                                                 |     r1 = *((ip! + 4));
    0x0004a0be str.w r0, [fp, r3]                                |     __asm ("str.w r0, [fp, r3]");
    0x0004a0c2 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0004a0c4 str.w r1, [lr, 4]                                 |     __asm ("str.w r1, [lr, 4]");
    0x0004a0c8 mov r1, r7                                        |     r1 = r7;
    0x0004a0ca str.w r0, [sl, 0xfc]                              |     __asm ("str.w r0, [sl, 0xfc]");
    0x0004a0ce blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004a0d2 ldr r2, [pc, 0x16c]                               |     
    0x0004a0d4 mov r1, r0                                        |     r1 = r0;
    0x0004a0d6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004a0d8 add r2, pc                                        |     r2 = 0x9431e;
    0x0004a0da ldr r0, [r2]                                      |     r0 = *(0x9431e);
    0x0004a0dc str r0, [r1, r3]                                  |     *((r1 + r3)) = r0;
    0x0004a0de mov r0, r7                                        |     r0 = r7;
    0x0004a0e0 blx 0x9c24                                        |     fcn_00009c24 ();
    0x0004a0e4 b 0x49934                                         |     goto label_18;
                                                                 | label_38:
    0x0004a0e6 ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x0004a0e8 and r3, r3, 1                                     |     r3 &= 1;
    0x0004a0ec mov r7, r3                                        |     r7 = r3;
    0x0004a0ee ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004a0f0 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0004a0f2 b 0x49958                                         |     goto label_17;
                                                                 | label_72:
    0x0004a0f4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0004a0f6 movs r2, 0                                        |     r2 = 0;
    0x0004a0f8 str r2, [r5, 0x24]                                |     *((r5 + 0x24)) = r2;
    0x0004a0fa eor r3, r3, 1                                     |     r3 ^= 1;
    0x0004a0fe cmp r6, 0                                         |     
    0x0004a100 ite eq                                            |     
                                                                 |     if (r6 != 0) {
    0x0004a102 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x0004a104 andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0004a108 cbz r3, 0x4a10e                                   |         
    0x0004a10a strh.w r2, [r5, 0x11]                             |         *((r5 + 0x11)) = r2;
                                                                 |     }
    0x0004a10e movs r6, 0                                        |     r6 = 0;
    0x0004a110 b 0x49f94                                         |     goto label_19;
                                                                 | label_36:
    0x0004a112 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
                                                                 |     if (r3 == 0) {
    0x0004a114 cbz r3, 0x4a11c                                   |         goto label_59;
                                                                 |     }
    0x0004a116 mov r0, r3                                        |     r0 = r3;
    0x0004a118 blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 |     do {
                                                                 | label_59:
    0x0004a11c mov.w fp, 7                                       |         
    0x0004a120 b 0x49abe                                         |         goto label_7;
                                                                 | label_35:
    0x0004a122 mov r0, r6                                        |         r0 = r6;
    0x0004a124 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x0004a128 adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x0004a12a mov r1, sl                                        |         r1 = sl;
    0x0004a12c mov r0, r2                                        |         r0 = r2;
    0x0004a12e str r2, [sp, 0x14]                                |         var_14h = r2;
    0x0004a130 bl 0x117c8                                        |         r0 = fcn_000117c8 (r0);
    0x0004a134 mov r7, r0                                        |         r7 = r0;
    0x0004a136 str r0, [sp, 0x18]                                |         var_18h = r0;
    0x0004a138 cmp r0, 0                                         |         
    0x0004a13a beq 0x4a11c                                       |         
                                                                 |     } while (r0 == 0);
    0x0004a13c ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0004a13e mov r1, r6                                        |     r1 = r6;
    0x0004a140 str.w sl, [sp, 0x20]                              |     __asm ("str.w sl, [var_20h]");
    0x0004a144 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004a148 mov r0, r7                                        |     r0 = r7;
    0x0004a14a blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x0004a14e bic r2, r0, 0xc0000000                            |     r2 = BIT_MASK (r0, 0xc0000000);
    0x0004a152 movs r0, 1                                        |     r0 = 1;
    0x0004a154 add.w r1, r2, r2, lsl 1                           |     r1 = r2 + (r2 << 1);
    0x0004a158 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0004a15c str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0004a15e add.w r1, r1, 0x14a                               |     r1 += 0x14a;
    0x0004a162 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x0004a164 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0004a166 str.w sl, [sp, 0x2c]                              |     __asm ("str.w sl, [var_2ch]");
    0x0004a16a b.w 0x498d2                                       |     goto label_6;
                                                                 | label_51:
    0x0004a16e mov r0, r4                                        |     r0 = r4;
    0x0004a170 blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_30:
    0x0004a174 mov.w fp, 7                                       |     
    0x0004a178 b 0x49ca4                                         |     goto label_12;
                                                                 | label_42:
    0x0004a17a ldr r3, [pc, 0xc8]                                |     
    0x0004a17c add r3, pc                                        |     r3 = 0x943c6;
    0x0004a17e b 0x49a5c                                         |     goto label_20;
                                                                 | label_41:
    0x0004a180 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0004a182 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0004a184 orrs r3, r2                                       |     r3 |= r2;
    0x0004a186 itt ne                                            |     
                                                                 |     if (r3 == r2) {
    0x0004a188 movne r3, 4                                       |         r3 = 4;
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0004a18a strbne r3, [sl, 5]                                |         *((sl + 5)) = r3;
                                                                 |     }
    0x0004a18e b 0x49a32                                         |     goto label_21;
                                                                 | label_63:
    0x0004a190 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004a194 ldr r2, [pc, 0xb0]                                |     
    0x0004a196 adds r0, 0x14                                     |     r0 += 0x14;
    0x0004a198 ldr r1, [pc, 0xb0]                                |     
    0x0004a19a mov.w fp, 0xe                                     |     
    0x0004a19e str r0, [sp]                                      |     *(sp) = r0;
    0x0004a1a0 movw r3, 0xe615                                   |     r3 = 0xe615;
    0x0004a1a4 add r2, pc                                        |     r2 = 0x943f0;
    0x0004a1a6 movs r0, 0xe                                      |     r0 = 0xe;
    0x0004a1a8 add r1, pc                                        |     r1 = 0x943f8;
    0x0004a1aa blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 | label_24:
    0x0004a1ae ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0004a1b0 blx 0x9c24                                        |     fcn_00009c24 ();
    0x0004a1b4 b 0x49abe                                         |     goto label_7;
                                                                 |     if (r7 == 0) {
                                                                 | label_74:
    0x0004a1b6 cbz r7, 0x4a1e6                                   |         goto label_77;
                                                                 |     }
    0x0004a1b8 ldr r1, [pc, 0x94]                                |     
    0x0004a1ba ldr.w r0, [sl, 0xb8]                              |     r0 = *((sl + 0xb8));
    0x0004a1be add r1, pc                                        |     r1 = 0x94412;
    0x0004a1c0 blx 0x9360                                        |     fcn_00009360 ();
    0x0004a1c4 strb.w r0, [sl, 0xd]                              |     *((sl + 0xd)) = r0;
                                                                 | label_76:
    0x0004a1c8 ldr r1, [pc, 0x88]                                |     
    0x0004a1ca movs r2, 0                                        |     r2 = 0;
    0x0004a1cc ldr.w r0, [sl, 0xb8]                              |     r0 = *((sl + 0xb8));
    0x0004a1d0 add r1, pc                                        |     r1 = 0x94428;
    0x0004a1d2 blx 0x9360                                        |     fcn_00009360 ();
    0x0004a1d6 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0004a1d8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004a1da beq.w 0x49968                                     |         goto label_22;
                                                                 |     }
    0x0004a1de b 0x4a06c                                         |     goto label_23;
                                                                 | label_62:
    0x0004a1e0 ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x0004a1e4 b 0x4a1ae                                         |     goto label_24;
                                                                 | label_77:
    0x0004a1e6 mov sb, r7                                        |     sb = r7;
                                                                 | label_75:
    0x0004a1e8 mov r0, sl                                        |     r0 = sl;
    0x0004a1ea bl 0x127a4                                        |     fcn_000127a4 (r0);
    0x0004a1ee ldr.w r3, [sl, 0x9c]                              |     r3 = *((sl + 0x9c));
    0x0004a1f2 cmp.w r3, 0x1000                                  |     
                                                                 |     if (r3 < 0x1000) {
    0x0004a1f6 bls.w 0x4a052                                     |         goto label_25;
                                                                 |     }
    0x0004a1fa cmp.w r3, 0x2000                                  |     
    0x0004a1fe it hi                                             |     
                                                                 |     if (r3 <= 0x2000) {
    0x0004a200 movhi r3, 0x2000                                  |         r3 = 0x2000;
                                                                 |     }
    0x0004a204 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004a206 b 0x4a052                                         |     goto label_25;
                                                                 | label_43:
    0x0004a208 ldr r3, [pc, 0x4c]                                |     
    0x0004a20a add r3, pc                                        |     r3 = 0x94466;
    0x0004a20c b 0x49a5c                                         |     goto label_20;
                                                                 | label_61:
    0x0004a20e ldr.w sl, [sp, 0x2c]                              |     sl = var_2ch;
    0x0004a212 b 0x49d68                                         |     goto label_26;
                                                                 | label_73:
    0x0004a214 mov sb, r3                                        |     sb = r3;
    0x0004a216 b 0x49fde                                         |     goto label_27;
                                                                 | label_44:
    0x0004a218 ldr r3, [pc, 0x40]                                |     
    0x0004a21a add r3, pc                                        |     r3 = 0x9447a;
    0x0004a21c b 0x49a5c                                         |     goto label_20;
                                                                 | label_58:
    0x0004a21e blx 0x9b44                                        |     fcn_00009b44 ();
    0x0004a222 nop                                               |     
    0x0004a224 ldr r4, [r2, 0x64]                                |     r4 = *((r2 + 0x64));
    0x0004a226 movs r5, r0                                       |     r5 = r0;
    0x0004a228 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0004a22a movs r0, r0                                       |     
    0x0004a22c strh r5, [r4, 0x26]                               |     *((r4 + 0x26)) = r5;
    0x0004a22e invalid                                           |     
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4a6d0 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0004a6d0 ()                          | void fcn_0004a6d0 (int16_t arg1, int16_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x0004a6d0 mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x0004a6d4 ldrb r3, [r0, 8]                      |     r3 = *((r0 + 8));
                                                     |     if (r3 == 0) {
    0x0004a6d6 cbz r3, 0x4a6fe                       |         goto label_0;
                                                     |     }
    0x0004a6d8 ldrb r2, [r0, 9]                      |     r2 = *((r0 + 9));
    0x0004a6da mov r4, r0                            |     r4 = r0;
    0x0004a6dc mov r6, r1                            |     r6 = r1;
                                                     |     if (r2 != 0) {
    0x0004a6de cbz r2, 0x4a6f0                       |         
    0x0004a6e0 ldr r2, [r0, 0xc]                     |         r2 = *((r0 + 0xc));
    0x0004a6e2 adds r2, 1                            |         r2++;
    0x0004a6e4 str r2, [r0, 0xc]                     |         *((r0 + 0xc)) = r2;
    0x0004a6e6 ldrb r2, [r0, 0xa]                    |         r2 = *((r0 + 0xa));
                                                     |         if (r2 != 0) {
    0x0004a6e8 cbnz r2, 0x4a6f0                      |             goto label_4;
                                                     |         }
    0x0004a6ea bl 0x11258                            |         fcn_00011258 (r0);
    0x0004a6ee ldrb r3, [r4, 8]                      |         r3 = *((r4 + 8));
                                                     |     }
                                                     | label_4:
    0x0004a6f0 cmp r3, 2                             |     
                                                     |     if (r3 == 2) {
    0x0004a6f2 beq 0x4a718                           |         goto label_5;
                                                     |     }
    0x0004a6f4 mov r0, r4                            |     r0 = r4;
    0x0004a6f6 bl 0x4a5f8                            |     fcn_0004a5f8 (r0);
    0x0004a6fa ldrb r3, [r4, 9]                      |     r3 = *((r4 + 9));
    0x0004a6fc cbnz r3, 0x4a706                      |     
                                                     |     while (r3 != 0) {
                                                     | label_0:
    0x0004a6fe movs r5, 0                            |         r5 = 0;
                                                     | label_1:
    0x0004a700 mov r0, r5                            |         r0 = r5;
    0x0004a702 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_3:
    0x0004a706 ldr r3, [r4, 0xc]                     |         r3 = *((r4 + 0xc));
    0x0004a708 subs r3, 1                            |         r3--;
    0x0004a70a str r3, [r4, 0xc]                     |         *((r4 + 0xc)) = r3;
    0x0004a70c cmp r3, 0                             |         
    0x0004a70e bne 0x4a6fe                           |         
                                                     |     }
    0x0004a710 mov r0, r4                            |     r0 = r4;
    0x0004a712 bl 0xb868                             |     fcn_0000b868 (r0);
    0x0004a716 b 0x4a6fe                             |     goto label_0;
                                                     | label_5:
    0x0004a718 ldr.w r8, [r4, 4]                     |     r8 = *((r4 + 4));
    0x0004a71c ldr.w r7, [r8]                        |     r7 = *(r8);
    0x0004a720 ldr r5, [r7, 0x2c]                    |     r5 = *((r7 + 0x2c));
                                                     |     if (r5 == 0) {
    0x0004a722 cbnz r5, 0x4a758                      |         
    0x0004a724 ldr r3, [r7, 0x6c]                    |         r3 = *((r7 + 0x6c));
    0x0004a726 adds r3, 1                            |         r3++;
    0x0004a728 str r3, [r7, 0x6c]                    |         *((r7 + 0x6c)) = r3;
    0x0004a72a ldrb r3, [r7, 0x11]                   |         r3 = *((r7 + 0x11));
    0x0004a72c cmp r3, 2                             |         
                                                     |         if (r3 == 2) {
    0x0004a72e bne 0x4a734                           |             
    0x0004a730 ldrb r3, [r7, 4]                      |             r3 = *((r7 + 4));
                                                     |             if (r3 != 0) {
    0x0004a732 cbnz r3, 0x4a780                      |                 goto label_6;
                                                     |             }
                                                     |         }
                                                     | label_2:
    0x0004a734 ldrb r1, [r7, 0x14]                   |         r1 = *((r7 + 0x14));
    0x0004a736 movs r2, 1                            |         r2 = 1;
    0x0004a738 mov r0, r7                            |         r0 = r7;
    0x0004a73a bl 0x1a188                            |         r0 = fcn_0001a188 (r0, r1, r2);
    0x0004a73e uxtb r3, r0                           |         r3 = (int8_t) r0;
    0x0004a740 mov r5, r0                            |         r5 = r0;
    0x0004a742 cmp r3, 0xa                           |         
    0x0004a744 it ne                                 |         
                                                     |         if (r3 != 0xa) {
    0x0004a746 cmpne r3, 0xd                         |             __asm ("cmpne r3, 0xd");
                                                     |         }
                                                     |         if (r3 != 0xa) {
    0x0004a748 bne 0x4a758                           |             goto label_7;
                                                     |         }
    0x0004a74a ldr r3, [pc, 0x68]                    |         
    0x0004a74c str r0, [r7, 0x2c]                    |         *((r7 + 0x2c)) = r0;
    0x0004a74e add r3, pc                            |         r3 = 0x94f08;
    0x0004a750 str.w r3, [r7, 0xdc]                  |         __asm ("str.w r3, [r7, 0xdc]");
    0x0004a754 movs r3, 6                            |         r3 = 6;
    0x0004a756 strb r3, [r7, 0x11]                   |         *((r7 + 0x11)) = r3;
                                                     |     }
                                                     | label_7:
    0x0004a758 eor r1, r6, 1                         |     r1 = r6 ^ 1;
    0x0004a75c cmp r5, 0                             |     
    0x0004a75e ite eq                                |     
                                                     |     if (r5 != 0) {
    0x0004a760 moveq r1, 0                           |         r1 = 0;
                                                     |     }
                                                     |     if (r5 == 0) {
    0x0004a762 andne r1, r1, 1                       |         r1 &= 1;
                                                     |     }
                                                     |     if (r1 == 0) {
    0x0004a766 cbz r1, 0x4a78a                       |         goto label_8;
                                                     |     }
    0x0004a768 ldrb r3, [r4, 9]                      |     r3 = *((r4 + 9));
    0x0004a76a cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x0004a76c beq 0x4a700                           |         goto label_1;
                                                     |     }
    0x0004a76e ldr r3, [r4, 0xc]                     |     r3 = *((r4 + 0xc));
    0x0004a770 subs r3, 1                            |     r3--;
    0x0004a772 str r3, [r4, 0xc]                     |     *((r4 + 0xc)) = r3;
    0x0004a774 cmp r3, 0                             |     
                                                     |     if (r3 != 0) {
    0x0004a776 bne 0x4a700                           |         goto label_1;
                                                     |     }
    0x0004a778 mov r0, r4                            |     r0 = r4;
    0x0004a77a bl 0xb868                             |     fcn_0000b868 (r0);
    0x0004a77e b 0x4a700                             |     goto label_1;
                                                     | label_6:
    0x0004a780 ldrb r3, [r7, 5]                      |     r3 = *((r7 + 5));
    0x0004a782 cmp r3, 1                             |     
    0x0004a784 it eq                                 |     
                                                     |     if (r3 == 1) {
    0x0004a786 strbeq r3, [r7, 0x11]                 |         *((r7 + 0x11)) = r3;
                                                     |         goto label_9;
                                                     |     }
                                                     |     if (r3 != 1) {
                                                     | label_9:
    0x0004a788 bne 0x4a734                           |         goto label_2;
                                                     |     }
                                                     | label_8:
    0x0004a78a ldr r3, [r4, 0x14]                    |     r3 = *((r4 + 0x14));
    0x0004a78c movs r2, 1                            |     r2 = 1;
    0x0004a78e ldr.w r0, [r8, 0x40]                  |     r0 = *((r8 + 0x40));
    0x0004a792 subs r3, 1                            |     r3--;
    0x0004a794 str r3, [r4, 0x14]                    |     *((r4 + 0x14)) = r3;
    0x0004a796 strb.w r2, [r8, 0x14]                 |     *((r8 + 0x14)) = r2;
    0x0004a79a bl 0x191d4                            |     fcn_000191d4 (r0);
    0x0004a79e movs r3, 0                            |     r3 = 0;
    0x0004a7a0 mov r0, r4                            |     r0 = r4;
    0x0004a7a2 str.w r3, [r8, 0x40]                  |     __asm ("str.w r3, [r8, 0x40]");
    0x0004a7a6 bl 0x4a5f8                            |     fcn_0004a5f8 (r0);
    0x0004a7aa ldrb r3, [r4, 9]                      |     r3 = *((r4 + 9));
    0x0004a7ac cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x0004a7ae beq 0x4a6fe                           |         goto label_0;
                                                     |     }
    0x0004a7b0 b 0x4a706                             |     goto label_3;
                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4af80 */
                                                                     | #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.0004af80 ()                                          | void fcn_0004af80 (int16_t arg_0h, int16_t arg_4h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h_2;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h_2;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_38h;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_40h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_54h;
                                                                     |     int16_t var_5ch;
                                                                     |     int16_t var_60h;
                                                                     |     int16_t var_64h;
                                                                     |     int16_t var_70h;
                                                                     |     int16_t var_74h;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_80h;
                                                                     |     int16_t var_88h;
                                                                     |     int16_t var_90h;
                                                                     |     int16_t var_94h;
                                                                     |     int16_t var_98h;
                                                                     |     int16_t var_9ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0004af80 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0004af84 sub sp, 0xa4                                          |     
    0x0004af86 str r1, [sp, 0x54]                                    |     var_54h = r1;
    0x0004af88 mov r4, r1                                            |     r4 = r1;
    0x0004af8a mov r8, r0                                            |     r8 = r0;
    0x0004af8c mov r0, r2                                            |     r0 = r2;
    0x0004af8e ldr.w r1, [pc, 0x5d8]                                 |     
    0x0004af92 str r2, [sp, 0x28]                                    |     var_28h = r2;
    0x0004af94 ldr.w r2, [pc, 0x5d4]                                 |     r2 = *(0x4b56c);
    0x0004af98 add r1, pc                                            |     r1 = 0x96506;
    0x0004af9a ldr r2, [r1, r2]                                      |     
    0x0004af9c movs r1, 1                                            |     r1 = 1;
    0x0004af9e ldr r2, [r2]                                          |     r2 = *(0x96506);
    0x0004afa0 str r2, [sp, 0x9c]                                    |     var_9ch = r2;
    0x0004afa2 mov.w r2, 0                                           |     r2 = 0;
    0x0004afa6 str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     |     if (r3 == 0) {
    0x0004afa8 cbz r3, 0x4afcc                                       |         goto label_11;
                                                                     |     }
    0x0004afaa cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0004afac beq.w 0x4b38a                                         |         goto label_25;
                                                                     |     }
    0x0004afb0 add r2, sp, 0x54                                      |     r2 += var_54h;
    0x0004afb2 movs r1, 0                                            |     r1 = 0;
                                                                     |     do {
    0x0004afb4 ldr r3, [r4, 0x18]                                    |         r3 = *((r4 + 0x18));
    0x0004afb6 cmp r0, r3                                            |         
    0x0004afb8 it hs                                                 |         
                                                                     |         if (r0 < r3) {
    0x0004afba addhs r2, r4, 0x10                                    |             r2 = r4 + 0x10;
                                                                     |         }
    0x0004afbe ldr r4, [r4, 0x10]                                    |         r4 = *((r4 + 0x10));
    0x0004afc0 it hs                                                 |         
                                                                     |         if (r0 < r3) {
    0x0004afc2 addhs r1, 1                                           |             r1++;
                                                                     |         }
    0x0004afc4 str r4, [r2]                                          |         *(r2) = r4;
    0x0004afc6 cmp r4, 0                                             |         
    0x0004afc8 bne 0x4afb4                                           |         
                                                                     |     } while (r4 != 0);
    0x0004afca ldr r4, [sp, 0x54]                                    |     r4 = var_54h;
                                                                     | label_11:
    0x0004afcc ldr.w r3, [r8, 0xd0]                                  |     r3 = *((r8 + 0xd0));
    0x0004afd0 add r3, r1                                            |     r3 += r1;
    0x0004afd2 str.w r3, [r8, 0xd0]                                  |     __asm ("str.w r3, [r8, 0xd0]");
    0x0004afd6 ldr r3, [r4, 0x18]                                    |     r3 = *((r4 + 0x18));
    0x0004afd8 cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0004afda beq.w 0x4b348                                         |         goto label_26;
                                                                     |     }
                                                                     | label_8:
    0x0004afde ldr.w r3, [r8, 0xa8]                                  |     r3 = *((r8 + 0xa8));
    0x0004afe2 movs r2, 0x30                                         |     r2 = 0x30;
    0x0004afe4 ldr.w r6, [r8, 0xf8]                                  |     r6 = *((r8 + 0xf8));
    0x0004afe8 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0004afea ldrb.w r3, [r8, 0xb]                                  |     r3 = *((r8 + 0xb));
    0x0004afee add.w r0, r6, 0x34                                    |     r0 = r6 + 0x34;
    0x0004aff2 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0004aff4 ldr r3, [r6, 0x20]                                    |     r3 = *((r6 + 0x20));
    0x0004aff6 ldr r5, [r3]                                          |     r5 = *(r3);
    0x0004aff8 mov r1, r5                                            |     r1 = r5;
    0x0004affa blx 0xa0b4                                            |     r0 = fcn_0000a0b4 ();
    0x0004affe mov r7, r0                                            |     r7 = r0;
                                                                     |     if (r0 != 0) {
    0x0004b000 cbz r0, 0x4b008                                       |         
    0x0004b002 ldr r7, [r5, 0x10]                                    |         r7 = *((r5 + 0x10));
    0x0004b004 adds r3, r7, 1                                        |         r3 = r7 + 1;
    0x0004b006 mov r7, r3                                            |         r7 = r3;
                                                                     |     }
    0x0004b008 ldrsh.w r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
                                                                     |     if (r3 != 0) {
    0x0004b00c cbnz r3, 0x4b04e                                      |         goto label_27;
                                                                     |     }
    0x0004b00e ldr r3, [r5, 0x60]                                    |     r3 = *((r5 + 0x60));
    0x0004b010 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004b012 bne.w 0x4b350                                         |         goto label_28;
                                                                     |     }
    0x0004b016 ldrb.w r3, [r6, 0x2b]                                 |     r3 = *((r6 + 0x2b));
    0x0004b01a add.w sb, sp, 0x60                                    |     sb += var_60h;
                                                                     |     if (r3 == 0) {
                                                                     | label_9:
    0x0004b01e cbnz r3, 0x4b02e                                      |         
    0x0004b020 ldr r0, [r6, 4]                                       |         r0 = *((r6 + 4));
    0x0004b022 movs r3, 5                                            |         r3 = 5;
    0x0004b024 movs r2, 1                                            |         r2 = 1;
    0x0004b026 movs r1, 3                                            |         r1 = 3;
    0x0004b028 ldr r5, [r0]                                          |         r5 = *(r0);
    0x0004b02a ldr r5, [r5, 0x38]                                    |         r5 = *((r5 + 0x38));
    0x0004b02c blx r5                                                |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                     |     }
                                                                     | label_12:
    0x0004b02e movs r5, 0                                            |     r5 = 0;
    0x0004b030 movw r3, 0xffff                                       |     r3 = 0xffff;
    0x0004b034 strh r3, [r6, 0x28]                                   |     *((r6 + 0x28)) = r3;
                                                                     |     do {
    0x0004b036 adds r5, 1                                            |         r5++;
    0x0004b038 movs r2, 1                                            |         r2 = 1;
    0x0004b03a mov r3, r5                                            |         r3 = r5;
    0x0004b03c mov r1, sb                                            |         r1 = sb;
    0x0004b03e mov r0, r6                                            |         r0 = r6;
    0x0004b040 bl 0x3d57c                                            |         r0 = fcn_0003d57c (r0, r1, r2, r3, r4);
    0x0004b044 adds r3, r0, 1                                        |         r3 = r0 + 1;
    0x0004b046 beq 0x4b036                                           |         
                                                                     |     } while (r3 == r0);
    0x0004b048 mov sl, r0                                            |     sl = r0;
    0x0004b04a cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004b04c bne 0x4b12c                                           |         goto label_1;
                                                                     |     }
                                                                     | label_27:
    0x0004b04e ldr.w fp, [r6, 0x44]                                  |     fp = *((r6 + 0x44));
    0x0004b052 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0004b056 beq.w 0x4b296                                         |         goto label_29;
                                                                     |     }
                                                                     | label_6:
    0x0004b05a ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0004b05c str r3, [sp, 0x30]                                    |     var_30h = r3;
                                                                     | label_7:
    0x0004b05e ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0004b060 mov sl, r4                                            |     sl = r4;
    0x0004b062 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0004b066 mov sb, r6                                            |     sb = r6;
    0x0004b068 strd r4, r8, [sp, 0x34]                               |     __asm ("strd r4, r8, [sp, 0x34]");
    0x0004b06c str r3, [sp, 0x64]                                    |     var_64h = r3;
    0x0004b06e ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0004b070 str r6, [sp, 0x60]                                    |     var_60h = r6;
    0x0004b072 vstr d16, [sp, 0x68]                                  |     __asm ("vstr d16, [sp, 0x68]");
    0x0004b076 str r3, [sp, 0x70]                                    |     var_70h = r3;
    0x0004b078 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0004b07a add.w r2, r3, 0x18                                    |     r2 = r3 + 0x18;
    0x0004b07e str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0004b080 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004b082 asrs r1, r2, 0x1f                                     |     r1 = r2 >> 0x1f;
    0x0004b084 str r2, [sp, 0x3c]                                    |     var_3ch = r2;
    0x0004b086 str r1, [sp, 0x10]                                    |     var_10h = r1;
    0x0004b088 eor r3, r3, 1                                         |     r3 ^= 1;
    0x0004b08c and r3, r3, 1                                         |     r3 &= 1;
    0x0004b090 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0004b092 movs r3, 0                                            |     r3 = 0;
    0x0004b094 str r3, [sp, 0x14]                                    |     var_14h_2 = r3;
    0x0004b096 add r3, sp, 0x60                                      |     r3 += var_60h;
    0x0004b098 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0004b09a mov r3, r2                                            |     r3 = r2;
    0x0004b09c umull r5, r2, fp, r2                                  |     r5:r2 = fp * r2;
    0x0004b0a0 mov r8, r3                                            |     r8 = r3;
    0x0004b0a2 mla r2, fp, r1, r2                                    |     __asm ("mla r2, fp, r1, r2");
    0x0004b0a6 adds r5, 0x20                                         |     r5 += 0x20;
    0x0004b0a8 adc r2, r2, 0                                         |     __asm ("adc r2, r2, 0");
    0x0004b0ac mov r4, r2                                            |     r4 = r2;
                                                                     | label_0:
    0x0004b0ae cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0004b0b0 beq 0x4b14e                                           |         goto label_30;
                                                                     |     }
    0x0004b0b2 ldr.w r1, [sl, 0x10]                                  |     r1 = *((sl + 0x10));
    0x0004b0b6 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0004b0b8 cmp r1, 0                                             |     
    0x0004b0ba it ne                                                 |     
                                                                     |     if (r1 == 0) {
    0x0004b0bc orrne r2, r2, 1                                       |         r2 |= 1;
                                                                     |     }
    0x0004b0c0 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0004b0c2 beq.w 0x4b280                                         |         goto label_31;
                                                                     |     }
    0x0004b0c6 movs r2, 0                                            |     r2 = 0;
    0x0004b0c8 ldr.w r1, [sl, 0x18]                                  |     r1 = *((sl + 0x18));
    0x0004b0cc str r2, [sp, 0x5c]                                    |     var_5ch = r2;
    0x0004b0ce mov r0, sb                                            |     r0 = sb;
    0x0004b0d0 add r2, sp, 0x5c                                      |     r2 += var_5ch;
    0x0004b0d2 bl 0x21fa0                                            |     fcn_00021fa0 (r0, r1, r2);
    0x0004b0d6 ldr r2, [sp, 0x5c]                                    |     r2 = var_5ch;
    0x0004b0d8 cmp r7, r2                                            |     
                                                                     |     if (r7 > r2) {
    0x0004b0da bhi 0x4b14e                                           |         goto label_30;
                                                                     |     }
    0x0004b0dc subs r1, r2, 1                                        |     r1 = r2 - 1;
    0x0004b0de ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0004b0e0 umull ip, r6, r1, r8                                  |     ip:r6 = r1 * r8;
    0x0004b0e4 ldr.w r0, [sb, 0x68]                                  |     r0 = *((sb + 0x68));
    0x0004b0e8 subs r0, 1                                            |     r0--;
    0x0004b0ea mla r6, r1, r3, r6                                    |     __asm ("mla r6, r1, r3, r6");
    0x0004b0ee adds.w r3, ip, 0x38                                   |     r3 = ip + 0x38;
    0x0004b0f2 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0004b0f4 adc r6, r6, 0                                         |     __asm ("adc r6, r6, 0");
    0x0004b0f8 cmp r2, r0                                            |     
    0x0004b0fa it ls                                                 |     
                                                                     |     if (r2 > r0) {
    0x0004b0fc strls r2, [sb, 0x68]                                  |         *((sb + 0x68)) = r2;
                                                                     |     }
    0x0004b100 mov r0, sl                                            |     r0 = sl;
    0x0004b102 blx 0x9b20                                            |     r0 = fcn_00009b20 ();
    0x0004b106 mov r1, r0                                            |     r1 = r0;
    0x0004b108 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004b10a beq.w 0x4b52e                                         |         goto label_32;
                                                                     |     }
    0x0004b10e ldr.w r0, [sb, 8]                                     |     r0 = *((sb + 8));
    0x0004b112 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0004b114 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0004b116 ldr.w ip, [r0]                                        |     ip = *(r0);
    0x0004b11a strd r3, r6, [sp]                                     |     __asm ("strd r3, r6, [sp]");
    0x0004b11e ldr.w r6, [ip, 0xc]                                   |     r6 = *((ip + 0xc));
    0x0004b122 blx r6                                                |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0004b124 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004b126 beq.w 0x4b288                                         |         goto label_33;
                                                                     |     }
                                                                     |     do {
                                                                     | label_17:
    0x0004b12a mov sl, r0                                            |         sl = r0;
                                                                     | label_1:
    0x0004b12c ldr.w r2, [pc, 0x440]                                 |         
    0x0004b130 ldr.w r3, [pc, 0x438]                                 |         r3 = *(0x4b56c);
    0x0004b134 add r2, pc                                            |         r2 = 0x966a8;
    0x0004b136 ldr r3, [r2, r3]                                      |         r3 = *(0x966a8);
    0x0004b138 ldr r2, [r3]                                          |         r2 = *(0x966a8);
    0x0004b13a ldr r3, [sp, 0x9c]                                    |         r3 = var_9ch;
    0x0004b13c eors r2, r3                                           |         r2 ^= r3;
    0x0004b13e mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0004b142 bne.w 0x4b648                                         |             goto label_34;
                                                                     |         }
    0x0004b146 mov r0, sl                                            |         r0 = sl;
    0x0004b148 add sp, 0xa4                                          |         
    0x0004b14a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_30:
    0x0004b14e ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0004b150 add.w fp, fp, 1                                       |         
                                                                     |         if (r3 != 0) {
    0x0004b154 cbz r3, 0x4b160                                       |             
    0x0004b156 ldr.w r2, [sl, 0x10]                                  |             r2 = *((sl + 0x10));
    0x0004b15a cmp r2, 0                                             |             
                                                                     |             if (r2 == 0) {
    0x0004b15c beq.w 0x4b284                                         |                 goto label_35;
                                                                     |             }
                                                                     |         }
    0x0004b160 movs r2, 0                                            |         r2 = 0;
                                                                     | label_4:
    0x0004b162 ldr r0, [sp, 0x18]                                    |         r0 = var_18h;
    0x0004b164 mov r1, sl                                            |         r1 = sl;
    0x0004b166 strd r5, r4, [sp]                                     |         __asm ("strd r5, r4, [sp]");
    0x0004b16a bl 0x39324                                            |         r0 = fcn_00039324 (r0, r1, r2, r3);
    0x0004b16e cmp r0, 0                                             |         
    0x0004b170 bne 0x4b12a                                           |         
                                                                     |     } while (r0 != 0);
    0x0004b172 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0004b174 adds.w r5, r8, r5                                     |     r5 = r8 + r5;
    0x0004b178 ldrh.w r2, [sl, 0x1c]                                 |     r2 = *((sl + 0x1c));
    0x0004b17c str.w sl, [sp, 0x14]                                  |     __asm ("str.w sl, [var_14h_2]");
    0x0004b180 adc.w r4, r3, r4                                      |     __asm ("adc.w r4, r3, r4");
    0x0004b184 orr r2, r2, 0x40                                      |     r2 |= 0x40;
    0x0004b188 strh.w r2, [sl, 0x1c]                                 |     *((sl + 0x1c)) = r2;
                                                                     | label_5:
    0x0004b18c ldr.w sl, [sl, 0x10]                                  |     sl = *((sl + 0x10));
    0x0004b190 cmp.w sl, 0                                           |     
                                                                     |     if (sl != 0) {
    0x0004b194 bne 0x4b0ae                                           |         goto label_0;
                                                                     |     }
    0x0004b196 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004b198 mov r6, sb                                            |     r6 = sb;
    0x0004b19a str r4, [sp, 0x20]                                    |     var_20h = r4;
    0x0004b19c ldr.w r8, [sp, 0x38]                                  |     r8 = var_38h;
    0x0004b1a0 ldr r4, [sp, 0x34]                                    |     r4 = var_34h;
    0x0004b1a2 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004b1a4 beq.w 0x4b3b4                                         |         goto label_36;
                                                                     |     }
    0x0004b1a8 ldr r2, [r6, 0x68]                                    |     r2 = *((r6 + 0x68));
    0x0004b1aa cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0004b1ac bne.w 0x4b3be                                         |         goto label_37;
                                                                     |     }
                                                                     | label_14:
    0x0004b1b0 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0004b1b2 ands sb, r3, 3                                        |     sb = r3 & 3;
                                                                     |     if (sb != r3) {
    0x0004b1b6 bne.w 0x4b4c4                                         |         goto label_38;
                                                                     |     }
    0x0004b1ba ldrb.w r3, [r6, 0x2f]                                 |     r3 = *((r6 + 0x2f));
    0x0004b1be cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004b1c0 bne.w 0x4b54a                                         |         goto label_39;
                                                                     |     }
    0x0004b1c4 ldr.w sb, [r6, 0x44]                                  |     sb = *((r6 + 0x44));
    0x0004b1c8 mov r7, r3                                            |     r7 = r3;
                                                                     | label_13:
    0x0004b1ca mov r5, r4                                            |     r5 = r4;
                                                                     |     do {
    0x0004b1cc ldrh r3, [r5, 0x1c]                                   |         r3 = *((r5 + 0x1c));
    0x0004b1ce ands r3, r3, 0x40                                     |         r3 &= 0x40;
    0x0004b1d2 it eq                                                 |         
                                                                     |         if (r3 != r3) {
    0x0004b1d4 moveq r2, 1                                           |             r2 = 1;
                                                                     |         }
                                                                     |         if (r3 != r3) {
    0x0004b1d6 beq 0x4b1ee                                           |             
    0x0004b1d8 add.w sb, sb, 1                                       |             sb++;
    0x0004b1dc ldr r2, [r5, 0x18]                                    |             r2 = *((r5 + 0x18));
    0x0004b1de mov r1, sb                                            |             r1 = sb;
    0x0004b1e0 mov r0, r6                                            |             r0 = r6;
    0x0004b1e2 bl 0x223f4                                            |             r0 = fcn_000223f4 (r0, r1, r2);
    0x0004b1e6 clz r2, r0                                            |             r2 &= r0;
    0x0004b1ea mov r3, r0                                            |             r3 = r0;
    0x0004b1ec lsrs r2, r2, 5                                        |             r2 >>= 5;
                                                                     |         }
    0x0004b1ee ldr r5, [r5, 0x10]                                    |         r5 = *((r5 + 0x10));
    0x0004b1f0 cmp r5, 0                                             |         
    0x0004b1f2 ite eq                                                |         
                                                                     |         if (r5 != 0) {
    0x0004b1f4 moveq r1, 0                                           |             r1 = 0;
                                                                     |         }
                                                                     |         if (r5 == 0) {
    0x0004b1f6 andne r1, r2, 1                                       |             r1 = r2 & 1;
                                                                     |         }
    0x0004b1fa cmp r1, 0                                             |         
    0x0004b1fc bne 0x4b1cc                                           |         
                                                                     |     } while (r1 != 0);
    0x0004b1fe mov sl, r3                                            |     sl = r3;
    0x0004b200 mov r3, r2                                            |     r3 = r2;
    0x0004b202 cmp r7, 0                                             |     
    0x0004b204 ite le                                                |     
                                                                     |     if (r7 > 0) {
    0x0004b206 movle r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r7 <= 0) {
    0x0004b208 andgt r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0004b20c mov r2, r7                                            |     r2 = r7;
                                                                     |     if (r3 == 0) {
    0x0004b20e cbz r3, 0x4b23a                                       |         goto label_40;
                                                                     |     }
    0x0004b210 ldr r5, [sp, 0x14]                                    |     r5 = var_14h_2;
    0x0004b212 add r2, sb                                            |     r2 += sb;
    0x0004b214 mov r7, r2                                            |     r7 = r2;
                                                                     |     do {
    0x0004b216 add.w sb, sb, 1                                       |         sb++;
    0x0004b21a ldr r2, [r5, 0x18]                                    |         r2 = *((r5 + 0x18));
    0x0004b21c mov r1, sb                                            |         r1 = sb;
    0x0004b21e mov r0, r6                                            |         r0 = r6;
    0x0004b220 bl 0x223f4                                            |         fcn_000223f4 (r0, r1, r2);
    0x0004b224 sub.w r2, r7, sb                                      |         r2 = r7 - sb;
    0x0004b228 clz r3, r0                                            |         r3 &= r0;
    0x0004b22c lsrs r3, r3, 5                                        |         r3 >>= 5;
    0x0004b22e cmp r2, 0                                             |         
    0x0004b230 it le                                                 |         
                                                                     |         if (r2 > 0) {
    0x0004b232 movle r3, 0                                           |             r3 = 0;
                                                                     |         }
    0x0004b234 cmp r3, 0                                             |         
    0x0004b236 bne 0x4b216                                           |         
                                                                     |     } while (r3 != 0);
    0x0004b238 mov sl, r0                                            |     sl = r0;
                                                                     | label_40:
    0x0004b23a cmp.w sl, 0                                           |     
                                                                     |     if (sl != 0) {
    0x0004b23e bne.w 0x4b12c                                         |         goto label_1;
                                                                     |     }
    0x0004b242 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0004b244 str.w sb, [r6, 0x44]                                  |     __asm ("str.w sb, [r6, 0x44]");
    0x0004b248 bic r3, r2, 0xff                                      |     r3 = BIT_MASK (r2, 0xff);
    0x0004b24c orr.w r3, r3, r2, asr 16                              |     r3 |= (r2 >> 16);
    0x0004b250 strh.w r3, [r6, 0x42]                                 |     *((r6 + 0x42)) = r3;
    0x0004b254 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004b256 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004b258 bne.w 0x4b534                                         |         goto label_41;
                                                                     |     }
                                                                     | label_15:
    0x0004b25c ldr.w r0, [r8, 0x60]                                  |     r0 = *((r8 + 0x60));
    0x0004b260 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004b262 beq.w 0x4b12c                                         |         goto label_1;
                                                                     |     }
                                                                     | label_3:
    0x0004b266 ldr r2, [r4, 4]                                       |     r2 = *((r4 + 4));
    0x0004b268 ldr r1, [r4, 0x18]                                    |     r1 = *((r4 + 0x18));
    0x0004b26a bl 0x48410                                            |     fcn_00048410 (r0, r1, r2);
                                                                     | label_2:
    0x0004b26e ldr r4, [r4, 0x10]                                    |     r4 = *((r4 + 0x10));
    0x0004b270 cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0004b272 beq.w 0x4b12c                                         |         goto label_1;
                                                                     |     }
    0x0004b276 ldr.w r0, [r8, 0x60]                                  |     r0 = *((r8 + 0x60));
    0x0004b27a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004b27c beq 0x4b26e                                           |         goto label_2;
                                                                     |     }
    0x0004b27e b 0x4b266                                             |     goto label_3;
                                                                     | label_31:
    0x0004b280 add.w fp, fp, 1                                       |     
                                                                     | label_35:
    0x0004b284 ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0004b286 b 0x4b162                                             |     goto label_4;
                                                                     | label_33:
    0x0004b288 ldrh.w r2, [sl, 0x1c]                                 |     r2 = *((sl + 0x1c));
    0x0004b28c bic r2, r2, 0x40                                      |     r2 = BIT_MASK (r2, 0x40);
    0x0004b290 strh.w r2, [sl, 0x1c]                                 |     *((sl + 0x1c)) = r2;
    0x0004b294 b 0x4b18c                                             |     goto label_5;
                                                                     | label_29:
    0x0004b296 vldr d16, [pc, 0x2c8]                                 |     __asm ("vldr d16, aav.0x000000ff");
    0x0004b29a add.w r5, r6, 0x54                                    |     r5 = r6 + 0x54;
    0x0004b29e ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0004b2a0 vstr d16, [sp, 0x78]                                  |     __asm ("vstr d16, [sp, 0x78]");
    0x0004b2a4 ldr r3, [r6, 0x70]                                    |     r3 = *((r6 + 0x70));
    0x0004b2a6 strd r2, r3, [sp, 0x48]                               |     __asm ("strd r2, r3, [sp, 0x48]");
    0x0004b2aa vldr d16, [sp, 0x48]                                  |     __asm ("vldr d16, [sp, 0x48]");
    0x0004b2ae vrev32.8 d16, d16                                     |     __asm ("vrev32.8 d16, d16");
    0x0004b2b2 vstr d16, [sp, 0x80]                                  |     __asm ("vstr d16, [sp, 0x80]");
    0x0004b2b6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004b2b8 beq 0x4b380                                           |         goto label_42;
                                                                     |     }
                                                                     | label_10:
    0x0004b2ba ldr r1, [r5, 4]                                       |     r1 = *((r5 + 4));
    0x0004b2bc movs r2, 0                                            |     r2 = 0;
    0x0004b2be ldr r0, [r6, 0x54]                                    |     r0 = *((r6 + 0x54));
    0x0004b2c0 add r3, sp, 0x80                                      |     r3 += var_80h;
    0x0004b2c2 add.w ip, sp, 0x98                                    |     
    0x0004b2c6 mov r5, r2                                            |     r5 = r2;
    0x0004b2c8 add.w lr, sp, 0x88                                    |     lr += var_88h;
    0x0004b2cc stm.w lr!, {r0, r1}                                   |     *(lr!) = r0;
                                                                     |     *((lr! + 4)) = r1;
                                                                     |     do {
    0x0004b2d0 ldr r1, [r3, -0x8]                                    |         r1 = *((r3 - 0x8));
    0x0004b2d4 adds r3, 8                                            |         r3 += 8;
    0x0004b2d6 add r1, r2                                            |         r1 += r2;
    0x0004b2d8 add r5, r1                                            |         r5 += r1;
    0x0004b2da ldr r1, [r3, -0xc]                                    |         r1 = *((r3 - 0xc));
    0x0004b2de cmp r3, ip                                            |         
    0x0004b2e0 add r1, r5                                            |         r1 += r5;
    0x0004b2e2 add r2, r1                                            |         r2 += r1;
    0x0004b2e4 bne 0x4b2d0                                           |         
                                                                     |     } while (r3 != ip);
    0x0004b2e6 rev r3, r5                                            |     r5 = SWAP32 (r3);
    0x0004b2e8 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0004b2ec str r3, [sp, 0x90]                                    |     var_90h = r3;
    0x0004b2ee rev r3, r2                                            |     r2 = SWAP32 (r3);
    0x0004b2f0 str r3, [sp, 0x94]                                    |     var_94h = r3;
    0x0004b2f2 add r1, sp, 0x78                                      |     r1 += var_78h;
    0x0004b2f4 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0004b2f6 ldr r0, [r6, 8]                                       |     r0 = *((r6 + 8));
    0x0004b2f8 strd r5, r2, [r6, 0x4c]                               |     __asm ("strd r5, r2, [r6, 0x4c]");
    0x0004b2fc movs r2, 0x20                                         |     r2 = 0x20;
    0x0004b2fe str r3, [r6, 0x24]                                    |     *((r6 + 0x24)) = r3;
    0x0004b300 movs r3, 0                                            |     r3 = 0;
    0x0004b302 strb.w r3, [r6, 0x41]                                 |     *((r6 + 0x41)) = r3;
    0x0004b306 movs r3, 1                                            |     r3 = 1;
    0x0004b308 strb.w r3, [r6, 0x2f]                                 |     *((r6 + 0x2f)) = r3;
    0x0004b30c ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004b30e vstr d16, [sp]                                        |     __asm ("vstr d16, [sp]");
    0x0004b312 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0004b314 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004b316 mov sl, r0                                            |     sl = r0;
    0x0004b318 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004b31a bne.w 0x4b12c                                         |         goto label_1;
                                                                     |     }
    0x0004b31e ldrb.w r3, [r6, 0x30]                                 |     r3 = *((r6 + 0x30));
    0x0004b322 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004b324 beq.w 0x4b05a                                         |         goto label_6;
                                                                     |     }
    0x0004b328 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0004b32a ldr r0, [r6, 8]                                       |     r0 = *((r6 + 8));
    0x0004b32c ubfx r1, r3, 2, 2                                     |     r1 = (r3 >> 2) & ((1 << 2) - 1);
    0x0004b330 str r0, [sp, 0x30]                                    |     var_30h = r0;
    0x0004b332 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0004b334 beq.w 0x4b05e                                         |         goto label_7;
                                                                     |     }
    0x0004b338 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004b33a ldr r3, [r3, 0x14]                                    |     r3 = *((r3 + 0x14));
    0x0004b33c blx r3                                                |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x0004b33e mov sl, r0                                            |     sl = r0;
    0x0004b340 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004b342 beq.w 0x4b05a                                         |         goto label_6;
                                                                     |     }
    0x0004b346 b 0x4b12c                                             |     goto label_1;
                                                                     | label_26:
    0x0004b348 mov r0, r4                                            |     r0 = r4;
    0x0004b34a bl 0x14e60                                            |     fcn_00014e60 (r0);
    0x0004b34e b 0x4afde                                             |     goto label_8;
                                                                     | label_28:
    0x0004b350 add.w sb, sp, 0x60                                    |     sb += var_60h;
    0x0004b354 movs r0, 4                                            |     r0 = 4;
    0x0004b356 mov r1, sb                                            |     r1 = sb;
    0x0004b358 blx 0xa0d8                                            |     fcn_0000a0d8 ();
    0x0004b35c ldrb.w r3, [r6, 0x2b]                                 |     r3 = *((r6 + 0x2b));
                                                                     |     if (r3 != 0) {
    0x0004b360 cbnz r3, 0x4b38e                                      |         goto label_43;
                                                                     |     }
    0x0004b362 ldr r0, [r6, 4]                                       |     r0 = *((r6 + 4));
    0x0004b364 movs r2, 4                                            |     r2 = 4;
    0x0004b366 movs r3, 0xa                                          |     r3 = 0xa;
    0x0004b368 mov r1, r2                                            |     r1 = r2;
    0x0004b36a ldr r5, [r0]                                          |     r5 = *(r0);
    0x0004b36c ldr r5, [r5, 0x38]                                    |     r5 = *((r5 + 0x38));
    0x0004b36e blx r5                                                |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004b370 mov sl, r0                                            |     sl = r0;
                                                                     |     if (r0 == 0) {
    0x0004b372 cbz r0, 0x4b38e                                       |         goto label_43;
                                                                     |     }
    0x0004b374 cmp r0, 5                                             |     
                                                                     |     if (r0 != 5) {
    0x0004b376 bne.w 0x4b12c                                         |         goto label_1;
                                                                     |     }
    0x0004b37a ldrb.w r3, [r6, 0x2b]                                 |     r3 = *((r6 + 0x2b));
    0x0004b37e b 0x4b01e                                             |     goto label_9;
                                                                     | label_42:
    0x0004b380 mov r1, r5                                            |     r1 = r5;
    0x0004b382 movs r0, 8                                            |     r0 = 8;
    0x0004b384 blx 0xa0d8                                            |     fcn_0000a0d8 ();
    0x0004b388 b 0x4b2ba                                             |     goto label_10;
                                                                     | label_25:
    0x0004b38a mov r1, r4                                            |     r1 = r4;
    0x0004b38c b 0x4afcc                                             |     goto label_11;
                                                                     | label_43:
    0x0004b38e ldr r1, [sp, 0x60]                                    |     r1 = var_60h;
    0x0004b390 mov r0, r6                                            |     r0 = r6;
    0x0004b392 bl 0x153c4                                            |     fcn_000153c4 (r0, r1);
    0x0004b396 ldrb.w r3, [r6, 0x2b]                                 |     r3 = *((r6 + 0x2b));
    0x0004b39a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004b39c bne.w 0x4b02e                                         |         goto label_12;
                                                                     |     }
    0x0004b3a0 ldr r0, [r6, 4]                                       |     r0 = *((r6 + 4));
    0x0004b3a2 movs r2, 4                                            |     r2 = 4;
    0x0004b3a4 movs r3, 9                                            |     r3 = 9;
    0x0004b3a6 mov r1, r2                                            |     r1 = r2;
    0x0004b3a8 ldr r5, [r0]                                          |     r5 = *(r0);
    0x0004b3aa ldr r5, [r5, 0x38]                                    |     r5 = *((r5 + 0x38));
    0x0004b3ac blx r5                                                |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004b3ae ldrb.w r3, [r6, 0x2b]                                 |     r3 = *((r6 + 0x2b));
    0x0004b3b2 b 0x4b01e                                             |     goto label_9;
                                                                     | label_36:
    0x0004b3b4 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004b3b6 ldr.w sb, [r6, 0x44]                                  |     sb = *((r6 + 0x44));
    0x0004b3ba mov r7, r3                                            |     r7 = r3;
    0x0004b3bc b 0x4b1ca                                             |     goto label_13;
                                                                     | label_37:
    0x0004b3be ldr r2, [r6, 0x24]                                    |     r2 = *((r6 + 0x24));
    0x0004b3c0 add.w r3, r2, 0x18                                    |     r3 = r2 + 0x18;
    0x0004b3c4 mov r0, r3                                            |     r0 = r3;
    0x0004b3c6 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0004b3c8 blx 0x9524                                            |     fcn_00009524 ();
    0x0004b3cc str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0004b3ce cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004b3d0 beq.w 0x4b52e                                         |         goto label_32;
                                                                     |     }
    0x0004b3d4 ldr r3, [r6, 0x68]                                    |     r3 = *((r6 + 0x68));
    0x0004b3d6 cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0004b3d8 beq.w 0x4b60a                                         |         goto label_44;
                                                                     |     }
    0x0004b3dc ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0004b3de subs r3, 2                                            |     r3 -= 2;
    0x0004b3e0 asrs r0, r2, 0x1f                                     |     r0 = r2 >> 0x1f;
    0x0004b3e2 umull r1, r2, r3, r2                                  |     r1:r2 = r3 * r2;
    0x0004b3e6 mla r3, r3, r0, r2                                    |     __asm ("mla r3, r3, r0, r2");
    0x0004b3ea adds.w ip, r1, 0x30                                   |     
    0x0004b3ee adc r3, r3, 0                                         |     __asm ("adc r3, r3, 0");
                                                                     | label_18:
    0x0004b3f2 ldr r0, [r6, 8]                                       |     r0 = *((r6 + 8));
    0x0004b3f4 movs r2, 8                                            |     r2 = 8;
    0x0004b3f6 ldr.w sb, [sp, 0x18]                                  |     sb = var_18h;
    0x0004b3fa ldr r7, [r0]                                          |     r7 = *(r0);
    0x0004b3fc mov r1, sb                                            |     r1 = sb;
    0x0004b3fe strd ip, r3, [sp]                                     |     __asm ("strd ip, r3, [sp]");
    0x0004b402 ldr r3, [r7, 8]                                       |     r3 = *((r7 + 8));
    0x0004b404 blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004b406 ldr.w r3, [sb]                                        |     r3 = *(sb);
    0x0004b40a mov sl, r0                                            |     sl = r0;
    0x0004b40c ldr r2, [r6, 0x68]                                    |     r2 = *((r6 + 0x68));
    0x0004b40e rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0004b410 str r3, [r6, 0x4c]                                    |     *((r6 + 0x4c)) = r3;
    0x0004b412 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0004b416 rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0004b418 str r3, [r6, 0x50]                                    |     *((r6 + 0x50)) = r3;
    0x0004b41a movs r3, 0                                            |     r3 = 0;
    0x0004b41c cmp fp, r2                                            |     
    0x0004b41e it hs                                                 |     
                                                                     |     if (fp >= r2) {
    0x0004b420 cmphs r0, r3                                          |         __asm ("cmphs r0, r3");
                                                                     |     }
    0x0004b422 str r3, [r6, 0x68]                                    |     *((r6 + 0x68)) = r3;
                                                                     |     if (fp != r2) {
    0x0004b424 bne 0x4b4b4                                           |         goto label_45;
                                                                     |     }
    0x0004b426 ldr r7, [sp, 0x2c]                                    |     r7 = var_2ch;
    0x0004b428 add.w r1, sb, 0x18                                    |     r1 = sb + 0x18;
    0x0004b42c mov sl, fp                                            |     sl = fp;
    0x0004b42e str.w r8, [sp, 0x40]                                  |     __asm ("str.w r8, [var_40h]");
    0x0004b432 mov fp, sb                                            |     
    0x0004b434 mov r8, r2                                            |     r8 = r2;
    0x0004b436 str r1, [sp, 0x34]                                    |     var_34h = r1;
    0x0004b438 add r1, sp, 0x78                                      |     r1 += var_78h;
    0x0004b43a asrs r0, r7, 0x1f                                     |     r0 = r7 >> 0x1f;
    0x0004b43c str r1, [sp, 0x2c]                                    |     var_2ch = r1;
    0x0004b43e str r4, [sp, 0x38]                                    |     var_38h = r4;
    0x0004b440 mov sb, r0                                            |     sb = r0;
    0x0004b442 str r5, [sp, 0x44]                                    |     var_44h = r5;
                                                                     |     do {
    0x0004b444 add.w r3, r8, -1                                      |         r3 = r8 + -1;
    0x0004b448 ldr r0, [r6, 8]                                       |         r0 = *((r6 + 8));
    0x0004b44a umull r5, r4, r3, r7                                  |         r5:r4 = r3 * r7;
    0x0004b44e mov r2, r7                                            |         r2 = r7;
    0x0004b450 mov r1, fp                                            |         r1 = fp;
    0x0004b452 ldr.w ip, [r0]                                        |         ip = *(r0);
    0x0004b456 mla r4, r3, sb, r4                                    |         __asm ("mla r4, r3, sb, r4");
    0x0004b45a adds r5, 0x20                                         |         r5 += 0x20;
    0x0004b45c str r5, [sp]                                          |         *(sp) = r5;
    0x0004b45e adc r4, r4, 0                                         |         __asm ("adc r4, r4, 0");
    0x0004b462 str r4, [sp, 4]                                       |         *(arg_4h) = r4;
    0x0004b464 ldr.w r3, [ip, 8]                                     |         r3 = *((ip + 8));
    0x0004b468 blx r3                                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                     |         if (r0 != 0) {
    0x0004b46a cbz r0, 0x4b476                                       |             
    0x0004b46c mov sl, r0                                            |             sl = r0;
    0x0004b46e ldr r0, [sp, 0x18]                                    |             r0 = var_18h;
    0x0004b470 blx 0x9c24                                            |             fcn_00009c24 ();
    0x0004b474 b 0x4b12c                                             |             goto label_1;
                                                                     |         }
    0x0004b476 ldr.w r1, [fp]                                        |         r1 = *(fp);
    0x0004b47a mov r0, r6                                            |         r0 = r6;
    0x0004b47c ldr.w r2, [fp, 4]                                     |         r2 = *(arg_4h);
    0x0004b480 add.w r8, r8, 1                                       |         r8++;
    0x0004b484 ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0004b486 rev r1, r1                                            |         r1 = SWAP32 (r1);
    0x0004b488 rev r2, r2                                            |         r2 = SWAP32 (r2);
    0x0004b48a str r3, [sp]                                          |         *(sp) = r3;
    0x0004b48c ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0004b48e bl 0x177fc                                            |         fcn_000177fc (r0, r1, r2, r3, r4);
    0x0004b492 ldr r0, [r6, 8]                                       |         r0 = *((r6 + 8));
    0x0004b494 movs r2, 0x18                                         |         r2 = 0x18;
    0x0004b496 ldr r1, [sp, 0x2c]                                    |         r1 = var_2ch;
    0x0004b498 ldr r3, [r0]                                          |         r3 = *(r0);
    0x0004b49a strd r5, r4, [sp]                                     |         __asm ("strd r5, r4, [sp]");
    0x0004b49e ldr r3, [r3, 0xc]                                     |         r3 = *((r3 + 0xc));
    0x0004b4a0 blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004b4a2 cmp sl, r8                                            |         
    0x0004b4a4 it hs                                                 |         
                                                                     |         if (sl >= r8) {
    0x0004b4a6 cmphs r0, 0                                           |             __asm ("cmphs r0, 0");
                                                                     |         }
    0x0004b4a8 beq 0x4b444                                           |         
                                                                     |     } while (sl == r8);
    0x0004b4aa ldr r4, [sp, 0x38]                                    |     r4 = var_38h;
    0x0004b4ac mov fp, sl                                            |     
    0x0004b4ae ldrd r8, r5, [sp, 0x40]                               |     __asm ("ldrd r8, r5, [var_40h]");
    0x0004b4b2 mov sl, r0                                            |     sl = r0;
                                                                     | label_45:
    0x0004b4b4 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0004b4b6 blx 0x9c24                                            |     fcn_00009c24 ();
    0x0004b4ba cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x0004b4be beq.w 0x4b1b0                                         |         goto label_14;
                                                                     |     }
    0x0004b4c2 b 0x4b12c                                             |     goto label_1;
                                                                     | label_38:
    0x0004b4c4 ldrb.w r3, [r6, 0x31]                                 |     r3 = *((r6 + 0x31));
    0x0004b4c8 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004b4ca bne 0x4b574                                           |         goto label_46;
                                                                     |     }
                                                                     | label_23:
    0x0004b4cc ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0004b4ce mov r1, sb                                            |     r1 = sb;
    0x0004b4d0 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004b4d2 ldr r3, [r3, 0x14]                                    |     r3 = *((r3 + 0x14));
    0x0004b4d4 blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004b4d6 ldrb.w r7, [r6, 0x2f]                                 |     r7 = *((r6 + 0x2f));
    0x0004b4da mov sl, r0                                            |     sl = r0;
                                                                     |     if (r7 != 0) {
    0x0004b4dc cbz r7, 0x4b520                                       |         
    0x0004b4de ldrd r2, r3, [r6, 0x10]                               |         __asm ("ldrd r2, r3, [r6, 0x10]");
    0x0004b4e2 cmp r3, 0                                             |         
    0x0004b4e4 itt ge                                                |         
                                                                     |         if (r3 < 0) {
    0x0004b4e6 movge r1, 0                                           |             r1 = 0;
                                                                     |         }
                                                                     |         if (r3 < 0) {
    0x0004b4e8 movge r7, r1                                          |             r7 = r1;
                                                                     |         }
                                                                     |         if (r3 < 0) {
    0x0004b4ea blt.w 0x4b612                                         |             goto label_47;
                                                                     |         }
                                                                     | label_16:
    0x0004b4ee ldr r1, [sp, 0x3c]                                    |         r1 = var_3ch;
    0x0004b4f0 add.w r0, r7, fp                                      |         r0 = r7 + fp;
    0x0004b4f4 ldr r5, [sp, 0x10]                                    |         r5 = var_10h;
    0x0004b4f6 umull ip, r1, r0, r1                                  |         ip:r1 = r0 * r1;
    0x0004b4fa mla r1, r0, r5, r1                                    |         __asm ("mla r1, r0, r5, r1");
    0x0004b4fe adds.w r5, ip, 0x1f                                   |         r5 = ip + 0x1f;
    0x0004b502 adc r0, r1, 0                                         |         __asm ("adc r0, r1, 0");
    0x0004b506 cmp r5, r2                                            |         
    0x0004b508 sbcs r0, r3                                           |         __asm ("sbcs r0, r3");
                                                                     |         if (r5 >= r2) {
    0x0004b50a blt 0x4b514                                           |             
    0x0004b50c adds.w r2, ip, 0x20                                   |             r2 = ip + 0x20;
    0x0004b510 adc r3, r1, 0                                         |             __asm ("adc r3, r1, 0");
                                                                     |         }
    0x0004b514 mov r0, r6                                            |         r0 = r6;
    0x0004b516 bl 0x21174                                            |         fcn_00021174 (r0, r1, r2);
    0x0004b51a movs r3, 0                                            |         r3 = 0;
    0x0004b51c strb.w r3, [r6, 0x2f]                                 |         *((r6 + 0x2f)) = r3;
                                                                     |     }
                                                                     | label_19:
    0x0004b520 ldr.w sb, [r6, 0x44]                                  |     sb = *((r6 + 0x44));
    0x0004b524 cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x0004b528 beq.w 0x4b1ca                                         |         goto label_13;
                                                                     |     }
    0x0004b52c b 0x4b12c                                             |     goto label_1;
                                                                     | label_32:
    0x0004b52e mov.w sl, 7                                           |     sl = 7;
    0x0004b532 b 0x4b12c                                             |     goto label_1;
                                                                     | label_41:
    0x0004b534 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0004b536 mov r0, r6                                            |     r0 = r6;
    0x0004b538 str r3, [r6, 0x48]                                    |     *((r6 + 0x48)) = r3;
    0x0004b53a ldr r3, [r6, 0x3c]                                    |     r3 = *((r6 + 0x3c));
    0x0004b53c adds r3, 1                                            |     r3++;
    0x0004b53e str r3, [r6, 0x3c]                                    |     *((r6 + 0x3c)) = r3;
    0x0004b540 bl 0x128e0                                            |     fcn_000128e0 (r0);
    0x0004b544 str.w sb, [r6, 0xc]                                   |     __asm ("str.w sb, [r6, 0xc]");
    0x0004b548 b 0x4b25c                                             |     goto label_15;
                                                                     | label_39:
    0x0004b54a mov r7, sb                                            |     r7 = sb;
                                                                     | label_20:
    0x0004b54c ldrd r2, r3, [r6, 0x10]                               |     __asm ("ldrd r2, r3, [r6, 0x10]");
    0x0004b550 cmp r3, 0                                             |     
    0x0004b552 it ge                                                 |     
                                                                     |     if (r3 >= 0) {
    0x0004b554 movge sl, 0                                           |         sl = 0;
                                                                     |         goto label_48;
                                                                     |     }
                                                                     |     if (r3 >= 0) {
                                                                     | label_48:
    0x0004b558 bge 0x4b4ee                                           |         goto label_16;
                                                                     |     }
                                                                     | label_21:
    0x0004b55a ldr.w sb, [r6, 0x44]                                  |     sb = *((r6 + 0x44));
    0x0004b55e b 0x4b1ca                                             |     goto label_13;
                                                                     | label_46:
    0x0004b574 ldr r0, [r6, 8]                                       |     r0 = *((r6 + 8));
    0x0004b576 mov.w r2, 0x1000                                      |     r2 = 0x1000;
    0x0004b57a ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004b57c ldr r3, [r3, 0x2c]                                    |     r3 = *((r3 + 0x2c));
                                                                     |     if (r3 != 0) {
    0x0004b57e cbz r3, 0x4b594                                       |         
    0x0004b580 blx r3                                                |         r0 = uint32_t (*r3)(uint32_t) (r0);
    0x0004b582 cmp r0, 0x1f                                          |         
    0x0004b584 mov r2, r0                                            |         r2 = r0;
                                                                     |         if (r0 <= 0x1f) {
    0x0004b586 ble 0x4b62e                                           |             goto label_49;
                                                                     |         }
    0x0004b588 cmp.w r0, 0x10000                                     |         
    0x0004b58c it ge                                                 |         
                                                                     |         if (r0 < 0x10000) {
    0x0004b58e movge r2, 0x10000                                     |             r2 = 0x10000;
                                                                     |         }
    0x0004b592 asrs r3, r2, 0x1f                                     |         r3 = r2 >> 0x1f;
                                                                     |     }
                                                                     | label_22:
    0x0004b594 ldr r0, [sp, 0x20]                                    |     r0 = var_20h;
    0x0004b596 adds r1, r5, r2                                       |     r1 = r5 + r2;
    0x0004b598 adc.w r0, r0, r3                                      |     __asm ("adc.w r0, r0, r3");
    0x0004b59c adds.w sl, r1, -1                                     |     sl = r1 + -1;
    0x0004b5a0 adc r7, r0, -1                                        |     __asm ("adc r7, r0, -1");
    0x0004b5a4 mov r0, sl                                            |     r0 = sl;
    0x0004b5a6 mov r1, r7                                            |     r1 = r7;
    0x0004b5a8 bl 0x8ca4c                                            |     fcn_0008ca4c (r0, r1, r2, r3);
    0x0004b5ac ldr r1, [sp, 0x20]                                    |     r1 = var_20h;
    0x0004b5ae subs.w r2, sl, r2                                     |     r2 = sl - r2;
    0x0004b5b2 sbc.w r7, r7, r3                                      |     __asm ("sbc.w r7, r7, r3");
    0x0004b5b6 cmp r5, r2                                            |     
    0x0004b5b8 strd r2, r7, [sp, 0x68]                               |     __asm ("strd r2, r7, [sp, 0x68]");
    0x0004b5bc sbcs.w r3, r1, r7                                     |     __asm ("sbcs.w r3, r1, r7");
                                                                     |     if (r5 >= r2) {
    0x0004b5c0 bge 0x4b636                                           |         goto label_50;
                                                                     |     }
    0x0004b5c2 movs r3, 0                                            |     r3 = 0;
    0x0004b5c4 strd fp, r4, [sp, 0x20]                               |     __asm ("strd fp, r4, [sp, 0x20]");
    0x0004b5c8 mov sl, r7                                            |     sl = r7;
    0x0004b5ca str r6, [sp, 0x18]                                    |     var_18h = r6;
    0x0004b5cc str.w r8, [sp, 0x2c]                                  |     __asm ("str.w r8, [var_2ch]");
    0x0004b5d0 add.w sb, sp, 0x60                                    |     sb += var_60h;
    0x0004b5d4 ldr.w r8, [sp, 0x28]                                  |     r8 = var_28h;
    0x0004b5d8 mov r6, r3                                            |     r6 = r3;
    0x0004b5da ldr.w fp, [sp, 0x10]                                  |     fp = var_10h;
    0x0004b5de mov r7, r2                                            |     r7 = r2;
    0x0004b5e0 mov r4, r1                                            |     r4 = r1;
    0x0004b5e2 b 0x4b5f6                                             |     
                                                                     |     while (r0 == 0) {
    0x0004b5e4 ldr r3, [sp, 0x3c]                                    |         r3 = var_3ch;
    0x0004b5e6 adds r6, 1                                            |         r6++;
    0x0004b5e8 adds r5, r3, r5                                       |         r5 = r3 + r5;
    0x0004b5ea adc.w r4, fp, r4                                      |         __asm ("adc.w r4, fp, r4");
    0x0004b5ee cmp r5, r7                                            |         
    0x0004b5f0 sbcs.w r2, r4, sl                                     |         __asm ("sbcs.w r2, r4, sl");
                                                                     |         if (r5 >= r7) {
    0x0004b5f4 bge 0x4b618                                           |             goto label_51;
                                                                     |         }
    0x0004b5f6 ldr r1, [sp, 0x14]                                    |         r1 = var_14h_2;
    0x0004b5f8 mov r2, r8                                            |         r2 = r8;
    0x0004b5fa mov r0, sb                                            |         r0 = sb;
    0x0004b5fc strd r5, r4, [sp]                                     |         __asm ("strd r5, r4, [sp]");
    0x0004b600 bl 0x39324                                            |         r0 = fcn_00039324 (r0, r1, r2, r3);
    0x0004b604 cmp r0, 0                                             |         
    0x0004b606 beq 0x4b5e4                                           |         
                                                                     |     }
    0x0004b608 b 0x4b12a                                             |     goto label_17;
                                                                     | label_44:
    0x0004b60a mov r3, sl                                            |     r3 = sl;
    0x0004b60c mov.w ip, 0x18                                        |     
    0x0004b610 b 0x4b3f2                                             |     goto label_18;
                                                                     | label_47:
    0x0004b612 movs r3, 0                                            |     r3 = 0;
    0x0004b614 mov r7, r3                                            |     r7 = r3;
    0x0004b616 b 0x4b520                                             |     goto label_19;
                                                                     | label_51:
    0x0004b618 mov r7, r6                                            |     r7 = r6;
    0x0004b61a ldrd fp, r4, [sp, 0x20]                               |     __asm ("ldrd fp, r4, [var_20h]");
    0x0004b61e ldr r6, [sp, 0x18]                                    |     r6 = var_18h;
    0x0004b620 ldr.w r8, [sp, 0x2c]                                  |     r8 = var_2ch;
                                                                     | label_24:
    0x0004b624 ldrb.w r3, [r6, 0x2f]                                 |     r3 = *((r6 + 0x2f));
    0x0004b628 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004b62a bne 0x4b54c                                           |         goto label_20;
                                                                     |     }
    0x0004b62c b 0x4b55a                                             |     goto label_21;
                                                                     | label_49:
    0x0004b62e mov.w r2, 0x200                                       |     r2 = 0x200;
    0x0004b632 movs r3, 0                                            |     r3 = 0;
    0x0004b634 b 0x4b594                                             |     goto label_22;
                                                                     | label_50:
    0x0004b636 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0004b638 cmp r7, r3                                            |     
    0x0004b63a it eq                                                 |     
                                                                     |     if (r7 != r3) {
    0x0004b63c cmpeq r2, r5                                          |         __asm ("cmpeq r2, r5");
                                                                     |         goto label_52;
                                                                     |     }
                                                                     |     if (r7 == r3) {
                                                                     | label_52:
    0x0004b63e beq.w 0x4b4cc                                         |         goto label_23;
                                                                     |     }
    0x0004b642 movs r3, 0                                            |     r3 = 0;
    0x0004b644 mov r7, r3                                            |     r7 = r3;
    0x0004b646 b 0x4b624                                             |     goto label_24;
                                                                     | label_34:
    0x0004b648 blx 0x9b44                                            |     fcn_00009b44 ();
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4b890 */
                                                                 | #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.0004b890 ()                                      | void fcn_0004b890 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ah;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_1eh;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0004b890 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0004b894 mov fp, r2                                        |     
    0x0004b896 ldr.w r2, [pc, 0x558]                             |     
    0x0004b89a sub sp, 0x34                                      |     
    0x0004b89c mov r6, r0                                        |     r6 = r0;
    0x0004b89e mov r7, r1                                        |     r7 = r1;
    0x0004b8a0 ldr.w r3, [pc, 0x550]                             |     r3 = *(0x4bdf4);
    0x0004b8a4 add r2, pc                                        |     r2 = 0x9769a;
    0x0004b8a6 ldr r4, [r0, 4]                                   |     r4 = *((r0 + 4));
    0x0004b8a8 ldr r3, [r2, r3]                                  |     
    0x0004b8aa ldr.w sb, [r4]                                    |     sb = *(r4);
    0x0004b8ae ldr r3, [r3]                                      |     r3 = *(0x9769a);
    0x0004b8b0 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0004b8b2 mov.w r3, 0                                       |     r3 = 0;
    0x0004b8b6 ldrb r3, [r0, 9]                                  |     r3 = *((r0 + 9));
                                                                 |     if (r3 != 0) {
    0x0004b8b8 cbz r3, 0x4b8c6                                   |         
    0x0004b8ba ldr r3, [r0, 0xc]                                 |         r3 = *(arg_0hxc);
    0x0004b8bc adds r3, 1                                        |         r3++;
    0x0004b8be str r3, [r0, 0xc]                                 |         *(arg_0hxc) = r3;
    0x0004b8c0 ldrb r3, [r0, 0xa]                                |         r3 = *(arg_0hxa);
    0x0004b8c2 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004b8c4 beq 0x4b9b4                                       |             goto label_29;
                                                                 |         }
                                                                 |     }
    0x0004b8c6 ldrb r3, [r6, 8]                                  |     r3 = *((r6 + 8));
    0x0004b8c8 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0004b8ca beq 0x4b9be                                       |         goto label_30;
                                                                 |     }
                                                                 | label_1:
    0x0004b8cc cmp r3, 1                                         |     
    0x0004b8ce it eq                                             |     
                                                                 |     if (r3 == 1) {
    0x0004b8d0 cmpeq r7, 0                                       |         __asm ("cmpeq r7, 0");
                                                                 |     }
                                                                 |     if (r3 == 1) {
    0x0004b8d2 beq.w 0x4bc3e                                     |         goto label_31;
                                                                 |     }
    0x0004b8d6 ldr r3, [r6]                                      |     r3 = *(r6);
    0x0004b8d8 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x0004b8da ldrh r3, [r4, 0x18]                               |     r3 = *((r4 + 0x18));
    0x0004b8dc lsls r2, r2, 6                                    |     r2 <<= 6;
                                                                 |     if (r2 >= r2) {
    0x0004b8de bpl 0x4b914                                       |         goto label_32;
                                                                 |     }
    0x0004b8e0 ldrb.w r2, [sb, 0xe]                              |     r2 = *((sb + 0xe));
                                                                 |     if (r2 != 0) {
    0x0004b8e4 cbnz r2, 0x4b914                                  |         goto label_32;
                                                                 |     }
    0x0004b8e6 bic r3, r3, 1                                     |     r3 = BIT_MASK (r3, 1);
    0x0004b8ea lsls r3, r3, 0x10                                 |     r3 <<= 0x10;
    0x0004b8ec lsrs r3, r3, 0x10                                 |     r3 >>= 0x10;
    0x0004b8ee strh r3, [r4, 0x18]                               |     *((r4 + 0x18)) = r3;
                                                                 |     if (r7 == 0) {
                                                                 | label_0:
    0x0004b8f0 cbz r7, 0x4b91e                                   |         goto label_33;
                                                                 |     }
    0x0004b8f2 ldrb r2, [r4, 0x14]                               |     r2 = *((r4 + 0x14));
    0x0004b8f4 cmp r2, 2                                         |     
                                                                 |     if (r2 == 2) {
    0x0004b8f6 beq 0x4b922                                       |         goto label_34;
                                                                 |     }
    0x0004b8f8 lsls r0, r3, 0x18                                 |     r0 = r3 << 0x18;
                                                                 |     if (r0 < r3) {
    0x0004b8fa bmi 0x4b922                                       |         goto label_34;
                                                                 |     }
    0x0004b8fc cmp r7, 1                                         |     
                                                                 |     if (r7 <= 1) {
    0x0004b8fe ble 0x4b92c                                       |         goto label_35;
                                                                 |     }
    0x0004b900 ldr r3, [r4, 0x4c]                                |     r3 = *((r4 + 0x4c));
                                                                 |     if (r3 != 0) {
    0x0004b902 cbnz r3, 0x4b90a                                  |         goto label_36;
                                                                 |     }
    0x0004b904 b 0x4b92c                                         |     goto label_35;
                                                                 |     do {
    0x0004b906 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
                                                                 |         if (r3 == 0) {
    0x0004b908 cbz r3, 0x4b92c                                   |             goto label_35;
                                                                 |         }
                                                                 | label_36:
    0x0004b90a ldr r2, [r3]                                      |         r2 = *(r3);
    0x0004b90c cmp r2, r6                                        |         
    0x0004b90e beq 0x4b906                                       |         
                                                                 |     } while (r2 == r6);
    0x0004b910 ldr r3, [r2]                                      |     r3 = *(r2);
    0x0004b912 b 0x4b926                                         |     goto label_37;
                                                                 | label_32:
    0x0004b914 and r2, r3, 1                                     |     r2 = r3 & 1;
    0x0004b918 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004b91a beq 0x4b8f0                                       |         goto label_0;
                                                                 |     }
                                                                 |     if (r7 == 0) {
    0x0004b91c cbnz r7, 0x4b980                                  |         
                                                                 | label_33:
    0x0004b91e lsls r5, r3, 0x18                                 |         r5 = r3 << 0x18;
                                                                 |         if (r5 < r3) {
    0x0004b920 bpl 0x4b92c                                       |             
                                                                 | label_34:
    0x0004b922 ldr r3, [r4, 0x50]                                |             r3 = *((r4 + 0x50));
    0x0004b924 ldr r3, [r3]                                      |             r3 = *(r3);
                                                                 | label_37:
    0x0004b926 mov.w r5, 0x106                                   |             r5 = 0x106;
                                                                 |             if (r3 != 0) {
    0x0004b92a cbnz r3, 0x4b982                                  |                 goto label_2;
                                                                 |             }
                                                                 |         }
                                                                 | label_35:
    0x0004b92c movs r2, 1                                        |         r2 = 1;
    0x0004b92e mov r0, r6                                        |         r0 = r6;
    0x0004b930 mov r1, r2                                        |         r1 = r2;
    0x0004b932 bl 0xb890                                         |         r0 = fcn_0000b890 (r0, r1, r2);
    0x0004b936 mov r5, r0                                        |         r5 = r0;
                                                                 |         if (r0 != 0) {
    0x0004b938 cbnz r0, 0x4b982                                  |             goto label_2;
                                                                 |         }
    0x0004b93a ldrh r3, [r4, 0x18]                               |         r3 = *((r4 + 0x18));
    0x0004b93c ldr r2, [r4, 0x30]                                |         r2 = *((r4 + 0x30));
    0x0004b93e bic r3, r3, 0x10                                  |         r3 = BIT_MASK (r3, 0x10);
    0x0004b942 lsls r3, r3, 0x10                                 |         r3 <<= 0x10;
    0x0004b944 lsrs r3, r3, 0x10                                 |         r3 >>= 0x10;
    0x0004b946 strh r3, [r4, 0x18]                               |         *((r4 + 0x18)) = r3;
                                                                 |         if (r2 == 0) {
    0x0004b948 cbnz r2, 0x4b950                                  |             
    0x0004b94a orr r3, r3, 0x10                                  |             r3 |= 0x10;
    0x0004b94e strh r3, [r4, 0x18]                               |             *((r4 + 0x18)) = r3;
                                                                 |         }
    0x0004b950 ldr.w r8, [r4, 0xc]                               |         r8 = *((r4 + 0xc));
    0x0004b954 mov sl, r7                                        |         sl = r7;
    0x0004b956 mov r7, r8                                        |         r7 = r8;
                                                                 | label_22:
    0x0004b958 cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0004b95a beq.w 0x4ba8a                                     |             goto label_38;
                                                                 |         }
                                                                 | label_3:
    0x0004b95e clz r3, r5                                        |         r3 &= r5;
    0x0004b962 cmp.w sl, 0                                       |         
    0x0004b966 lsr.w r3, r3, 5                                   |         r3 >>= 5;
    0x0004b96a it eq                                             |         
                                                                 |         if (sl != 0) {
    0x0004b96c moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0004b96e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004b970 beq 0x4ba1a                                       |             goto label_39;
                                                                 |         }
    0x0004b972 ldrh r3, [r4, 0x18]                               |         r3 = *((r4 + 0x18));
    0x0004b974 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
                                                                 |         if (r3 >= r3) {
    0x0004b976 bpl 0x4b9ee                                       |             goto label_40;
                                                                 |         }
    0x0004b978 ldrb r3, [r4, 0x14]                               |         r3 = *((r4 + 0x14));
    0x0004b97a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004b97c beq.w 0x4bb48                                     |             goto label_41;
                                                                 |         }
                                                                 |     }
                                                                 | label_18:
    0x0004b980 movs r5, 8                                        |     r5 = 8;
                                                                 | label_2:
    0x0004b982 ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
                                                                 |     if (r3 != 0) {
    0x0004b984 cbz r3, 0x4b992                                   |         
    0x0004b986 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x0004b988 subs r3, 1                                        |         r3--;
    0x0004b98a str r3, [r6, 0xc]                                 |         *((r6 + 0xc)) = r3;
    0x0004b98c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004b98e beq.w 0x4bc0a                                     |             goto label_42;
                                                                 |         }
                                                                 |     }
                                                                 | label_9:
    0x0004b992 ldr.w r2, [pc, 0x464]                             |     r2 = *(0x0004bdf8);
    0x0004b996 ldr.w r3, [pc, 0x45c]                             |     r3 = *(0x4bdf6);
    0x0004b99a add r2, pc                                        |     r2 += pc;
    0x0004b99c ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0004b99e ldr r2, [r3]                                      |     r2 = *(0x4bdf6);
    0x0004b9a0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004b9a2 eors r2, r3                                       |     r2 ^= r3;
    0x0004b9a4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0004b9a8 bne.w 0x4bf8a                                     |         goto label_43;
                                                                 |     }
    0x0004b9ac mov r0, r5                                        |     r0 = r5;
    0x0004b9ae add sp, 0x34                                      |     
    0x0004b9b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_29:
    0x0004b9b4 bl 0x11258                                        |     fcn_00011258 (r0);
    0x0004b9b8 ldrb r3, [r6, 8]                                  |     r3 = *((r6 + 8));
    0x0004b9ba cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x0004b9bc bne 0x4b8cc                                       |         goto label_1;
                                                                 |     }
                                                                 | label_30:
    0x0004b9be cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x0004b9c2 beq 0x4b9d0                                       |         
    0x0004b9c4 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x0004b9c6 ldr r3, [r3, 0x38]                                |         r3 = *((r3 + 0x38));
    0x0004b9c8 ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x0004b9ca rev r3, r3                                        |         r3 = SWAP32 (r3);
    0x0004b9cc str.w r3, [fp]                                    |         __asm ("str.w r3, [fp]");
                                                                 |     }
                                                                 |     if (r7 != 0) {
    0x0004b9d0 cbz r7, 0x4b9ea                                   |         
                                                                 | label_11:
    0x0004b9d2 ldr r2, [r6]                                      |         r2 = *(r6);
    0x0004b9d4 ldr.w r3, [sb, 0x68]                              |         r3 = *((sb + 0x68));
    0x0004b9d8 ldr.w r1, [r2, 0x1f4]                             |         r1 = *((r2 + 0x1f4));
    0x0004b9dc cmp r1, r3                                        |         
                                                                 |         if (r1 <= r3) {
    0x0004b9de ble 0x4b9ea                                       |             goto label_10;
                                                                 |         }
    0x0004b9e0 ldrb.w r3, [sb, 6]                                |         r3 = *((sb + 6));
    0x0004b9e4 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0004b9e6 bne.w 0x4bda2                                     |             goto label_44;
                                                                 |         }
                                                                 |     }
                                                                 | label_10:
    0x0004b9ea movs r5, 0                                        |     r5 = 0;
    0x0004b9ec b 0x4b982                                         |     goto label_2;
                                                                 | label_40:
    0x0004b9ee ldr.w r5, [sb, 0x2c]                              |     r5 = *((sb + 0x2c));
    0x0004b9f2 ldr r3, [r6]                                      |     r3 = *(r6);
    0x0004b9f4 ldrb.w r3, [r3, 0x56]                             |     r3 = *((r3 + 0x56));
    0x0004b9f8 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0004b9fa bne.w 0x4bbce                                     |         goto label_17;
                                                                 |     }
    0x0004b9fe ldrb.w r7, [sb, 0x11]                             |     r7 = *((sb + 0x11));
    0x0004ba02 subs r3, 1                                        |     r3--;
    0x0004ba04 it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x0004ba06 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004ba08 strb.w r3, [sb, 0x16]                             |     *((sb + 0x16)) = r3;
    0x0004ba0c cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x0004ba0e beq.w 0x4bb58                                     |         goto label_45;
                                                                 |     }
                                                                 | label_12:
    0x0004ba12 mov r0, r4                                        |     r0 = r4;
    0x0004ba14 bl 0x4b7fc                                        |     r0 = fcn_0004b7fc (r0);
    0x0004ba18 mov r5, r0                                        |     r5 = r0;
                                                                 | label_39:
    0x0004ba1a cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004ba1c beq.w 0x4bc12                                     |         goto label_46;
                                                                 |     }
                                                                 | label_4:
    0x0004ba20 uxtb.w r8, r5                                     |     r8 = (int8_t) r5;
                                                                 | label_13:
    0x0004ba24 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
                                                                 |     if (r3 == 0) {
    0x0004ba26 cbnz r3, 0x4ba48                                  |         
    0x0004ba28 ldr r7, [r4, 0xc]                                 |         r7 = *((r4 + 0xc));
    0x0004ba2a cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0004ba2c beq.w 0x4bb4e                                     |             goto label_47;
                                                                 |         }
                                                                 | label_5:
    0x0004ba30 ldr r0, [r7, 0x48]                                |         r0 = *((r7 + 0x48));
    0x0004ba32 movs r3, 0                                        |         r3 = 0;
    0x0004ba34 str r3, [r4, 0xc]                                 |         *((r4 + 0xc)) = r3;
    0x0004ba36 ldr r7, [r0, 0x14]                                |         r7 = *((r0 + 0x14));
    0x0004ba38 bl 0x10ed0                                        |         fcn_00010ed0 (r0);
    0x0004ba3c ldr.w r3, [r7, 0xf4]                              |         r3 = *((r7 + 0xf4));
    0x0004ba40 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x0004ba42 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004ba44 beq.w 0x4bc02                                     |             goto label_48;
                                                                 |         }
                                                                 |     }
                                                                 | label_8:
    0x0004ba48 cmp.w r8, 5                                       |     
                                                                 |     if (r8 != 5) {
    0x0004ba4c bne 0x4b982                                       |         goto label_2;
                                                                 |     }
                                                                 | label_7:
    0x0004ba4e ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
    0x0004ba50 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004ba52 bne 0x4b982                                       |         goto label_2;
                                                                 |     }
                                                                 | label_6:
    0x0004ba54 ldr r7, [r4, 4]                                   |     r7 = *((r4 + 4));
    0x0004ba56 ldr.w r3, [r7, 0x1bc]                             |     r3 = *((r7 + 0x1bc));
    0x0004ba5a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ba5c beq 0x4b982                                       |         goto label_2;
                                                                 |     }
    0x0004ba5e ldr.w r1, [r7, 0x1c4]                             |     r1 = *((r7 + 0x1c4));
    0x0004ba62 cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x0004ba64 blt 0x4b982                                       |         goto label_2;
                                                                 |     }
    0x0004ba66 ldr.w r0, [r7, 0x1c0]                             |     r0 = *((r7 + 0x1c0));
    0x0004ba6a blx r3                                            |     r0 = uint32_t (*r3)(uint32_t) (r0);
                                                                 |     if (r0 == 0) {
    0x0004ba6c cbnz r0, 0x4ba78                                  |         
    0x0004ba6e mov.w r3, -1                                      |         r3 = -1;
    0x0004ba72 str.w r3, [r7, 0x1c4]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x0004ba76 b 0x4b982                                         |         goto label_2;
                                                                 |     }
    0x0004ba78 ldr.w r3, [r7, 0x1c4]                             |     r3 = *((r7 + 0x1c4));
    0x0004ba7c adds r3, 1                                        |     r3++;
    0x0004ba7e str.w r3, [r7, 0x1c4]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0004ba80 adds r1, 0xc4                                     |     r1 += 0xc4;
    0x0004ba82 ldr r7, [r4, 0xc]                                 |     r7 = *((r4 + 0xc));
    0x0004ba84 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x0004ba86 bne.w 0x4b95e                                     |         goto label_3;
                                                                 |     }
                                                                 | label_38:
    0x0004ba8a ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004ba8c bl 0x4a7b8                                        |     r0 = fcn_0004a7b8 (r0);
    0x0004ba90 mov r5, r0                                        |     r5 = r0;
    0x0004ba92 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ba94 bne 0x4ba20                                       |         goto label_4;
                                                                 |     }
    0x0004ba96 mov r3, r0                                        |     r3 = r0;
    0x0004ba98 add r2, sp, 0x24                                  |     r2 += var_24h;
    0x0004ba9a movs r1, 1                                        |     r1 = 1;
    0x0004ba9c mov r0, r4                                        |     r0 = r4;
    0x0004ba9e bl 0xba58                                         |     r0 = fcn_0000ba58 (r0, r1, r2);
    0x0004baa2 mov r5, r0                                        |     r5 = r0;
    0x0004baa4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004baa6 bne 0x4ba20                                       |         goto label_4;
                                                                 |     }
    0x0004baa8 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x0004baaa ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004baac ldr.w r8, [r7, 0x38]                              |     r8 = *((r7 + 0x38));
    0x0004bab0 ldr r2, [r3, 0x1c]                                |     r2 = *((r3 + 0x1c));
    0x0004bab2 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0004bab4 ldr.w r2, [r8, 0x1c]                              |     r2 = *((r8 + 0x1c));
                                                                 |     if (r2 != 0) {
    0x0004bab8 cbz r2, 0x4bac8                                   |         
    0x0004baba ldrb.w r0, [r8, 0x18]                             |         r0 = *((r8 + 0x18));
    0x0004babe ldrb.w r1, [r8, 0x5c]                             |         r1 = *((r8 + 0x5c));
    0x0004bac2 cmp r0, r1                                        |         
                                                                 |         if (r0 == r1) {
    0x0004bac4 beq.w 0x4bd70                                     |             goto label_49;
                                                                 |         }
                                                                 |     }
                                                                 | label_14:
    0x0004bac8 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0004baca str r2, [sp, 0xc]                                 |     var_ch = r2;
                                                                 | label_15:
    0x0004bacc ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0004bace ldrd r2, r1, [r1, 0x20]                           |     __asm ("ldrd r2, r1, [r1, 0x20]");
    0x0004bad2 lsrs r2, r2, 0x19                                 |     r2 >>= 0x19;
    0x0004bad4 orr.w r2, r2, r1, lsl 7                           |     r2 |= (r1 << 7);
    0x0004bad8 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0004bada eor r2, r2, 1                                     |     r2 ^= 1;
    0x0004bade cmp r1, 0                                         |     
    0x0004bae0 ite eq                                            |     
                                                                 |     if (r1 != 0) {
    0x0004bae2 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r1 == 0) {
    0x0004bae4 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x0004bae8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004baea bne.w 0x4bd18                                     |         goto label_50;
                                                                 |     }
    0x0004baee ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x0004baf0 str r2, [sp, 0xc]                                 |     var_ch = r2;
                                                                 | label_24:
    0x0004baf2 strh.w r3, [sp, 0x1c]                             |     var_1ch = r3;
    0x0004baf6 subs r3, 0xc                                      |     r3 -= 0xc;
    0x0004baf8 lsls r2, r3, 6                                    |     r2 = r3 << 6;
    0x0004bafa movw r1, 0x8081                                   |     
    0x0004bafe movt r1, 0x8080                                   |     r1 = 0x80808081;
    0x0004bb00 lsls r0, r0, 6                                    |     r0 <<= 6;
    0x0004bb02 lsls r3, r3, 5                                    |     r3 <<= 5;
    0x0004bb04 umull r0, r2, r1, r2                              |     r0:r2 = r1 * r2;
    0x0004bb08 vldr d16, [pc, 0x2dc]                             |     __asm ("vldr d16, aav.0x000000ff");
    0x0004bb0c umull r1, r3, r1, r3                              |     r1:r3 = r1 * r3;
    0x0004bb10 lsrs r2, r2, 7                                    |     r2 >>= 7;
    0x0004bb12 strh.w r2, [sp, 0x18]                             |     var_18h = r2;
    0x0004bb16 ubfx r3, r3, 7, 0x10                              |     r3 = (r3 >> 7) & ((1 << 0x10) - 1);
    0x0004bb1a strh.w r3, [sp, 0x1a]                             |     var_1ah = r3;
    0x0004bb1e strh.w r3, [sp, 0x1e]                             |     var_1eh = r3;
    0x0004bb22 add.w r3, r4, 0x1a                                |     r3 = r4 + 0x1a;
    0x0004bb26 vldr d7, [sp, 0x18]                               |     __asm ("vldr d7, [sp, 0x18]");
    0x0004bb2a vadd.i16 d7, d7, d16                              |     __asm ("vadd.i16 d7, d7, d16");
    0x0004bb2e vst1.16 {d7}, [r3]                                |     __asm ("vst1.16 {d7}, [r3]");
    0x0004bb32 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0004bb34 str r7, [r4, 0xc]                                 |     *((r4 + 0xc)) = r7;
    0x0004bb36 str r3, [r4, 0x30]                                |     *((r4 + 0x30)) = r3;
    0x0004bb38 vmov r3, s14                                      |     __asm ("vmov r3, s14");
    0x0004bb3c uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0004bb3e cmp r3, 0x7f                                      |     
    0x0004bb40 it hs                                             |     
                                                                 |     if (r3 < 0x7f) {
    0x0004bb42 movhs r3, 0x7f                                    |         r3 = 0x7f;
                                                                 |     }
    0x0004bb44 strb r3, [r4, 0x15]                               |     *((r4 + 0x15)) = r3;
    0x0004bb46 b 0x4b95e                                         |     goto label_3;
                                                                 | label_41:
    0x0004bb48 movs r5, 8                                        |     r5 = 8;
    0x0004bb4a mov r8, r5                                        |     r8 = r5;
    0x0004bb4c b 0x4ba30                                         |     goto label_5;
                                                                 | label_47:
    0x0004bb4e cmp.w r8, 5                                       |     
                                                                 |     if (r8 == 5) {
    0x0004bb52 beq.w 0x4ba54                                     |         goto label_6;
                                                                 |     }
    0x0004bb56 b 0x4b982                                         |     goto label_2;
                                                                 | label_45:
    0x0004bb58 ldr.w r8, [sb, 0xf8]                              |     r8 = *((sb + 0xf8));
    0x0004bb5c cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0004bb60 beq.w 0x4bdac                                     |         goto label_51;
                                                                 |     }
    0x0004bb64 ldrb.w r3, [sb, 4]                                |     r3 = *((sb + 4));
                                                                 |     if (r3 != 0) {
    0x0004bb68 cbz r3, 0x4bba8                                   |         
    0x0004bb6a ldrb.w r3, [r8, 0x2b]                             |         r3 = *((r8 + 0x2b));
    0x0004bb6e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0004bb70 bne.w 0x4bca2                                     |             goto label_52;
                                                                 |         }
    0x0004bb74 movs r1, 4                                        |         r1 = 4;
    0x0004bb76 mov r0, sb                                        |         r0 = sb;
    0x0004bb78 bl 0xb660                                         |         r0 = fcn_0000b660 (r0, r1);
    0x0004bb7c mov r5, r0                                        |         r5 = r0;
                                                                 |         if (r0 != 0) {
    0x0004bb7e cbnz r0, 0x4bbce                                  |             goto label_17;
                                                                 |         }
    0x0004bb80 ldr.w r5, [sb, 0xf8]                              |         r5 = *((sb + 0xf8));
    0x0004bb84 ldrb.w r3, [r5, 0x2b]                             |         r3 = *((r5 + 0x2b));
    0x0004bb88 mov r8, r5                                        |         r8 = r5;
                                                                 |         if (r3 == 0) {
    0x0004bb8a cbnz r3, 0x4bba2                                  |             
    0x0004bb8c ldr r0, [r5, 4]                                   |             r0 = *((r5 + 4));
    0x0004bb8e mov r2, r7                                        |             r2 = r7;
    0x0004bb90 ldrsh.w r1, [r5, 0x28]                            |             r1 = *((r5 + 0x28));
    0x0004bb94 ldr r3, [r0]                                      |             r3 = *(r0);
    0x0004bb96 adds r1, 3                                        |             r1 += 3;
    0x0004bb98 ldr r7, [r3, 0x38]                                |             r7 = *((r3 + 0x38));
    0x0004bb9a movs r3, 5                                        |             r3 = 5;
    0x0004bb9c blx r7                                            |             uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004bb9e ldr.w r8, [sb, 0xf8]                              |             r8 = *((sb + 0xf8));
                                                                 |         }
    0x0004bba2 movs r3, 1                                        |         r3 = 1;
    0x0004bba4 strb.w r3, [r5, 0x2b]                             |         *((r5 + 0x2b)) = r3;
                                                                 |     }
    0x0004bba8 ldrb.w r3, [r8, 0x2e]                             |     r3 = *((r8 + 0x2e));
    0x0004bbac cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004bbae bne.w 0x4be00                                     |         goto label_53;
                                                                 |     }
    0x0004bbb2 ldrb.w r1, [r8, 0x2b]                             |     r1 = *((r8 + 0x2b));
    0x0004bbb6 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0004bbb8 bne 0x4bcac                                       |         goto label_54;
                                                                 |     }
    0x0004bbba ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
    0x0004bbbe movs r3, 0xa                                      |     r3 = 0xa;
    0x0004bbc0 movs r2, 1                                        |     r2 = 1;
    0x0004bbc2 ldr r5, [r0]                                      |     r5 = *(r0);
    0x0004bbc4 ldr r5, [r5, 0x38]                                |     r5 = *((r5 + 0x38));
    0x0004bbc6 blx r5                                            |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0004bbc8 mov r5, r0                                        |     r5 = r0;
    0x0004bbca cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004bbcc beq 0x4bcac                                       |         goto label_54;
                                                                 |     }
                                                                 | label_17:
    0x0004bbce movw r3, 0x205                                    |     r3 = 0x205;
    0x0004bbd2 cmp r5, r3                                        |     
                                                                 |     if (r5 != r3) {
    0x0004bbd4 bne.w 0x4ba20                                     |         goto label_4;
                                                                 |     }
                                                                 | label_19:
    0x0004bbd8 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
    0x0004bbda cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004bbdc bne 0x4bc9c                                       |         goto label_55;
                                                                 |     }
    0x0004bbde ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x0004bbe0 movs r5, 5                                        |     r5 = 5;
    0x0004bbe2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004bbe4 beq.w 0x4ba54                                     |         goto label_6;
                                                                 |     }
    0x0004bbe8 ldr r0, [r2, 0x48]                                |     r0 = *((r2 + 0x48));
    0x0004bbea str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x0004bbec ldr r5, [r0, 0x14]                                |     r5 = *((r0 + 0x14));
    0x0004bbee bl 0x10ed0                                        |     fcn_00010ed0 (r0);
    0x0004bbf2 ldr.w r3, [r5, 0xf4]                              |     r3 = *((r5 + 0xf4));
    0x0004bbf6 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0004bbf8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004bbfa beq.w 0x4bf06                                     |         goto label_56;
                                                                 |     }
                                                                 | label_25:
    0x0004bbfe movs r5, 5                                        |     r5 = 5;
    0x0004bc00 b 0x4ba4e                                         |     goto label_7;
                                                                 | label_48:
    0x0004bc02 mov r0, r7                                        |     r0 = r7;
    0x0004bc04 bl 0x49264                                        |     fcn_00049264 (r0);
    0x0004bc08 b 0x4ba48                                         |     goto label_8;
                                                                 | label_42:
    0x0004bc0a mov r0, r6                                        |     r0 = r6;
    0x0004bc0c bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0004bc10 b 0x4b992                                         |     goto label_9;
                                                                 | label_46:
    0x0004bc12 ldrb r3, [r6, 8]                                  |     r3 = *((r6 + 8));
    0x0004bc14 mov r7, sl                                        |     r7 = sl;
                                                                 |     if (r3 == 0) {
    0x0004bc16 cbnz r3, 0x4bc32                                  |         
    0x0004bc18 ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x0004bc1a adds r3, 1                                        |         r3++;
    0x0004bc1c str r3, [r4, 0x2c]                                |         *((r4 + 0x2c)) = r3;
    0x0004bc1e ldrb r3, [r6, 9]                                  |         r3 = *((r6 + 9));
                                                                 |         if (r3 == 0) {
    0x0004bc20 cbz r3, 0x4bc32                                   |             goto label_57;
                                                                 |         }
    0x0004bc22 movs r3, 1                                        |         r3 = 1;
    0x0004bc24 strb.w r3, [r6, 0x28]                             |         *((r6 + 0x28)) = r3;
    0x0004bc28 ldr r3, [r4, 0x4c]                                |         r3 = *((r4 + 0x4c));
    0x0004bc2a str r3, [r6, 0x2c]                                |         *((r6 + 0x2c)) = r3;
    0x0004bc2c add.w r3, r6, 0x20                                |         r3 = r6 + 0x20;
    0x0004bc30 str r3, [r4, 0x4c]                                |         *((r4 + 0x4c)) = r3;
                                                                 |     }
                                                                 | label_57:
    0x0004bc32 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
                                                                 |     if (r7 != 0) {
    0x0004bc34 cbnz r7, 0x4bc54                                  |         goto label_58;
                                                                 |     }
    0x0004bc36 movs r2, 1                                        |     r2 = 1;
    0x0004bc38 strb r2, [r6, 8]                                  |     *((r6 + 8)) = r2;
                                                                 |     if (r3 == 0) {
    0x0004bc3a cbnz r3, 0x4bc3e                                  |         
    0x0004bc3c strb r2, [r4, 0x14]                               |         *((r4 + 0x14)) = r2;
                                                                 |     }
                                                                 | label_31:
    0x0004bc3e cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0004bc42 beq.w 0x4b9ea                                     |         goto label_10;
                                                                 |     }
    0x0004bc46 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0004bc48 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004bc4a ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x0004bc4c rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004bc4e str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x0004bc52 b 0x4b9ea                                         |     goto label_10;
                                                                 | label_58:
    0x0004bc54 movs r2, 2                                        |     r2 = 2;
    0x0004bc56 cmp r3, 1                                         |     
    0x0004bc58 strb r2, [r6, 8]                                  |     *((r6 + 8)) = r2;
    0x0004bc5a ldrh r3, [r4, 0x18]                               |     r3 = *((r4 + 0x18));
    0x0004bc5c ldr.w r8, [r4, 0xc]                               |     r8 = *((r4 + 0xc));
    0x0004bc60 it ls                                             |     
                                                                 |     if (r3 > 1) {
    0x0004bc62 strbls r2, [r4, 0x14]                             |         *((r4 + 0x14)) = r2;
                                                                 |     }
    0x0004bc64 cmp r7, 1                                         |     
    0x0004bc66 bic r3, r3, 0x40                                  |     r3 = BIT_MASK (r3, 0x40);
    0x0004bc6a str r6, [r4, 0x50]                                |     *((r4 + 0x50)) = r6;
    0x0004bc6c lsl.w r3, r3, 0x10                                |     r3 <<= 0x10;
    0x0004bc70 ldr.w r1, [r8, 0x38]                              |     r1 = *((r8 + 0x38));
    0x0004bc74 ldr r2, [r4, 0x30]                                |     r2 = *((r4 + 0x30));
    0x0004bc76 lsr.w r3, r3, 0x10                                |     r3 >>= 0x10;
    0x0004bc7a it gt                                             |     
                                                                 |     if (r7 <= 1) {
    0x0004bc7c orrgt r3, r3, 0x40                                |         r3 |= 0x40;
                                                                 |     }
    0x0004bc80 strh r3, [r4, 0x18]                               |     *((r4 + 0x18)) = r3;
    0x0004bc82 ldr r3, [r1, 0x1c]                                |     r3 = *((r1 + 0x1c));
    0x0004bc84 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004bc86 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0004bc88 bne 0x4bce8                                       |         goto label_59;
                                                                 |     }
    0x0004bc8a cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0004bc8e beq.w 0x4b9d2                                     |         goto label_11;
                                                                 |     }
    0x0004bc92 ldr r3, [r1, 0x28]                                |     r3 = *((r1 + 0x28));
    0x0004bc94 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004bc96 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x0004bc9a b 0x4b9d2                                         |     goto label_11;
                                                                 | label_55:
    0x0004bc9c movw r5, 0x205                                    |     r5 = 0x205;
    0x0004bca0 b 0x4b982                                         |     goto label_2;
                                                                 | label_52:
    0x0004bca2 ldrb.w r3, [r8, 0x2e]                             |     r3 = *((r8 + 0x2e));
    0x0004bca6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004bca8 bne.w 0x4be00                                     |         goto label_53;
                                                                 |     }
                                                                 | label_54:
    0x0004bcac ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x0004bcb0 movs r5, 1                                        |     r5 = 1;
    0x0004bcb2 strb.w r5, [r8, 0x2c]                             |     *((r8 + 0x2c)) = r5;
    0x0004bcb6 movs r2, 0x30                                     |     r2 = 0x30;
    0x0004bcb8 add.w r0, r8, 0x34                                |     r0 = r8 + 0x34;
    0x0004bcbc ldr r1, [r3]                                      |     r1 = *(r3);
    0x0004bcbe blx 0xa0b4                                        |     r0 = fcn_0000a0b4 ();
    0x0004bcc2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004bcc4 bne.w 0x4be18                                     |         goto label_60;
                                                                 |     }
                                                                 | label_16:
    0x0004bcc8 ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x0004bccc vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004bcd0 str.w r3, [sb, 0x28]                              |     __asm ("str.w r3, [sb, 0x28]");
    0x0004bcd4 vstr d16, [sb, 0x50]                              |     __asm ("vstr d16, [sb, 0x50]");
    0x0004bcd8 vdup.32 d16, r3                                   |     __asm ("vdup.32 d16, r3");
    0x0004bcdc movs r3, 2                                        |     r3 = 2;
    0x0004bcde strb.w r3, [sb, 0x11]                             |     *((sb + 0x11)) = r3;
    0x0004bce2 vstr d16, [sb, 0x20]                              |     __asm ("vstr d16, [sb, 0x20]");
    0x0004bce6 b 0x4ba12                                         |     goto label_12;
                                                                 | label_59:
    0x0004bce8 ldr.w r0, [r8, 0x48]                              |     r0 = *((r8 + 0x48));
    0x0004bcec bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x0004bcf0 mov r5, r0                                        |     r5 = r0;
    0x0004bcf2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004bcf4 bne.w 0x4b982                                     |         goto label_2;
                                                                 |     }
    0x0004bcf8 ldr r3, [r4, 0x30]                                |     r3 = *((r4 + 0x30));
    0x0004bcfa ldr.w r2, [r8, 0x38]                              |     r2 = *((r8 + 0x38));
    0x0004bcfe rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004bd00 str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x0004bd02 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0004bd06 beq.w 0x4b9d2                                     |         goto label_11;
                                                                 |     }
    0x0004bd0a ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0004bd0c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004bd0e ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x0004bd10 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004bd12 str.w r3, [fp]                                    |     __asm ("str.w r3, [fp]");
    0x0004bd16 b 0x4b9d2                                         |     goto label_11;
                                                                 | label_50:
    0x0004bd18 ldr r1, [pc, 0xe0]                                |     
    0x0004bd1a movs r2, 0x10                                     |     r2 = 0x10;
    0x0004bd1c mov r0, r8                                        |     r0 = r8;
    0x0004bd1e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0004bd20 add r1, pc                                        |     
    0x0004bd22 add.w r1, r1, 0x118                               |     r1 = 0x97c38;
    0x0004bd26 blx 0xa0b4                                        |     r0 = fcn_0000a0b4 ();
                                                                 |     if (r0 == 0) {
    0x0004bd2a cbnz r0, 0x4bd52                                  |         
    0x0004bd2c ldrb.w r2, [r8, 0x12]                             |         r2 = *((r8 + 0x12));
    0x0004bd30 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0004bd32 cmp r2, 2                                         |         
    0x0004bd34 ittt hi                                           |         
                                                                 |         if (r2 > 2) {
    0x0004bd36 ldrhhi r2, [r4, 0x18]                             |             __asm ("ldrhhi r2, [r4, 0x18]");
                                                                 |         }
                                                                 |         if (r2 <= 2) {
    0x0004bd38 orrhi r2, r2, 1                                   |             r2 |= 1;
                                                                 |         }
                                                                 |         if (r2 > 2) {
    0x0004bd3c strh r2, [r4, 0x18]                               |             *((r4 + 0x18)) = r2;
                                                                 |         }
    0x0004bd3e ldrb.w r2, [r8, 0x13]                             |         r2 = *((r8 + 0x13));
    0x0004bd42 cmp r2, 2                                         |         
                                                                 |         if (r2 > 2) {
    0x0004bd44 bhi 0x4bd52                                       |             goto label_23;
                                                                 |         }
                                                                 |         if (r2 == 2) {
    0x0004bd46 beq 0x4be3c                                       |             goto label_61;
                                                                 |         }
                                                                 | label_21:
    0x0004bd48 ldrb.w r3, [r8, 0x15]                             |         r3 = *((r8 + 0x15));
    0x0004bd4c cmp r3, 0x40                                      |         
                                                                 |         if (r3 == 0x40) {
    0x0004bd4e beq.w 0x4be76                                     |             goto label_62;
                                                                 |         }
                                                                 |     }
                                                                 | label_23:
    0x0004bd52 mov.w r8, 0x1a                                    |     r8 = 0x1a;
    0x0004bd56 mov r5, r8                                        |     r5 = r8;
                                                                 | label_27:
    0x0004bd58 ldr r0, [r7, 0x48]                                |     r0 = *((r7 + 0x48));
    0x0004bd5a ldr r7, [r0, 0x14]                                |     r7 = *((r0 + 0x14));
    0x0004bd5c bl 0x10ed0                                        |     fcn_00010ed0 (r0);
    0x0004bd60 ldr.w r3, [r7, 0xf4]                              |     r3 = *((r7 + 0xf4));
    0x0004bd64 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0004bd66 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004bd68 beq 0x4be34                                       |         goto label_63;
                                                                 |     }
                                                                 | label_20:
    0x0004bd6a movs r3, 0                                        |     r3 = 0;
    0x0004bd6c str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x0004bd6e b 0x4ba24                                         |     goto label_13;
                                                                 | label_49:
    0x0004bd70 ldrb.w r0, [r8, 0x19]                             |     r0 = *((r8 + 0x19));
    0x0004bd74 ldrb.w r1, [r8, 0x5d]                             |     r1 = *((r8 + 0x5d));
    0x0004bd78 cmp r0, r1                                        |     
                                                                 |     if (r0 != r1) {
    0x0004bd7a bne.w 0x4bac8                                     |         goto label_14;
                                                                 |     }
    0x0004bd7e ldrb.w r0, [r8, 0x1a]                             |     r0 = *((r8 + 0x1a));
    0x0004bd82 ldrb.w r1, [r8, 0x5e]                             |     r1 = *((r8 + 0x5e));
    0x0004bd86 cmp r0, r1                                        |     
                                                                 |     if (r0 != r1) {
    0x0004bd88 bne.w 0x4bac8                                     |         goto label_14;
                                                                 |     }
    0x0004bd8c ldrb.w r0, [r8, 0x1b]                             |     r0 = *((r8 + 0x1b));
    0x0004bd90 ldrb.w r1, [r8, 0x5f]                             |     r1 = *((r8 + 0x5f));
    0x0004bd94 cmp r0, r1                                        |     
    0x0004bd96 itt eq                                            |     
                                                                 |     if (r0 == r1) {
    0x0004bd98 reveq r2, r2                                      |         __asm ("reveq r2, r2");
                                                                 |     }
                                                                 |     if (r0 == r1) {
    0x0004bd9a streq r2, [sp, 0xc]                               |         var_ch = r2;
                                                                 |         goto label_64;
                                                                 |     }
                                                                 |     if (r0 != r1) {
                                                                 | label_64:
    0x0004bd9c bne.w 0x4bac8                                     |         goto label_14;
                                                                 |     }
    0x0004bda0 b 0x4bacc                                         |     goto label_15;
                                                                 | label_44:
    0x0004bda2 mov r0, sb                                        |     r0 = sb;
    0x0004bda4 bl 0x133f8                                        |     r0 = fcn_000133f8 (r0, r1);
    0x0004bda8 mov r5, r0                                        |     r5 = r0;
    0x0004bdaa b 0x4b982                                         |     goto label_2;
                                                                 | label_51:
    0x0004bdac movs r1, 2                                        |     r1 = 2;
    0x0004bdae mov r0, sb                                        |     r0 = sb;
    0x0004bdb0 bl 0xb660                                         |     fcn_0000b660 (r0, r1);
    0x0004bdb4 cmp.w sl, 1                                       |     
    0x0004bdb8 mov r5, r0                                        |     r5 = r0;
    0x0004bdba ite le                                            |     
                                                                 |     if (sl > 1) {
    0x0004bdbc movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (sl <= 1) {
    0x0004bdbe movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004bdc0 cmp r0, 0                                         |     
    0x0004bdc2 it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x0004bdc4 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0004bdc6 cbnz r3, 0x4bdd0                                  |         goto label_65;
                                                                 |     }
    0x0004bdc8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004bdca beq.w 0x4bcc8                                     |         goto label_16;
                                                                 |     }
    0x0004bdce b 0x4bbce                                         |     goto label_17;
                                                                 | label_65:
    0x0004bdd0 movs r1, 4                                        |     r1 = 4;
    0x0004bdd2 mov r0, sb                                        |     r0 = sb;
    0x0004bdd4 bl 0x132cc                                        |     r0 = fcn_000132cc (r0, r1);
    0x0004bdd8 mov r5, r0                                        |     r5 = r0;
    0x0004bdda cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004bddc beq.w 0x4bcc8                                     |         goto label_16;
                                                                 |     }
    0x0004bde0 b 0x4bbce                                         |     goto label_17;
                                                                 | label_53:
    0x0004be00 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
    0x0004be02 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004be04 bne.w 0x4b980                                     |         goto label_18;
                                                                 |     }
    0x0004be08 ldr r7, [r4, 0xc]                                 |     r7 = *((r4 + 0xc));
    0x0004be0a cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004be0c beq.w 0x4b980                                     |         goto label_18;
                                                                 |     }
    0x0004be10 mov.w r8, 8                                       |     r8 = 8;
    0x0004be14 mov r5, r8                                        |     r5 = r8;
    0x0004be16 b 0x4ba30                                         |     goto label_5;
                                                                 | label_60:
    0x0004be18 ldrb.w r1, [r8, 0x2b]                             |     r1 = *((r8 + 0x2b));
                                                                 |     if (r1 == 0) {
    0x0004be1c cbnz r1, 0x4be2c                                  |         
    0x0004be1e ldr.w r0, [r8, 4]                                 |         r0 = *((r8 + 4));
    0x0004be22 mov r2, r5                                        |         r2 = r5;
    0x0004be24 movs r3, 9                                        |         r3 = 9;
    0x0004be26 ldr r5, [r0]                                      |         r5 = *(r0);
    0x0004be28 ldr r5, [r5, 0x38]                                |         r5 = *((r5 + 0x38));
    0x0004be2a blx r5                                            |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
                                                                 |     }
    0x0004be2c movs r3, 0                                        |     r3 = 0;
    0x0004be2e strb.w r3, [r8, 0x2c]                             |     *((r8 + 0x2c)) = r3;
    0x0004be32 b 0x4bbd8                                         |     goto label_19;
                                                                 | label_63:
    0x0004be34 mov r0, r7                                        |     r0 = r7;
    0x0004be36 bl 0x49264                                        |     fcn_00049264 (r0);
    0x0004be3a b 0x4bd6a                                         |     goto label_20;
                                                                 | label_61:
    0x0004be3c ldrh r2, [r4, 0x18]                               |     r2 = *((r4 + 0x18));
    0x0004be3e ands r2, r2, 0x20                                 |     r2 &= 0x20;
                                                                 |     if (r2 != r2) {
    0x0004be42 bne 0x4bd48                                       |         goto label_21;
                                                                 |     }
    0x0004be44 mov r0, r3                                        |     r0 = r3;
    0x0004be46 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x0004be48 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0004be4a bl 0x18edc                                        |     r0 = fcn_00018edc (r0, r1);
    0x0004be4e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004be50 bne.w 0x4bf82                                     |         goto label_66;
                                                                 |     }
    0x0004be54 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0004be56 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004be58 bne.w 0x4bd48                                     |         goto label_21;
                                                                 |     }
    0x0004be5c ldr r0, [r7, 0x48]                                |     r0 = *((r7 + 0x48));
    0x0004be5e ldr r5, [r0, 0x14]                                |     r5 = *((r0 + 0x14));
    0x0004be60 bl 0x10ed0                                        |     fcn_00010ed0 (r0);
    0x0004be64 ldr.w r3, [r5, 0xf4]                              |     r3 = *((r5 + 0xf4));
    0x0004be68 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0004be6a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004be6c beq.w 0x4bf8e                                     |         goto label_67;
                                                                 |     }
                                                                 | label_28:
    0x0004be70 ldr r7, [r4, 0xc]                                 |     r7 = *((r4 + 0xc));
    0x0004be72 movs r5, 0                                        |     r5 = 0;
    0x0004be74 b 0x4b958                                         |     goto label_22;
                                                                 | label_62:
    0x0004be76 ldrb.w r3, [r8, 0x16]                             |     r3 = *((r8 + 0x16));
    0x0004be7a cmp r3, 0x20                                      |     
                                                                 |     if (r3 != 0x20) {
    0x0004be7c bne.w 0x4bd52                                     |         goto label_23;
                                                                 |     }
    0x0004be80 ldrb.w r3, [r8, 0x17]                             |     r3 = *((r8 + 0x17));
    0x0004be84 cmp r3, 0x20                                      |     
                                                                 |     if (r3 != 0x20) {
    0x0004be86 bne.w 0x4bd52                                     |         goto label_23;
                                                                 |     }
    0x0004be8a ldrb.w r2, [r8, 0x11]                             |     r2 = *((r8 + 0x11));
    0x0004be8e ldrb.w r3, [r8, 0x10]                             |     r3 = *((r8 + 0x10));
    0x0004be92 lsls r2, r2, 0x10                                 |     r2 <<= 0x10;
    0x0004be94 orr.w r2, r2, r3, lsl 8                           |     r2 |= (r3 << 8);
    0x0004be98 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x0004be9a tst r3, r2                                        |     
                                                                 |     if ((r3 & r2) != 0) {
    0x0004be9c bne.w 0x4bd52                                     |         goto label_23;
                                                                 |     }
    0x0004bea0 mvn r1, 0x100                                     |     r1 = ~0x100;
    0x0004bea4 adds r3, r2, r1                                   |     r3 = r2 + r1;
    0x0004bea6 cmp.w r3, 0xff00                                  |     
    0x0004bea8 ldr r7, [pc, 0x1fc]                               |     r7 = *(0x4c0a8);
                                                                 |     if (r3 >= fcn.00000004) {
    0x0004beaa bhs.w 0x4bd52                                     |         goto label_23;
                                                                 |     }
    0x0004beac add r7, sp, 0x148                                 |     r7 = sp + 0x148;
    0x0004beae ldrh r3, [r4, 0x18]                               |     r3 = *((r4 + 0x18));
    0x0004beb0 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x0004beb2 orr r3, r3, 2                                     |     r3 |= 2;
    0x0004beb6 strh r3, [r4, 0x18]                               |     *((r4 + 0x18)) = r3;
    0x0004beb8 cmp r2, r1                                        |     
    0x0004beba ldrb.w r3, [r8, 0x14]                             |     r3 = *((r8 + 0x14));
    0x0004bebe str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0004bec0 sub.w r3, r2, r3                                  |     r3 = r2 - r3;
                                                                 |     if (r2 != r1) {
    0x0004bec4 bne 0x4bf0e                                       |         goto label_68;
                                                                 |     }
    0x0004bec6 ldrd r1, r2, [sp, 0xc]                            |     __asm ("ldrd r1, r2, [var_10h]");
    0x0004beca cmp r2, r1                                        |     
                                                                 |     if (r2 < r1) {
    0x0004becc bhs 0x4bee2                                       |         
    0x0004bece ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0004bed0 ldr r1, [r2, 0x20]                                |         r1 = *((r2 + 0x20));
    0x0004bed2 movs r2, 1                                        |         
    0x0004bed4 movt r2, 0x1000                                   |         r2 = 0x10000001;
    0x0004bed8 ands r2, r1                                       |         r2 &= r1;
    0x0004beda cmp r2, 1                                         |         
                                                                 |         if (r2 != 1) {
    0x0004bedc bne 0x4bf5e                                       |             goto label_69;
                                                                 |         }
    0x0004bede ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x0004bee0 str r2, [sp, 0xc]                                 |         var_ch = r2;
                                                                 |     }
    0x0004bee2 cmp.w r3, 0x1e0                                   |     
                                                                 |     if (r3 <= 0x1e0) {
    0x0004bee6 blo.w 0x4bd52                                     |         goto label_23;
                                                                 |     }
    0x0004beea str r3, [r4, 0x28]                                |     *((r4 + 0x28)) = r3;
    0x0004beec ldr.w r2, [r8, 0x34]                              |     r2 = *((r8 + 0x34));
    0x0004bef0 subs r2, 0                                        |     
    0x0004bef2 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0004bef4 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0004bef6 strb r2, [r4, 0x11]                               |     *((r4 + 0x11)) = r2;
    0x0004bef8 ldr.w r2, [r8, 0x40]                              |     r2 = *((r8 + 0x40));
    0x0004befc subs r2, 0                                        |     
    0x0004befe it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0004bf00 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0004bf02 strb r2, [r4, 0x12]                               |     *((r4 + 0x12)) = r2;
    0x0004bf04 b 0x4baf2                                         |     goto label_24;
                                                                 | label_56:
    0x0004bf06 mov r0, r5                                        |     r0 = r5;
    0x0004bf08 bl 0x49264                                        |     fcn_00049264 (r0);
    0x0004bf0c b 0x4bbfe                                         |     goto label_25;
                                                                 | label_68:
    0x0004bf0e ldr r0, [r7, 0x48]                                |     r0 = *((r7 + 0x48));
    0x0004bf10 strd r2, r3, [sp, 0xc]                            |     __asm ("strd r2, r3, [var_10h]");
    0x0004bf14 ldr r5, [r0, 0x14]                                |     r5 = *((r0 + 0x14));
    0x0004bf16 bl 0x10ed0                                        |     fcn_00010ed0 (r0);
    0x0004bf1a ldrd r2, r3, [sp, 0xc]                            |     __asm ("ldrd r2, r3, [var_10h]");
    0x0004bf1e ldr.w r1, [r5, 0xf4]                              |     r1 = *((r5 + 0xf4));
    0x0004bf22 ldr r1, [r1, 0xc]                                 |     r1 = *((r1 + 0xc));
                                                                 |     if (r1 == 0) {
    0x0004bf24 cbz r1, 0x4bf52                                   |         goto label_70;
                                                                 |     }
                                                                 | label_26:
    0x0004bf26 ldr r0, [r4, 0x54]                                |     r0 = *((r4 + 0x54));
    0x0004bf28 strd r2, r3, [r4, 0x24]                           |     __asm ("strd r2, r3, [r4, 0x24]");
                                                                 |     if (r0 != 0) {
    0x0004bf2c cbz r0, 0x4bf3a                                   |         
    0x0004bf2e subs r0, 4                                        |         r0 -= 4;
    0x0004bf30 str r0, [r4, 0x54]                                |         *((r4 + 0x54)) = r0;
    0x0004bf32 bl 0xec68                                         |         fcn_0000ec68 (r0);
    0x0004bf36 movs r3, 0                                        |         r3 = 0;
    0x0004bf38 str r3, [r4, 0x54]                                |         *((r4 + 0x54)) = r3;
                                                                 |     }
    0x0004bf3a mov r1, r4                                        |     r1 = r4;
    0x0004bf3c ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0004bf3e ldr r0, [r1], 0x24                                |     r0 = *(r1);
                                                                 |     r1 += 0x24;
    0x0004bf42 bl 0x1906c                                        |     r0 = fcn_0001906c (r0, r1, r2);
    0x0004bf46 mov r5, r0                                        |     r5 = r0;
    0x0004bf48 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004bf4a bne.w 0x4ba20                                     |         goto label_4;
                                                                 |     }
    0x0004bf4e ldr r7, [r4, 0xc]                                 |     r7 = *((r4 + 0xc));
    0x0004bf50 b 0x4b958                                         |     goto label_22;
                                                                 | label_70:
    0x0004bf52 mov r0, r5                                        |     r0 = r5;
    0x0004bf54 bl 0x49264                                        |     fcn_00049264 (r0);
    0x0004bf58 ldrd r2, r3, [sp, 0xc]                            |     __asm ("ldrd r2, r3, [var_10h]");
    0x0004bf5c b 0x4bf26                                         |     goto label_26;
                                                                 | label_69:
    0x0004bf5e blx 0xa230                                        |     fcn_0000a230 ();
    0x0004bf62 ldr r2, [pc, 0x34]                                |     
    0x0004bf64 adds r0, 0x14                                     |     r0 += 0x14;
    0x0004bf66 ldr r1, [pc, 0x34]                                |     
    0x0004bf68 movw r3, 0x1345                                   |     
    0x0004bf6c str r0, [sp]                                      |     *(sp) = r0;
    0x0004bf6e movt r3, 1                                        |     r3 = 0x11345;
    0x0004bf72 add r2, pc                                        |     r2 = 0x97f10;
    0x0004bf74 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004bf76 add r1, pc                                        |     r1 = 0x97f18;
    0x0004bf78 movs r5, 0xb                                      |     r5 = 0xb;
    0x0004bf7a mov r8, r5                                        |     r8 = r5;
    0x0004bf7c blx 0x9f00                                        |     fcn_00009f00 ();
    0x0004bf80 b 0x4bd58                                         |     goto label_27;
                                                                 | label_66:
    0x0004bf82 uxtb.w r8, r0                                     |     r8 = (int8_t) r0;
    0x0004bf86 mov r5, r0                                        |     r5 = r0;
    0x0004bf88 b 0x4bd58                                         |     goto label_27;
                                                                 | label_43:
    0x0004bf8a blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_67:
    0x0004bf8e mov r0, r5                                        |     r0 = r5;
    0x0004bf90 bl 0x49264                                        |     fcn_00049264 (r0);
    0x0004bf94 b 0x4be70                                         |     goto label_28;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4ca58 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                     |                                ((n & 0x0000ff00) <<  8) | \
                                                                     |                                ((n & 0x00ff0000) >>  8) | \
                                                                     |                                ((n & 0xff000000) >> 24)))
                                                                     |  
    ; (fcn) fcn.0004ca58 ()                                          | void fcn_0004ca58 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_34h_2;
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     arithmetic var_14h;
                                                                     |     arithmetic var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     arithmetic x;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0004ca58 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0004ca5c mov r4, r2                                            |     r4 = r2;
    0x0004ca5e ldr r2, [pc, 0x32c]                                   |     
    0x0004ca60 mov r5, r3                                            |     r5 = r3;
    0x0004ca62 sub sp, 0x3c                                          |     
    0x0004ca64 mov sb, r1                                            |     sb = r1;
    0x0004ca66 ldr r3, [pc, 0x328]                                   |     r3 = *(0x4cd92);
    0x0004ca68 mov r7, r0                                            |     r7 = r0;
    0x0004ca6a add r2, pc                                            |     r2 = 0x997fc;
    0x0004ca6c mov.w r8, 0                                           |     r8 = 0;
    0x0004ca70 ldr r3, [r2, r3]                                      |     
    0x0004ca72 ldr r3, [r3]                                          |     r3 = *(0x997fc);
    0x0004ca74 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0004ca76 mov.w r3, 0                                           |     r3 = 0;
    0x0004ca7a ldr r3, [r0, 0x14]                                    |     r3 = *((r0 + 0x14));
    0x0004ca7c mov r0, r1                                            |     r0 = r1;
    0x0004ca7e str.w r8, [sp, 0x24]                                  |     __asm ("str.w r8, [x]");
    0x0004ca82 ldr r6, [r3, 0x54]                                    |     r6 = *((r3 + 0x54));
    0x0004ca84 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0004ca86 bl 0xe26c                                             |     fcn_0000e26c (r0);
    0x0004ca8a ldr.w r2, [sb, 0x2c]                                  |     r2 = *((sb + 0x2c));
    0x0004ca8e cmp r2, 0x7f                                          |     
    0x0004ca90 it ls                                                 |     
                                                                     |     if (r2 > 0x7f) {
    0x0004ca92 strbls r2, [r6], 1                                    |         *(r6) = r2;
                                                                     |         r6++;
                                                                     |     }
                                                                     |     if (r2 > 0x7f) {
    0x0004ca96 bhi.w 0x4ccbc                                         |         goto label_13;
                                                                     |     }
    0x0004ca9a ldr r3, [r7, 0x70]                                    |     r3 = *((r7 + 0x70));
    0x0004ca9c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004ca9e beq.w 0x4ccd4                                         |         goto label_14;
                                                                     |     }
                                                                     | label_9:
    0x0004caa2 ldr.w r3, [sb, 0x74]                                  |     r3 = *((sb + 0x74));
    0x0004caa6 ldrh.w sl, [sb, 0x30]                                 |     sl = *((sb + 0x30));
    0x0004caaa ldr.w r5, [sb, 0x28]                                  |     r5 = *((sb + 0x28));
    0x0004caae ldr r3, [r3, 0x3c]                                    |     r3 = *((r3 + 0x3c));
    0x0004cab0 mov r4, sl                                            |     r4 = sl;
    0x0004cab2 add.w r2, r5, sl                                      |     r2 = r5 + sl;
    0x0004cab6 cmp r2, r3                                            |     
    0x0004cab8 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0004caba str r2, [sp, 0x1c]                                    |     var_1ch = r2;
                                                                     |     if (r2 > r3) {
    0x0004cabc bhi.w 0x4cd18                                         |         goto label_15;
                                                                     |     }
    0x0004cac0 ldr r2, [r7, 0x74]                                    |     r2 = *((r7 + 0x74));
    0x0004cac2 ldr.w r8, [sb, 0x2c]                                  |     r8 = *((sb + 0x2c));
    0x0004cac6 ldrh r3, [r2, 0xe]                                    |     r3 = *((r2 + 0xe));
    0x0004cac8 cmp sl, r8                                            |     
    0x0004caca str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     |     if (sl == r8) {
    0x0004cacc beq.w 0x4ccfa                                         |         goto label_16;
                                                                     |     }
                                                                     | label_10:
    0x0004cad0 ldr.w r3, [sb, 0x14]                                  |     r3 = *((sb + 0x14));
    0x0004cad4 ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0004cad6 ldr r7, [r3]                                          |     r7 = *(r3);
    0x0004cad8 movs r3, 0                                            |     r3 = 0;
    0x0004cada cmp r1, r8                                            |     
    0x0004cadc str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0004cade sbcs.w r1, r3, r3                                     |     __asm ("sbcs.w r1, r3, r3");
                                                                     |     if (r1 >= r8) {
    0x0004cae2 bge.w 0x4cc76                                         |         goto label_17;
                                                                     |     }
    0x0004cae6 ldr r1, [r2, 0x34]                                    |     r1 = *((r2 + 0x34));
    0x0004cae8 ldrh r0, [r2, 0x10]                                   |     r0 = *((r2 + 0x10));
    0x0004caea ldr r2, [r1, 0x28]                                    |     r2 = *((r1 + 0x28));
    0x0004caec str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0004caee subs.w r0, r8, r0                                     |     r0 = r8 - r0;
    0x0004caf2 sbc.w r1, r1, r1                                      |     __asm ("sbc.w r1, r1, r1");
    0x0004caf6 subs r2, 4                                            |     r2 -= 4;
    0x0004caf8 bl 0x8ca4c                                            |     fcn_0008ca4c (r0, r1, r2, r3);
    0x0004cafc ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0004cafe ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0004cb00 add.w fp, r3, r2                                      |     
    0x0004cb04 cmp r1, fp                                            |     
    0x0004cb06 it lt                                                 |     
                                                                     |     if (r1 >= fp) {
    0x0004cb08 movlt fp, r3                                          |         
                                                                     |     }
    0x0004cb0a ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0004cb0c cmp r8, fp                                            |     
    0x0004cb0e ldr r2, [r3, 0x54]                                    |     r2 = *((r3 + 0x54));
    0x0004cb10 itt hi                                                |     
                                                                     |     if (r8 <= fp) {
    0x0004cb12 addhi r3, r6, fp                                      |         r3 = r6 + fp;
                                                                     |     }
                                                                     |     if (r8 > fp) {
    0x0004cb16 str r3, [sp, 0x18]                                    |         var_18h = r3;
                                                                     |     }
    0x0004cb18 sub.w r2, r6, r2                                      |     r2 = r6 - r2;
    0x0004cb1c add r2, fp                                            |     r2 += fp;
    0x0004cb1e it hi                                                 |     
                                                                     |     if (r8 <= fp) {
    0x0004cb20 addhi r2, 4                                           |         r2 += 4;
                                                                     |     }
                                                                     |     if (r8 < fp) {
    0x0004cb22 bls.w 0x4cc82                                         |         goto label_18;
                                                                     |     }
    0x0004cb26 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0004cb28 cmp sl, r8                                            |     
    0x0004cb2a str r2, [r3, 0x58]                                    |     *((r3 + 0x58)) = r2;
                                                                     |     if (sl >= r8) {
    0x0004cb2c bhs.w 0x4cc90                                         |         goto label_19;
                                                                     |     }
                                                                     | label_3:
    0x0004cb30 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0004cb32 add.w r2, sl, 4                                       |     r2 = sl + 4;
    0x0004cb36 add r2, r5                                            |     r2 += r5;
    0x0004cb38 cmp r3, r2                                            |     
                                                                     |     if (r3 <= r2) {
    0x0004cb3a blo.w 0x4cd50                                         |         goto label_20;
                                                                     |     }
    0x0004cb3e ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0004cb40 ldr.w sl, [r3]                                        |     sl = *(r3);
    0x0004cb44 rev.w sl, sl                                          |     sl = SWAP32 (sl);
                                                                     | label_4:
    0x0004cb48 movs r3, 0                                            |     r3 = 0;
    0x0004cb4a str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0004cb4c add r3, sp, 0x28                                      |     r3 += var_28h;
    0x0004cb4e str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0004cb50 mov r3, fp                                            |     r3 = fp;
    0x0004cb52 mov fp, r8                                            |     
    0x0004cb54 mov r8, r6                                            |     r8 = r6;
    0x0004cb56 mov r6, r3                                            |     r6 = r3;
                                                                     |     do {
                                                                     | label_2:
    0x0004cb58 sub.w fp, fp, r6                                      |         
    0x0004cb5c str r5, [sp, 0xc]                                     |         var_ch = r5;
    0x0004cb5e cmp r4, 0                                             |         
                                                                     |         if (r4 != 0) {
    0x0004cb60 bne 0x4cc26                                           |             goto label_6;
                                                                     |         }
                                                                     | label_5:
    0x0004cb62 cmp r6, 0                                             |         
                                                                     |         if (r6 != 0) {
    0x0004cb64 bne 0x4cc46                                           |             goto label_21;
                                                                     |         }
                                                                     | label_0:
    0x0004cb66 ldr r0, [sp, 0x24]                                    |         r0 = x;
    0x0004cb68 cmp.w fp, 0                                           |         
    0x0004cb6c ldr r5, [sp, 0xc]                                     |         r5 = var_ch;
    0x0004cb6e clz r3, r0                                            |         r3 &= r0;
    0x0004cb72 lsr.w r3, r3, 5                                       |         r3 >>= 5;
    0x0004cb76 it eq                                                 |         
                                                                     |         if (fp != 0) {
    0x0004cb78 moveq r3, 0                                           |             r3 = 0;
                                                                     |         }
    0x0004cb7a cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0004cb7c beq 0x4cc66                                           |             goto label_22;
                                                                     |         }
    0x0004cb7e ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0004cb80 mov r2, r0                                            |         r2 = r0;
    0x0004cb82 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0004cb84 beq 0x4cbea                                           |             
    0x0004cb86 mov r3, r6                                            |             r3 = r6;
    0x0004cb88 add r2, sp, 0x2c                                      |             r2 += var_2ch;
    0x0004cb8a add r1, sp, 0x30                                      |             r1 += var_30h;
    0x0004cb8c ldr r0, [sp, 0x14]                                    |             r0 = var_14h;
    0x0004cb8e str r6, [sp]                                          |             *(sp) = r6;
    0x0004cb90 str r6, [sp, 0x30]                                    |             var_30h = r6;
    0x0004cb92 bl 0x4c088                                            |             fcn_0004c088 (r0, r1, r2, r3, r4);
    0x0004cb96 ldr r1, [sp, 0x2c]                                    |             r1 = var_2ch;
    0x0004cb98 mov r2, r0                                            |             r2 = r0;
    0x0004cb9a str r0, [sp, 0x24]                                    |             x = r0;
    0x0004cb9c ldr r0, [sp, 0x18]                                    |             r0 = var_18h;
    0x0004cb9e rev r3, r1                                            |             r1 = SWAP32 (r3);
    0x0004cba0 str r3, [r0]                                          |             *(r0) = r3;
    0x0004cba2 ldr r0, [sp, 0x14]                                    |             r0 = var_14h;
    0x0004cba4 ldrb r3, [r0, 0x11]                                   |             r3 = *((r0 + 0x11));
    0x0004cba6 cmp r3, 0                                             |             
                                                                     |             if (r3 == 0) {
    0x0004cba8 beq.w 0x4ccb4                                         |                 goto label_23;
                                                                     |             }
    0x0004cbac ldr r3, [sp, 0x1c]                                    |             r3 = var_1ch;
                                                                     |             if (r3 != 0) {
    0x0004cbae cbz r3, 0x4cbcc                                       |                 
    0x0004cbb0 ldr r3, [r3, 4]                                       |                 r3 = *((r3 + 4));
    0x0004cbb2 add r2, sp, 0x24                                      |                 r2 += x;
    0x0004cbb4 str r2, [sp]                                          |                 *(sp) = r2;
    0x0004cbb6 movs r2, 4                                            |                 r2 = 4;
    0x0004cbb8 str r3, [sp, 0xc]                                     |                 var_ch = r3;
    0x0004cbba bl 0x4c6ec                                            |                 fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004cbbe ldr r2, [sp, 0x24]                                    |                 r2 = x;
                                                                     | label_7:
    0x0004cbc0 ldr r3, [sp, 0x1c]                                    |                 r3 = var_1ch;
    0x0004cbc2 str r2, [sp, 0xc]                                     |                 var_ch = r2;
    0x0004cbc4 ldr r0, [r3, 0x48]                                    |                 r0 = *((r3 + 0x48));
    0x0004cbc6 bl 0x10f18                                            |                 fcn_00010f18 (r0);
    0x0004cbca ldr r2, [sp, 0xc]                                     |                 r2 = var_ch;
                                                                     |             }
                                                                     | label_8:
    0x0004cbcc ldr r3, [sp, 0x30]                                    |             r3 = var_30h;
    0x0004cbce str r3, [sp, 0x1c]                                    |             var_1ch = r3;
                                                                     |             if (r3 == 0) {
    0x0004cbd0 cbz r3, 0x4cbea                                       |                 goto label_24;
                                                                     |             }
    0x0004cbd2 ldr r3, [r3, 0x38]                                    |             r3 = *((r3 + 0x38));
    0x0004cbd4 mov r8, r3                                            |             r8 = r3;
    0x0004cbd6 str r3, [sp, 0x18]                                    |             var_18h = r3;
    0x0004cbd8 movs r3, 0                                            |             r3 = 0;
    0x0004cbda str r3, [r8], 4                                       |             *(r8) = r3;
                                                                     |             r8 += 4;
    0x0004cbde ldr r3, [sp, 0x14]                                    |             r3 = var_14h;
    0x0004cbe0 ldr r3, [r3, 0x28]                                    |             r3 = *((r3 + 0x28));
    0x0004cbe2 subs r6, r3, 4                                        |             r6 = r3 - 4;
    0x0004cbe4 cmp r6, fp                                            |             
    0x0004cbe6 it hs                                                 |             
                                                                     |             if (r6 >= fp) {
    0x0004cbe8 movhs r6, fp                                          |                 r6 = fp;
                                                                     |                 goto label_24;
                                                                     |             }
                                                                     |         }
                                                                     | label_24:
    0x0004cbea cmp r2, 0                                             |         
    0x0004cbec beq 0x4cb58                                           |         
                                                                     |     } while (r2 == 0);
                                                                     | label_1:
    0x0004cbee ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
                                                                     |     if (r3 != 0) {
    0x0004cbf0 cbz r3, 0x4cbfc                                       |         
    0x0004cbf2 ldr r0, [r3, 0x48]                                    |         r0 = *((r3 + 0x48));
    0x0004cbf4 str r2, [sp, 0xc]                                     |         var_ch = r2;
    0x0004cbf6 bl 0x10f18                                            |         fcn_00010f18 (r0);
    0x0004cbfa ldr r2, [sp, 0xc]                                     |         r2 = var_ch;
                                                                     |     }
    0x0004cbfc ldr r0, [sp, 0x28]                                    |     r0 = var_28h;
                                                                     |     if (r0 != 0) {
    0x0004cbfe cbz r0, 0x4cc08                                       |         
    0x0004cc00 str r2, [sp, 0xc]                                     |         var_ch = r2;
    0x0004cc02 bl 0x10f18                                            |         fcn_00010f18 (r0);
    0x0004cc06 ldr r2, [sp, 0xc]                                     |         r2 = var_ch;
                                                                     |     }
                                                                     | label_11:
    0x0004cc08 ldr r1, [pc, 0x188]                                   |     
    0x0004cc0a ldr r3, [pc, 0x184]                                   |     r3 = *(0x4cd92);
    0x0004cc0c add r1, pc                                            |     r1 = 0x999a4;
    0x0004cc0e ldr r3, [r1, r3]                                      |     r3 = *(0x999a4);
    0x0004cc10 ldr r1, [r3]                                          |     r1 = *(0x999a4);
    0x0004cc12 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0004cc14 eors r1, r3                                           |     r1 ^= r3;
    0x0004cc16 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r1 != r3) {
    0x0004cc1a bne.w 0x4cd86                                         |         goto label_25;
                                                                     |     }
    0x0004cc1e mov r0, r2                                            |     r0 = r2;
    0x0004cc20 add sp, 0x3c                                          |     
    0x0004cc22 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_6:
    0x0004cc26 cmp r4, r6                                            |     
    0x0004cc28 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004cc2a mov r2, r4                                            |     r2 = r4;
    0x0004cc2c it hs                                                 |     
                                                                     |     if (r4 < r6) {
    0x0004cc2e movhs r2, r6                                          |         r2 = r6;
                                                                     |     }
    0x0004cc30 subs r6, r6, r2                                       |     r6 -= r2;
    0x0004cc32 mov r0, r8                                            |     r0 = r8;
    0x0004cc34 mov r1, r3                                            |     r1 = r3;
    0x0004cc36 add r3, r2                                            |     r3 += r2;
    0x0004cc38 subs r4, r4, r2                                       |     r4 -= r2;
    0x0004cc3a add r8, r2                                            |     r8 += r2;
    0x0004cc3c str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0004cc3e blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0004cc42 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0004cc44 beq 0x4cb66                                           |         goto label_0;
                                                                     |     }
                                                                     | label_21:
    0x0004cc46 ldr r0, [sp, 0x28]                                    |     r0 = var_28h;
                                                                     |     if (r0 != 0) {
    0x0004cc48 cbz r0, 0x4cc4e                                       |         
    0x0004cc4a bl 0x10f18                                            |         fcn_00010f18 (r0);
                                                                     |     }
    0x0004cc4e movs r3, 0                                            |     r3 = 0;
    0x0004cc50 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0004cc52 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0004cc54 mov r1, sl                                            |     r1 = sl;
    0x0004cc56 ldr.w r5, [r7, 0xdc]                                  |     r5 = *((r7 + 0xdc));
    0x0004cc5a movs r3, 2                                            |     r3 = 2;
    0x0004cc5c mov r0, r7                                            |     r0 = r7;
    0x0004cc5e blx r5                                                |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004cc60 str r0, [sp, 0x24]                                    |     x = r0;
                                                                     |     if (r0 == 0) {
    0x0004cc62 cbz r0, 0x4cc96                                       |         goto label_26;
                                                                     |     }
    0x0004cc64 ldr r5, [sp, 0xc]                                     |     r5 = var_ch;
                                                                     | label_22:
    0x0004cc66 mov r2, r0                                            |     r2 = r0;
    0x0004cc68 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0004cc6c beq 0x4cbee                                           |         goto label_1;
                                                                     |     }
    0x0004cc6e cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0004cc70 beq.w 0x4cb58                                         |         goto label_2;
                                                                     |     }
    0x0004cc74 b 0x4cbee                                             |     goto label_1;
                                                                     | label_17:
    0x0004cc76 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0004cc78 mov fp, r8                                            |     
    0x0004cc7a ldr r3, [r3, 0x54]                                    |     r3 = *((r3 + 0x54));
    0x0004cc7c subs r3, r6, r3                                       |     r3 = r6 - r3;
    0x0004cc7e add.w r2, r3, r8                                      |     r2 = r3 + r8;
                                                                     | label_18:
    0x0004cc82 movs r3, 0                                            |     r3 = 0;
    0x0004cc84 cmp sl, r8                                            |     
    0x0004cc86 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0004cc88 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0004cc8a str r2, [r3, 0x58]                                    |     *((r3 + 0x58)) = r2;
                                                                     |     if (sl <= r8) {
    0x0004cc8c blo.w 0x4cb30                                         |         goto label_3;
                                                                     |     }
                                                                     | label_19:
    0x0004cc90 mov.w sl, 0                                           |     sl = 0;
    0x0004cc94 b 0x4cb48                                             |     goto label_4;
                                                                     | label_26:
    0x0004cc96 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0004cc98 ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x0004cc9a ldr sl, [r3], 4                                       |     sl = *(r3);
                                                                     |     r3 += 4;
    0x0004cc9e str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0004cca0 rev.w sl, sl                                          |     sl = SWAP32 (sl);
    0x0004cca4 ldr.w r3, [sb, 0x14]                                  |     r3 = *((sb + 0x14));
    0x0004cca8 ldr r4, [r3, 0x28]                                    |     r4 = *((r3 + 0x28));
    0x0004ccaa subs r4, 4                                            |     r4 -= 4;
    0x0004ccac cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0004ccae beq.w 0x4cb62                                         |         goto label_5;
                                                                     |     }
    0x0004ccb2 b 0x4cc26                                             |     goto label_6;
                                                                     | label_23:
    0x0004ccb4 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0004ccb6 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004ccb8 bne 0x4cbc0                                           |         goto label_7;
                                                                     |     }
    0x0004ccba b 0x4cbcc                                             |     goto label_8;
                                                                     | label_13:
    0x0004ccbc cmp.w r2, 0x4000                                      |     
                                                                     |     if (r2 <= 0x4000) {
    0x0004ccc0 blo 0x4cd3c                                           |         goto label_27;
                                                                     |     }
    0x0004ccc2 mov r0, r6                                            |     r0 = r6;
    0x0004ccc4 mov r3, r8                                            |     r3 = r8;
    0x0004ccc6 bl 0xae18                                             |     r0 = fcn_0000ae18 (r0, r1, r2);
    0x0004ccca add r6, r0                                            |     r6 += r0;
                                                                     | label_12:
    0x0004cccc ldr r3, [r7, 0x70]                                    |     r3 = *((r7 + 0x70));
    0x0004ccce cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0004ccd0 bne.w 0x4caa2                                         |         goto label_9;
                                                                     |     }
                                                                     | label_14:
    0x0004ccd4 cmp r4, 0x80                                          |     
    0x0004ccd6 sbcs r3, r5, 0                                        |     __asm ("sbcs r3, r5, 0");
    0x0004ccda itt lo                                                |     
                                                                     |     if (r4 >= 0x80) {
    0x0004ccdc movlo r0, 1                                           |         r0 = 1;
                                                                     |     }
                                                                     |     if (r4 >= 0x80) {
    0x0004ccde strblo r4, [r6]                                       |         *(r6) = r4;
                                                                     |     }
                                                                     |     if (r4 > 0x80) {
    0x0004cce0 blo 0x4ccf6                                           |         
    0x0004cce2 cmp.w r4, 0x4000                                      |         
    0x0004cce6 sbcs r3, r5, 0                                        |         __asm ("sbcs r3, r5, 0");
                                                                     |         if (r4 <= 0x4000) {
    0x0004ccea blo 0x4cd72                                           |             goto label_28;
                                                                     |         }
    0x0004ccec mov r2, r4                                            |         r2 = r4;
    0x0004ccee mov r3, r5                                            |         r3 = r5;
    0x0004ccf0 mov r0, r6                                            |         r0 = r6;
    0x0004ccf2 bl 0xae18                                             |         r0 = fcn_0000ae18 (r0, r1, r2);
                                                                     |     }
    0x0004ccf6 add r6, r0                                            |     r6 += r0;
    0x0004ccf8 b 0x4caa2                                             |     goto label_9;
                                                                     | label_16:
    0x0004ccfa cmp sl, r3                                            |     
                                                                     |     if (sl >= r3) {
    0x0004ccfc bhs.w 0x4cad0                                         |         goto label_10;
                                                                     |     }
    0x0004cd00 mov r2, sl                                            |     r2 = sl;
    0x0004cd02 mov r1, r5                                            |     r1 = r5;
    0x0004cd04 mov r0, r6                                            |     r0 = r6;
    0x0004cd06 blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0004cd0a ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0004cd0c movs r2, 0                                            |     r2 = 0;
    0x0004cd0e ldr r3, [r1, 0x54]                                    |     r3 = *((r1 + 0x54));
    0x0004cd10 subs r3, r6, r3                                       |     r3 = r6 - r3;
    0x0004cd12 add r3, sl                                            |     r3 += sl;
    0x0004cd14 str r3, [r1, 0x58]                                    |     *((r1 + 0x58)) = r3;
    0x0004cd16 b 0x4cc08                                             |     goto label_11;
                                                                     | label_15:
    0x0004cd18 blx 0xa230                                            |     fcn_0000a230 ();
    0x0004cd1c ldr r2, [pc, 0x78]                                    |     
    0x0004cd1e add.w r4, r0, 0x14                                    |     r4 = r0 + 0x14;
    0x0004cd22 ldr r1, [pc, 0x78]                                    |     
    0x0004cd24 movw r3, 0x2ad2                                       |     
    0x0004cd28 movt r3, 1                                            |     r3 = 0x12ad2;
    0x0004cd2c movs r0, 0xb                                          |     r0 = 0xb;
    0x0004cd2e add r2, pc                                            |     r2 = 0x99aca;
    0x0004cd30 str r4, [sp]                                          |     *(sp) = r4;
    0x0004cd32 add r1, pc                                            |     r1 = 0x99ad4;
    0x0004cd34 blx 0x9f00                                            |     fcn_00009f00 ();
                                                                     |     do {
    0x0004cd38 movs r2, 0xb                                          |         r2 = 0xb;
    0x0004cd3a b 0x4cc08                                             |         goto label_11;
                                                                     | label_27:
    0x0004cd3c lsrs r3, r2, 7                                        |         r3 = r2 >> 7;
    0x0004cd3e movs r0, 2                                            |         r0 = 2;
    0x0004cd40 and r2, r2, 0x7f                                      |         r2 &= 0x7f;
    0x0004cd44 orn r3, r3, 0x7f                                      |         r3 |= 0x7f;
                                                                     |         r3 = ~r3;
    0x0004cd48 strb r2, [r6, 1]                                      |         *((r6 + 1)) = r2;
    0x0004cd4a strb r3, [r6]                                         |         *(r6) = r3;
    0x0004cd4c add r6, r0                                            |         r6 += r0;
    0x0004cd4e b 0x4cccc                                             |         goto label_12;
                                                                     | label_20:
    0x0004cd50 blx 0xa230                                            |         fcn_0000a230 ();
    0x0004cd54 ldr r2, [pc, 0x48]                                    |         
    0x0004cd56 add.w r4, r0, 0x14                                    |         r4 = r0 + 0x14;
    0x0004cd5a ldr r1, [pc, 0x48]                                    |         
    0x0004cd5c movw r3, 0x2ae9                                       |         
    0x0004cd60 movt r3, 1                                            |         r3 = 0x12ae9;
    0x0004cd64 movs r0, 0xb                                          |         r0 = 0xb;
    0x0004cd66 add r2, pc                                            |         r2 = 0x99b0a;
    0x0004cd68 str r4, [sp]                                          |         *(sp) = r4;
    0x0004cd6a add r1, pc                                            |         r1 = 0x99b14;
    0x0004cd6c blx 0x9f00                                            |         fcn_00009f00 ();
    0x0004cd70 b 0x4cd38                                             |         
                                                                     |     } while (1);
                                                                     | label_28:
    0x0004cd72 lsrs r3, r4, 7                                        |     r3 = r4 >> 7;
    0x0004cd74 movs r0, 2                                            |     r0 = 2;
    0x0004cd76 and r4, r4, 0x7f                                      |     r4 &= 0x7f;
    0x0004cd7a orn r3, r3, 0x7f                                      |     r3 |= 0x7f;
                                                                     |     r3 = ~r3;
    0x0004cd7e strb r4, [r6, 1]                                      |     *((r6 + 1)) = r4;
    0x0004cd80 strb r3, [r6]                                         |     *(r6) = r3;
    0x0004cd82 add r6, r0                                            |     r6 += r0;
    0x0004cd84 b 0x4caa2                                             |     goto label_9;
                                                                     | label_25:
    0x0004cd86 blx 0x9b44                                            |     fcn_00009b44 ();
    0x0004cd8a nop                                                   |     
    0x0004cd8c lsls r6, r2                                           |     r6 <<= r2;
    0x0004cd8e movs r5, r0                                           |     r5 = r0;
    0x0004cd90 lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0004cd92 movs r0, r0                                           |     
    0x0004cd94 subs r6, 0xf4                                         |     r6 -= 0xf4;
    0x0004cd96 movs r5, r0                                           |     r5 = r0;
    0x0004cd98 lsls r6, r4, 0x1d                                     |     r6 = r4 << 0x1d;
    0x0004cd9a movs r4, r0                                           |     r4 = r0;
    0x0004cd9c lsls r6, r6, 0x15                                     |     r6 <<= 0x15;
    0x0004cd9e movs r4, r0                                           |     r4 = r0;
    0x0004cda0 lsls r6, r5, 0x1c                                     |     r6 = r5 << 0x1c;
    0x0004cda2 movs r4, r0                                           |     r4 = r0;
    0x0004cda4 lsls r6, r7, 0x14                                     |     r6 = r7 << 0x14;
    0x0004cda6 movs r4, r0                                           |     r4 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4cda8 */
                                                                 | #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.0004cda8 ()                                      | void fcn_0004cda8 (int16_t arg_60h, int16_t arg_64h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h_3;
                                                                 |     int16_t var_2ah;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0004cda8 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0004cdac mov r6, r0                                        |     r6 = r0;
    0x0004cdae ldr r0, [pc, 0x3ec]                               |     
    0x0004cdb0 mov r5, r1                                        |     r5 = r1;
    0x0004cdb2 sub sp, 0x3c                                      |     
    0x0004cdb4 ldr r1, [pc, 0x3e8]                               |     r1 = *(0x4d1a0);
    0x0004cdb6 ldr.w sl, [r5, 4]                                 |     sl = *((r5 + 4));
    0x0004cdba add r0, pc                                        |     r0 = 0x99f5c;
    0x0004cdbc ldr.w r8, [r6]                                    |     r8 = *(r6);
    0x0004cdc0 ldr r1, [r0, r1]                                  |     
    0x0004cdc2 cmp.w sl, 2                                       |     
    0x0004cdc6 ldr r1, [r1]                                      |     r1 = *(0x99f5c);
    0x0004cdc8 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x0004cdca mov.w r1, 0                                       |     r1 = 0;
    0x0004cdcc lsls r0, r0, 4                                    |     r0 <<= 4;
    0x0004cdce str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     if (r0 < r0) {
    0x0004cdd0 bls.w 0x4ced6                                     |         goto label_15;
                                                                 |     }
    0x0004cdd4 mov r7, r2                                        |     r7 = r2;
    0x0004cdd6 ldrb.w r2, [r8, 0xc]                              |     r2 = *((r8 + 0xc));
    0x0004cdda ldr.w sb, [r5, 0x48]                              |     sb = *((r5 + 0x48));
    0x0004cdde cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004cde0 bne 0x4cec0                                       |         goto label_16;
                                                                 |     }
    0x0004cde2 ldrh.w r2, [sb, 0x1c]                             |     r2 = *((sb + 0x1c));
    0x0004cde6 lsls r1, r2, 0x1e                                 |     r1 = r2 << 0x1e;
                                                                 |     if (r1 < r2) {
    0x0004cde8 bmi.w 0x4cefc                                     |         goto label_17;
                                                                 |     }
                                                                 | label_0:
    0x0004cdec ldr r3, [sp, 0x64]                                |     r3 = *(arg_64h);
    0x0004cdee mov r0, r8                                        |     r0 = r8;
    0x0004cdf0 ldr r1, [sp, 0x60]                                |     r1 = *(arg_60h);
    0x0004cdf2 eor r4, r3, 1                                     |     r4 = r3 ^ 1;
    0x0004cdf6 and r4, r4, 1                                     |     r4 &= 1;
    0x0004cdfa ands.w r4, r4, r2, lsr 3                          |     r4 &= (r2 >> 3);
    0x0004cdfe bic r2, r2, 8                                     |     r2 = BIT_MASK (r2, 8);
    0x0004ce02 strh.w r2, [sb, 0x1c]                             |     *((sb + 0x1c)) = r2;
    0x0004ce06 itet ne                                           |     
                                                                 |     if (r4 == r4) {
    0x0004ce08 ldrne r3, [sb, 0x18]                              |         r3 = *((sb + 0x18));
                                                                 |     }
                                                                 |     if (r4 == r4) {
    0x0004ce0c strne r4, [sp, 0xc]                               |         var_ch_2 = r4;
                                                                 |     }
                                                                 |     if (r4 != r4) {
    0x0004ce0e str r3, [sp, 0xc]                                 |         var_ch_2 = r3;
                                                                 |     }
    0x0004ce10 bl 0x12d5c                                        |     r0 = fcn_00012d5c (r0, r1);
    0x0004ce14 mov fp, r0                                        |     
    0x0004ce16 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ce18 beq 0x4cf1a                                       |         goto label_18;
                                                                 |     }
    0x0004ce1a ldrsh.w r1, [r0, 0x1e]                            |     r1 = *((r0 + 0x1e));
    0x0004ce1e cmp r1, 1                                         |     
                                                                 |     if (r1 > 1) {
    0x0004ce20 bgt.w 0x4d052                                     |         goto label_19;
                                                                 |     }
    0x0004ce24 ldrh r1, [r0, 0x1c]                               |     r1 = *((r0 + 0x1c));
    0x0004ce26 ldrh.w ip, [sb, 0x1c]                             |     ip = *((sb + 0x1c));
    0x0004ce2a and r1, r1, 8                                     |     r1 &= 8;
    0x0004ce2e orr.w r1, r1, ip                                  |     r1 |= ip;
    0x0004ce32 strh.w r1, [sb, 0x1c]                             |     *((sb + 0x1c)) = r1;
    0x0004ce36 ldrb.w r1, [r8, 0xc]                              |     r1 = *((r8 + 0xc));
    0x0004ce3a cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0004ce3c bne 0x4cf0e                                       |         goto label_20;
                                                                 |     }
    0x0004ce3e bl 0xb474                                         |     fcn_0000b474 (r0);
                                                                 | label_2:
    0x0004ce42 ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0004ce46 mov r0, sb                                        |     r0 = sb;
    0x0004ce48 ldr r1, [sp, 0x60]                                |     r1 = *(arg_60h);
    0x0004ce4a mov r4, r3                                        |     r4 = r3;
    0x0004ce4c bl 0xb4ac                                         |     fcn_0000b4ac (r0, r1);
    0x0004ce50 ldrh.w r1, [sb, 0x1c]                             |     r1 = *((sb + 0x1c));
    0x0004ce54 tst.w r1, 0x11                                    |     
                                                                 |     if ((r1 & 0x11) != 0) {
    0x0004ce58 beq 0x4ce6e                                       |         
                                                                 | label_3:
    0x0004ce5a movw r0, 0xffef                                   |         r0 = 0xffef;
    0x0004ce5e lsls r2, r1, 0x1f                                 |         r2 = r1 << 0x1f;
    0x0004ce60 and.w r0, r0, r1                                  |         r0 &= r1;
    0x0004ce64 it pl                                             |         
                                                                 |         if (r2 >= r1) {
    0x0004ce66 strhpl r0, [sb, 0x1c]                             |             __asm ("strhpl r0, [sb, 0x1c]");
                                                                 |         }
                                                                 |         if (r2 < r1) {
    0x0004ce6a bmi.w 0x4d0a2                                     |             goto label_21;
                                                                 |         }
                                                                 |     }
                                                                 | label_8:
    0x0004ce6e ldrb.w r3, [r8, 0xc]                              |     r3 = *((r8 + 0xc));
    0x0004ce72 cmp r3, 0                                         |     
    0x0004ce74 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x0004ce76 cmpne fp, 0                                       |         __asm ("cmpne fp, 0");
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0004ce7a bne.w 0x4d074                                     |         goto label_22;
                                                                 |     }
                                                                 | label_4:
    0x0004ce7e ldr r1, [sp, 0xc]                                 |     r1 = var_ch_2;
    0x0004ce80 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004ce82 beq 0x4cf4a                                       |         goto label_23;
                                                                 |     }
    0x0004ce84 ldr.w r4, [r8, 0xdc]                              |     r4 = *((r8 + 0xdc));
    0x0004ce88 movs r3, 0                                        |     r3 = 0;
    0x0004ce8a add r2, sp, 0x18                                  |     r2 += var_18h;
    0x0004ce8c mov r0, r8                                        |     r0 = r8;
    0x0004ce8e mov sb, r1                                        |     sb = r1;
    0x0004ce90 blx r4                                            |     r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0004ce92 mov fp, r0                                        |     
    0x0004ce94 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ce96 beq 0x4cf34                                       |         goto label_24;
                                                                 |     }
    0x0004ce98 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x0004ce9c cmp sb, r3                                        |     
                                                                 |     if (sb < r3) {
    0x0004ce9e bls.w 0x4d0d2                                     |         goto label_25;
                                                                 |     }
                                                                 |     do {
                                                                 | label_1:
    0x0004cea2 ldr r2, [pc, 0x300]                               |         
    0x0004cea4 ldr r3, [pc, 0x2f8]                               |         r3 = *(0x4d1a0);
    0x0004cea6 add r2, pc                                        |         r2 = 0x9a050;
    0x0004cea8 ldr r3, [r2, r3]                                  |         r3 = *(0x9a050);
    0x0004ceaa ldr r2, [r3]                                      |         r2 = *(0x9a050);
    0x0004ceac ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0004ceae eors r2, r3                                       |         r2 ^= r3;
    0x0004ceb0 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004ceb4 bne.w 0x4d198                                     |             goto label_26;
                                                                 |         }
    0x0004ceb8 mov r0, fp                                        |         r0 = fp;
    0x0004ceba add sp, 0x3c                                      |         
    0x0004cebc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_16:
    0x0004cec0 mov r0, sb                                        |         r0 = sb;
    0x0004cec2 bl 0x4816c                                        |         r0 = fcn_0004816c (r0);
    0x0004cec6 mov fp, r0                                        |         
    0x0004cec8 cmp r0, 0                                         |         
    0x0004ceca bne 0x4cea2                                       |         
                                                                 |     } while (r0 != 0);
    0x0004cecc ldrh.w r2, [sb, 0x1c]                             |     r2 = *((sb + 0x1c));
    0x0004ced0 lsls r1, r2, 0x1e                                 |     r1 = r2 << 0x1e;
                                                                 |     if (r1 >= r2) {
    0x0004ced2 bpl 0x4cdec                                       |         goto label_0;
                                                                 |     }
    0x0004ced4 b 0x4cefc                                         |     goto label_17;
                                                                 | label_15:
    0x0004ced6 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004ceda ldr r2, [pc, 0x2cc]                               |     
    0x0004cedc add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x0004cee0 ldr r1, [pc, 0x2c8]                               |     
    0x0004cee2 movw r3, 0x1532                                   |     
    0x0004cee6 movt r3, 1                                        |     r3 = 0x11532;
    0x0004ceea movs r0, 0xb                                      |     r0 = 0xb;
    0x0004ceec add r2, pc                                        |     r2 = 0x9a09a;
    0x0004ceee str r4, [sp]                                      |     *(sp) = r4;
    0x0004cef0 add r1, pc                                        |     r1 = 0x9a0a0;
    0x0004cef2 blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 | label_7:
    0x0004cef6 mov.w fp, 0xb                                     |     
    0x0004cefa b 0x4cea2                                         |     goto label_1;
                                                                 | label_17:
    0x0004cefc mov r0, sb                                        |     r0 = sb;
    0x0004cefe bl 0x198c4                                        |     r0 = fcn_000198c4 (r0);
    0x0004cf02 mov fp, r0                                        |     
    0x0004cf04 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004cf06 bne 0x4cea2                                       |         goto label_1;
                                                                 |     }
    0x0004cf08 ldrh.w r2, [sb, 0x1c]                             |     r2 = *((sb + 0x1c));
    0x0004cf0c b 0x4cdec                                         |     goto label_0;
                                                                 | label_20:
    0x0004cf0e ldr.w r1, [r8, 0x1c]                              |     r1 = *((r8 + 0x1c));
    0x0004cf12 adds r1, 1                                        |     r1++;
    0x0004cf14 bl 0xb4ac                                         |     fcn_0000b4ac (r0, r1);
    0x0004cf18 b 0x4ce42                                         |     goto label_2;
                                                                 | label_18:
    0x0004cf1a ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0004cf1e mov r0, sb                                        |     r0 = sb;
    0x0004cf20 ldr r1, [sp, 0x60]                                |     r1 = *(arg_60h);
    0x0004cf22 mov r4, r3                                        |     r4 = r3;
    0x0004cf24 bl 0xb4ac                                         |     fcn_0000b4ac (r0, r1);
    0x0004cf28 ldrh.w r1, [sb, 0x1c]                             |     r1 = *((sb + 0x1c));
    0x0004cf2c tst.w r1, 0x11                                    |     
                                                                 |     if ((r1 & 0x11) != 0) {
    0x0004cf30 bne 0x4ce5a                                       |         goto label_3;
                                                                 |     }
    0x0004cf32 b 0x4ce7e                                         |     goto label_4;
                                                                 | label_24:
    0x0004cf34 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0004cf36 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004cf38 tst.w r3, 0x11                                    |     
                                                                 |     if ((r3 & 0x11) != 0) {
    0x0004cf3c bne.w 0x4d0b4                                     |         goto label_27;
                                                                 |     }
    0x0004cf40 orr r2, r3, 8                                     |     r2 = r3 | 8;
                                                                 | label_9:
    0x0004cf44 strh r2, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r2;
                                                                 | label_10:
    0x0004cf46 bl 0x10f18                                        |     fcn_00010f18 (r0);
                                                                 | label_23:
    0x0004cf4a ldr r3, [sp, 0x60]                                |     r3 = *(arg_60h);
    0x0004cf4c str r3, [r5, 4]                                   |     *((r5 + 4)) = r3;
    0x0004cf4e movs r3, 0                                        |     r3 = 0;
    0x0004cf50 str r3, [sp, 0x14]                                |     var_14h_2 = r3;
    0x0004cf52 and r3, r7, 0xfb                                  |     r3 = r7 & 0xfb;
    0x0004cf56 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004cf58 beq 0x4d03a                                       |         goto label_28;
                                                                 |     }
    0x0004cf5a ldr r3, [r5, 0x38]                                |     r3 = *((r5 + 0x38));
    0x0004cf5c ldr r1, [r3]                                      |     r1 = *(r3);
    0x0004cf5e cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0004cf60 bne.w 0x4d084                                     |         goto label_29;
                                                                 |     }
                                                                 | label_6:
    0x0004cf64 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0004cf66 movs r3, 0                                        |     r3 = 0;
    0x0004cf68 add r2, sp, 0x10                                  |     r2 += var_10h;
    0x0004cf6a mov r0, r6                                        |     r0 = r6;
    0x0004cf6c bl 0xba58                                         |     r0 = fcn_0000ba58 (r0, r1, r2);
    0x0004cf70 mov fp, r0                                        |     
    0x0004cf72 str r0, [sp, 0x14]                                |     var_14h_2 = r0;
    0x0004cf74 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004cf76 bne 0x4cea2                                       |         goto label_1;
                                                                 |     }
    0x0004cf78 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x0004cf7a ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004cf7c bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x0004cf80 mov fp, r0                                        |     
    0x0004cf82 str r0, [sp, 0x14]                                |     var_14h_2 = r0;
    0x0004cf84 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004cf86 bne.w 0x4d112                                     |         goto label_30;
                                                                 |     }
    0x0004cf8a cmp r7, 4                                         |     
                                                                 |     if (r7 == 4) {
    0x0004cf8c beq.w 0x4d0e2                                     |         goto label_31;
                                                                 |     }
    0x0004cf90 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0004cf92 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004cf94 beq.w 0x4d14c                                     |         goto label_32;
                                                                 |     }
                                                                 | label_13:
    0x0004cf98 ldrh.w r8, [r4, 0x18]                             |     r8 = *((r4 + 0x18));
    0x0004cf9c cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0004cfa0 beq.w 0x4d126                                     |         goto label_33;
                                                                 |     }
    0x0004cfa4 add r5, sp, 0x18                                  |     r5 += var_18h;
    0x0004cfa6 b 0x4cfbc                                         |     
                                                                 |     while (r7 != 3) {
    0x0004cfa8 ldr r2, [r0, r3]                                  |         r2 = *((r0 + r3));
    0x0004cfaa rev r2, r2                                        |         r2 = SWAP32 (r2);
    0x0004cfac cmp sl, r2                                        |         
                                                                 |         if (sl == r2) {
    0x0004cfae beq.w 0x4d11a                                     |             goto label_34;
                                                                 |         }
                                                                 | label_5:
    0x0004cfb2 add.w fp, fp, 1                                   |         
    0x0004cfb6 cmp r8, fp                                        |         
                                                                 |         if (r8 == fp) {
    0x0004cfb8 beq.w 0x4d126                                     |             goto label_33;
                                                                 |         }
    0x0004cfbc ldr r3, [r4, 0x40]                                |         r3 = *((r4 + 0x40));
    0x0004cfbe cmp r7, 3                                         |         
    0x0004cfc0 ldr r0, [r4, 0x38]                                |         r0 = *((r4 + 0x38));
    0x0004cfc2 ldrh.w r2, [r3, fp, lsl 1]                        |         offset_0 = fp << 1;
                                                                 |         r2 = *((r3 + offset_0));
    0x0004cfc6 ldrh r3, [r4, 0x1a]                               |         r3 = *((r4 + 0x1a));
    0x0004cfc8 rev16 r2, r2                                      |         __asm ("rev16 r2, r2");
    0x0004cfca and.w r3, r3, r2                                  |         r3 &= r2;
    0x0004cfce add.w sb, r0, r3                                  |         sb = r0 + r3;
    0x0004cfd2 bne 0x4cfa8                                       |         
                                                                 |     }
    0x0004cfd4 ldr r3, [r4, 0x50]                                |     r3 = *((r4 + 0x50));
    0x0004cfd6 mov r2, r5                                        |     r2 = r5;
    0x0004cfd8 mov r1, sb                                        |     r1 = sb;
    0x0004cfda mov r0, r4                                        |     r0 = r4;
    0x0004cfdc blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004cfde ldrh.w r2, [sp, 0x28]                             |     r2 = var_28h_3;
    0x0004cfe2 ldr r3, [sp, 0x24]                                |     r3 = var_24h_2;
    0x0004cfe4 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0004cfe6 bhs 0x4cfb2                                       |         goto label_5;
                                                                 |     }
    0x0004cfe8 ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x0004cfea ldrh.w r2, [sp, 0x2a]                             |     r2 = var_2ah;
    0x0004cfee ldr r1, [r3, 0x28]                                |     r1 = *((r3 + 0x28));
    0x0004cff0 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x0004cff2 add r3, r1                                        |     r3 += r1;
    0x0004cff4 add.w r1, sb, r2                                  |     r1 = sb + r2;
    0x0004cff8 cmp r1, r3                                        |     
                                                                 |     if (r1 > r3) {
    0x0004cffa bhi.w 0x4d172                                     |         goto label_35;
                                                                 |     }
    0x0004cffe subs r2, 4                                        |     r2 -= 4;
    0x0004d000 ldr.w r3, [sb, r2]                                |     r3 = *((sb + r2));
    0x0004d004 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004d006 cmp sl, r3                                        |     
                                                                 |     if (sl != r3) {
    0x0004d008 bne 0x4cfb2                                       |         goto label_5;
                                                                 |     }
    0x0004d00a mov r3, r2                                        |     r3 = r2;
    0x0004d00c ldr r2, [sp, 0x60]                                |     r2 = *(arg_60h);
    0x0004d00e cmp r8, fp                                        |     
    0x0004d010 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0004d012 str.w r2, [sb, r3]                                |     __asm ("str.w r2, [sb, r3]");
                                                                 |     if (r8 == fp) {
    0x0004d016 beq.w 0x4d138                                     |         goto label_36;
                                                                 |     }
                                                                 | label_11:
    0x0004d01a movs r3, 0                                        |     r3 = 0;
    0x0004d01c ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004d01e str r3, [sp, 0x14]                                |     var_14h_2 = r3;
    0x0004d020 bl 0x10f18                                        |     fcn_00010f18 (r0);
                                                                 | label_14:
    0x0004d024 add r4, sp, 0x14                                  |     r4 += var_14h_2;
    0x0004d026 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0004d028 ldr r1, [sp, 0x60]                                |     r1 = *(arg_60h);
    0x0004d02a mov r2, r7                                        |     r2 = r7;
    0x0004d02c mov r0, r6                                        |     r0 = r6;
    0x0004d02e str r4, [sp]                                      |     *(sp) = r4;
    0x0004d030 bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004d034 ldr.w fp, [sp, 0x14]                              |     fp = var_14h_2;
    0x0004d038 b 0x4cea2                                         |     goto label_1;
                                                                 | label_28:
    0x0004d03a mov r0, r5                                        |     r0 = r5;
    0x0004d03c bl 0x4c918                                        |     r0 = fcn_0004c918 (r0);
    0x0004d040 mov fp, r0                                        |     
    0x0004d042 str r0, [sp, 0x14]                                |     var_14h_2 = r0;
    0x0004d044 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d046 bne.w 0x4cea2                                     |         goto label_1;
                                                                 |     }
    0x0004d04a cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x0004d04c beq.w 0x4cea2                                     |         goto label_1;
                                                                 |     }
    0x0004d050 b 0x4cf64                                         |     goto label_6;
                                                                 | label_19:
    0x0004d052 bl 0x10f18                                        |     r0 = fcn_00010f18 (r0);
    0x0004d056 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004d05a ldr r2, [pc, 0x154]                               |     
    0x0004d05c add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x0004d060 ldr r1, [pc, 0x150]                               |     
    0x0004d062 movw r3, 0xef9f                                   |     r3 = 0xef9f;
    0x0004d066 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004d068 str r4, [sp]                                      |     *(sp) = r4;
    0x0004d06a add r2, pc                                        |     r2 = 0x9a220;
    0x0004d06c add r1, pc                                        |     r1 = 0x9a224;
    0x0004d06e blx 0x9f00                                        |     fcn_00009f00 ();
    0x0004d072 b 0x4cef6                                         |     goto label_7;
                                                                 | label_22:
    0x0004d074 mov r0, fp                                        |     r0 = fp;
    0x0004d076 mov r1, r4                                        |     r1 = r4;
    0x0004d078 bl 0xb4ac                                         |     fcn_0000b4ac (r0, r1);
    0x0004d07c mov r0, fp                                        |     r0 = fp;
    0x0004d07e bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004d082 b 0x4ce7e                                         |     goto label_4;
                                                                 | label_29:
    0x0004d084 add r3, sp, 0x14                                  |     r3 += var_14h_2;
    0x0004d086 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x0004d088 str r3, [sp]                                      |     *(sp) = r3;
    0x0004d08a movs r2, 4                                        |     r2 = 4;
    0x0004d08c ldr r3, [sp, 0x60]                                |     r3 = *(arg_60h);
    0x0004d08e mov r0, r6                                        |     r0 = r6;
    0x0004d090 bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004d094 ldr.w fp, [sp, 0x14]                              |     fp = var_14h_2;
    0x0004d098 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0004d09c beq.w 0x4cf64                                     |         goto label_6;
                                                                 |     }
    0x0004d0a0 b 0x4cea2                                         |     goto label_1;
                                                                 | label_21:
    0x0004d0a2 eor r0, r0, 3                                     |     r0 ^= 3;
    0x0004d0a6 movs r1, 2                                        |     r1 = 2;
    0x0004d0a8 strh.w r0, [sb, 0x1c]                             |     *((sb + 0x1c)) = r0;
    0x0004d0ac mov r0, sb                                        |     r0 = sb;
    0x0004d0ae bl 0xb380                                         |     fcn_0000b380 (r0, r1);
    0x0004d0b2 b 0x4ce6e                                         |     goto label_8;
                                                                 | label_27:
    0x0004d0b4 bic r2, r3, 0x10                                  |     r2 = BIT_MASK (r3, 0x10);
    0x0004d0b8 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
    0x0004d0ba orr r2, r2, 8                                     |     r2 |= 8;
                                                                 |     if (r3 >= r3) {
    0x0004d0be bpl.w 0x4cf44                                     |         goto label_9;
                                                                 |     }
    0x0004d0c2 eor r2, r2, 3                                     |     r2 ^= 3;
    0x0004d0c6 movs r1, 2                                        |     r1 = 2;
    0x0004d0c8 strh r2, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r2;
    0x0004d0ca bl 0xb380                                         |     fcn_0000b380 (r0, r1);
    0x0004d0ce ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0004d0d0 b 0x4cf46                                         |     goto label_10;
                                                                 | label_25:
    0x0004d0d2 ldr.w r2, [r8, 0xf0]                              |     r2 = *((r8 + 0xf0));
    0x0004d0d6 ldr.w r0, [r8, 0x3c]                              |     r0 = *((r8 + 0x3c));
    0x0004d0da ldr r1, [sp, 0xc]                                 |     r1 = var_ch_2;
    0x0004d0dc bl 0xd574                                         |     fcn_0000d574 (r0, r1, r2);
    0x0004d0e0 b 0x4cea2                                         |     goto label_1;
                                                                 | label_31:
    0x0004d0e2 ldr r2, [r4, 0x38]                                |     r2 = *((r4 + 0x38));
    0x0004d0e4 ldr r3, [r2]                                      |     r3 = *(r2);
    0x0004d0e6 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004d0e8 cmp sl, r3                                        |     
                                                                 |     if (sl == r3) {
    0x0004d0ea beq 0x4d164                                       |         goto label_37;
                                                                 |     }
    0x0004d0ec blx 0xa230                                        |     fcn_0000a230 ();
    0x0004d0f0 ldr r2, [pc, 0xc4]                                |     
    0x0004d0f2 adds r0, 0x14                                     |     r0 += 0x14;
    0x0004d0f4 ldr r1, [pc, 0xc4]                                |     
    0x0004d0f6 movw r3, 0x14ea                                   |     r3 = 0x14ea;
    0x0004d0fa add r2, pc                                        |     r2 = 0x9a2b6;
    0x0004d0fc add r1, pc                                        |     r1 = 0x9a2bc;
                                                                 | label_12:
    0x0004d0fe str r0, [sp]                                      |     *(sp) = r0;
    0x0004d100 movt r3, 1                                        |     r3 = (r3 & 0xFFFF) | 0x10000;
    0x0004d104 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004d106 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0004d10a ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004d10c bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004d110 b 0x4cef6                                         |     goto label_7;
                                                                 | label_30:
    0x0004d112 ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004d114 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004d118 b 0x4cea2                                         |     goto label_1;
                                                                 | label_34:
    0x0004d11a ldr r2, [sp, 0x60]                                |     r2 = *(arg_60h);
    0x0004d11c cmp r8, fp                                        |     
    0x0004d11e rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0004d120 str r2, [r0, r3]                                  |     *((r0 + r3)) = r2;
                                                                 |     if (r8 != fp) {
    0x0004d122 bne.w 0x4d01a                                     |         goto label_11;
                                                                 |     }
                                                                 | label_33:
    0x0004d126 cmp r7, 5                                         |     
                                                                 |     if (r7 == 5) {
    0x0004d128 bne 0x4d138                                       |         
    0x0004d12a ldrb r3, [r4, 9]                                  |         r3 = *((r4 + 9));
    0x0004d12c ldr r1, [r4, 0x38]                                |         r1 = *((r4 + 0x38));
    0x0004d12e adds r3, 8                                        |         r3 += 8;
    0x0004d130 ldr r2, [r1, r3]                                  |         r2 = *((r1 + r3));
    0x0004d132 rev r2, r2                                        |         r2 = SWAP32 (r2);
    0x0004d134 cmp sl, r2                                        |         
                                                                 |         if (sl == r2) {
    0x0004d136 beq 0x4d186                                       |             goto label_38;
                                                                 |         }
                                                                 |     }
                                                                 | label_36:
    0x0004d138 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004d13c ldr r2, [pc, 0x80]                                |     
    0x0004d13e adds r0, 0x14                                     |     r0 += 0x14;
    0x0004d140 ldr r1, [pc, 0x80]                                |     
    0x0004d142 movw r3, 0x150f                                   |     r3 = 0x150f;
    0x0004d146 add r2, pc                                        |     r2 = 0x9a30a;
    0x0004d148 add r1, pc                                        |     r1 = 0x9a310;
    0x0004d14a b 0x4d0fe                                         |     goto label_12;
                                                                 | label_32:
    0x0004d14c mov r0, r4                                        |     r0 = r4;
    0x0004d14e bl 0x22c20                                        |     r0 = fcn_00022c20 (r0);
    0x0004d152 mov r3, r0                                        |     r3 = r0;
    0x0004d154 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004d156 beq.w 0x4cf98                                     |         goto label_13;
                                                                 |     }
    0x0004d15a ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004d15c mov fp, r3                                        |     
    0x0004d15e bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004d162 b 0x4cea2                                         |     goto label_1;
                                                                 | label_37:
    0x0004d164 ldr r3, [sp, 0x60]                                |     r3 = *(arg_60h);
    0x0004d166 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004d168 str r3, [r2]                                      |     *(r2) = r3;
    0x0004d16a ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004d16c bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004d170 b 0x4d024                                         |     goto label_14;
                                                                 | label_35:
    0x0004d172 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004d176 ldr r2, [pc, 0x50]                                |     
    0x0004d178 adds r0, 0x14                                     |     r0 += 0x14;
    0x0004d17a ldr r1, [pc, 0x50]                                |     
    0x0004d17c movw r3, 0x14fd                                   |     r3 = 0x14fd;
    0x0004d180 add r2, pc                                        |     r2 = 0x9a34e;
    0x0004d182 add r1, pc                                        |     r1 = 0x9a354;
    0x0004d184 b 0x4d0fe                                         |     goto label_12;
                                                                 | label_38:
    0x0004d186 ldr r2, [sp, 0x60]                                |     r2 = *(arg_60h);
    0x0004d188 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0004d18a str r2, [r1, r3]                                  |     *((r1 + r3)) = r2;
    0x0004d18c movs r3, 0                                        |     r3 = 0;
    0x0004d18e ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004d190 str r3, [sp, 0x14]                                |     var_14h_2 = r3;
    0x0004d192 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004d196 b 0x4d024                                         |     goto label_14;
                                                                 | label_26:
    0x0004d198 blx 0x9b44                                        |     fcn_00009b44 ();
    0x0004d19c subs r5, 0x46                                     |     r5 -= 0x46;
    0x0004d19e movs r5, r0                                       |     r5 = r0;
    0x0004d1a0 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0004d1a2 movs r0, r0                                       |     
    0x0004d1a4 subs r4, 0x5a                                     |     r4 -= 0x5a;
    0x0004d1a6 movs r5, r0                                       |     r5 = r0;
    0x0004d1a8 lsls r0, r5, 0x16                                 |     r0 = r5 << 0x16;
    0x0004d1aa movs r4, r0                                       |     r4 = r0;
    0x0004d1ac lsls r0, r7, 0xe                                  |     r0 = r7 << 0xe;
    0x0004d1ae movs r4, r0                                       |     r4 = r0;
    0x0004d1b0 lsls r2, r5, 0x10                                 |     r2 = r5 << 0x10;
    0x0004d1b2 movs r4, r0                                       |     r4 = r0;
    0x0004d1b4 lsls r4, r7, 8                                    |     r4 = r7 << 8;
    0x0004d1b6 movs r4, r0                                       |     r4 = r0;
    0x0004d1b8 lsls r2, r3, 0xe                                  |     r2 = r3 << 0xe;
    0x0004d1ba movs r4, r0                                       |     r4 = r0;
    0x0004d1bc lsls r4, r5, 6                                    |     r4 = r5 << 6;
    0x0004d1be movs r4, r0                                       |     r4 = r0;
    0x0004d1c0 lsls r6, r1, 0xd                                  |     r6 = r1 << 0xd;
    0x0004d1c2 movs r4, r0                                       |     r4 = r0;
    0x0004d1c4 lsls r0, r4, 5                                    |     r0 = r4 << 5;
    0x0004d1c6 movs r4, r0                                       |     r4 = r0;
    0x0004d1c8 lsls r4, r2, 0xc                                  |     r4 = r2 << 0xc;
    0x0004d1ca movs r4, r0                                       |     r4 = r0;
    0x0004d1cc lsls r6, r4, 4                                    |     r6 = r4 << 4;
    0x0004d1ce movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4db08 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.0004db08 ()                                      | void fcn_0004db08 (int16_t arg_1h, int16_t arg_48h, int16_t arg_4ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0004db08 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0004db0c mov r5, r2                                        |     r5 = r2;
    0x0004db0e ldr r2, [pc, 0x264]                               |     
    0x0004db10 mov r6, r3                                        |     r6 = r3;
    0x0004db12 sub sp, 0x24                                      |     
    0x0004db14 mov r4, r0                                        |     r4 = r0;
    0x0004db16 ldr r3, [pc, 0x260]                               |     r3 = *(0x4dd7a);
    0x0004db18 mov r7, r1                                        |     r7 = r1;
    0x0004db1a add r2, pc                                        |     r2 = 0x9b894;
    0x0004db1c ldr r0, [sp, 0x48]                                |     r0 = *(arg_48h);
    0x0004db1e ldrd r8, sb, [sp, 0x4c]                           |     __asm ("ldrd r8, sb, [arg_4ch]");
    0x0004db22 ldr r3, [r2, r3]                                  |     
    0x0004db24 ldr r3, [r3]                                      |     r3 = *(0x9b894);
    0x0004db26 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004db28 mov.w r3, 0                                       |     r3 = 0;
    0x0004db2c ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 == 0) {
    0x0004db2e cbnz r3, 0x4db38                                  |         
    0x0004db30 ldr r3, [r4, 0x14]                                |         r3 = *((r4 + 0x14));
    0x0004db32 adds r2, r6, 1                                    |         r2 = r6 + 1;
    0x0004db34 cmp r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x0004db36 blt 0x4db82                                       |             goto label_8;
                                                                 |         }
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x0004db38 cbz r0, 0x4db44                                   |         
    0x0004db3a mov r1, r5                                        |         r1 = r5;
    0x0004db3c mov r2, r6                                        |         r2 = r6;
    0x0004db3e mov r5, r0                                        |         r5 = r0;
    0x0004db40 blx 0x9e2c                                        |         fcn_00009e2c ();
                                                                 |     }
    0x0004db44 cmp.w r8, 0                                       |     
    0x0004db48 bne 0x4db78                                       |     
                                                                 |     while (1) {
    0x0004db4a ldrb r3, [r4, 0xc]                                |         r3 = *((r4 + 0xc));
    0x0004db4c adds r2, r3, 1                                    |         r2 = r3 + 1;
    0x0004db4e strb r2, [r4, 0xc]                                |         *((r4 + 0xc)) = r2;
    0x0004db50 add.w r2, r4, r3, lsl 2                           |         r2 = r4 + (r3 << 2);
    0x0004db54 add.w r3, r4, r3, lsl 1                           |         r3 = r4 + (r3 << 1);
    0x0004db58 str r5, [r2, 0x24]                                |         *((r2 + 0x24)) = r5;
    0x0004db5a strh r7, [r3, 0x1c]                               |         *((r3 + 0x1c)) = r7;
                                                                 | label_0:
    0x0004db5c ldr r2, [pc, 0x21c]                               |         
    0x0004db5e ldr r3, [pc, 0x218]                               |         r3 = *(0x4dd7a);
    0x0004db60 add r2, pc                                        |         r2 = 0x9b8e0;
    0x0004db62 ldr r3, [r2, r3]                                  |         r3 = *(0x9b8e0);
    0x0004db64 ldr r2, [r3]                                      |         r2 = *(0x9b8e0);
    0x0004db66 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x0004db68 eors r2, r3                                       |         r2 ^= r3;
    0x0004db6a mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004db6e bne.w 0x4dd70                                     |             goto label_9;
                                                                 |         }
    0x0004db72 add sp, 0x24                                      |         
    0x0004db74 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0004db78 rev.w r8, r8                                      |         r8 = SWAP32 (r8);
    0x0004db7c str.w r8, [r5]                                    |         __asm ("str.w r8, [r5]");
    0x0004db80 b 0x4db4a                                         |         
                                                                 |     }
                                                                 | label_8:
    0x0004db82 ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004db84 bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x0004db88 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004db8a bne.w 0x4dcc2                                     |         goto label_4;
                                                                 |     }
    0x0004db8e ldrh r2, [r4, 0x18]                               |     r2 = *((r4 + 0x18));
    0x0004db90 ldrh.w fp, [r4, 0x12]                             |     fp = *((r4 + 0x12));
    0x0004db94 ldrb r1, [r4, 9]                                  |     r1 = *((r4 + 9));
    0x0004db96 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x0004db98 str r0, [sp, 0x18]                                |     x = r0;
    0x0004db9a add.w fp, fp, r2, lsl 1                           |     
    0x0004db9e adds r2, r1, 5                                    |     r2 = r1 + 5;
    0x0004dba0 ldrh.w sl, [r3, r2]                               |     sl = *((r3 + r2));
    0x0004dba4 str r1, [sp, 8]                                   |     var_8h = r1;
    0x0004dba6 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0004dba8 rev16.w sl, sl                                    |     __asm ("rev16.w sl, sl");
    0x0004dbac uxth.w sl, sl                                     |     sl = (int16_t) sl;
    0x0004dbb0 cmp fp, sl                                        |     
                                                                 |     if (fp > sl) {
    0x0004dbb2 ble 0x4dbc6                                       |         
    0x0004dbb4 cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x0004dbb8 bne 0x4dca2                                       |             goto label_10;
                                                                 |         }
    0x0004dbba ldr r2, [r4, 0x34]                                |         r2 = *((r4 + 0x34));
    0x0004dbbc ldr r2, [r2, 0x28]                                |         r2 = *((r2 + 0x28));
    0x0004dbbe cmp.w r2, 0x10000                                 |         
                                                                 |         if (r2 != 0x10000) {
    0x0004dbc2 bne 0x4dca2                                       |             goto label_10;
                                                                 |         }
    0x0004dbc4 mov sl, r2                                        |         sl = r2;
                                                                 |     }
    0x0004dbc6 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0004dbc8 adds r2, r3, r2                                   |     r2 = r3 + r2;
    0x0004dbca ldrb r1, [r2, 2]                                  |     r1 = *((r2 + 2));
    0x0004dbcc cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004dbce beq 0x4dcc8                                       |         goto label_11;
                                                                 |     }
                                                                 | label_2:
    0x0004dbd0 add.w r2, fp, 1                                   |     r2 += arg_1h;
    0x0004dbd4 cmp r2, sl                                        |     
                                                                 |     if (r2 < sl) {
    0x0004dbd6 blt.w 0x4dd20                                     |         goto label_12;
                                                                 |     }
                                                                 | label_1:
    0x0004dbda add.w fp, fp, 2                                   |     
    0x0004dbde add fp, r6                                        |     
    0x0004dbe0 cmp sl, fp                                        |     
                                                                 |     if (sl < fp) {
    0x0004dbe2 blt 0x4dcde                                       |         goto label_13;
                                                                 |     }
    0x0004dbe4 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0004dbe6 adds r2, r6, 2                                    |     r2 = r6 + 2;
    0x0004dbe8 adds r1, 6                                        |     r1 += 6;
    0x0004dbea add.w ip, r1, r3                                  |     
                                                                 | label_5:
    0x0004dbee sub.w sl, sl, r6                                  |     sl -= r6;
    0x0004dbf2 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0004dbf4 uxtb.w r0, sl                                     |     r0 = (int8_t) sl;
    0x0004dbf8 ubfx fp, sl, 8, 8                                 |     fp = (sl >> 8) & ((1 << 8) - 1);
    0x0004dbfc strb.w fp, [r3, r1]                               |     *((r3 + r1)) = fp;
    0x0004dc00 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0004dc02 strb.w r0, [ip]                                   |     *(ip) = r0;
                                                                 | label_6:
    0x0004dc06 ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x0004dc08 uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x0004dc0a add.w r0, r3, sl                                  |     r0 = r3 + sl;
    0x0004dc0c movs r2, r1                                       |     r2 = r1;
    0x0004dc0e subs r1, r1, r2                                   |     r1 -= r2;
    0x0004dc10 str r1, [r4, 0x14]                                |     *((r4 + 0x14)) = r1;
    0x0004dc12 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0004dc16 beq 0x4dcd0                                       |         goto label_14;
                                                                 |     }
    0x0004dc18 add.w r0, sl, 4                                   |     r0 = sl + 4;
    0x0004dc1c subs r2, r6, 4                                    |     r2 = r6 - 4;
    0x0004dc1e add r0, r3                                        |     r0 += r3;
    0x0004dc20 adds r1, r5, 4                                    |     r1 = r5 + 4;
    0x0004dc22 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0004dc24 rev.w r8, r8                                      |     r8 = SWAP32 (r8);
    0x0004dc28 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004dc2c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0004dc2e str.w r8, [r3, sl]                                |     __asm ("str.w r8, [r3, sl]");
                                                                 | label_3:
    0x0004dc32 ldr.w r8, [r4, 0x40]                              |     r8 = *((r4 + 0x40));
    0x0004dc36 ldrh r2, [r4, 0x18]                               |     r2 = *((r4 + 0x18));
    0x0004dc38 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0004dc3a add.w r6, r8, r7, lsl 1                           |     r6 = r8 + (r7 << 1);
    0x0004dc3e subs r2, r2, r7                                   |     r2 -= r7;
    0x0004dc40 lsls r2, r2, 1                                    |     r2 <<= 1;
    0x0004dc42 mov r1, r6                                        |     r1 = r6;
    0x0004dc44 adds r0, r6, 2                                    |     r0 = r6 + 2;
    0x0004dc46 blx 0x9928                                        |     fcn_00009928 ();
    0x0004dc4a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0004dc4c strb.w fp, [r8, r7, lsl 1]                        |     offset_0 = r7 << 1;
                                                                 |     *((r8 + offset_0)) = fp;
    0x0004dc50 strb r3, [r6, 1]                                  |     *((r6 + 1)) = r3;
    0x0004dc52 ldrh r2, [r4, 0x18]                               |     r2 = *((r4 + 0x18));
    0x0004dc54 ldrb r1, [r4, 9]                                  |     r1 = *((r4 + 9));
    0x0004dc56 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0004dc58 adds r2, 1                                        |     r2++;
    0x0004dc5a adds r1, 4                                        |     r1 += 4;
    0x0004dc5c strh r2, [r4, 0x18]                               |     *((r4 + 0x18)) = r2;
    0x0004dc5e ldrb r2, [r3, r1]                                 |     r2 = *((r3 + r1));
    0x0004dc60 adds r2, 1                                        |     r2++;
    0x0004dc62 uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x0004dc64 strb r2, [r3, r1]                                 |     *((r3 + r1)) = r2;
                                                                 |     if (r2 == 0) {
    0x0004dc66 cbnz r2, 0x4dc72                                  |         
    0x0004dc68 ldrb r2, [r4, 9]                                  |         r2 = *((r4 + 9));
    0x0004dc6a adds r2, 3                                        |         r2 += 3;
    0x0004dc6c ldrb r1, [r3, r2]                                 |         r1 = *((r3 + r2));
    0x0004dc6e adds r1, 1                                        |         r1++;
    0x0004dc70 strb r1, [r3, r2]                                 |         *((r3 + r2)) = r1;
                                                                 |     }
    0x0004dc72 ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x0004dc74 ldrb r3, [r3, 0x11]                               |     r3 = *((r3 + 0x11));
    0x0004dc76 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004dc78 beq.w 0x4db5c                                     |         goto label_0;
                                                                 |     }
    0x0004dc7c ldr r2, [pc, 0x100]                               |     
    0x0004dc7e ldr r3, [pc, 0xf8]                                |     r3 = *(0x4dd7a);
    0x0004dc80 add r2, pc                                        |     r2 = 0x9ba04;
    0x0004dc82 ldr r3, [r2, r3]                                  |     r3 = *(0x9ba04);
    0x0004dc84 ldr r2, [r3]                                      |     r2 = *(0x9ba04);
    0x0004dc86 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0004dc88 eors r2, r3                                       |     r2 ^= r3;
    0x0004dc8a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0004dc8e bne 0x4dd70                                       |         goto label_9;
                                                                 |     }
    0x0004dc90 mov r3, sb                                        |     r3 = sb;
    0x0004dc92 mov r2, r5                                        |     r2 = r5;
    0x0004dc94 mov r1, r4                                        |     r1 = r4;
    0x0004dc96 mov r0, r4                                        |     r0 = r4;
    0x0004dc98 add sp, 0x24                                      |     
    0x0004dc9a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0004dc9e b.w 0x4c86c                                       |     void (*0x4c86c)() ();
                                                                 | label_10:
    0x0004dca2 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004dca6 ldr r2, [pc, 0xdc]                                |     
    0x0004dca8 adds r0, 0x14                                     |     r0 += 0x14;
    0x0004dcaa ldr r1, [pc, 0xdc]                                |     
    0x0004dcac movw r3, 0xd26                                    |     
    0x0004dcb0 str r0, [sp]                                      |     *(sp) = r0;
    0x0004dcb2 movt r3, 1                                        |     r3 = 0x10d26;
    0x0004dcb6 add r2, pc                                        |     r2 = 0x9ba40;
    0x0004dcb8 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004dcba add r1, pc                                        |     r1 = 0x9ba48;
    0x0004dcbc blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 | label_7:
    0x0004dcc0 movs r0, 0xb                                      |     r0 = 0xb;
                                                                 | label_4:
    0x0004dcc2 str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x0004dcc6 b 0x4db5c                                         |     goto label_0;
                                                                 | label_11:
    0x0004dcc8 ldrb r2, [r2, 1]                                  |     r2 = *((r2 + 1));
    0x0004dcca cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004dccc beq 0x4dbda                                       |         goto label_1;
                                                                 |     }
    0x0004dcce b 0x4dbd0                                         |     goto label_2;
                                                                 | label_14:
    0x0004dcd0 mov r2, r6                                        |     r2 = r6;
    0x0004dcd2 mov r1, r5                                        |     r1 = r5;
    0x0004dcd4 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0004dcd6 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004dcda ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0004dcdc b 0x4dc32                                         |     goto label_3;
                                                                 | label_13:
    0x0004dcde ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x0004dce0 adds r2, r6, 2                                    |     r2 = r6 + 2;
    0x0004dce2 mov r0, r4                                        |     r0 = r4;
    0x0004dce4 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0004dce6 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0004dce8 subs r1, r1, r2                                   |     r1 -= r2;
    0x0004dcea cmp r1, 4                                         |     
    0x0004dcec it ge                                             |     
                                                                 |     if (r1 < 4) {
    0x0004dcee movge r1, 4                                       |         r1 = 4;
                                                                 |     }
    0x0004dcf0 bl 0x31f44                                        |     fcn_00031f44 (r0, r1);
    0x0004dcf4 str r0, [sp, 0x18]                                |     x = r0;
    0x0004dcf6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004dcf8 bne 0x4dcc2                                       |         goto label_4;
                                                                 |     }
    0x0004dcfa ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0004dcfc ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004dcfe ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0004dd00 adds r1, 6                                        |     r1 += 6;
    0x0004dd02 ldrb.w sl, [r3, r1]                               |     sl = *((r3 + r1));
    0x0004dd06 add.w ip, r1, r3                                  |     
    0x0004dd0a ldrb r0, [r3, r2]                                 |     r0 = *((r3 + r2));
    0x0004dd0c ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0004dd0e orr.w sl, sl, r0, lsl 8                           |     sl |= (r0 << 8);
    0x0004dd12 add.w sl, sl, -1                                  |     sl += -1;
    0x0004dd16 uxth.w sl, sl                                     |     sl = (int16_t) sl;
    0x0004dd1a add.w sl, sl, 1                                   |     sl++;
    0x0004dd1e b 0x4dbee                                         |     goto label_5;
                                                                 | label_12:
    0x0004dd20 add r2, sp, 0x18                                  |     r2 += x;
    0x0004dd22 mov r1, r6                                        |     r1 = r6;
    0x0004dd24 mov r0, r4                                        |     r0 = r4;
    0x0004dd26 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0004dd28 bl 0x23bac                                        |     fcn_00023bac (r0, r1, r2);
    0x0004dd2c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
                                                                 |     if (r0 != 0) {
    0x0004dd2e cbz r0, 0x4dd46                                   |         
    0x0004dd30 sub.w sl, r0, r3                                  |         sl = r0 - r3;
    0x0004dd34 cmp fp, sl                                        |         
                                                                 |         if (fp >= sl) {
    0x0004dd36 bge 0x4dd50                                       |             goto label_15;
                                                                 |         }
    0x0004dd38 uxtb.w r2, sl                                     |         r2 = (int8_t) sl;
    0x0004dd3c ubfx fp, sl, 8, 8                                 |         fp = (sl >> 8) & ((1 << 8) - 1);
    0x0004dd40 str r2, [sp, 0x10]                                |         var_10h = r2;
    0x0004dd42 adds r2, r6, 2                                    |         r2 = r6 + 2;
    0x0004dd44 b 0x4dc06                                         |         goto label_6;
                                                                 |     }
    0x0004dd46 ldr r0, [sp, 0x18]                                |     r0 = x;
    0x0004dd48 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004dd4a beq.w 0x4dbda                                     |         goto label_1;
                                                                 |     }
    0x0004dd4e b 0x4dcc2                                         |     goto label_4;
                                                                 | label_15:
    0x0004dd50 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004dd54 ldr r2, [pc, 0x34]                                |     
    0x0004dd56 adds r0, 0x14                                     |     r0 += 0x14;
    0x0004dd58 ldr r1, [pc, 0x34]                                |     
    0x0004dd5a movw r3, 0xd38                                    |     
    0x0004dd5c strh r0, [r7, r4]                                 |     *((r7 + r4)) = r0;
    0x0004dd5e str r0, [sp]                                      |     *(sp) = r0;
    0x0004dd60 movt r3, 1                                        |     r3 = 0x10d38;
    0x0004dd64 add r2, pc                                        |     r2 = 0x9baf4;
    0x0004dd66 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004dd68 add r1, pc                                        |     r1 = 0x9bafc;
    0x0004dd6a blx 0x9f00                                        |     fcn_00009f00 ();
    0x0004dd6e b 0x4dcc0                                         |     goto label_7;
                                                                 | label_9:
    0x0004dd70 blx 0x9b44                                        |     fcn_00009b44 ();
    0x0004dd74 cmp r7, 0xe6                                      |     
    0x0004dd76 movs r5, r0                                       |     r5 = r0;
    0x0004dd78 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0004dd7a movs r0, r0                                       |     
    0x0004dd7c cmp r7, 0xa0                                      |     
    0x0004dd7e movs r5, r0                                       |     r5 = r0;
    0x0004dd80 cmp r6, 0x80                                      |     
    0x0004dd82 movs r5, r0                                       |     r5 = r0;
    0x0004dd84 invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4dd94 */
                                                                 | #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.0004dd94 ()                                      | void fcn_0004dd94 (int16_t arg_0h, int16_t arg_1h_2, int16_t arg_2h, int16_t arg_3h, int16_t arg_14h, int16_t arg_44h, int16_t arg_46h, int16_t arg_74h, int16_t arg_7ch, int16_t arg_1h, int16_t arg1) {
                                                                 |     int16_t var_2h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_10h;
                                                                 |     arithmetic var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     arithmetic var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     arithmetic var_a2h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int32_t var_b0h_2;
                                                                 |     int32_t var_4h_4;
                                                                 |     int16_t var_cch;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     int16_t var_dch;
                                                                 |     int16_t var_e0h;
                                                                 |     int16_t var_4h_2;
                                                                 |     int32_t var_ach_2;
                                                                 |     int16_t var_f4h;
                                                                 |     int16_t var_0h_2;
                                                                 |     int32_t var_98h_2;
                                                                 |     int16_t var_108h;
                                                                 |     int32_t var_4h_5;
                                                                 |     int16_t var_11ch;
                                                                 |     int16_t var_130h;
                                                                 |     int16_t var_0h_3;
                                                                 |     int16_t var_144h;
                                                                 |     int16_t var_148h;
                                                                 |     int16_t var_14ch;
                                                                 |     int16_t var_150h;
                                                                 |     int16_t var_154h;
                                                                 |     int32_t var_4ch_2;
                                                                 |     int32_t var_38h_2;
                                                                 |     int16_t var_16ch;
                                                                 |     int32_t var_4h_3;
                                                                 |     int16_t var_184h;
                                                                 |     int16_t var_188h;
                                                                 |     int16_t var_18ch;
                                                                 |     int16_t var_190h;
                                                                 |     int16_t var_0h_5;
                                                                 |     int16_t var_19ch;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_0h_4;
                                                                 |     r0 = arg1;
    0x0004dd94 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0004dd98 movs r3, 0                                        |     r3 = 0;
    0x0004dd9a sub sp, 0x1a4                                     |     
    0x0004dd9c ldr.w r2, [pc, 0xb00]                             |     
    0x0004dda0 mov fp, r0                                        |     
    0x0004dda2 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0004dda4 add r3, sp, 0xa8                                  |     r3 += var_a8h;
    0x0004dda6 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0004dda8 add r2, pc                                        |     r2 = 0x9c64c;
    0x0004ddaa ldr.w r3, [pc, 0xaf8]                             |     r3 = *(0x4e8a6);
    0x0004ddae str r0, [sp, 0x38]                                |     var_38h = r0;
    0x0004ddb0 ldr r3, [r2, r3]                                  |     
    0x0004ddb2 ldr r3, [r3]                                      |     r3 = *(0x9c64c);
    0x0004ddb4 str r3, [sp, 0x19c]                               |     var_19ch = r3;
    0x0004ddb6 mov.w r3, 0                                       |     r3 = 0;
                                                                 | label_1:
    0x0004ddba ldr.w r4, [fp, 0x74]                              |     r4 = *(arg_74h);
    0x0004ddbe ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0004ddc0 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0004ddc2 blt.w 0x4e096                                     |         goto label_63;
                                                                 |     }
                                                                 | label_2:
    0x0004ddc6 ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 == 0) {
    0x0004ddc8 cbnz r3, 0x4de14                                  |         
    0x0004ddca ldr.w r2, [fp, 0x14]                              |         r2 = *(arg_14h);
    0x0004ddce ldr r3, [r4, 0x14]                                |         r3 = *((r4 + 0x14));
    0x0004ddd0 ldr r2, [r2, 0x28]                                |         r2 = *((r2 + 0x28));
    0x0004ddd2 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x0004ddd6 cmp.w r3, r2, lsl 1                               |         
                                                                 |         if (r3 > r2) {
    0x0004ddda ble 0x4dde4                                       |             
    0x0004dddc ldrsb.w r3, [fp, 0x44]                            |             r3 = *(arg_44h);
    0x0004dde0 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x0004dde2 bne 0x4de5c                                       |                 goto label_64;
                                                                 |             }
                                                                 |         }
                                                                 | label_3:
    0x0004dde4 movs r3, 0                                        |         r3 = 0;
    0x0004dde6 str r3, [sp, 0x10]                                |         var_10h = r3;
                                                                 | label_0:
    0x0004dde8 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
                                                                 |         if (r3 != 0) {
    0x0004ddea cbz r3, 0x4ddf2                                   |             
    0x0004ddec mov r0, r3                                        |             r0 = r3;
    0x0004ddee bl 0xec68                                         |             fcn_0000ec68 (r0);
                                                                 |         }
    0x0004ddf2 ldr.w r2, [pc, 0xab4]                             |         r2 = *(0x0004e8a8);
    0x0004ddf6 ldr.w r3, [pc, 0xaac]                             |         r3 = *(0x4e8a6);
    0x0004ddf8 subs r2, 0xac                                     |         r2 -= 0xac;
    0x0004ddfa add r2, pc                                        |         r2 += pc;
    0x0004ddfc ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0004ddfe ldr r2, [r3]                                      |         r2 = *(0x4e8a6);
    0x0004de00 ldr r3, [sp, 0x19c]                               |         r3 = var_19ch;
    0x0004de02 eors r2, r3                                       |         r2 ^= r3;
    0x0004de04 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004de08 bne.w 0x4eea2                                     |             goto label_65;
                                                                 |         }
    0x0004de0c ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x0004de0e add sp, 0x1a4                                     |         
    0x0004de10 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x0004de14 ldrsb.w r3, [fp, 0x44]                            |     r3 = *(arg_44h);
                                                                 |     if (r3 != 0) {
    0x0004de18 cbnz r3, 0x4de5c                                  |         goto label_64;
                                                                 |     }
    0x0004de1a ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0004de1e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
                                                                 |     if (r3 == 0) {
    0x0004de20 cbz r3, 0x4de3c                                   |         goto label_66;
                                                                 |     }
                                                                 |     do {
    0x0004de22 cmp fp, r3                                        |         
                                                                 |         if (fp != r3) {
    0x0004de24 beq 0x4de36                                       |             
    0x0004de26 ldrb r2, [r3]                                     |             r2 = *(r3);
                                                                 |             if (r2 != 0) {
    0x0004de28 cbnz r2, 0x4de36                                  |                 goto label_67;
                                                                 |             }
    0x0004de2a ldr r1, [r3, 0x74]                                |             r1 = *((r3 + 0x74));
    0x0004de2c ldr.w r2, [fp, 0x74]                              |             r2 = *(arg_74h);
    0x0004de30 cmp r1, r2                                        |             
                                                                 |             if (r1 == r2) {
    0x0004de32 beq.w 0x4e150                                     |                 goto label_68;
                                                                 |             }
                                                                 |         }
                                                                 | label_67:
    0x0004de36 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0004de38 cmp r3, 0                                         |         
    0x0004de3a bne 0x4de22                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_66:
    0x0004de3c ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004de3e movs r3, 0                                        |     r3 = 0;
    0x0004de40 ldr r6, [r4, 0x34]                                |     r6 = *((r4 + 0x34));
    0x0004de42 strd r3, r3, [sp, 0xac]                           |     __asm ("strd r3, r3, [var_ach]");
    0x0004de46 bl 0x4816c                                        |     fcn_0004816c (r0);
    0x0004de4a str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0004de4c str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004de4e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004de50 beq.w 0x4e0a4                                     |         goto label_69;
                                                                 |     }
    0x0004de54 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0004de56 movs r2, 0                                        |     r2 = 0;
    0x0004de58 str r2, [r3, 0x7c]                                |     *((r3 + 0x7c)) = r2;
    0x0004de5a b 0x4dde8                                         |     goto label_0;
                                                                 | label_64:
    0x0004de5c add.w r1, r3, 0x1d                                |     r1 = r3 + 0x1d;
    0x0004de60 add.w r2, r3, 0x23                                |     r2 = r3 + 0x23;
    0x0004de64 ldr.w r5, [fp, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r5 = *((fp + offset_0));
    0x0004de68 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0004de6a ldrh.w r3, [fp, r2, lsl 1]                        |     offset_1 = r2 << 1;
                                                                 |     r3 = *((fp + offset_1));
    0x0004de6e ldr r0, [r5, 0x48]                                |     r0 = *((r5 + 0x48));
    0x0004de70 str r5, [sp, 0x20]                                |     var_20h = r5;
    0x0004de72 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0004de74 bl 0x4816c                                        |     fcn_0004816c (r0);
    0x0004de78 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0004de7a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004de7c bne.w 0x4e12a                                     |         goto label_70;
                                                                 |     }
    0x0004de80 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x0004de82 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004de84 cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x0004de86 blt.w 0x4e192                                     |         goto label_71;
                                                                 |     }
                                                                 | label_4:
    0x0004de8a ldrb r2, [r4, 2]                                  |     r2 = *((r4 + 2));
                                                                 |     if (r2 != 0) {
    0x0004de8c cbz r2, 0x4de96                                   |         
    0x0004de8e ldrb r5, [r4, 0xc]                                |         r5 = *((r4 + 0xc));
    0x0004de90 cmp r5, 1                                         |         
                                                                 |         if (r5 == 1) {
    0x0004de92 beq.w 0x4e5ae                                     |             goto label_72;
                                                                 |         }
                                                                 |     }
                                                                 | label_18:
    0x0004de96 ldr.w r2, [fp, 0x14]                              |     r2 = *(arg_14h);
    0x0004de9a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0004de9c ldr r0, [r2, 0x24]                                |     r0 = *((r2 + 0x24));
    0x0004de9e bl 0x11cd0                                        |     fcn_00011cd0 (r0);
    0x0004dea2 ldrb.w r2, [fp, 3]                                |     r2 = *(arg_3h);
    0x0004dea6 mov.w r3, 0                                       |     r3 = 0;
    0x0004deaa strb.w r3, [sp, 0x188]                            |     var_188h = r3;
    0x0004deae movs r3, 0                                        |     r3 = 0;
    0x0004deb0 str r3, [sp, 0xa8]                                |     var_a8h = r3;
    0x0004deb2 mov r6, r0                                        |     r6 = r0;
    0x0004deb4 str r3, [sp, 0x184]                               |     var_184h = r3;
    0x0004deb6 add r3, sp, 0x144                                 |     r3 += var_144h;
    0x0004deb8 and r5, r2, 1                                     |     r5 = r2 & 1;
    0x0004debc str r0, [sp, 0x48]                                |     var_48h = r0;
    0x0004debe movs r2, 0x40                                     |     r2 = 0x40;
    0x0004dec0 mov r0, r3                                        |     r0 = r3;
    0x0004dec2 movs r1, 0                                        |     r1 = 0;
    0x0004dec4 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0004dec6 str r5, [sp, 0x74]                                |     var_74h = r5;
    0x0004dec8 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0004decc ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004dece ldr r2, [r3, 0x34]                                |     r2 = *((r3 + 0x34));
    0x0004ded0 str r2, [sp, 0x58]                                |     var_58h = r2;
    0x0004ded2 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004ded4 beq.w 0x4e846                                     |         goto label_73;
                                                                 |     }
    0x0004ded8 ldrb r2, [r3, 0xc]                                |     r2 = *((r3 + 0xc));
    0x0004deda ldrh r0, [r3, 0x18]                               |     r0 = *((r3 + 0x18));
    0x0004dedc ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004dede adds r1, r2, r0                                   |     r1 = r2 + r0;
    0x0004dee0 cmp r1, 1                                         |     
                                                                 |     if (r1 <= 1) {
    0x0004dee2 ble.w 0x4e598                                     |         goto label_74;
                                                                 |     }
    0x0004dee6 ldr r6, [sp, 0x40]                                |     r6 = var_40h;
    0x0004dee8 rsb.w r5, r5, 2                                   |     r5 = 2 - r5;
    0x0004deec str r5, [sp, 0x30]                                |     var_30h = r5;
    0x0004deee cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004def0 beq.w 0x4e1cc                                     |         goto label_75;
                                                                 |     }
    0x0004def4 ldr r5, [sp, 0x40]                                |     r5 = var_40h;
    0x0004def6 cmp r5, r1                                        |     
                                                                 |     if (r5 == r1) {
    0x0004def8 beq.w 0x4e880                                     |         goto label_76;
                                                                 |     }
    0x0004defc ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0004defe ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x0004df00 subs r1, 1                                        |     r1--;
    0x0004df02 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0004df04 add r1, r5                                        |     r1 += r5;
    0x0004df06 subs r2, r1, r2                                   |     r2 = r1 - r2;
                                                                 | label_7:
    0x0004df08 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0004df0a cmp r0, r2                                        |     
    0x0004df0c ldr r5, [r1, 0x38]                                |     r5 = *((r1 + 0x38));
                                                                 |     if (r0 == r2) {
    0x0004df0e beq.w 0x4ea8c                                     |         goto label_77;
                                                                 |     }
    0x0004df12 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004df14 ldr r1, [r0, 0x40]                                |     r1 = *((r0 + 0x40));
    0x0004df16 ldrh.w r1, [r1, r2, lsl 1]                        |     offset_2 = r2 << 1;
                                                                 |     r1 = *((r1 + offset_2));
    0x0004df1a ldrh r2, [r0, 0x1a]                               |     r2 = *((r0 + 0x1a));
    0x0004df1c rev16 r1, r1                                      |     __asm ("rev16 r1, r1");
    0x0004df1e ands r2, r1                                       |     r2 &= r1;
    0x0004df20 adds r2, r5, r2                                   |     r2 = r5 + r2;
    0x0004df22 str r2, [sp, 0x68]                                |     var_68h = r2;
                                                                 | label_17:
    0x0004df24 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0004df26 add r5, sp, 0xd4                                  |     r5 += var_d4h;
    0x0004df28 ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x0004df2a add r1, sp, 0xcc                                  |     r1 += var_cch;
    0x0004df2c add r0, sp, 0x11c                                 |     r0 += var_11ch;
    0x0004df2e str r5, [sp, 0x34]                                |     var_34h = r5;
    0x0004df30 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0004df32 str r4, [sp, 0x28]                                |     var_28h = r4;
    0x0004df34 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x0004df36 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0004df38 str.w fp, [sp, 0x2c]                              |     __asm ("str.w fp, [var_2ch]");
    0x0004df3c str r2, [sp, 0xac]                                |     var_ach = r2;
    0x0004df3e lsls r2, r7, 2                                    |     r2 = r7 << 2;
    0x0004df40 str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x0004df42 add.w sb, r5, r2                                  |     sb = r5 + r2;
    0x0004df46 ldr r5, [sp, 0x58]                                |     r5 = var_58h;
    0x0004df48 add.w sl, r1, r2                                  |     sl = r1 + r2;
    0x0004df4c add.w r8, r0, r2                                  |     r8 = r0 + r2;
    0x0004df50 str r2, [sp, 0x78]                                |     var_78h = r2;
    0x0004df52 movs r2, 0                                        |     r2 = 0;
    0x0004df54 mov fp, r2                                        |     
    0x0004df56 str r0, [sp, 0x70]                                |     var_70h = r0;
    0x0004df58 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 |     do {
    0x0004df5a movs r3, 0                                        |         r3 = 0;
    0x0004df5c ldr r1, [sp, 0xac]                                |         r1 = var_ach;
    0x0004df5e str r3, [sp]                                      |         *(sp) = r3;
    0x0004df60 mov r2, sb                                        |         r2 = sb;
    0x0004df62 mov r0, r5                                        |         r0 = r5;
    0x0004df64 bl 0x22d0c                                        |         r0 = fcn_00022d0c (r0, r1, r2, r3, r4);
    0x0004df68 mov r3, r0                                        |         r3 = r0;
    0x0004df6a str r0, [sp, 0xa8]                                |         var_a8h = r0;
    0x0004df6c cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0004df6e bne.w 0x4ea90                                     |             goto label_78;
                                                                 |         }
    0x0004df72 ldr r2, [sb], -4                                  |         r2 = *(sb);
                                                                 |         sb += -4;
    0x0004df76 ldr r1, [r2, 0x14]                                |         r1 = *((r2 + 0x14));
    0x0004df78 cmp r1, 0                                         |         
                                                                 |         if (r1 < 0) {
    0x0004df7a blt.w 0x4e1d2                                     |             goto label_79;
                                                                 |         }
                                                                 | label_8:
    0x0004df7e ldrh r2, [r2, 0x18]                               |         r2 = *((r2 + 0x18));
    0x0004df80 subs r7, 1                                        |         r7--;
    0x0004df82 adds r2, 4                                        |         r2 += 4;
    0x0004df84 add fp, r2                                        |         
    0x0004df86 adds r2, r7, 1                                    |         r2 = r7 + 1;
                                                                 |         if (r2 == r7) {
    0x0004df88 beq.w 0x4e222                                     |             goto label_80;
                                                                 |         }
    0x0004df8c ldrb r2, [r4, 0xc]                                |         r2 = *((r4 + 0xc));
    0x0004df8e ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x0004df90 ldr r6, [sp, 0xa8]                                |         r6 = var_a8h;
    0x0004df92 adds r3, r7, r3                                   |         r3 = r7 + r3;
                                                                 |         if (r2 != 0) {
    0x0004df94 cbz r2, 0x4df9e                                   |             
    0x0004df96 ldrh r1, [r4, 0x1c]                               |             r1 = *((r4 + 0x1c));
    0x0004df98 cmp r1, r3                                        |             
                                                                 |             if (r1 == r3) {
    0x0004df9a beq.w 0x4e204                                     |                 goto label_81;
                                                                 |             }
                                                                 |         }
    0x0004df9e ldr r1, [r4, 0x40]                                |         r1 = *((r4 + 0x40));
    0x0004dfa0 subs r2, r3, r2                                   |         r2 = r3 - r2;
    0x0004dfa2 ldrh.w ip, [r4, 0x1a]                             |         ip = *((r4 + 0x1a));
    0x0004dfa6 mov r0, r4                                        |         r0 = r4;
    0x0004dfa8 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x0004dfaa ldrh.w r2, [r1, r2, lsl 1]                        |         offset_3 = r2 << 1;
                                                                 |         r2 = *((r1 + offset_3));
    0x0004dfae ldr r1, [r4, 0x38]                                |         r1 = *((r4 + 0x38));
    0x0004dfb0 ldr r3, [r4, 0x4c]                                |         r3 = *((r4 + 0x4c));
    0x0004dfb2 rev16 r2, r2                                      |         __asm ("rev16 r2, r2");
    0x0004dfb4 and.w ip, ip, r2                                  |         
    0x0004dfb8 ldr.w lr, [r1, ip]                                |         
    0x0004dfbc add r1, ip                                        |         r1 += ip;
    0x0004dfbe str r1, [sl, -0x4]                                |         *((sl - 0x4)) = r1;
    0x0004dfc2 str r1, [sp, 0x18]                                |         var_18h = r1;
    0x0004dfc4 rev.w r2, lr                                      |         lr = SWAP32 (r2);
    0x0004dfc8 str r2, [sp, 0xac]                                |         var_ach = r2;
    0x0004dfca blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004dfcc mov r2, r0                                        |         r2 = r0;
    0x0004dfce str r0, [r8, -0x4]                                |         *((r8 - 0x4)) = r0;
    0x0004dfd2 ldrh r0, [r5, 0x18]                               |         r0 = *((r5 + 0x18));
    0x0004dfd4 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0004dfd6 and r0, r0, 0xc                                   |         r0 &= 0xc;
                                                                 |         if (r0 != 0) {
    0x0004dfda cbz r0, 0x4dff0                                   |             
    0x0004dfdc ldr r0, [r4, 0x38]                                |             r0 = *((r4 + 0x38));
    0x0004dfde ldr r1, [sp, 0x18]                                |             r1 = var_18h;
    0x0004dfe0 sub.w lr, r1, r0                                  |             lr = r1 - r0;
    0x0004dfe4 ldr r0, [r5, 0x28]                                |             r0 = *((r5 + 0x28));
    0x0004dfe6 add.w ip, r2, lr                                  |             
    0x0004dfea cmp ip, r0                                        |             
                                                                 |             if (ip <= r0) {
    0x0004dfec ble.w 0x4e1a8                                     |                 goto label_82;
                                                                 |             }
                                                                 |         }
                                                                 |         if (r6 != 0) {
                                                                 | label_6:
    0x0004dff0 cbnz r6, 0x4e00c                                  |             goto label_83;
                                                                 |         }
    0x0004dff2 ldrb r1, [r4, 0xc]                                |         r1 = *((r4 + 0xc));
    0x0004dff4 mov r0, r4                                        |         r0 = r4;
    0x0004dff6 subs r1, r3, r1                                   |         r1 = r3 - r1;
    0x0004dff8 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x0004dffa bl 0x3044c                                        |         fcn_0003044c (r0, r1, r2, r3);
    0x0004dffe ldr r6, [sp, 0xa8]                                |         r6 = var_a8h;
                                                                 | label_10:
    0x0004e000 sub.w sl, sl, 4                                   |         sl -= var_4h_4;
    0x0004e004 sub.w r8, r8, 4                                   |         r8 -= var_4h_5;
    0x0004e008 cmp r6, 0                                         |         
    0x0004e00a beq 0x4df5a                                       |         
                                                                 |     } while (r6 == 0);
                                                                 | label_83:
    0x0004e00c ldrd r4, fp, [sp, 0x28]                           |     __asm ("ldrd r4, fp, [var_28h]");
                                                                 | label_36:
    0x0004e010 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0004e012 adds r2, r7, 1                                    |     r2 = r7 + 1;
    0x0004e014 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0004e016 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x0004e018 movs r1, 0                                        |     r1 = 0;
    0x0004e01a adds r3, 1                                        |     r3++;
    0x0004e01c str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0004e01e blx 0x97d4                                        |     fcn_000097d4 ();
    0x0004e022 movs r3, 0                                        |     r3 = 0;
    0x0004e024 str r3, [sp, 0x64]                                |     var_64h = r3;
                                                                 | label_9:
    0x0004e026 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
    0x0004e028 ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x0004e02a ldr.w r8, [sp, 0x28]                              |     r8 = var_28h;
                                                                 |     do {
    0x0004e02e ldr r3, [r5], 4                                   |         r3 = *(r5);
                                                                 |         r5 += 4;
                                                                 |         if (r3 != 0) {
    0x0004e032 cbz r3, 0x4e03a                                   |             
    0x0004e034 ldr r0, [r3, 0x48]                                |             r0 = *((r3 + 0x48));
    0x0004e036 bl 0x10f18                                        |             fcn_00010f18 (r0);
                                                                 |         }
    0x0004e03a adds r7, 1                                        |         r7++;
    0x0004e03c cmp r7, r8                                        |         
    0x0004e03e bne 0x4e02e                                       |         
                                                                 |     } while (r7 != r8);
    0x0004e040 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
                                                                 |     if (r3 == 0) {
    0x0004e042 cbz r3, 0x4e05a                                   |         goto label_22;
                                                                 |     }
    0x0004e044 add r5, sp, 0xe0                                  |     r5 += var_e0h;
    0x0004e046 add.w r7, r5, r3, lsl 2                           |     r7 = r5 + (r3 << 2);
                                                                 |     do {
    0x0004e04a ldr r3, [r5], 4                                   |         r3 = *(r5);
                                                                 |         r5 += 4;
                                                                 |         if (r3 != 0) {
    0x0004e04e cbz r3, 0x4e056                                   |             
    0x0004e050 ldr r0, [r3, 0x48]                                |             r0 = *((r3 + 0x48));
    0x0004e052 bl 0x10f18                                        |             fcn_00010f18 (r0);
                                                                 |         }
    0x0004e056 cmp r5, r7                                        |         
    0x0004e058 bne 0x4e04a                                       |         
                                                                 |     } while (r5 != r7);
                                                                 | label_22:
    0x0004e05a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
                                                                 |     if (r3 != 0) {
    0x0004e05c cbz r3, 0x4e064                                   |         
    0x0004e05e ldr r0, [sp, 0x54]                                |         r0 = var_54h;
    0x0004e060 bl 0xec68                                         |         fcn_0000ec68 (r0);
                                                                 |     }
    0x0004e064 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0004e066 str r3, [sp, 0x54]                                |     var_54h = r3;
                                                                 | label_19:
    0x0004e068 mov.w r3, 0                                       |     r3 = 0;
    0x0004e06c ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004e06e strb r3, [r4, 0xc]                                |     *((r4 + 0xc)) = r3;
    0x0004e070 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004e074 ldrb.w r3, [fp, 0x44]                             |     r3 = *(arg_44h);
    0x0004e078 subs r3, 1                                        |     r3--;
    0x0004e07a sxtb r3, r3                                       |     r3 = (int32_t) r3;
    0x0004e07c add.w r2, r3, 0x1e                                |     r2 = r3 + 0x1e;
    0x0004e080 strb.w r3, [fp, 0x44]                             |     *(arg_44h) = r3;
    0x0004e084 ldr.w r3, [fp, r2, lsl 2]                         |     offset_4 = r2 << 2;
                                                                 |     r3 = *((fp + offset_4));
    0x0004e088 str.w r3, [fp, 0x74]                              |     __asm ("str.w r3, [arg_74h]");
    0x0004e08c cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e08e beq.w 0x4ddba                                     |         goto label_1;
                                                                 |     }
    0x0004e092 str r6, [sp, 0x10]                                |     var_10h = r6;
    0x0004e094 b 0x4dde8                                         |     goto label_0;
                                                                 | label_63:
    0x0004e096 mov r0, r4                                        |     r0 = r4;
    0x0004e098 bl 0x23e08                                        |     r0 = fcn_00023e08 (r0);
    0x0004e09c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004e09e beq.w 0x4ddc6                                     |         goto label_2;
                                                                 |     }
    0x0004e0a2 b 0x4dde4                                         |     goto label_3;
                                                                 | label_69:
    0x0004e0a4 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004e0a6 add r2, sp, 0xb0                                  |     r2 += var_b0h;
    0x0004e0a8 str r0, [sp]                                      |     *(sp) = r0;
    0x0004e0aa add r1, sp, 0xac                                  |     r1 += var_ach;
    0x0004e0ac mov r0, r6                                        |     r0 = r6;
    0x0004e0ae bl 0x4c088                                        |     fcn_0004c088 (r0, r1, r2, r3, r4);
    0x0004e0b2 ldr r5, [sp, 0xac]                                |     r5 = var_ach;
    0x0004e0b4 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0004e0b6 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004e0b8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e0ba bne 0x4e178                                       |         goto label_84;
                                                                 |     }
    0x0004e0bc ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0004e0be mov r1, r5                                        |     r1 = r5;
    0x0004e0c0 mov r0, r4                                        |     r0 = r4;
    0x0004e0c2 bl 0x4c9e4                                        |     fcn_0004c9e4 (r0, r1, r2);
    0x0004e0c6 ldrb r3, [r6, 0x11]                               |     r3 = *((r6 + 0x11));
    0x0004e0c8 cmp r3, 0                                         |     
    0x0004e0ca bne 0x4e180                                       |     
                                                                 |     while (1) {
    0x0004e0cc ldr r3, [sp, 0xa8]                                |         r3 = var_a8h;
    0x0004e0ce str r3, [sp, 0x10]                                |         var_10h = r3;
    0x0004e0d0 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0004e0d2 bne.w 0x4f2d8                                     |             goto label_85;
                                                                 |         }
    0x0004e0d6 ldrb r2, [r4, 0xc]                                |         r2 = *((r4 + 0xc));
    0x0004e0d8 add.w r1, r4, 0x1c                                |         r1 = r4 + 0x1c;
    0x0004e0dc add.w r0, r5, 0x1c                                |         r0 = r5 + 0x1c;
    0x0004e0e0 lsls r2, r2, 1                                    |         r2 <<= 1;
    0x0004e0e2 blx 0x9e2c                                        |         fcn_00009e2c ();
    0x0004e0e6 ldrb r2, [r4, 0xc]                                |         r2 = *((r4 + 0xc));
    0x0004e0e8 add.w r1, r4, 0x24                                |         r1 = r4 + 0x24;
    0x0004e0ec add.w r0, r5, 0x24                                |         r0 = r5 + 0x24;
    0x0004e0f0 lsls r2, r2, 2                                    |         r2 <<= 2;
    0x0004e0f2 blx 0x9e2c                                        |         fcn_00009e2c ();
    0x0004e0f6 ldrb r2, [r4, 0xc]                                |         r2 = *((r4 + 0xc));
    0x0004e0f8 mov r0, r4                                        |         r0 = r4;
    0x0004e0fa ldr r3, [r5, 0x38]                                |         r3 = *((r5 + 0x38));
    0x0004e0fc strb r2, [r5, 0xc]                                |         *((r5 + 0xc)) = r2;
    0x0004e0fe ldrb r1, [r3]                                     |         r1 = *(r3);
    0x0004e100 and r1, r1, 0xf7                                  |         r1 &= 0xf7;
    0x0004e104 bl 0x22368                                        |         fcn_00022368 (r0, r1);
    0x0004e108 ldrb r0, [r4, 9]                                  |         r0 = *((r4 + 9));
    0x0004e10a movs r1, 1                                        |         r1 = 1;
    0x0004e10c ldr r3, [r4, 0x38]                                |         r3 = *((r4 + 0x38));
    0x0004e10e ldr r2, [sp, 0xb0]                                |         r2 = var_b0h;
    0x0004e110 add r3, r0                                        |         r3 += r0;
    0x0004e112 rev r2, r2                                        |         r2 = SWAP32 (r2);
    0x0004e114 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x0004e116 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0004e118 str.w r5, [fp, 0x7c]                              |         __asm ("str.w r5, [arg_7ch]");
    0x0004e11c strb.w r1, [fp, 0x44]                             |         *(arg_44h) = r1;
    0x0004e120 str.w r3, [fp, 0x46]                              |         __asm ("str.w r3, [arg_46h]");
    0x0004e124 strd r5, r4, [fp, 0x74]                           |         __asm ("strd r5, r4, [fp, 0x74]");
    0x0004e128 b 0x4ddba                                         |         goto label_1;
                                                                 | label_70:
    0x0004e12a mov r2, r4                                        |         r2 = r4;
                                                                 | label_5:
    0x0004e12c movs r3, 0                                        |         r3 = 0;
    0x0004e12e ldr r0, [r2, 0x48]                                |         r0 = *((r2 + 0x48));
    0x0004e130 strb r3, [r2, 0xc]                                |         *((r2 + 0xc)) = r3;
    0x0004e132 bl 0x10f18                                        |         fcn_00010f18 (r0);
    0x0004e136 ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x0004e138 ldrb.w r3, [r1, 0x44]                             |         r3 = *((r1 + 0x44));
    0x0004e13c subs r3, 1                                        |         r3--;
    0x0004e13e sxtb r3, r3                                       |         r3 = (int32_t) r3;
    0x0004e140 add.w r2, r3, 0x1e                                |         r2 = r3 + 0x1e;
    0x0004e144 strb.w r3, [r1, 0x44]                             |         *((r1 + 0x44)) = r3;
    0x0004e148 ldr.w r3, [r1, r2, lsl 2]                         |         offset_5 = r2 << 2;
                                                                 |         r3 = *((r1 + offset_5));
    0x0004e14c str r3, [r1, 0x74]                                |         *((r1 + 0x74)) = r3;
    0x0004e14e b 0x4dde8                                         |         goto label_0;
                                                                 | label_68:
    0x0004e150 blx 0xa230                                        |         fcn_0000a230 ();
    0x0004e154 ldr.w r2, [pc, 0x754]                             |         r2 = *(0x0004e8ac);
    0x0004e158 add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x0004e15c ldr.w r1, [pc, 0x750]                             |         r1 = *(0x0004e8b0);
    0x0004e160 movw r3, 0x287b                                   |         
    0x0004e164 movs r0, 0xb                                      |         r0 = 0xb;
    0x0004e166 movt r3, 1                                        |         r3 = 0x1287b;
    0x0004e16a add r2, pc                                        |         r2 += pc;
    0x0004e16c str r4, [sp]                                      |         *(sp) = r4;
    0x0004e16e add r1, pc                                        |         r1 += pc;
    0x0004e170 str r0, [sp, 0x10]                                |         var_10h = r0;
    0x0004e172 blx 0x9f00                                        |         fcn_00009f00 ();
    0x0004e176 b 0x4dde8                                         |         goto label_0;
                                                                 | label_84:
    0x0004e178 ldrb r3, [r6, 0x11]                               |         r3 = *((r6 + 0x11));
    0x0004e17a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004e17c beq.w 0x4f2d8                                     |             goto label_85;
                                                                 |         }
    0x0004e180 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x0004e182 mov r0, r6                                        |         r0 = r6;
    0x0004e184 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0004e186 ldr r1, [sp, 0xb0]                                |         r1 = var_b0h;
    0x0004e188 str r2, [sp]                                      |         *(sp) = r2;
    0x0004e18a movs r2, 5                                        |         r2 = 5;
    0x0004e18c bl 0x4c6ec                                        |         fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004e190 b 0x4e0cc                                         |         
                                                                 |     }
                                                                 | label_71:
    0x0004e192 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004e194 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0004e196 bl 0x23e08                                        |     fcn_00023e08 (r0);
    0x0004e198 vselgt.f64 d9, d7, d5                             |     __asm ("vselgt.f64 d9, d7, d5");
    0x0004e19c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004e19e beq.w 0x4de8a                                     |         goto label_4;
                                                                 |     }
    0x0004e1a2 mov r2, r4                                        |     r2 = r4;
    0x0004e1a4 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0004e1a6 b 0x4e12c                                         |     goto label_5;
                                                                 | label_82:
    0x0004e1a8 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0004e1aa ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0004e1ac strd r1, r2, [sp, 0x14]                           |     __asm ("strd r1, r2, [var_14h]");
    0x0004e1b0 add.w r0, lr, r3                                  |     r0 = lr + r3;
    0x0004e1b4 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004e1b8 ldr r0, [r4, 0x38]                                |     r0 = *((r4 + 0x38));
    0x0004e1ba ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0004e1bc ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0004e1be ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0004e1c0 subs r1, r1, r0                                   |     r1 -= r0;
    0x0004e1c2 add r1, r3                                        |     r1 += r3;
    0x0004e1c4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0004e1c6 str r1, [sl, -0x4]                                |     *((sl - 0x4)) = r1;
    0x0004e1ca b 0x4dff0                                         |     goto label_6;
                                                                 | label_75:
    0x0004e1cc subs r2, r5, r2                                   |     r2 = r5 - r2;
    0x0004e1ce str r6, [sp, 0x1c]                                |     var_1ch = r6;
    0x0004e1d0 b 0x4df08                                         |     goto label_7;
                                                                 | label_79:
    0x0004e1d2 str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0004e1d4 mov r0, r2                                        |     r0 = r2;
    0x0004e1d6 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0004e1d8 bl 0x23e08                                        |     fcn_00023e08 (r0);
    0x0004e1dc ldrd r2, r3, [sp, 0x14]                           |     __asm ("ldrd r2, r3, [var_14h]");
    0x0004e1e0 mov r6, r0                                        |     r6 = r0;
    0x0004e1e2 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004e1e4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004e1e6 beq.w 0x4df7e                                     |         goto label_8;
                                                                 |     }
    0x0004e1ea ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0004e1ec lsls r2, r7, 2                                    |     r2 = r7 << 2;
    0x0004e1ee ldr r4, [sp, 0x28]                                |     r4 = var_28h;
    0x0004e1f0 mov r1, r3                                        |     r1 = r3;
    0x0004e1f2 ldr.w fp, [sp, 0x2c]                              |     fp = var_2ch;
    0x0004e1f6 adds r0, 1                                        |     r0++;
    0x0004e1f8 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0004e1fa str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0004e1fc ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0004e1fe blx 0x97d4                                        |     fcn_000097d4 ();
    0x0004e202 b 0x4e026                                         |     goto label_9;
                                                                 | label_81:
    0x0004e204 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x0004e206 mov r0, r4                                        |     r0 = r4;
    0x0004e208 ldr r3, [r1]                                      |     r3 = *(r1);
    0x0004e20a str r1, [sl, -0x4]                                |     *((sl - 0x4)) = r1;
    0x0004e20e rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0004e210 str r3, [sp, 0xac]                                |     var_ach = r3;
    0x0004e212 ldr r3, [r4, 0x4c]                                |     r3 = *((r4 + 0x4c));
    0x0004e214 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004e216 mov.w r3, 0                                       |     r3 = 0;
    0x0004e21a str r0, [r8, -0x4]                                |     *((r8 - 0x4)) = r0;
    0x0004e21e strb r3, [r4, 0xc]                                |     *((r4 + 0xc)) = r3;
    0x0004e220 b 0x4e000                                         |     goto label_10;
                                                                 | label_80:
    0x0004e222 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0004e224 mov r2, fp                                        |     r2 = fp;
    0x0004e226 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0004e228 adds r2, 3                                        |     r2 += 3;
    0x0004e22a bic r6, r2, 3                                     |     r6 = BIT_MASK (r2, 3);
    0x0004e22e ldr r4, [sp, 0x28]                                |     r4 = var_28h;
    0x0004e230 lsls r5, r6, 1                                    |     r5 = r6 << 1;
    0x0004e232 ldr.w fp, [sp, 0x2c]                              |     fp = var_2ch;
    0x0004e236 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0004e238 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0004e23a adds r2, r5, r6                                   |     r2 = r5 + r6;
    0x0004e23c ldr r0, [r3, 0x24]                                |     r0 = *((r3 + 0x24));
    0x0004e23e add.w r0, r0, r2, lsl 1                           |     r0 += (r2 << 1);
    0x0004e242 asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x0004e244 bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x0004e248 ldr r2, [sp, 0xd4]                                |     r2 = var_d4h;
    0x0004e24a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004e24c str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0004e24e str r0, [sp, 0x14c]                               |     var_14ch = r0;
    0x0004e250 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0004e252 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004e254 beq.w 0x4e890                                     |         goto label_86;
                                                                 |     }
    0x0004e258 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0004e25a mov.w lr, 0                                       |     lr = 0;
    0x0004e25e ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x0004e260 mov sb, lr                                        |     sb = lr;
    0x0004e262 str r4, [sp, 0x7c]                                |     var_7ch = r4;
    0x0004e264 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x0004e266 add.w r2, r2, r6, lsl 2                           |     r2 += (r6 << 2);
    0x0004e26a str r1, [sp, 0x148]                               |     var_148h = r1;
    0x0004e26c str.w lr, [sp, 0x50]                              |     __asm ("str.w lr, [var_50h]");
    0x0004e270 adds r0, r2, r5                                   |     r0 = r2 + r5;
    0x0004e272 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0004e274 str r2, [sp, 0x150]                               |     var_150h = r2;
    0x0004e276 ldrb r2, [r1, 8]                                  |     r2 = *((r1 + 8));
    0x0004e278 str r0, [sp, 0x60]                                |     var_60h = r0;
    0x0004e27a str.w fp, [sp, 0x80]                              |     __asm ("str.w fp, [var_80h]");
    0x0004e27e lsls r2, r2, 2                                    |     r2 <<= 2;
    0x0004e280 str r2, [sp, 0x6c]                                |     var_6ch = r2;
    0x0004e282 ldrb r2, [r1, 2]                                  |     r2 = *((r1 + 2));
    0x0004e284 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0004e286 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0004e288 adds r2, 1                                        |     r2++;
    0x0004e28a str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0004e28c add r2, sp, 0x108                                 |     r2 += var_108h;
    0x0004e28e str r2, [sp, 0x4c]                                |     var_4ch = r2;
                                                                 | label_11:
    0x0004e290 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0004e292 ldr.w r6, [r3, sb, lsl 2]                         |     offset_6 = sb << 2;
                                                                 |     r6 = *((r3 + offset_6));
    0x0004e296 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0004e298 ldr r4, [r6, 0x38]                                |     r4 = *((r6 + 0x38));
    0x0004e29a ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004e29c ldrh.w r8, [r6, 0x12]                             |     r8 = *((r6 + 0x12));
    0x0004e2a0 ldrb r1, [r4]                                     |     r1 = *(r4);
    0x0004e2a2 ldrb r2, [r3]                                     |     r2 = *(r3);
    0x0004e2a4 ldrh.w fp, [r6, 0x18]                             |     fp = *((r6 + 0x18));
    0x0004e2a8 add r8, r4                                        |     r8 += r4;
    0x0004e2aa ldrh r5, [r6, 0x1a]                               |     r5 = *((r6 + 0x1a));
    0x0004e2ac cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x0004e2ae bne.w 0x4e7f4                                     |         goto label_87;
                                                                 |     }
    0x0004e2b2 ldr.w sl, [sp, 0x144]                             |     sl = var_144h;
    0x0004e2b6 movs r1, 0                                        |     r1 = 0;
    0x0004e2b8 ldrb r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x0004e2ba ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004e2bc mov r7, sl                                        |     r7 = sl;
    0x0004e2be add r2, fp                                        |     r2 += fp;
    0x0004e2c0 lsls r2, r2, 1                                    |     r2 <<= 1;
    0x0004e2c2 add.w r0, r3, sl, lsl 1                           |     r0 = r3 + (sl << 1);
    0x0004e2c6 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0004e2ca ldrb r1, [r6, 0xc]                                |     r1 = *((r6 + 0xc));
    0x0004e2cc cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0004e2ce bne.w 0x4e4ca                                     |         goto label_88;
                                                                 |     }
                                                                 | label_14:
    0x0004e2d2 ldrh r3, [r6, 0x18]                               |     r3 = *((r6 + 0x18));
    0x0004e2d4 ldrh r1, [r6, 0x12]                               |     r1 = *((r6 + 0x12));
    0x0004e2d6 add.w r1, r1, r3, lsl 1                           |     r1 += (r3 << 1);
    0x0004e2da add r1, r4                                        |     r1 += r4;
    0x0004e2dc cmp r1, r8                                        |     
                                                                 |     if (r1 < r8) {
    0x0004e2de bls 0x4e30a                                       |         goto label_89;
                                                                 |     }
    0x0004e2e0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0004e2e2 mov r2, r8                                        |     r2 = r8;
    0x0004e2e4 add.w r0, r3, r7, lsl 2                           |     r0 = r3 + (r7 << 2);
                                                                 |     do {
    0x0004e2e8 ldrh r3, [r2], 2                                  |         r3 = *(r2);
                                                                 |         r2 += 2;
    0x0004e2ec rev16 r3, r3                                      |         __asm ("rev16 r3, r3");
    0x0004e2ee cmp r1, r2                                        |         
    0x0004e2f0 and.w r3, r3, r5                                  |         r3 &= r5;
    0x0004e2f4 add r3, r4                                        |         r3 += r4;
    0x0004e2f6 str r3, [r0], 4                                   |         *(r0) = r3;
                                                                 |         r0 += 4;
    0x0004e2fa bhi 0x4e2e8                                       |         
                                                                 |     } while (r1 > r2);
    0x0004e2fc subs r1, 1                                        |     r1--;
    0x0004e2fe adds r7, 1                                        |     r7++;
    0x0004e300 sub.w r1, r1, r8                                  |     r1 -= r8;
    0x0004e304 add.w r7, r7, r1, lsr 1                           |     r7 += (r1 >> 1);
    0x0004e308 str r7, [sp, 0x144]                               |     var_144h = r7;
                                                                 | label_89:
    0x0004e30a ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0004e30c str.w r7, [r3, sb, lsl 2]                         |     __asm ("str.w r7, [r3, sb, lsl 2]");
    0x0004e310 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004e312 clz r4, r3                                        |     r4 &= r3;
    0x0004e314 b.w 0xff4d1930                                    |     void (*0xff4d1930)() ();
    0x0004e318 lsrs r4, r4, 5                                    |     r4 >>= 5;
    0x0004e31a cmp sb, r3                                        |     
    0x0004e31c ite ge                                            |     
                                                                 |     if (sb < r3) {
    0x0004e31e movge r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (sb >= r3) {
    0x0004e320 andlt r3, r4, 1                                   |         r3 = r4 & 1;
                                                                 |     }
    0x0004e324 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e326 bne.w 0x4e51a                                     |         goto label_90;
                                                                 |     }
                                                                 | label_15:
    0x0004e32a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0004e32c add.w sb, sb, 1                                   |     sb++;
    0x0004e330 cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x0004e332 bne 0x4e290                                       |         goto label_11;
                                                                 |     }
    0x0004e334 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x0004e336 add.w sl, sp, 0xf4                                |     sl += var_f4h;
    0x0004e33a ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x0004e33c mov.w ip, 0                                       |     
    0x0004e340 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x0004e342 mov r5, sl                                        |     r5 = sl;
    0x0004e344 ldr r2, [r2, 0x28]                                |     r2 = *((r2 + 0x28));
    0x0004e346 mov r8, ip                                        |     r8 = ip;
    0x0004e348 subs r1, 0xc                                      |     r1 -= 0xc;
    0x0004e34a ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0004e34c str r4, [sp, 0x90]                                |     var_90h = r4;
    0x0004e34e adds r2, r1, r2                                   |     r2 = r1 + r2;
    0x0004e350 ldr r1, [sp, 0x78]                                |     r1 = var_78h;
    0x0004e352 ldrd r4, fp, [sp, 0x7c]                           |     __asm ("ldrd r4, fp, [var_7ch]");
    0x0004e356 str r2, [sp, 0x84]                                |     var_84h = r2;
    0x0004e358 add r2, sp, 0xd8                                  |     r2 += var_d8h;
    0x0004e35a add r2, r1                                        |     r2 += r1;
    0x0004e35c ldr.w sb, [sp, 0x70]                              |     sb = var_70h;
    0x0004e360 str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x0004e362 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0004e364 str.w fp, [sp, 0x88]                              |     __asm ("str.w fp, [var_88h]");
    0x0004e368 mov fp, r0                                        |     
    0x0004e36a str r0, [sp, 0x98]                                |     var_98h = r0;
    0x0004e36c str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0004e36e str.w sl, [sp, 0x94]                              |     __asm ("str.w sl, [var_94h]");
    0x0004e372 str r4, [sp, 0x60]                                |     var_60h = r4;
    0x0004e374 strd r3, sb, [sp, 0x7c]                           |     __asm ("strd r3, sb, [var_7ch]");
    0x0004e378 str.w sl, [sp, 0x8c]                              |     __asm ("str.w sl, [var_8ch]");
                                                                 | label_12:
    0x0004e37c ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0004e37e add r2, sp, 0x1a0                                 |     r2 += x;
    0x0004e380 ldr r4, [fp], 4                                   |     r4 = *(fp);
                                                                 |     fp += 4;
    0x0004e384 add.w r0, r2, r8, lsl 2                           |     r0 = r2 + (r8 << 2);
    0x0004e388 ldr sl, [r3], 4                                   |     sl = *(r3);
                                                                 |     r3 += 4;
    0x0004e38c str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0004e38e ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x0004e390 str sl, [r0, -0x34]                               |     var_16ch = sl;
    0x0004e394 str r3, [r0, -0x4c]                               |     var_154h = r3;
    0x0004e398 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0004e39c beq.w 0x4e6be                                     |         goto label_91;
                                                                 |     }
    0x0004e3a0 ldr r3, [r0, -0x38]                               |     r3 = var_38h_2;
    0x0004e3a4 cmp sl, r3                                        |     
    0x0004e3a6 it ne                                             |     
                                                                 |     if (sl == r3) {
    0x0004e3a8 addne r8, r8, 1                                   |         r8++;
                                                                 |     }
                                                                 | label_20:
    0x0004e3ac ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 == 0) {
    0x0004e3ae cbnz r3, 0x4e3cc                                  |         
    0x0004e3b0 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0004e3b2 add r2, sp, 0x1a0                                 |         r2 += x;
    0x0004e3b4 add.w r0, r2, r8, lsl 2                           |         r0 = r2 + (r8 << 2);
    0x0004e3b8 add.w r8, r8, 1                                   |         r8++;
    0x0004e3bc ldr r3, [r3, 0x3c]                                |         r3 = *((r3 + 0x3c));
    0x0004e3be str r3, [r0, -0x4c]                               |         var_4ch_2 = r3;
    0x0004e3c2 mov r3, r0                                        |         r3 = r0;
    0x0004e3c4 add.w r0, sl, 1                                   |         r0 = sl + 1;
    0x0004e3c8 str r0, [r3, -0x34]                               |         var_4h_3 = r0;
                                                                 |     }
    0x0004e3cc ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0004e3ce add.w r7, r4, 0x20                                |     r7 = r4 + 0x20;
    0x0004e3d0 lsls r0, r4, 0x1c                                 |     r0 = r4 << 0x1c;
    0x0004e3d2 ldr r2, [sp, 0x84]                                |     r2 = var_84h;
    0x0004e3d4 movs r6, 0                                        |     r6 = 0;
    0x0004e3d6 subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x0004e3d8 str r3, [sb], 4                                   |     *(sb) = r3;
                                                                 |     sb += 4;
    0x0004e3dc ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 == 0) {
    0x0004e3de cbz r3, 0x4e3fe                                   |         goto label_92;
                                                                 |     }
                                                                 |     do {
    0x0004e3e0 ldr r3, [r4, 0x4c]                                |         r3 = *((r4 + 0x4c));
    0x0004e3e2 mov r0, r4                                        |         r0 = r4;
    0x0004e3e4 ldr r1, [r7, 4]!                                  |         r1 = *((r7 += 4));
    0x0004e3e8 adds r6, 1                                        |         r6++;
    0x0004e3ea blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004e3ec ldr r3, [sb, -0x4]                                |         r3 = *((sb - 0x4));
    0x0004e3f0 adds r2, r0, 2                                    |         r2 = r0 + 2;
    0x0004e3f2 add r3, r2                                        |         r3 += r2;
    0x0004e3f4 str r3, [sb, -0x4]                                |         *((sb - 0x4)) = r3;
    0x0004e3f8 ldrb r3, [r4, 0xc]                                |         r3 = *((r4 + 0xc));
    0x0004e3fa cmp r6, r3                                        |         
    0x0004e3fc blt 0x4e3e0                                       |         
                                                                 |     } while (r6 < r3);
                                                                 | label_92:
    0x0004e3fe ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0004e400 str sl, [r5], 4                                   |     *(r5) = sl;
                                                                 |     r5 += 4;
    0x0004e404 cmp r3, fp                                        |     
                                                                 |     if (r3 != fp) {
    0x0004e406 bne 0x4e37c                                       |         goto label_12;
                                                                 |     }
    0x0004e408 ldrd fp, sl, [sp, 0x88]                           |     __asm ("ldrd fp, sl, [var_88h]");
    0x0004e40c mov.w ip, 2                                       |     
    0x0004e410 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004e412 movs r1, 1                                        |     r1 = 1;
    0x0004e414 ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
    0x0004e418 mov r7, sl                                        |     r7 = sl;
    0x0004e41a ldr.w sl, [sp, 0x84]                              |     sl = var_84h;
    0x0004e41e ldrd r3, r5, [sp, 0x7c]                           |     __asm ("ldrd r3, r5, [var_7ch]");
    0x0004e422 mov sb, r2                                        |     sb = r2;
    0x0004e424 ldr r4, [sp, 0x60]                                |     r4 = var_60h;
    0x0004e426 str.w fp, [sp, 0x80]                              |     __asm ("str.w fp, [var_80h]");
    0x0004e428 sub sp, 0                                         |     
    0x0004e42a mov fp, ip                                        |     
    0x0004e42c str r1, [sp, 0x50]                                |     var_50h = r1;
    0x0004e42e str r4, [sp, 0x7c]                                |     var_7ch = r4;
    0x0004e430 str r3, [sp, 0x88]                                |     var_88h = r3;
                                                                 | label_24:
    0x0004e432 ldr r2, [r5], 4                                   |     r2 = *(r5);
                                                                 |     r5 += 4;
    0x0004e436 cmp sl, r2                                        |     
    0x0004e438 it ge                                             |     
                                                                 |     if (sl < r2) {
    0x0004e43a ldrge r3, [r7]                                    |         r3 = *(r7);
                                                                 |     }
                                                                 |     if (sl >= r2) {
    0x0004e43c bge.w 0x4e6ca                                     |         goto label_93;
                                                                 |     }
    0x0004e440 mov r3, r8                                        |     r3 = r8;
    0x0004e442 mov r2, sl                                        |     r2 = sl;
    0x0004e444 b 0x4e454                                         |     
                                                                 |     while (r3 != 0) {
                                                                 | label_13:
    0x0004e446 ldr r0, [r5]                                      |         r0 = *(r5);
    0x0004e448 cmp r2, r4                                        |         
    0x0004e44a str r6, [r7]                                      |         *(r7) = r6;
    0x0004e44c add r0, r1                                        |         r0 += r1;
    0x0004e44e str r0, [r5]                                      |         *(r5) = r0;
                                                                 |         if (r2 >= r4) {
    0x0004e450 bge.w 0x4e6c4                                     |             goto label_94;
                                                                 |         }
    0x0004e454 ldr r1, [sp, 0x50]                                |         r1 = var_50h;
    0x0004e456 cmp r1, sb                                        |         
                                                                 |         if (r1 >= sb) {
    0x0004e458 blt 0x4e46c                                       |             
    0x0004e45a cmp.w fp, 6                                       |             
    0x0004e45e mov sb, fp                                        |             sb = fp;
                                                                 |             if (fp == 6) {
    0x0004e460 beq.w 0x4e822                                     |                 goto label_95;
                                                                 |             }
    0x0004e464 movs r1, 0                                        |             r1 = 0;
    0x0004e466 str r1, [r5]                                      |             *(r5) = r1;
    0x0004e468 ldr r1, [sp, 0x144]                               |             r1 = var_144h;
    0x0004e46a str r1, [r7, 4]                                   |             *((r7 + 4)) = r1;
                                                                 |         }
    0x0004e46c ldr.w r8, [r7]                                    |         r8 = *(r7);
    0x0004e470 ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x0004e472 add.w r6, r8, -1                                  |         r6 = r8 + -1;
    0x0004e476 ldrh.w r0, [r1, r6, lsl 1]                        |         offset_7 = r6 << 1;
                                                                 |         r0 = *((r1 + offset_7));
    0x0004e47a lsl.w sl, r6, 1                                   |         sl = r6 << 1;
                                                                 |         if (r0 == 0) {
    0x0004e47e cbnz r0, 0x4e490                                  |             
    0x0004e480 ldr r0, [sp, 0x3c]                                |             r0 = var_3ch;
    0x0004e482 mov r1, r6                                        |             r1 = r6;
    0x0004e484 strd r3, r2, [sp, 0x5c]                           |             __asm ("strd r3, r2, [var_5ch]");
    0x0004e488 bl 0xbac8                                         |             fcn_0000bac8 (r0, r1, r2);
    0x0004e48c ldrd r3, r2, [sp, 0x5c]                           |             __asm ("ldrd r3, r2, [var_5ch]");
                                                                 |         }
    0x0004e490 ldr r4, [r5, -0x4]                                |         r4 = *((r5 - 0x4));
    0x0004e494 adds r1, r0, 2                                    |         r1 = r0 + 2;
    0x0004e496 subs r4, r4, r1                                   |         r4 -= r1;
    0x0004e498 str r4, [r5, -0x4]                                |         *((r5 - 0x4)) = r4;
    0x0004e49c cmp r3, 0                                         |         
    0x0004e49e bne 0x4e446                                       |         
                                                                 |     }
    0x0004e4a0 ldr r1, [sp, 0x144]                               |     r1 = var_144h;
    0x0004e4a2 cmp r8, r1                                        |     
    0x0004e4a4 it ge                                             |     
                                                                 |     if (r8 >= r1) {
    0x0004e4a6 movge r1, r3                                      |         r1 = r3;
                                                                 |         goto label_96;
                                                                 |     }
                                                                 |     if (r8 >= r1) {
                                                                 | label_96:
    0x0004e4a8 bge 0x4e446                                       |         goto label_13;
                                                                 |     }
    0x0004e4aa ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0004e4ac add sl, r1                                        |     sl += r1;
    0x0004e4ae ldrh.w r1, [sl, 2]                                |     r1 = *((sl + 2));
                                                                 |     if (r1 == 0) {
    0x0004e4b2 cbnz r1, 0x4e4c6                                  |         
    0x0004e4b4 mov r1, r8                                        |         r1 = r8;
    0x0004e4b6 ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x0004e4b8 strd r3, r2, [sp, 0x5c]                           |         __asm ("strd r3, r2, [var_5ch]");
    0x0004e4bc bl 0xbac8                                         |         fcn_0000bac8 (r0, r1, r2);
    0x0004e4c0 ldrd r3, r2, [sp, 0x5c]                           |         __asm ("ldrd r3, r2, [var_5ch]");
    0x0004e4c4 mov r1, r0                                        |         r1 = r0;
                                                                 |     }
    0x0004e4c6 adds r1, 2                                        |     r1 += 2;
    0x0004e4c8 b 0x4e446                                         |     goto label_13;
                                                                 | label_88:
    0x0004e4ca ldrh r0, [r6, 0x1c]                               |     r0 = *((r6 + 0x1c));
    0x0004e4cc cmp fp, r0                                        |     
                                                                 |     if (fp <= r0) {
    0x0004e4ce blo.w 0x4e942                                     |         goto label_97;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0004e4d2 cbz r0, 0x4e4f8                                   |         goto label_98;
                                                                 |     }
    0x0004e4d4 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0004e4d6 mov r2, r8                                        |     r2 = r8;
    0x0004e4d8 add.w r8, r8, r0, lsl 1                           |     r8 += (r0 << 1);
    0x0004e4dc add.w r7, r3, sl, lsl 2                           |     r7 = r3 + (sl << 2);
                                                                 |     do {
    0x0004e4e0 ldrh r3, [r2], 2                                  |         r3 = *(r2);
                                                                 |         r2 += 2;
    0x0004e4e4 rev16 r3, r3                                      |         __asm ("rev16 r3, r3");
    0x0004e4e6 cmp r8, r2                                        |         
    0x0004e4e8 and.w r3, r3, r5                                  |         r3 &= r5;
    0x0004e4ec add r3, r4                                        |         r3 += r4;
    0x0004e4ee str r3, [r7], 4                                   |         *(r7) = r3;
                                                                 |         r7 += 4;
    0x0004e4f2 bne 0x4e4e0                                       |         
                                                                 |     } while (r8 != r2);
    0x0004e4f4 add.w r7, sl, r0                                  |     r7 = sl + r0;
                                                                 | label_98:
    0x0004e4f8 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0004e4fa add.w r3, r6, 0x20                                |     r3 = r6 + 0x20;
    0x0004e4fe movs r0, 4                                        |     r0 = 4;
    0x0004e500 smlabb ip, r0, r1, r3                             |     __asm ("smlabb ip, r0, r1, r3");
    0x0004e504 add.w r2, r2, r7, lsl 2                           |     r2 += (r7 << 2);
                                                                 |     do {
    0x0004e508 ldr r0, [r3, 4]!                                  |         r0 = *((r3 += 4));
    0x0004e50c cmp ip, r3                                        |         
    0x0004e50e str r0, [r2], 4                                   |         *(r2) = r0;
                                                                 |         r2 += 4;
    0x0004e512 bne 0x4e508                                       |         
                                                                 |     } while (ip != r3);
    0x0004e514 add r7, r1                                        |     r7 += r1;
    0x0004e516 str r7, [sp, 0x144]                               |     var_144h = r7;
    0x0004e518 b 0x4e2d2                                         |     goto label_14;
                                                                 | label_90:
    0x0004e51a ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0004e51c ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0004e51e ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0004e520 ldr.w r2, [r3, sb, lsl 2]                         |     offset_8 = sb << 2;
                                                                 |     r2 = *((r3 + offset_8));
    0x0004e524 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0004e526 strh.w r2, [r5, r7, lsl 1]                        |     offset_9 = r7 << 1;
                                                                 |     *((r5 + offset_9)) = r2;
    0x0004e52a uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x0004e52c add r3, r1                                        |     r3 += r1;
    0x0004e52e mov r0, r3                                        |     r0 = r3;
    0x0004e530 add r1, r2                                        |     r1 += r2;
    0x0004e532 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x0004e534 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x0004e536 ldr.w r1, [r1, sb, lsl 2]                         |     offset_10 = sb << 2;
                                                                 |     r1 = *((r1 + offset_10));
    0x0004e53a blx 0x9e2c                                        |     fcn_00009e2c ();
    0x0004e53e ldrh.w r2, [r5, r7, lsl 1]                        |     offset_11 = r7 << 1;
                                                                 |     r2 = *((r5 + offset_11));
    0x0004e542 mov r3, r0                                        |     r3 = r0;
    0x0004e544 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x0004e546 subs r2, r2, r1                                   |     r2 -= r1;
    0x0004e548 adds r1, r0, r1                                   |     r1 = r0 + r1;
    0x0004e54a ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0004e54c uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x0004e54e str.w r1, [r0, r7, lsl 2]                         |     __asm ("str.w r1, [r0, r7, lsl 2]");
    0x0004e552 add.w r1, r5, r7, lsl 1                           |     r1 = r5 + (r7 << 1);
    0x0004e556 strh.w r2, [r5, r7, lsl 1]                        |     offset_12 = r7 << 1;
                                                                 |     *((r5 + offset_12)) = r2;
    0x0004e55a ldrb r0, [r6, 8]                                  |     r0 = *((r6 + 8));
                                                                 |     if (r0 != 0) {
    0x0004e55c cbnz r0, 0x4e56c                                  |         goto label_99;
                                                                 |     }
    0x0004e55e ldr r2, [r6, 0x38]                                |     r2 = *((r6 + 0x38));
    0x0004e560 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x0004e562 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004e564 str r2, [r3, r1]                                  |     *((r3 + r1)) = r2;
                                                                 |     do {
                                                                 | label_16:
    0x0004e566 adds r7, 1                                        |         r7++;
    0x0004e568 str r7, [sp, 0x144]                               |         var_144h = r7;
    0x0004e56a b 0x4e32a                                         |         goto label_15;
                                                                 | label_99:
    0x0004e56c cmp r2, 3                                         |         
    0x0004e56e bhi 0x4e566                                       |         
                                                                 |     } while (r2 > 3);
    0x0004e570 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0004e572 movs r5, 0                                        |     r5 = 0;
    0x0004e574 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x0004e576 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0004e578 add r2, r3                                        |     r2 += r3;
                                                                 |     do {
    0x0004e57a mov r0, r2                                        |         r0 = r2;
    0x0004e57c strb r5, [r2, 1]!                                 |         *((r2 += 1)) = r5;
    0x0004e580 ldrh r3, [r1]                                     |         r3 = *(r1);
    0x0004e582 adds r3, 1                                        |         r3++;
    0x0004e584 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x0004e586 cmp r3, 3                                         |         
    0x0004e588 strh r3, [r1]                                     |         *(r1) = r3;
    0x0004e58a bls 0x4e57a                                       |         
                                                                 |     } while (r3 < 3);
    0x0004e58c ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0004e58e rsb.w r3, r3, 2                                   |     r3 = 2 - r3;
    0x0004e592 add r3, r0                                        |     r3 += r0;
    0x0004e594 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0004e596 b 0x4e566                                         |     goto label_16;
                                                                 | label_74:
    0x0004e598 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0004e59a ldr r5, [r2, 0x38]                                |     r5 = *((r2 + 0x38));
    0x0004e59c movs r2, 0                                        |     r2 = 0;
    0x0004e59e str r2, [sp, 0x1c]                                |     var_1ch = r2;
                                                                 | label_25:
    0x0004e5a0 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0004e5a2 str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0004e5a4 ldrb r2, [r2, 9]                                  |     r2 = *((r2 + 9));
    0x0004e5a6 adds r2, 8                                        |     r2 += 8;
    0x0004e5a8 adds r2, r5, r2                                   |     r2 = r5 + r2;
    0x0004e5aa str r2, [sp, 0x68]                                |     var_68h = r2;
    0x0004e5ac b 0x4df24                                         |     goto label_17;
                                                                 | label_72:
    0x0004e5ae ldrh r1, [r4, 0x18]                               |     r1 = *((r4 + 0x18));
    0x0004e5b0 ldrh r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004e5b2 cmp r2, r1                                        |     
                                                                 |     if (r2 != r1) {
    0x0004e5b4 bne.w 0x4de96                                     |         goto label_18;
                                                                 |     }
    0x0004e5b8 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004e5ba ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x0004e5bc cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x0004e5be beq.w 0x4de96                                     |         goto label_18;
                                                                 |     }
    0x0004e5c2 ldrh r1, [r0, 0x18]                               |     r1 = *((r0 + 0x18));
    0x0004e5c4 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0004e5c6 cmp r1, r0                                        |     
                                                                 |     if (r1 != r0) {
    0x0004e5c8 bne.w 0x4de96                                     |         goto label_18;
                                                                 |     }
    0x0004e5cc ldr.w sb, [r4, 0x34]                              |     sb = *((r4 + 0x34));
    0x0004e5d0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004e5d2 beq.w 0x4eeb6                                     |         goto label_100;
                                                                 |     }
    0x0004e5d4 strh r0, [r6, 0x22]                               |     *((r6 + 0x22)) = r0;
    0x0004e5d6 movs r3, 0                                        |     r3 = 0;
    0x0004e5d8 add r2, sp, 0xac                                  |     r2 += var_ach;
    0x0004e5da add r1, sp, 0xa4                                  |     r1 += var_a4h;
    0x0004e5dc mov r0, sb                                        |     r0 = sb;
    0x0004e5de str r3, [sp]                                      |     *(sp) = r3;
    0x0004e5e0 bl 0x4c088                                        |     r0 = fcn_0004c088 (r0, r1, r2, r3, r4);
    0x0004e5e4 mov r6, r0                                        |     r6 = r0;
    0x0004e5e6 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004e5e8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e5ea bne.w 0x4e068                                     |         goto label_19;
                                                                 |     }
    0x0004e5ee ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x0004e5f0 mov r0, r4                                        |     r0 = r4;
    0x0004e5f2 ldr r3, [r4, 0x4c]                                |     r3 = *((r4 + 0x4c));
    0x0004e5f4 add.w r8, sp, 0xb0                                |     r8 += var_b0h;
    0x0004e5f8 str r1, [sp, 0xb0]                                |     var_b0h = r1;
    0x0004e5fa blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004e5fc ldr r7, [sp, 0xa4]                                |     r7 = var_a4h;
    0x0004e5fe movs r1, 0xd                                      |     r1 = 0xd;
    0x0004e600 strh.w r0, [sp, 0xa2]                             |     var_a2h = r0;
    0x0004e604 mov r0, r7                                        |     r0 = r7;
    0x0004e606 bl 0x22368                                        |     fcn_00022368 (r0, r1);
    0x0004e60a ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x0004e60c mov r1, r6                                        |     r1 = r6;
    0x0004e60e mov r2, r5                                        |     r2 = r5;
    0x0004e610 add r0, sp, 0x144                                 |     r0 += var_144h;
    0x0004e612 str.w r8, [sp, 0x14c]                             |     __asm ("str.w r8, [var_14ch]");
    0x0004e616 str r3, [sp, 0x154]                               |     var_154h = r3;
    0x0004e618 add.w r3, sp, 0xa2                                |     r3 += var_a2h;
    0x0004e61c str r3, [sp, 0x150]                               |     var_150h = r3;
    0x0004e61e movs r3, 2                                        |     r3 = 2;
    0x0004e620 str r3, [sp, 0x16c]                               |     var_16ch = r3;
    0x0004e622 mov r3, r7                                        |     r3 = r7;
    0x0004e624 str r5, [sp, 0x144]                               |     var_144h = r5;
    0x0004e626 str r4, [sp, 0x148]                               |     var_148h = r4;
    0x0004e628 bl 0x23590                                        |     r0 = fcn_00023590 (r0, r1, r2, r3, r4);
    0x0004e62c mov r6, r0                                        |     r6 = r0;
    0x0004e62e str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004e630 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e632 bne.w 0x4eea6                                     |         goto label_101;
                                                                 |     }
    0x0004e636 ldrh.w r0, [sp, 0xa2]                             |     r0 = var_a2h;
    0x0004e63a mvn r3, 1                                         |     r3 = ~1;
    0x0004e63e ldrh r1, [r7, 0x12]                               |     r1 = *((r7 + 0x12));
    0x0004e640 ldr.w r2, [sb, 0x28]                              |     r2 = *((sb + 0x28));
    0x0004e644 subs r3, r3, r0                                   |     r3 -= r0;
    0x0004e646 ldr.w r8, [sp, 0xac]                              |     r8 = var_ach;
    0x0004e64a subs r3, r3, r1                                   |     r3 -= r1;
    0x0004e64c add r3, r2                                        |     r3 += r2;
    0x0004e64e str r3, [r7, 0x14]                                |     *((r7 + 0x14)) = r3;
    0x0004e650 ldrb.w r3, [sb, 0x11]                             |     r3 = *((sb + 0x11));
    0x0004e654 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e656 bne.w 0x4eede                                     |         goto label_102;
                                                                 |     }
                                                                 | label_41:
    0x0004e65a ldrh r3, [r4, 0x18]                               |     r3 = *((r4 + 0x18));
    0x0004e65c ldr r2, [r4, 0x40]                                |     r2 = *((r4 + 0x40));
    0x0004e65e subs r3, 1                                        |     r3--;
    0x0004e660 ldrh.w r2, [r2, r3, lsl 1]                        |     offset_13 = r3 << 1;
                                                                 |     r2 = *((r2 + offset_13));
    0x0004e664 ldrh r3, [r4, 0x1a]                               |     r3 = *((r4 + 0x1a));
    0x0004e666 rev16 r2, r2                                      |     __asm ("rev16 r2, r2");
    0x0004e668 ands r3, r2                                       |     r3 &= r2;
    0x0004e66a ldr r2, [r4, 0x38]                                |     r2 = *((r4 + 0x38));
    0x0004e66c add r2, r3                                        |     r2 += r3;
    0x0004e66e add.w r0, r2, 9                                   |     r0 = r2 + 9;
                                                                 |     do {
    0x0004e672 mov r1, r2                                        |         r1 = r2;
    0x0004e674 adds r2, 1                                        |         r2++;
    0x0004e676 str r2, [sp, 0xb0]                                |         var_b0h = r2;
    0x0004e678 cmp r0, r2                                        |         
    0x0004e67a ldrb r5, [r2, -0x1]                               |         r5 = *((r2 - 0x1));
    0x0004e67e ite ls                                            |         
                                                                 |         if (r0 > r2) {
    0x0004e680 movls r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r0 <= r2) {
    0x0004e682 movhi r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x0004e684 ands.w r3, r3, r5, lsr 7                          |         r3 &= (r5 >> 7);
    0x0004e688 bne 0x4e672                                       |         
                                                                 |     } while (r3 != r3);
    0x0004e68a adds r1, 0xa                                      |     r1 += 0xa;
    0x0004e68c add r3, sp, 0x190                                 |     r3 += var_190h;
                                                                 |     do {
    0x0004e68e adds r2, 1                                        |         r2++;
    0x0004e690 str r2, [sp, 0xb0]                                |         var_b0h = r2;
    0x0004e692 cmp r1, r2                                        |         
    0x0004e694 ldrb r5, [r2, -0x1]                               |         r5 = *((r2 - 0x1));
    0x0004e698 ite ls                                            |         
                                                                 |         if (r1 > r2) {
    0x0004e69a movls r0, 0                                       |             r0 = 0;
                                                                 |         }
                                                                 |         if (r1 <= r2) {
    0x0004e69c movhi r0, 1                                       |             r0 = 1;
                                                                 |         }
    0x0004e69e strb r5, [r3], 1                                  |         *(r3) = r5;
                                                                 |         r3++;
    0x0004e6a2 ands.w r0, r0, r5, lsr 7                          |         r0 &= (r5 >> 7);
    0x0004e6a6 bne 0x4e68e                                       |         
                                                                 |     } while (r0 != r0);
    0x0004e6a8 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e6aa beq.w 0x4f2ee                                     |         goto label_103;
                                                                 |     }
                                                                 | label_62:
    0x0004e6ae ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004e6b0 rev.w r1, r8                                      |     r8 = SWAP32 (r1);
    0x0004e6b4 ldrb r2, [r3, 9]                                  |     r2 = *((r3 + 9));
    0x0004e6b6 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004e6b8 add r3, r2                                        |     r3 += r2;
    0x0004e6ba str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
    0x0004e6bc b 0x4eeac                                         |     goto label_104;
                                                                 | label_91:
    0x0004e6be mov.w r8, 1                                       |     r8 = 1;
    0x0004e6c2 b 0x4e3ac                                         |     goto label_20;
                                                                 | label_94:
    0x0004e6c4 mov r8, r3                                        |     r8 = r3;
    0x0004e6c6 mov sl, r2                                        |     sl = r2;
    0x0004e6c8 mov r3, r6                                        |     r3 = r6;
                                                                 | label_93:
    0x0004e6ca ldr r6, [sp, 0x144]                               |     r6 = var_144h;
    0x0004e6cc sub.w r2, fp, 2                                   |     r2 = fp - 2;
    0x0004e6d0 str r2, [sp, 0x60]                                |     var_60h = r2;
    0x0004e6d2 cmp r6, r3                                        |     
                                                                 |     if (r6 <= r3) {
    0x0004e6d4 ble 0x4e71e                                       |         goto label_23;
                                                                 |     }
    0x0004e6d6 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0004e6d8 add.w r4, r2, r3, lsl 1                           |     r4 = r2 + (r3 << 1);
                                                                 |     do {
                                                                 | label_21:
    0x0004e6dc ldrh r0, [r4], 2                                  |         r0 = *(r4);
                                                                 |         r4 += 2;
                                                                 |         if (r0 == 0) {
    0x0004e6e0 cbnz r0, 0x4e6ee                                  |             
    0x0004e6e2 mov r1, r3                                        |             r1 = r3;
    0x0004e6e4 ldr r0, [sp, 0x3c]                                |             r0 = var_3ch;
    0x0004e6e6 str r3, [sp, 0x5c]                                |             var_5ch = r3;
    0x0004e6e8 bl 0xbac8                                         |             fcn_0000bac8 (r0, r1, r2);
    0x0004e6ec ldr r3, [sp, 0x5c]                                |             r3 = var_5ch;
                                                                 |         }
    0x0004e6ee ldr r2, [r5, -0x4]                                |         r2 = *((r5 - 0x4));
    0x0004e6f2 adds r0, 2                                        |         r0 += 2;
    0x0004e6f4 add r2, r0                                        |         r2 += r0;
    0x0004e6f6 cmp sl, r2                                        |         
                                                                 |         if (sl < r2) {
    0x0004e6f8 blt.w 0x4e84a                                     |             goto label_105;
                                                                 |         }
    0x0004e6fc adds r3, 1                                        |         r3++;
    0x0004e6fe str r2, [r5, -0x4]                                |         *((r5 - 0x4)) = r2;
    0x0004e702 str r3, [r7]                                      |         *(r7) = r3;
    0x0004e704 cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x0004e708 bne 0x4e712                                       |             
    0x0004e70a cmp r3, r6                                        |             
    0x0004e70c it ge                                             |             
                                                                 |             if (r3 < r6) {
    0x0004e70e movge r0, r8                                      |                 r0 = r8;
                                                                 |             }
                                                                 |             if (r3 < r6) {
    0x0004e710 blt 0x4e7d8                                       |                 goto label_106;
                                                                 |             }
                                                                 |         }
    0x0004e712 ldr r2, [r5]                                      |         r2 = *(r5);
    0x0004e714 cmp r3, r6                                        |         
    0x0004e716 sub.w r2, r2, r0                                  |         r2 -= r0;
    0x0004e71a str r2, [r5]                                      |         *(r5) = r2;
    0x0004e71c bne 0x4e6dc                                       |         
                                                                 |     } while (r3 != r6);
                                                                 | label_23:
    0x0004e71e ldr.w r8, [sp, 0x60]                              |     r8 = var_60h;
    0x0004e722 mov ip, fp                                        |     
    0x0004e724 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x0004e726 add.w r2, ip, -1                                  |     r2 = ip + -1;
    0x0004e72a ldr.w fp, [sp, 0x80]                              |     fp = var_80h;
    0x0004e72e ldr.w sl, [sp, 0x8c]                              |     sl = var_8ch;
    0x0004e732 mov r0, r8                                        |     r0 = r8;
    0x0004e734 ldr r4, [sp, 0x7c]                                |     r4 = var_7ch;
    0x0004e736 str r6, [sp, 0x50]                                |     var_50h = r6;
    0x0004e738 str r2, [sp, 0x7c]                                |     var_7ch = r2;
                                                                 | label_59:
    0x0004e73a ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x0004e73c lsls r2, r0, 2                                    |     r2 = r0 << 2;
    0x0004e73e str r0, [sp, 0x5c]                                |     var_5ch = r0;
    0x0004e740 add r1, r2                                        |     r1 += r2;
    0x0004e742 subs r2, 4                                        |     r2 -= 4;
    0x0004e744 add.w sb, sl, r2                                  |     sb = sl + r2;
    0x0004e748 str r1, [sp, 0x60]                                |     var_60h = r1;
    0x0004e74a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004e74c beq.w 0x4e97a                                     |         goto label_107;
                                                                 |     }
    0x0004e750 str r4, [sp, 0x70]                                |     var_70h = r4;
    0x0004e752 ldr r4, [sp, 0x74]                                |     r4 = var_74h;
    0x0004e754 str.w fp, [sp, 0x80]                              |     __asm ("str.w fp, [var_80h]");
    0x0004e758 mov fp, sb                                        |     
    0x0004e75a str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x0004e75c str r0, [sp, 0x9c]                                |     var_9ch = r0;
                                                                 | label_27:
    0x0004e75e ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0004e760 ldr.w r7, [fp]                                    |     r7 = *(fp);
    0x0004e764 str.w fp, [sp, 0x88]                              |     __asm ("str.w fp, [var_88h]");
    0x0004e768 ldrd sb, r6, [r3, -0x4]                           |     __asm ("ldrd sb, r6, [r3, -0x4]");
    0x0004e76c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004e76e subs r5, r7, 1                                    |     r5 = r7 - 1;
    0x0004e770 subs r1, r7, r3                                   |     r1 = r7 - r3;
    0x0004e772 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004e774 ldrh.w r0, [r3, r1, lsl 1]                        |     offset_14 = r1 << 1;
                                                                 |     r0 = *((r3 + offset_14));
    0x0004e778 add.w r8, r3, r1, lsl 1                           |     r8 = r3 + (r1 << 1);
                                                                 |     if (r0 == 0) {
    0x0004e77c cbnz r0, 0x4e784                                  |         
    0x0004e77e ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x0004e780 bl 0xbac8                                         |         fcn_0000bac8 (r0, r1, r2);
                                                                 |     }
    0x0004e784 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004e786 ldr r2, [sp, 0x9c]                                |     r2 = var_9ch;
    0x0004e788 add.w r7, r3, r7, lsl 1                           |     r7 = r3 + (r7 << 1);
    0x0004e78c ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0004e78e subs.w sl, r3, r2                                 |     sl = r3 - r2;
    0x0004e792 mov r3, fp                                        |     r3 = fp;
    0x0004e794 it ne                                             |     
                                                                 |     if (sl == r3) {
    0x0004e796 movne sl, 1                                       |         sl = 1;
                                                                 |     }
    0x0004e79a mov fp, sb                                        |     
    0x0004e79c lsl.w sl, sl, 1                                   |     sl <<= 1;
    0x0004e7a0 mov sb, r3                                        |     sb = r3;
                                                                 |     do {
    0x0004e7a2 ldrh r3, [r7, -0x2]!                              |         r3 = *((r7 -= 0x2));
                                                                 |         if (r3 == 0) {
    0x0004e7a6 cbnz r3, 0x4e7b0                                  |             
    0x0004e7a8 ldr r0, [sp, 0x3c]                                |             r0 = var_3ch;
    0x0004e7aa mov r1, r5                                        |             r1 = r5;
    0x0004e7ac bl 0xbac8                                         |             fcn_0000bac8 (r0, r1, r2);
                                                                 |         }
    0x0004e7b0 cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x0004e7b2 bne.w 0x4e8c4                                     |             goto label_108;
                                                                 |         }
    0x0004e7b6 ldrh.w r1, [r8]                                   |         r1 = *(r8);
    0x0004e7ba ldrh r3, [r7]                                     |         r3 = *(r7);
                                                                 | label_26:
    0x0004e7bc adds r3, 2                                        |         r3 += 2;
    0x0004e7be adds r1, 2                                        |         r1 += 2;
    0x0004e7c0 sub.w fp, fp, r3                                  |         
    0x0004e7c4 subs r3, r5, 1                                    |         r3 = r5 - 1;
    0x0004e7c6 add r6, r1                                        |         r6 += r1;
    0x0004e7c8 sub.w r8, r8, 2                                   |         r8 -= 2;
    0x0004e7cc str.w r5, [sb]                                    |         __asm ("str.w r5, [sb]");
                                                                 |         if (r3 < r5) {
    0x0004e7d0 bmi.w 0x4e93a                                     |             goto label_109;
                                                                 |         }
    0x0004e7d4 mov r5, r3                                        |         r5 = r3;
    0x0004e7d6 b 0x4e7a2                                         |         
                                                                 |     } while (1);
                                                                 | label_106:
    0x0004e7d8 ldrh r2, [r4]                                     |     r2 = *(r4);
                                                                 |     if (r2 == 0) {
    0x0004e7da cbnz r2, 0x4e7ea                                  |         
    0x0004e7dc mov r1, r3                                        |         r1 = r3;
    0x0004e7de ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x0004e7e0 str r3, [sp, 0x5c]                                |         var_5ch = r3;
    0x0004e7e2 bl 0xbac8                                         |         fcn_0000bac8 (r0, r1, r2);
    0x0004e7e6 ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x0004e7e8 mov r2, r0                                        |         r2 = r0;
                                                                 |     }
    0x0004e7ea ldr r1, [r5]                                      |     r1 = *(r5);
    0x0004e7ec adds r2, 2                                        |     r2 += 2;
    0x0004e7ee subs r1, r1, r2                                   |     r1 -= r2;
    0x0004e7f0 str r1, [r5]                                      |     *(r5) = r1;
    0x0004e7f2 b 0x4e6dc                                         |     goto label_21;
                                                                 | label_87:
    0x0004e7f4 ldrd r4, fp, [sp, 0x7c]                           |     __asm ("ldrd r4, fp, [var_7ch]");
    0x0004e7f8 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004e7fc ldr r2, [pc, 0xb4]                                |     
    0x0004e7fe adds r0, 0x14                                     |     r0 += 0x14;
    0x0004e800 ldr r1, [pc, 0xb4]                                |     
    0x0004e802 movw r3, 0x25e4                                   |     
    0x0004e806 str r0, [sp]                                      |     *(sp) = r0;
    0x0004e808 movt r3, 1                                        |     r3 = 0x125e4;
    0x0004e80c add r2, pc                                        |     r2 = 0x9d0c4;
    0x0004e80e movs r0, 0xb                                      |     r0 = 0xb;
    0x0004e810 add r1, pc                                        |     r1 = 0x9d0cc;
    0x0004e812 blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 |     do {
                                                                 | label_28:
    0x0004e816 movs r6, 0xb                                      |         r6 = 0xb;
    0x0004e818 str r6, [sp, 0xa8]                                |         var_a8h = r6;
                                                                 | label_33:
    0x0004e81a ldr r0, [sp, 0x18]                                |         r0 = var_18h;
    0x0004e81c blx 0x9c24                                        |         fcn_00009c24 ();
    0x0004e820 b 0x4e026                                         |         goto label_9;
                                                                 | label_95:
    0x0004e822 ldrd r4, fp, [sp, 0x7c]                           |         __asm ("ldrd r4, fp, [var_7ch]");
    0x0004e826 blx 0xa230                                        |         fcn_0000a230 ();
    0x0004e82a ldr r2, [pc, 0x90]                                |         
    0x0004e82c adds r0, 0x14                                     |         r0 += 0x14;
    0x0004e82e ldr r1, [pc, 0x90]                                |         
    0x0004e830 movw r3, 0x2661                                   |         
    0x0004e834 str r0, [sp]                                      |         *(sp) = r0;
    0x0004e836 movt r3, 1                                        |         r3 = 0x12661;
    0x0004e83a add r2, pc                                        |         r2 = 0x9d0fc;
    0x0004e83c movs r0, 0xb                                      |         r0 = 0xb;
    0x0004e83e add r1, pc                                        |         r1 = 0x9d104;
    0x0004e840 blx 0x9f00                                        |         fcn_00009f00 ();
    0x0004e844 b 0x4e816                                         |         
                                                                 |     } while (1);
                                                                 | label_73:
    0x0004e846 movs r6, 7                                        |     r6 = 7;
    0x0004e848 b 0x4e05a                                         |     goto label_22;
                                                                 | label_105:
    0x0004e84a cmp r3, r6                                        |     
                                                                 |     if (r3 >= r6) {
    0x0004e84c bge.w 0x4e71e                                     |         goto label_23;
                                                                 |     }
    0x0004e850 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0004e852 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004e854 beq.w 0x4e96a                                     |         goto label_110;
                                                                 |     }
    0x0004e858 ldr r2, [r7, -0x4]                                |     r2 = *((r7 - 0x4));
                                                                 | label_30:
    0x0004e85c cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0004e85e bge.w 0x4f288                                     |         goto label_111;
                                                                 |     }
    0x0004e862 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0004e864 add.w r2, fp, -1                                  |     r2 = fp + -1;
    0x0004e868 cmp r2, sb                                        |     
    0x0004e86a add.w r7, r7, 4                                   |     r7 += 4;
    0x0004e86e add.w r3, r3, 1                                   |     r3++;
    0x0004e872 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0004e874 add.w r3, fp, 1                                   |     r3 += arg_1h_2;
                                                                 |     if (r2 >= sb) {
    0x0004e878 bge.w 0x4f26e                                     |         goto label_112;
                                                                 |     }
    0x0004e87c mov fp, r3                                        |     
    0x0004e87e b 0x4e432                                         |     goto label_24;
                                                                 | label_76:
    0x0004e880 ldr r0, [sp, 0x74]                                |     r0 = var_74h;
    0x0004e882 subs r2, r5, 2                                    |     r2 = r5 - 2;
    0x0004e884 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0004e886 add r2, r0                                        |     r2 += r0;
    0x0004e888 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x0004e88a ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0004e88c ldr r5, [r2, 0x38]                                |     r5 = *((r2 + 0x38));
    0x0004e88e b 0x4e5a0                                         |     goto label_25;
                                                                 | label_86:
    0x0004e890 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0004e892 movs r6, 7                                        |     r6 = 7;
    0x0004e894 str r6, [sp, 0xa8]                                |     var_a8h = r6;
    0x0004e896 adds r3, 1                                        |     r3++;
    0x0004e898 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0004e89a b.w 0x4e026                                       |     goto label_9;
                                                                 |     if (r4 != 0) {
                                                                 | label_108:
    0x0004e8c4 cbnz r4, 0x4e8e2                                  |         goto label_113;
                                                                 |     }
    0x0004e8c6 ldrh.w r1, [r8]                                   |     r1 = *(r8);
    0x0004e8ca ldrh r3, [r7]                                     |     r3 = *(r7);
    0x0004e8cc add.w ip, r6, r1                                  |     
    0x0004e8d0 add.w r0, r3, sl                                  |     r0 = r3 + sl;
    0x0004e8d4 add.w ip, ip, 1                                   |     
    0x0004e8d8 sub.w r0, fp, r0                                  |     r0 = fp - r0;
    0x0004e8dc cmp ip, r0                                        |     
                                                                 |     if (ip < r0) {
    0x0004e8de blt.w 0x4e7bc                                     |         goto label_26;
                                                                 |     }
                                                                 | label_113:
    0x0004e8e2 mov r3, sb                                        |     r3 = sb;
    0x0004e8e4 mov sb, fp                                        |     sb = fp;
    0x0004e8e6 ldr r5, [r3]                                      |     r5 = *(r3);
    0x0004e8e8 mov fp, r3                                        |     
                                                                 | label_29:
    0x0004e8ea ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0004e8ec str r6, [r3]                                      |     *(r3) = r6;
    0x0004e8ee str sb, [r3, -0x4]!                               |     *((r3 -= 0x4)) = sb;
    0x0004e8f2 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0004e8f4 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0004e8f6 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004e8f8 beq 0x4e96e                                       |         goto label_114;
                                                                 |     }
    0x0004e8fa ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x0004e8fc sub.w fp, fp, 4                                   |     
    0x0004e900 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0004e902 ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x0004e906 subs r2, 1                                        |     r2--;
    0x0004e908 str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x0004e90a cmp r3, r5                                        |     
                                                                 |     if (r3 < r5) {
    0x0004e90c blt.w 0x4e75e                                     |         goto label_27;
                                                                 |     }
    0x0004e910 ldr r4, [sp, 0x70]                                |     r4 = var_70h;
    0x0004e912 ldr.w fp, [sp, 0x80]                              |     fp = var_80h;
                                                                 |     do {
    0x0004e916 blx 0xa230                                        |         fcn_0000a230 ();
    0x0004e91a ldr.w r2, [pc, 0x9f0]                             |         r2 = *(0x0004f30c);
    0x0004e91e adds r0, 0x14                                     |         r0 += 0x14;
    0x0004e920 ldr.w r1, [pc, 0x9ec]                             |         r1 = *(0x0004f310);
    0x0004e924 movw r3, 0x26ac                                   |         
    0x0004e928 str r0, [sp]                                      |         *(sp) = r0;
    0x0004e92a movt r3, 1                                        |         r3 = 0x126ac;
    0x0004e92e add r2, pc                                        |         r2 += pc;
    0x0004e930 movs r0, 0xb                                      |         r0 = 0xb;
    0x0004e932 add r1, pc                                        |         r1 += pc;
    0x0004e934 blx 0x9f00                                        |         fcn_00009f00 ();
    0x0004e938 b 0x4e816                                         |         goto label_28;
                                                                 | label_109:
    0x0004e93a mov r3, sb                                        |         r3 = sb;
    0x0004e93c mov sb, fp                                        |         sb = fp;
    0x0004e93e mov fp, r3                                        |         
    0x0004e940 b 0x4e8ea                                         |         goto label_29;
                                                                 | label_97:
    0x0004e942 ldrd r4, fp, [sp, 0x7c]                           |         __asm ("ldrd r4, fp, [var_7ch]");
    0x0004e946 blx 0xa230                                        |         fcn_0000a230 ();
    0x0004e94a ldr.w r2, [pc, 0x9c8]                             |         r2 = *(0x0004f314);
    0x0004e94e adds r0, 0x14                                     |         r0 += 0x14;
    0x0004e950 ldr.w r1, [pc, 0x9c4]                             |         r1 = *(0x0004f318);
    0x0004e954 movw r3, 0x25fc                                   |         
    0x0004e958 str r0, [sp]                                      |         *(sp) = r0;
    0x0004e95a movt r3, 1                                        |         r3 = 0x125fc;
    0x0004e95e add r2, pc                                        |         r2 += pc;
    0x0004e960 movs r0, 0xb                                      |         r0 = 0xb;
    0x0004e962 add r1, pc                                        |         r1 += pc;
    0x0004e964 blx 0x9f00                                        |         fcn_00009f00 ();
    0x0004e968 b 0x4e816                                         |         goto label_28;
                                                                 | label_110:
    0x0004e96a ldr r2, [sp, 0x60]                                |         r2 = var_60h;
    0x0004e96c b 0x4e85c                                         |         goto label_30;
                                                                 | label_114:
    0x0004e96e cmp r5, 0                                         |         
    0x0004e970 ldr r4, [sp, 0x70]                                |         r4 = var_70h;
    0x0004e972 ldr r3, [sp, 0x8c]                                |         r3 = var_8ch;
    0x0004e974 ldr.w fp, [sp, 0x80]                              |         fp = var_80h;
    0x0004e978 ble 0x4e916                                       |         
                                                                 |     } while (r5 <= 0);
                                                                 | label_107:
    0x0004e97a ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0004e97c add.w sb, sp, 0xe0                                |     sb += var_e0h;
    0x0004e980 ldr.w sl, [sp, 0x98]                              |     sl = var_98h;
    0x0004e984 movs r5, 0                                        |     r5 = 0;
    0x0004e986 mov r8, sb                                        |     r8 = sb;
    0x0004e988 mov r6, r3                                        |     r6 = r3;
    0x0004e98a ldr r2, [r2, 0x38]                                |     r2 = *((r2 + 0x38));
    0x0004e98c str.w sb, [sp, 0x80]                              |     __asm ("str.w sb, [var_80h]");
    0x0004e990 ldrb r2, [r2]                                     |     r2 = *(r2);
    0x0004e992 str r2, [sp, 0x60]                                |     var_60h = r2;
    0x0004e994 add r2, sp, 0xac                                  |     r2 += var_ach;
    0x0004e996 str r2, [sp, 0x70]                                |     var_70h = r2;
    0x0004e998 add r2, sp, 0xb0                                  |     r2 += var_b0h;
    0x0004e99a str r2, [sp, 0x88]                                |     var_88h = r2;
    0x0004e99c b 0x4e9e8                                         |     
                                                                 |     while (r3 == 0) {
    0x0004e99e ldr r3, [sp, 0xac]                                |         r3 = var_ach;
                                                                 | label_31:
    0x0004e9a0 movs r2, 0                                        |         r2 = 0;
    0x0004e9a2 ldr r1, [sp, 0x88]                                |         r1 = var_88h;
    0x0004e9a4 str r2, [sp]                                      |         *(sp) = r2;
    0x0004e9a6 ldr r0, [sp, 0x58]                                |         r0 = var_58h;
    0x0004e9a8 ldr r2, [sp, 0x70]                                |         r2 = var_70h;
    0x0004e9aa bl 0x4c088                                        |         fcn_0004c088 (r0, r1, r2, r3, r4);
    0x0004e9ae str r0, [sp, 0xa8]                                |         var_a8h = r0;
    0x0004e9b0 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0004e9b2 bne 0x4ea86                                       |             goto label_115;
                                                                 |         }
    0x0004e9b4 ldr r0, [sp, 0xb0]                                |         r0 = var_b0h;
    0x0004e9b6 adds r7, r5, 1                                    |         r7 = r5 + 1;
    0x0004e9b8 ldr r1, [sp, 0x60]                                |         r1 = var_60h;
    0x0004e9ba str r7, [sp, 0x5c]                                |         var_5ch = r7;
    0x0004e9bc str r0, [sp, 0x44]                                |         var_44h = r0;
    0x0004e9be bl 0x22368                                        |         fcn_00022368 (r0, r1);
    0x0004e9c2 ldrd r3, r2, [sp, 0x4c]                           |         __asm ("ldrd r3, r2, [var_4ch]");
    0x0004e9c6 ldr r0, [sp, 0x44]                                |         r0 = var_44h;
    0x0004e9c8 str.w r2, [r3, r5, lsl 2]                         |         __asm ("str.w r2, [r3, r5, lsl 2]");
    0x0004e9cc ldr r3, [sp, 0x58]                                |         r3 = var_58h;
    0x0004e9ce str.w r0, [r8]                                    |         __asm ("str.w r0, [r8]");
    0x0004e9d2 ldrb r3, [r3, 0x11]                               |         r3 = *((r3 + 0x11));
    0x0004e9d4 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0004e9d6 bne 0x4ea6e                                       |             goto label_116;
                                                                 |         }
                                                                 | label_32:
    0x0004e9d8 ldr r3, [sp, 0x7c]                                |         r3 = var_7ch;
    0x0004e9da add.w r8, r8, 4                                   |         r8 += var_4h_2;
    0x0004e9de add.w sl, sl, 4                                   |         sl += 4;
    0x0004e9e2 mov r5, r7                                        |         r5 = r7;
    0x0004e9e4 cmp r7, r3                                        |         
                                                                 |         if (r7 >= r3) {
    0x0004e9e6 bge 0x4ea9a                                       |             goto label_117;
                                                                 |         }
    0x0004e9e8 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x0004e9ea cmp r3, r5                                        |         
                                                                 |         if (r3 > r5) {
    0x0004e9ec bgt 0x4e9f8                                       |             goto label_118;
                                                                 |         }
    0x0004e9ee ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x0004e9f0 cmp r3, 0                                         |         
    0x0004e9f2 beq 0x4e99e                                       |         
                                                                 |     }
    0x0004e9f4 movs r3, 1                                        |     r3 = 1;
    0x0004e9f6 b 0x4e9a0                                         |     goto label_31;
                                                                 | label_118:
    0x0004e9f8 ldr.w r7, [sl]                                    |     r7 = *(sl);
    0x0004e9fc movs r3, 0                                        |     r3 = 0;
    0x0004e9fe str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x0004ea02 ldr r0, [r7, 0x48]                                |     r0 = *((r7 + 0x48));
    0x0004ea04 str.w r7, [r8]                                    |     __asm ("str.w r7, [r8]");
    0x0004ea08 str r7, [sp, 0xb0]                                |     var_b0h = r7;
    0x0004ea0a bl 0x4816c                                        |     fcn_0004816c (r0);
    0x0004ea0e ldr r2, [r7, 0x48]                                |     r2 = *((r7 + 0x48));
    0x0004ea10 mov r3, r0                                        |     r3 = r0;
    0x0004ea12 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0004ea14 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004ea16 ldrsh.w r0, [r2, 0x1e]                            |     r0 = *((r2 + 0x1e));
    0x0004ea1a ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0004ea1c subs r2, r2, r1                                   |     r2 -= r1;
    0x0004ea1e clz r1, r3                                        |     r1 &= r3;
    0x0004ea22 cmp r2, r5                                        |     
    0x0004ea24 ite eq                                            |     
                                                                 |     if (r2 != r5) {
    0x0004ea26 moveq r2, 2                                       |         r2 = 2;
                                                                 |     }
                                                                 |     if (r2 == r5) {
    0x0004ea28 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0004ea2a lsrs r1, r1, 5                                    |     r1 >>= 5;
    0x0004ea2c cmp r0, r2                                        |     
    0x0004ea2e it eq                                             |     
                                                                 |     if (r0 != r2) {
    0x0004ea30 moveq r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x0004ea32 adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x0004ea34 mov r7, r2                                        |     r7 = r2;
    0x0004ea36 str r2, [sp, 0x5c]                                |     var_5ch = r2;
                                                                 |     if (r1 != 0) {
    0x0004ea38 cbnz r1, 0x4ea46                                  |         goto label_119;
                                                                 |     }
                                                                 | label_34:
    0x0004ea3a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ea3c beq 0x4e9d8                                       |         goto label_32;
                                                                 |     }
    0x0004ea3e mov r6, r3                                        |     r6 = r3;
                                                                 |     do {
                                                                 | label_35:
    0x0004ea40 ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x0004ea42 str r3, [sp, 0x64]                                |         var_64h = r3;
    0x0004ea44 b 0x4e81a                                         |         goto label_33;
                                                                 | label_119:
    0x0004ea46 blx 0xa230                                        |         fcn_0000a230 ();
    0x0004ea4a ldr.w r2, [pc, 0x8d0]                             |         r2 = *(0x0004f31c);
    0x0004ea4e adds r0, 0x14                                     |         r0 += 0x14;
    0x0004ea50 ldr.w r1, [pc, 0x8cc]                             |         r1 = *(0x0004f320);
    0x0004ea54 movw r3, 0x26cd                                   |         
    0x0004ea58 str r0, [sp]                                      |         *(sp) = r0;
    0x0004ea5a movt r3, 1                                        |         r3 = 0x126cd;
    0x0004ea5e add r2, pc                                        |         r2 += pc;
    0x0004ea60 movs r0, 0xb                                      |         r0 = 0xb;
    0x0004ea62 add r1, pc                                        |         r1 += pc;
    0x0004ea64 movs r6, 0xb                                      |         r6 = 0xb;
    0x0004ea66 blx 0x9f00                                        |         fcn_00009f00 ();
    0x0004ea6a str r6, [sp, 0xa8]                                |         var_a8h = r6;
    0x0004ea6c b 0x4ea40                                         |         
                                                                 |     } while (1);
                                                                 | label_116:
    0x0004ea6e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004ea70 add r2, sp, 0xa8                                  |     r2 += var_a8h;
    0x0004ea72 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x0004ea74 ldr r0, [sp, 0x58]                                |     r0 = var_58h;
    0x0004ea76 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004ea78 str r2, [sp]                                      |     *(sp) = r2;
    0x0004ea7a movs r2, 5                                        |     r2 = 5;
    0x0004ea7c str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0004ea7e bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004ea82 ldr r3, [sp, 0xa8]                                |     r3 = var_a8h;
    0x0004ea84 b 0x4ea3a                                         |     goto label_34;
                                                                 | label_115:
    0x0004ea86 mov r6, r0                                        |     r6 = r0;
    0x0004ea88 str r5, [sp, 0x5c]                                |     var_5ch = r5;
    0x0004ea8a b 0x4ea40                                         |     goto label_35;
                                                                 | label_77:
    0x0004ea8c ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0004ea8e b 0x4e5a0                                         |     goto label_25;
                                                                 | label_78:
    0x0004ea90 ldrd r4, fp, [sp, 0x28]                           |     __asm ("ldrd r4, fp, [var_28h]");
    0x0004ea94 mov r6, r0                                        |     r6 = r0;
    0x0004ea96 b.w 0x4e010                                       |     goto label_36;
                                                                 | label_117:
    0x0004ea9a lsls r2, r7, 2                                    |     r2 = r7 << 2;
    0x0004ea9c mov r3, r6                                        |     r3 = r6;
    0x0004ea9e add r1, sp, 0x130                                 |     r1 += var_130h;
    0x0004eaa0 str r7, [sp, 0x40]                                |     var_40h = r7;
    0x0004eaa2 mov r0, r2                                        |     r0 = r2;
    0x0004eaa4 str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x0004eaa6 add r0, sb                                        |     r0 += sb;
    0x0004eaa8 mov r2, sb                                        |     r2 = sb;
                                                                 |     do {
    0x0004eaaa ldr r5, [r2], 4                                   |         r5 = *(r2);
                                                                 |         r2 += 4;
    0x0004eaae ldr r5, [r5, 4]                                   |         r5 = *((r5 + 4));
    0x0004eab0 cmp r0, r2                                        |         
    0x0004eab2 str r5, [r1], 4                                   |         *(r1) = r5;
                                                                 |         r1 += 4;
    0x0004eab6 bne 0x4eaaa                                       |         
                                                                 |     } while (r0 != r2);
    0x0004eab8 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0004eaba subs r2, 1                                        |     r2--;
    0x0004eabc str r2, [sp, 0x4c]                                |     var_4ch = r2;
                                                                 |     if (r2 == 1) {
    0x0004eabe beq 0x4eb82                                       |         goto label_120;
                                                                 |     }
    0x0004eac0 ldr.w r2, [pc, 0x860]                             |     
    0x0004eac4 mov r1, fp                                        |     r1 = fp;
    0x0004eac6 movs r7, 0                                        |     r7 = 0;
    0x0004eac8 mov fp, r3                                        |     
    0x0004eaca mov r3, r1                                        |     r3 = r1;
    0x0004eacc str.w sb, [sp, 0x44]                              |     __asm ("str.w sb, [var_44h]");
    0x0004ead0 add r2, pc                                        |     r2 = 0x9ddf8;
    0x0004ead2 str r4, [sp, 0x74]                                |     var_74h = r4;
    0x0004ead4 str r2, [sp, 0x70]                                |     var_70h = r2;
    0x0004ead6 mov r2, sb                                        |     r2 = sb;
                                                                 | label_37:
    0x0004ead8 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0004eada mov r4, r7                                        |     r4 = r7;
    0x0004eadc adds r7, 1                                        |     r7++;
    0x0004eade cmp r7, r1                                        |     
                                                                 |     if (r7 >= r1) {
    0x0004eae0 bge 0x4eb6c                                       |         goto label_121;
                                                                 |     }
    0x0004eae2 ldr r5, [sp, 0x44]                                |     r5 = var_44h;
    0x0004eae4 mov r1, r4                                        |     r1 = r4;
    0x0004eae6 mov r0, r7                                        |     r0 = r7;
                                                                 |     do {
    0x0004eae8 add r6, sp, 0x1a0                                 |         r6 += x;
    0x0004eaea add.w r6, r6, r1, lsl 2                           |         r6 += (r1 << 2);
    0x0004eaee ldr r6, [r6, -0xc0]                               |         r6 = var_e0h;
    0x0004eaf2 ldr.w ip, [r6, 4]                                 |         ip = *((r6 + 4));
    0x0004eaf6 ldr r6, [r5, 4]!                                  |         r6 = *((r5 += 4));
    0x0004eafa ldr r6, [r6, 4]                                   |         r6 = *((r6 + 4));
    0x0004eafc cmp ip, r6                                        |         
    0x0004eafe it hi                                             |         
                                                                 |         if (ip <= r6) {
    0x0004eb00 movhi r1, r0                                      |             r1 = r0;
                                                                 |         }
    0x0004eb02 ldr r6, [sp, 0x40]                                |         r6 = var_40h;
    0x0004eb04 adds r0, 1                                        |         r0++;
    0x0004eb06 cmp r6, r0                                        |         
    0x0004eb08 bne 0x4eae8                                       |         
                                                                 |     } while (r6 != r0);
    0x0004eb0a cmp r4, r1                                        |     
                                                                 |     if (r4 != r1) {
    0x0004eb0c beq 0x4eb6c                                       |         
    0x0004eb0e strd r3, r2, [sp, 0x88]                           |         __asm ("strd r3, r2, [var_88h]");
    0x0004eb12 add r3, sp, 0x1a0                                 |         r3 += x;
    0x0004eb14 add.w r1, r3, r1, lsl 2                           |         r1 = r3 + (r1 << 2);
    0x0004eb18 ldr r3, [sp, 0x58]                                |         r3 = var_58h;
    0x0004eb1a ldr r5, [r1, -0xc0]                               |         r5 = var_e0h;
    0x0004eb1e ldr r1, [r3, 0x24]                                |         r1 = *((r3 + 0x24));
    0x0004eb20 ldr r3, [sp, 0x70]                                |         r3 = var_70h;
    0x0004eb22 ldr.w r0, [r3, 0x118]                             |         r0 = *((r3 + 0x118));
    0x0004eb26 bl 0x8bf90                                        |         fcn_0008bf90 (r0, r1, r2);
    0x0004eb2a ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x0004eb2c adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x0004eb2e ldr r0, [r5, 0x48]                                |         r0 = *((r5 + 0x48));
    0x0004eb30 ldr r4, [r5, 4]                                   |         r4 = *((r5 + 4));
    0x0004eb32 ldr r6, [r3]                                      |         r6 = *(r3);
    0x0004eb34 ldrh.w r8, [r0, 0x1c]                             |         r8 = *((r0 + 0x1c));
    0x0004eb38 ldr r0, [r6, 0x48]                                |         r0 = *((r6 + 0x48));
    0x0004eb3a ldr.w sb, [r6, 4]                                 |         sb = *((r6 + 4));
    0x0004eb3e ldrh.w sl, [r0, 0x1c]                             |         sl = *((r0 + 0x1c));
    0x0004eb42 strh.w r8, [r0, 0x1c]                             |         *((r0 + 0x1c)) = r8;
    0x0004eb46 bl 0xb4ac                                         |         fcn_0000b4ac (r0, r1);
    0x0004eb4a ldr r0, [r5, 0x48]                                |         r0 = *((r5 + 0x48));
    0x0004eb4c mov r1, sb                                        |         r1 = sb;
    0x0004eb4e strh.w sl, [r0, 0x1c]                             |         *((r0 + 0x1c)) = sl;
    0x0004eb52 bl 0xb4ac                                         |         fcn_0000b4ac (r0, r1);
    0x0004eb56 ldr r0, [r6, 0x48]                                |         r0 = *((r6 + 0x48));
    0x0004eb58 mov r1, r4                                        |         r1 = r4;
    0x0004eb5a strh.w r8, [r0, 0x1c]                             |         *((r0 + 0x1c)) = r8;
    0x0004eb5e bl 0xb4ac                                         |         fcn_0000b4ac (r0, r1);
    0x0004eb62 ldrd r3, r2, [sp, 0x88]                           |         __asm ("ldrd r3, r2, [var_88h]");
    0x0004eb66 str r4, [r6, 4]                                   |         *((r6 + 4)) = r4;
    0x0004eb68 str.w sb, [r5, 4]                                 |         __asm ("str.w sb, [r5, 4]");
                                                                 |     }
                                                                 | label_121:
    0x0004eb6c ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x0004eb6e adds r1, 4                                        |     r1 += 4;
    0x0004eb70 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x0004eb72 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0004eb74 cmp r7, r1                                        |     
                                                                 |     if (r7 < r1) {
    0x0004eb76 blt 0x4ead8                                       |         goto label_37;
                                                                 |     }
    0x0004eb78 ldr r4, [sp, 0x74]                                |     r4 = var_74h;
    0x0004eb7a mov r1, r3                                        |     r1 = r3;
    0x0004eb7c mov sb, r2                                        |     sb = r2;
    0x0004eb7e mov r3, fp                                        |     r3 = fp;
    0x0004eb80 mov fp, r1                                        |     
                                                                 | label_120:
    0x0004eb82 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0004eb84 add r1, sp, 0x1a0                                 |     r1 += x;
    0x0004eb86 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0004eb88 ldr r6, [sp, 0x68]                                |     r6 = var_68h;
    0x0004eb8a eor r5, r2, 8                                     |     r5 = r2 ^ 8;
    0x0004eb8e ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0004eb90 add.w r2, r1, r2, lsl 2                           |     r2 = r1 + (r2 << 2);
    0x0004eb94 ldr r1, [r2, -0xc0]                               |     r1 = var_e0h;
    0x0004eb98 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004eb9a subs r0, r2, r0                                   |     r0 = r2 - r0;
    0x0004eb9c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004eb9e it ne                                             |     
                                                                 |     if (r0 == r2) {
    0x0004eba0 movne r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x0004eba2 ands.w r0, r0, r5, lsr 3                          |     r0 &= (r5 >> 3);
    0x0004eba6 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0004eba8 str r2, [r6]                                      |     *(r6) = r2;
                                                                 |     if (r0 != r0) {
    0x0004ebaa bne.w 0x4f2ae                                     |         goto label_122;
                                                                 |     }
                                                                 | label_60:
    0x0004ebae ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x0004ebb0 ldrb r2, [r2, 0x11]                               |     r2 = *((r2 + 0x11));
    0x0004ebb2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004ebb4 beq 0x4ec8a                                       |         goto label_123;
                                                                 |     }
    0x0004ebb6 ldr r7, [sp, 0xe0]                                |     r7 = var_e0h;
    0x0004ebb8 ldrh r1, [r7, 0x18]                               |     r1 = *((r7 + 0x18));
    0x0004ebba ldrb r2, [r7, 0xc]                                |     r2 = *((r7 + 0xc));
    0x0004ebbc adds r2, r1, r2                                   |     r2 = r1 + r2;
    0x0004ebbe str r2, [sp, 0x60]                                |     var_60h = r2;
    0x0004ebc0 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0004ebc2 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0004ebc4 ble 0x4ec8a                                       |         goto label_123;
                                                                 |     }
    0x0004ebc6 mov.w sl, 0                                       |     sl = 0;
    0x0004ebca add r2, sp, 0xa8                                  |     r2 += var_a8h;
    0x0004ebcc strd r2, r4, [sp, 0x70]                           |     __asm ("strd r2, r4, [var_74h]");
    0x0004ebd0 mov r5, sl                                        |     r5 = sl;
    0x0004ebd2 mov r8, r3                                        |     r8 = r3;
    0x0004ebd4 mov r4, r7                                        |     r4 = r7;
    0x0004ebd6 str.w sl, [sp, 0x44]                              |     __asm ("str.w sl, [var_44h]");
    0x0004ebda str.w sl, [sp, 0x68]                              |     __asm ("str.w sl, [var_68h]");
                                                                 | label_38:
    0x0004ebde ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0004ebe0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0004ebe2 cmp r5, r1                                        |     
    0x0004ebe4 ldr.w r6, [r3, r5, lsl 2]                         |     offset_15 = r5 << 2;
                                                                 |     r6 = *((r3 + offset_15));
                                                                 |     if (r5 != r1) {
    0x0004ebe8 bne 0x4ec2c                                       |         goto label_124;
                                                                 |     }
    0x0004ebea ldr r7, [sp, 0x34]                                |     r7 = var_34h;
    0x0004ebec add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x0004ebf0 lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x0004ebf2 mov ip, r1                                        |     
    0x0004ebf4 str r4, [sp, 0x60]                                |     var_60h = r4;
    0x0004ebf6 add.w r0, sb, r3                                  |     r0 = sb + r3;
    0x0004ebfa add r3, r7                                        |     r3 += r7;
    0x0004ebfc b 0x4ec00                                         |     
                                                                 |     while (ip == r5) {
    0x0004ebfe adds r2, 1                                        |         r2++;
    0x0004ec00 ldr r1, [sp, 0x40]                                |         r1 = var_40h;
    0x0004ec02 mov sl, r2                                        |         sl = r2;
    0x0004ec04 ldr r4, [sp, 0x90]                                |         r4 = var_90h;
    0x0004ec06 adds r0, 4                                        |         r0 += 4;
    0x0004ec08 adds r3, 4                                        |         r3 += 4;
    0x0004ec0a cmp r2, r1                                        |         
    0x0004ec0c ite lt                                            |         
                                                                 |         if (r2 >= r1) {
    0x0004ec0e ldrlt r7, [r0, -0x4]                              |             r7 = *((r0 - 0x4));
                                                                 |         }
                                                                 |         if (r2 >= r1) {
    0x0004ec12 ldr r7, [r3, -0x4]                                |             r7 = *((r3 - 0x4));
                                                                 |         }
    0x0004ec16 ldrh r1, [r7, 0x18]                               |         r1 = *((r7 + 0x18));
    0x0004ec18 ldrb.w lr, [r7, 0xc]                              |         
    0x0004ec1c add r1, lr                                        |         r1 += lr;
    0x0004ec1e add r1, r4                                        |         r1 += r4;
    0x0004ec20 add ip, r1                                        |         
    0x0004ec22 cmp ip, r5                                        |         
    0x0004ec24 beq 0x4ebfe                                       |         
                                                                 |     }
    0x0004ec26 ldr r4, [sp, 0x60]                                |     r4 = var_60h;
    0x0004ec28 str.w ip, [sp, 0x60]                              |     __asm ("str.w ip, [var_60h]");
                                                                 | label_124:
    0x0004ec2c ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0004ec2e add.w r3, r3, 0x1a0                               |     r3 += 0x1a0;
    0x0004ec32 add r3, sp, r3                                    |     r3 = sp + r3;
    0x0004ec34 ldr r3, [r3, -0xac]                               |     r3 = var_f4h;
    0x0004ec38 cmp r3, r5                                        |     
                                                                 |     if (r3 == r5) {
    0x0004ec3a beq.w 0x4f0b4                                     |         goto label_125;
                                                                 |     }
                                                                 | label_51:
    0x0004ec3e ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0004ec40 cmp r3, sl                                        |     
                                                                 |     if (r3 > sl) {
    0x0004ec42 ble 0x4ec56                                       |         
    0x0004ec44 add r3, sp, 0x1a0                                 |         r3 += x;
    0x0004ec46 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0004ec48 add.w r3, r3, sl, lsl 2                           |         r3 += (sl << 2);
    0x0004ec4c ldr r3, [r3, -0x70]                               |         r3 = var_130h;
    0x0004ec50 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x0004ec52 beq.w 0x4f08e                                     |             goto label_126;
                                                                 |         }
                                                                 |     }
                                                                 | label_48:
    0x0004ec56 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0004ec58 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ec5a beq.w 0x4f0a0                                     |         goto label_127;
                                                                 |     }
                                                                 | label_50:
    0x0004ec5e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004ec60 ldrh.w r0, [r3, r5, lsl 1]                        |     offset_16 = r5 << 1;
                                                                 |     r0 = *((r3 + offset_16));
                                                                 |     if (r0 == 0) {
    0x0004ec64 cbnz r0, 0x4ec6e                                  |         
    0x0004ec66 ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x0004ec68 mov r1, r5                                        |         r1 = r5;
    0x0004ec6a bl 0xbac8                                         |         fcn_0000bac8 (r0, r1, r2);
                                                                 |     }
    0x0004ec6e ldrh r2, [r4, 0x10]                               |     r2 = *((r4 + 0x10));
    0x0004ec70 cmp r2, r0                                        |     
                                                                 |     if (r2 <= r0) {
    0x0004ec72 blo.w 0x4f080                                     |         goto label_128;
                                                                 |     }
                                                                 | label_47:
    0x0004ec76 ldr r6, [sp, 0xa8]                                |     r6 = var_a8h;
    0x0004ec78 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004ec7a bne.w 0x4f06a                                     |         goto label_129;
                                                                 |     }
                                                                 | label_49:
    0x0004ec7e ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0004ec80 adds r5, 1                                        |     r5++;
    0x0004ec82 cmp r5, r3                                        |     
                                                                 |     if (r5 != r3) {
    0x0004ec84 bne 0x4ebde                                       |         goto label_38;
                                                                 |     }
    0x0004ec86 ldr r4, [sp, 0x74]                                |     r4 = var_74h;
    0x0004ec88 mov r3, r8                                        |     r3 = r8;
                                                                 | label_123:
    0x0004ec8a ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0004ec8c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004ec8e beq 0x4ed7a                                       |         goto label_130;
                                                                 |     }
    0x0004ec90 ldr r2, [sp, 0x16c]                               |     r2 = var_16ch;
    0x0004ec92 mov.w sl, 0                                       |     sl = 0;
    0x0004ec96 ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x0004ec98 mov r8, r3                                        |     r8 = r3;
    0x0004ec9a str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x0004ec9c sub.w r2, sb, 4                                   |     r2 -= var_dch;
    0x0004eca0 add r1, r2                                        |     r1 += r2;
    0x0004eca2 add r2, sp, 0xb0                                  |     r2 += var_b0h;
    0x0004eca4 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x0004eca6 str r2, [sp, 0x60]                                |     var_60h = r2;
                                                                 | label_39:
    0x0004eca8 ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x0004ecaa ldr r7, [sb], 4                                   |     r7 = *(sb);
                                                                 |     sb += 4;
    0x0004ecae ldr r6, [r3], 4                                   |     r6 = *(r3);
                                                                 |     r3 += 4;
    0x0004ecb2 ldrb.w ip, [r7, 8]                                |     ip = *((r7 + 8));
    0x0004ecb6 str r3, [sp, 0x94]                                |     var_94h = r3;
    0x0004ecb8 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0004ecba lsl.w lr, r6, 2                                   |     lr = r6 << 2;
    0x0004ecbe add.w r5, r3, sl                                  |     r5 = r3 + sl;
    0x0004ecc2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004ecc4 ldrh.w r0, [r3, r6, lsl 1]                        |     offset_17 = r6 << 1;
                                                                 |     r0 = *((r3 + offset_17));
    0x0004ecc8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0004ecca ldr.w r2, [r3, r6, lsl 2]                         |     offset_18 = r6 << 2;
                                                                 |     r2 = *((r3 + offset_18));
    0x0004ecce ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0004ecd0 adds r3, r0, r3                                   |     r3 = r0 + r3;
    0x0004ecd2 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x0004ecd6 beq.w 0x4efd4                                     |         goto label_131;
                                                                 |     }
    0x0004ecda ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0004ecdc cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004ecde beq.w 0x4efdc                                     |         goto label_132;
                                                                 |     }
    0x0004ece2 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0004ece4 mov r0, r7                                        |     r0 = r7;
    0x0004ece6 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0004ece8 subs r6, 1                                        |     r6--;
    0x0004ecea add.w r1, lr, r3                                  |     r1 = lr + r3;
    0x0004ecee ldr r3, [r7, 0x50]                                |     r3 = *((r7 + 0x50));
    0x0004ecf0 ldr r1, [r1, -0x4]                                |     r1 = *((r1 - 0x4));
    0x0004ecf4 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004ecf6 ldrd r2, r3, [sp, 0xb0]                           |     __asm ("ldrd r2, r3, [var_b0h]");
    0x0004ecfa cmp r2, 0x80                                      |     
    0x0004ecfc sbcs r1, r3, 0                                    |     __asm ("sbcs r1, r3, 0");
    0x0004ed00 itt lo                                            |     
                                                                 |     if (r2 >= 0x80) {
    0x0004ed02 movlo r3, 5                                       |         r3 = 5;
                                                                 |     }
                                                                 |     if (r2 >= 0x80) {
    0x0004ed04 strblo r2, [r5, 4]                                |         *((r5 + 4)) = r2;
                                                                 |     }
                                                                 |     if (r2 > 0x80) {
    0x0004ed06 blo 0x4ed1c                                       |         
    0x0004ed08 cmp.w r2, 0x4000                                  |         
    0x0004ed0c sbcs r1, r3, 0                                    |         __asm ("sbcs r1, r3, 0");
                                                                 |         if (r2 <= 0x4000) {
    0x0004ed10 blo.w 0x4f06e                                     |             goto label_133;
                                                                 |         }
    0x0004ed14 adds r0, r5, 4                                    |         r0 = r5 + 4;
    0x0004ed16 bl 0xae18                                         |         r0 = fcn_0000ae18 (r0, r1, r2);
    0x0004ed1a adds r3, r0, 4                                    |         r3 = r0 + 4;
                                                                 |     }
                                                                 | label_46:
    0x0004ed1c mov r2, r5                                        |     r2 = r5;
    0x0004ed1e movs r5, 0                                        |     r5 = 0;
                                                                 | label_44:
    0x0004ed20 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0004ed22 add sl, r3                                        |     sl += r3;
    0x0004ed24 cmp r6, r1                                        |     
    0x0004ed26 it lt                                             |     
                                                                 |     if (r6 >= r1) {
    0x0004ed28 movlt r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r6 < r1) {
    0x0004ed2a blt 0x4ed3a                                       |         goto label_134;
                                                                 |     }
    0x0004ed2c add r0, sp, 0x16c                                 |     r0 += var_16ch;
    0x0004ed2e movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x0004ed30 ldr ip, [r0, 4]!                                  |         ip = var_4h_3;
    0x0004ed34 adds r1, 1                                        |         r1++;
    0x0004ed36 cmp ip, r6                                        |         
    0x0004ed38 ble 0x4ed30                                       |         
                                                                 |     } while (ip <= r6);
                                                                 | label_134:
    0x0004ed3a add r0, sp, 0x1a0                                 |     r0 += x;
    0x0004ed3c add.w r1, r0, r1, lsl 2                           |     r1 = r0 + (r1 << 2);
    0x0004ed40 ldr r1, [r1, -0x4c]                               |     r1 = var_154h;
    0x0004ed44 cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x0004ed46 bhi 0x4ed50                                       |         
    0x0004ed48 adds r0, r2, r3                                   |         r0 = r2 + r3;
    0x0004ed4a cmp r1, r0                                        |         
                                                                 |         if (r1 <= r0) {
    0x0004ed4c blo.w 0x4eff6                                     |             goto label_135;
                                                                 |         }
                                                                 |     }
    0x0004ed50 add r1, sp, 0xa8                                  |     r1 += var_a8h;
    0x0004ed52 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004ed54 str r1, [sp, 8]                                   |     var_8h = r1;
    0x0004ed56 ldr r1, [r7, 4]                                   |     r1 = *((r7 + 4));
    0x0004ed58 strd r5, r1, [sp]                                 |     __asm ("strd r5, r1, [sp]");
    0x0004ed5c ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x0004ed5e mov r1, r5                                        |     r1 = r5;
    0x0004ed60 bl 0x4db08                                        |     fcn_0004db08 (r0, r1, r2, r3, r4, r5, r6);
    0x0004ed64 ldr r6, [sp, 0xa8]                                |     r6 = var_a8h;
    0x0004ed66 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004ed68 bne.w 0x4ea40                                     |         goto label_35;
                                                                 |     }
    0x0004ed6c mov r3, r5                                        |     r3 = r5;
    0x0004ed6e adds r3, 1                                        |     r3++;
    0x0004ed70 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004ed72 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0004ed74 cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x0004ed76 bne 0x4eca8                                       |         goto label_39;
                                                                 |     }
    0x0004ed78 mov r3, r8                                        |     r3 = r8;
                                                                 | label_130:
    0x0004ed7a ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0004ed7c str r4, [sp, 0x60]                                |     var_60h = r4;
    0x0004ed7e str r3, [sp, 0x94]                                |     var_94h = r3;
    0x0004ed80 rsb.w r2, r2, 1                                   |     r2 = 1 - r2;
    0x0004ed84 str.w fp, [sp, 0x68]                              |     __asm ("str.w fp, [var_68h]");
    0x0004ed88 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0004ed8a add r2, sp, 0xb0                                  |     r2 += var_b0h;
    0x0004ed8c str r2, [sp, 0x8c]                                |     var_8ch = r2;
                                                                 | label_42:
    0x0004ed8e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0004ed90 eor.w sl, r1, r1, asr 31                          |     sl = r1 ^ (r1 >> 31);
    0x0004ed94 sub.w sl, sl, r1, asr 31                          |     sl -= (r1 >> 31);
    0x0004ed98 add.w r3, sl, 0x1a0                               |     r3 = sl + 0x1a0;
    0x0004ed9c add r3, sp, r3                                    |     r3 = sp + r3;
    0x0004ed9e str r3, [sp, 0x88]                                |     var_88h = r3;
    0x0004eda0 ldrb r3, [r3, -0x1c]                              |     r3 = var_184h;
    0x0004eda4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004eda6 bne.w 0x4ef66                                     |         goto label_136;
                                                                 |     }
    0x0004edaa cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x0004edac blt.w 0x4f012                                     |         goto label_137;
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x0004edb0 bne.w 0x4f0d2                                     |         goto label_138;
                                                                 |     }
    0x0004edb4 ldr r4, [sp, 0xe0]                                |     r4 = var_e0h;
    0x0004edb6 ldr r7, [sp, 0xf4]                                |     r7 = var_f4h;
    0x0004edb8 ldr.w sb, [sp, 0x2c]                              |     sb = var_2ch;
    0x0004edbc ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x0004edbe ldrh r5, [r4, 0x18]                               |     r5 = *((r4 + 0x18));
    0x0004edc0 mov r8, r7                                        |     r8 = r7;
    0x0004edc2 ldr.w fp, [r4, 0x38]                              |     fp = *((r4 + 0x38));
    0x0004edc6 mov r6, sb                                        |     r6 = sb;
    0x0004edc8 add.w r3, r3, r7, lsl 1                           |     r3 += (r7 << 1);
    0x0004edcc str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004edce ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x0004edd0 add r3, r5                                        |     r3 += r5;
    0x0004edd2 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0004edd4 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x0004edd6 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 | label_52:
    0x0004edd8 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0004edda cmp r3, r8                                        |     
                                                                 |     if (r3 > r8) {
    0x0004eddc bgt.w 0x4f25c                                     |         goto label_139;
                                                                 |     }
                                                                 | label_58:
    0x0004ede0 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0004ede2 adds r3, r2, 5                                    |     r3 = r2 + 5;
    0x0004ede4 adds r2, 6                                        |     r2 += 6;
    0x0004ede6 ldrb.w r1, [fp, r3]                               |     r1 = *((fp + r3));
    0x0004edea add r3, fp                                        |     r3 += fp;
    0x0004edec str r3, [sp, 0x78]                                |     var_78h = r3;
    0x0004edee ldrb.w r3, [fp, r2]                               |     r3 = *((fp + r2));
    0x0004edf2 add r2, fp                                        |     r2 += fp;
    0x0004edf4 str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x0004edf6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0004edf8 orr.w r3, r3, r1, lsl 8                           |     r3 |= (r1 << 8);
    0x0004edfc subs r3, 1                                        |     r3--;
    0x0004edfe uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0004ee00 adds r3, 1                                        |     r3++;
    0x0004ee02 add r3, fp                                        |     r3 += fp;
    0x0004ee04 cmp r3, r2                                        |     
    0x0004ee06 str r3, [sp, 0xb0]                                |     var_b0h = r3;
                                                                 |     if (r3 <= r2) {
    0x0004ee08 blo.w 0x4f15e                                     |         goto label_55;
                                                                 |     }
    0x0004ee0c ldr r2, [r4, 0x3c]                                |     r2 = *((r4 + 0x3c));
    0x0004ee0e cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0004ee10 bhi.w 0x4f15e                                     |         goto label_55;
                                                                 |     }
    0x0004ee14 cmp r6, sb                                        |     
    0x0004ee16 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
                                                                 |     if (r6 < sb) {
    0x0004ee18 blt.w 0x4f1ea                                     |         goto label_140;
                                                                 |     }
    0x0004ee1c ldr r2, [sp, 0x8c]                                |     r2 = var_8ch;
                                                                 | label_56:
    0x0004ee1e ldrb r0, [r4, 0xc]                                |     r0 = *((r4 + 0xc));
    0x0004ee20 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ee22 beq 0x4ef0a                                       |         goto label_141;
                                                                 |     }
    0x0004ee24 add.w r1, r4, 0x1a                                |     r1 = r4 + 0x1a;
    0x0004ee28 mov.w r8, 0                                       |     r8 = 0;
    0x0004ee2c str r1, [sp, 0x44]                                |     var_44h = r1;
    0x0004ee2e str.w fp, [sp, 0x98]                              |     __asm ("str.w fp, [var_98h]");
    0x0004ee32 strd sl, r2, [sp, 0x70]                           |     __asm ("strd sl, r2, [var_74h]");
    0x0004ee36 b 0x4ee74                                         |     goto label_142;
                                                                 | label_40:
    0x0004ee38 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004ee3a adds r5, 1                                        |     r5++;
    0x0004ee3c ldrh.w r2, [r3, sl, lsl 1]                        |     offset_19 = sl << 1;
                                                                 |     r2 = *((r3 + offset_19));
                                                                 |     if (r2 != 0) {
    0x0004ee40 cbnz r2, 0x4ee4a                                  |         void (*0x4ee4a)() ();
                                                                 |     }
                                                                 |     do {
    0x0004ee6c add.w r8, r8, 1                                   |         r8++;
    0x0004ee70 cmp r8, r0                                        |         
                                                                 |         if (r8 >= r0) {
    0x0004ee72 bge 0x4ef02                                       |             goto label_143;
                                                                 |         }
                                                                 | label_142:
    0x0004ee74 ldr r2, [sp, 0x44]                                |         r2 = var_44h;
    0x0004ee76 ldrh sl, [r2, 2]!                                 |         sl = *((r2 += 2));
    0x0004ee7a add sl, sb                                        |         sl += sb;
    0x0004ee7c str r2, [sp, 0x44]                                |         var_44h = r2;
    0x0004ee7e sub.w r2, sl, r6                                  |         r2 = sl - r6;
    0x0004ee82 cmp r2, 0                                         |         
    0x0004ee84 it ge                                             |         
                                                                 |         if (r2 >= 0) {
    0x0004ee86 cmpge r7, r2                                      |             __asm ("cmpge r7, r2");
                                                                 |         }
    0x0004ee88 ble 0x4ee6c                                       |         
                                                                 |     } while (r2 <= 0);
    0x0004ee8a cmp r2, r5                                        |     
    0x0004ee8c add.w fp, r3, r2, lsl 1                           |     
                                                                 |     if (r2 >= r5) {
    0x0004ee90 bge 0x4ee38                                       |         goto label_40;
                                                                 |     }
    0x0004ee92 subs r2, r5, r2                                   |     r2 = r5 - r2;
    0x0004ee94 mov r1, fp                                        |     r1 = fp;
    0x0004ee96 lsls r2, r2, 1                                    |     r2 <<= 1;
    0x0004ee98 add.w r0, fp, 2                                   |     r0 += arg_2h;
    0x0004ee9c blx 0x9928                                        |     fcn_00009928 ();
    0x0004eea0 b 0x4ee38                                         |     goto label_40;
                                                                 | label_65:
    0x0004eea2 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_101:
    0x0004eea6 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004eea8 beq.w 0x4e068                                     |         goto label_19;
                                                                 |     }
                                                                 | label_104:
    0x0004eeac ldr r0, [r7, 0x48]                                |     r0 = *((r7 + 0x48));
    0x0004eeae bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004eeb2 b.w 0x4e068                                       |     goto label_19;
                                                                 | label_100:
    0x0004eeb6 blx 0xa230                                        |     fcn_0000a230 ();
    0x0004eeba ldr.w r2, [pc, 0x46c]                             |     r2 = *(0x0004f328);
    0x0004eebe adds r0, 0x14                                     |     r0 += 0x14;
    0x0004eec0 ldr.w r1, [pc, 0x468]                             |     r1 = *(0x0004f32c);
    0x0004eec4 movw r3, 0x243f                                   |     
    0x0004eec8 str r0, [sp]                                      |     *(sp) = r0;
    0x0004eeca movt r3, 1                                        |     r3 = 0x1243f;
    0x0004eece add r2, pc                                        |     r2 += pc;
    0x0004eed0 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004eed2 add r1, pc                                        |     r1 += pc;
    0x0004eed4 movs r6, 0xb                                      |     r6 = 0xb;
    0x0004eed6 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0004eeda b.w 0x4e068                                       |     goto label_19;
                                                                 | label_102:
    0x0004eede ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004eee0 add r5, sp, 0xa8                                  |     r5 += var_a8h;
    0x0004eee2 movs r2, 5                                        |     r2 = 5;
    0x0004eee4 str r5, [sp]                                      |     *(sp) = r5;
    0x0004eee6 mov r0, sb                                        |     r0 = sb;
    0x0004eee8 mov r1, r8                                        |     r1 = r8;
    0x0004eeea ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004eeec bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004eef0 ldrh r2, [r7, 0x10]                               |     r2 = *((r7 + 0x10));
    0x0004eef2 ldrh.w r3, [sp, 0xa2]                             |     r3 = var_a2h;
    0x0004eef6 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x0004eef8 blo.w 0x4f2ca                                     |         goto label_144;
                                                                 |     }
                                                                 | label_61:
    0x0004eefc ldr r6, [sp, 0xa8]                                |     r6 = var_a8h;
    0x0004eefe b.w 0x4e65a                                       |     goto label_41;
                                                                 | label_143:
    0x0004ef02 ldr.w fp, [sp, 0x98]                              |     fp = var_98h;
    0x0004ef06 ldrd sl, r2, [sp, 0x70]                           |     __asm ("ldrd sl, r2, [var_74h]");
                                                                 | label_141:
    0x0004ef0a ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0004ef0c add.w r3, r3, r5, lsl 1                           |     r3 += (r5 << 1);
    0x0004ef10 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0004ef12 str r0, [sp, 8]                                   |     var_8h = r0;
    0x0004ef14 subs r0, r7, r5                                   |     r0 = r7 - r5;
    0x0004ef16 add r5, r6                                        |     r5 += r6;
    0x0004ef18 str r0, [sp, 4]                                   |     var_4h = r0;
    0x0004ef1a str r5, [sp]                                      |     *(sp) = r5;
    0x0004ef1c mov r0, r4                                        |     r0 = r4;
    0x0004ef1e bl 0x23cb4                                        |     r0 = fcn_00023cb4 (r0, r1, r2, r3, r4, r5, r6);
    0x0004ef22 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ef24 bne.w 0x4f15e                                     |         goto label_55;
                                                                 |     }
    0x0004ef28 uxth r7, r7                                       |     r7 = (int16_t) r7;
    0x0004ef2a ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0004ef2c strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0004ef2e strh r7, [r4, 0x18]                               |     *((r4 + 0x18)) = r7;
    0x0004ef30 lsrs r7, r7, 8                                    |     r7 >>= 8;
    0x0004ef32 add r3, fp                                        |     r3 += fp;
    0x0004ef34 ldr r1, [sp, 0x78]                                |     r1 = var_78h;
    0x0004ef36 strb r7, [r3, 3]                                  |     *((r3 + 3)) = r7;
    0x0004ef38 ldrh r2, [r4, 0x18]                               |     r2 = *((r4 + 0x18));
    0x0004ef3a str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004ef3c strb r2, [r3, 4]                                  |     *((r3 + 4)) = r2;
    0x0004ef3e ldr r3, [sp, 0xb0]                                |     r3 = var_b0h;
    0x0004ef40 sub.w r3, r3, fp                                  |     r3 -= fp;
    0x0004ef44 asrs r2, r3, 8                                    |     r2 = r3 >> 8;
    0x0004ef46 strb r2, [r1]                                     |     *(r1) = r2;
    0x0004ef48 ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x0004ef4a strb r3, [r2]                                     |     *(r2) = r3;
                                                                 | label_53:
    0x0004ef4c ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x0004ef4e mov.w r2, 1                                       |     r2 = 1;
    0x0004ef52 strb r2, [r3, -0x1c]                              |     *((r3 - 0x1c)) = r2;
    0x0004ef56 add r3, sp, 0x1a0                                 |     r3 += x;
    0x0004ef58 add.w sl, r3, sl, lsl 2                           |     sl = r3 + (sl << 2);
    0x0004ef5c ldr r2, [sp, 0x84]                                |     r2 = var_84h;
    0x0004ef5e ldr r3, [sl, -0x84]                               |     r3 = var_11ch;
    0x0004ef62 subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x0004ef64 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
                                                                 | label_136:
    0x0004ef66 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004ef68 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0004ef6a adds r3, 1                                        |     r3++;
    0x0004ef6c cmp r3, r2                                        |     
    0x0004ef6e str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 |     if (r3 != r2) {
    0x0004ef70 bne.w 0x4ed8e                                     |         goto label_42;
                                                                 |     }
    0x0004ef74 ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x0004ef76 ldr r4, [sp, 0x60]                                |     r4 = var_60h;
    0x0004ef78 ldr.w fp, [sp, 0x68]                              |     fp = var_68h;
    0x0004ef7c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004ef7e bne 0x4ef92                                       |         
    0x0004ef80 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x0004ef82 ldrh r3, [r2, 0x18]                               |         r3 = *((r2 + 0x18));
                                                                 |         if (r3 != 0) {
    0x0004ef84 cbnz r3, 0x4ef92                                  |             goto label_145;
                                                                 |         }
    0x0004ef86 ldr r5, [sp, 0xe0]                                |         r5 = var_e0h;
    0x0004ef88 ldrb r2, [r2, 9]                                  |         r2 = *((r2 + 9));
    0x0004ef8a ldr r3, [r5, 0x14]                                |         r3 = *((r5 + 0x14));
    0x0004ef8c cmp r2, r3                                        |         
                                                                 |         if (r2 <= r3) {
    0x0004ef8e ble.w 0x4f226                                     |             goto label_146;
                                                                 |         }
                                                                 |     }
                                                                 | label_145:
    0x0004ef92 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0004ef94 ldrb r3, [r3, 0x11]                               |     r3 = *((r3 + 0x11));
                                                                 |     if (r3 != 0) {
    0x0004ef96 cbz r3, 0x4ef9e                                   |         
    0x0004ef98 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x0004ef9a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004ef9c beq 0x4f038                                       |             goto label_147;
                                                                 |         }
                                                                 |     }
    0x0004ef9e ldr r3, [sp, 0xa8]                                |     r3 = var_a8h;
                                                                 | label_57:
    0x0004efa0 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004efa2 mov r6, r3                                        |     r6 = r3;
    0x0004efa4 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0004efa6 cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x0004efa8 ble 0x4f032                                       |         goto label_148;
                                                                 |     }
                                                                 | label_45:
    0x0004efaa ldr r5, [sp, 0x40]                                |     r5 = var_40h;
    0x0004efac mov r6, r3                                        |     r6 = r3;
                                                                 |     if (r3 == 0) {
    0x0004efae cbz r3, 0x4efc0                                   |         goto label_149;
                                                                 |     }
                                                                 | label_43:
    0x0004efb0 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0004efb2 cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x0004efb4 bge.w 0x4ea40                                     |         goto label_35;
                                                                 |     }
    0x0004efb8 movs r5, 2                                        |     r5 = 2;
    0x0004efba cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004efbc bne.w 0x4ea40                                     |         goto label_35;
                                                                 |     }
                                                                 | label_149:
    0x0004efc0 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0004efc2 ldr.w r1, [r3, r5, lsl 2]                         |     offset_20 = r5 << 2;
                                                                 |     r1 = *((r3 + offset_20));
    0x0004efc6 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004efc8 ldr r0, [r1, 0x34]                                |     r0 = *((r1 + 0x34));
    0x0004efca bl 0x4d63c                                        |     r0 = fcn_0004d63c (r0, r1, r2, r3);
    0x0004efce mov r6, r0                                        |     r6 = r0;
    0x0004efd0 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004efd2 b 0x4efb0                                         |     goto label_43;
                                                                 | label_131:
    0x0004efd4 ldr r1, [r7, 0x38]                                |     r1 = *((r7 + 0x38));
    0x0004efd6 ldr r0, [r2]                                      |     r0 = *(r2);
    0x0004efd8 str r0, [r1, 8]                                   |     *((r1 + 8)) = r0;
    0x0004efda b 0x4ed20                                         |     goto label_44;
                                                                 | label_132:
    0x0004efdc cmp r0, 4                                         |     
    0x0004efde sub.w r2, r2, 4                                   |     r2 -= 4;
                                                                 |     if (r0 != 4) {
    0x0004efe2 bne.w 0x4ed20                                     |         goto label_44;
                                                                 |     }
    0x0004efe6 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004efe8 mov r1, r2                                        |     r1 = r2;
    0x0004efea str r2, [sp, 0x68]                                |     var_68h = r2;
    0x0004efec ldr r3, [r0, 0x4c]                                |     r3 = *((r0 + 0x4c));
    0x0004efee blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004eff0 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0004eff2 mov r3, r0                                        |     r3 = r0;
    0x0004eff4 b 0x4ed20                                         |     goto label_44;
                                                                 | label_135:
    0x0004eff6 ldr r2, [pc, 0x338]                               |     
    0x0004eff8 movw r1, 0x2795                                   |     
    0x0004effc movt r1, 1                                        |     r1 = 0x12795;
    0x0004f000 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004f002 add r2, pc                                        |     r2 = 0x9e338;
    0x0004f004 bl 0x21098                                        |     r0 = fcn_00021098 (r0, r1, r2);
    0x0004f008 mov r6, r0                                        |     r6 = r0;
                                                                 | label_54:
    0x0004f00a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0004f00c str r6, [sp, 0xa8]                                |     var_a8h = r6;
    0x0004f00e str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0004f010 b 0x4e81a                                         |     goto label_33;
                                                                 | label_137:
    0x0004f012 add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x0004f016 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0004f018 add.w r2, r3, 0x1a0                               |     r2 = r3 + 0x1a0;
    0x0004f01c add r2, sp, r2                                    |     r2 = sp + r2;
    0x0004f01e ldr r6, [r2, -0xac]                               |     r6 = var_ach_2;
    0x0004f022 ldr r2, [r2, -0x98]                               |     r2 = var_98h_2;
    0x0004f026 cmp r6, r2                                        |     
                                                                 |     if (r6 <= r2) {
    0x0004f028 ble 0x4f0e2                                       |         goto label_150;
                                                                 |     }
    0x0004f02a mov r2, r1                                        |     r2 = r1;
    0x0004f02c adds r2, 1                                        |     r2++;
    0x0004f02e str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0004f030 b 0x4ed8e                                         |     goto label_42;
                                                                 | label_148:
    0x0004f032 str r1, [sp, 0x64]                                |     var_64h = r1;
    0x0004f034 b.w 0x4e81a                                       |     goto label_33;
                                                                 | label_147:
    0x0004f038 ldr r6, [sp, 0x64]                                |     r6 = var_64h;
    0x0004f03a add r5, sp, 0xa8                                  |     r5 += var_a8h;
    0x0004f03c ldr r7, [sp, 0x80]                                |     r7 = var_80h;
                                                                 |     do {
    0x0004f03e ldr r3, [r7], 4                                   |         r3 = *(r7);
                                                                 |         r7 += 4;
    0x0004f042 movs r2, 5                                        |         r2 = 5;
    0x0004f044 ldr r0, [sp, 0x58]                                |         r0 = var_58h;
    0x0004f046 adds r6, 1                                        |         r6++;
    0x0004f048 ldr r1, [r3, 0x38]                                |         r1 = *((r3 + 0x38));
    0x0004f04a ldr r1, [r1, 8]                                   |         r1 = *((r1 + 8));
    0x0004f04c str r5, [sp]                                      |         *(sp) = r5;
    0x0004f04e ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004f050 rev r1, r1                                        |         r1 = SWAP32 (r1);
    0x0004f052 bl 0x4c6ec                                        |         fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004f056 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0004f058 cmp r6, r3                                        |         
    0x0004f05a bne 0x4f03e                                       |         
                                                                 |     } while (r6 != r3);
    0x0004f05c ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004f05e ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0004f060 ldr r3, [sp, 0xa8]                                |     r3 = var_a8h;
    0x0004f062 cmp r2, r1                                        |     
    0x0004f064 mov r6, r3                                        |     r6 = r3;
                                                                 |     if (r2 > r1) {
    0x0004f066 bgt 0x4efaa                                       |         goto label_45;
                                                                 |     }
    0x0004f068 b 0x4ea40                                         |     goto label_35;
                                                                 | label_129:
    0x0004f06a ldr r4, [sp, 0x74]                                |     r4 = var_74h;
    0x0004f06c b 0x4ea40                                         |     goto label_35;
                                                                 | label_133:
    0x0004f06e lsrs r3, r2, 7                                    |     r3 = r2 >> 7;
    0x0004f070 and r2, r2, 0x7f                                  |     r2 &= 0x7f;
    0x0004f074 strb r2, [r5, 5]                                  |     *((r5 + 5)) = r2;
    0x0004f076 orn r3, r3, 0x7f                                  |     r3 |= 0x7f;
                                                                 |     r3 = ~r3;
    0x0004f07a strb r3, [r5, 4]                                  |     *((r5 + 4)) = r3;
    0x0004f07c movs r3, 6                                        |     r3 = 6;
    0x0004f07e b 0x4ed1c                                         |     goto label_46;
                                                                 | label_128:
    0x0004f080 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0004f082 mov r2, r6                                        |     r2 = r6;
    0x0004f084 mov r1, r7                                        |     r1 = r7;
    0x0004f086 mov r0, r4                                        |     r0 = r4;
    0x0004f088 bl 0x4c86c                                        |     fcn_0004c86c (r0, r1, r2, r3);
    0x0004f08c b 0x4ec76                                         |     goto label_47;
                                                                 | label_126:
    0x0004f08e ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x0004f090 cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x0004f092 bhi.w 0x4ec56                                     |         goto label_48;
                                                                 |     }
    0x0004f096 ldr r3, [r7, 0x3c]                                |     r3 = *((r7 + 0x3c));
    0x0004f098 cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x0004f09a bhi.w 0x4ec7e                                     |         goto label_49;
                                                                 |     }
    0x0004f09e b 0x4ec56                                         |     goto label_48;
                                                                 | label_127:
    0x0004f0a0 ldr r1, [r6]                                      |     r1 = *(r6);
    0x0004f0a2 ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x0004f0a4 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004f0a6 ldr r0, [sp, 0x58]                                |     r0 = var_58h;
    0x0004f0a8 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x0004f0aa str r2, [sp]                                      |     *(sp) = r2;
    0x0004f0ac movs r2, 5                                        |     r2 = 5;
    0x0004f0ae bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x0004f0b2 b 0x4ec5e                                         |     goto label_50;
                                                                 | label_125:
    0x0004f0b4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0004f0b6 adds r3, 1                                        |     r3++;
    0x0004f0b8 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0004f0ba lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0004f0bc str r3, [sp, 0x68]                                |     var_68h = r3;
    0x0004f0be add.w r3, r3, 0x1a0                               |     r3 += 0x1a0;
    0x0004f0c2 add r3, sp, r3                                    |     r3 = sp + r3;
    0x0004f0c4 ldr r4, [r3, -0xc0]                               |     r4 = var_4h_2;
    0x0004f0c8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004f0ca cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f0cc bne.w 0x4ec3e                                     |         goto label_51;
                                                                 |     }
    0x0004f0d0 b 0x4ec7e                                         |     goto label_49;
                                                                 | label_138:
    0x0004f0d2 add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x0004f0d6 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0004f0d8 add.w r2, r3, 0x1a0                               |     r2 = r3 + 0x1a0;
    0x0004f0dc add r2, sp, r2                                    |     r2 = sp + r2;
    0x0004f0de ldr r6, [r2, -0xac]                               |     r6 = var_ach_2;
                                                                 | label_150:
    0x0004f0e2 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004f0e4 cmp r2, sl                                        |     
    0x0004f0e6 ittte gt                                          |     
                                                                 |     if (r2 <= sl) {
    0x0004f0e8 addgt r3, r3, 0x1a0                               |         r3 += 0x1a0;
                                                                 |     }
                                                                 |     if (r2 <= sl) {
    0x0004f0ec ldrgt r2, [sp, 0x90]                              |         r2 = var_90h;
                                                                 |     }
                                                                 |     if (r2 > sl) {
    0x0004f0ee addle r3, sp, r3                                  |         r3 = sp + r3;
                                                                 |     }
                                                                 |     if (r2 <= sl) {
    0x0004f0f0 ldr.w sb, [sp, 0x50]                              |         sb = var_50h;
                                                                 |     }
    0x0004f0f4 itt gt                                            |     
                                                                 |     if (r2 <= sl) {
    0x0004f0f6 ldrgt r3, [r3, -0x98]                             |         r3 = *((r3 - 0x98));
                                                                 |     }
                                                                 |     if (r2 > sl) {
    0x0004f0fa add.w sb, r2, r3                                  |         sb = r2 + r3;
                                                                 |     }
    0x0004f0fe ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x0004f100 add r6, r3                                        |     r6 += r3;
    0x0004f102 add r3, sp, 0x1a0                                 |     r3 += x;
    0x0004f104 add.w r3, r3, sl, lsl 2                           |     r3 += (sl << 2);
    0x0004f108 cmp r6, sb                                        |     
    0x0004f10a ldr r4, [r3, -0xc0]                               |     r4 = var_e0h;
    0x0004f10e ldr r8, [r3, -0xac]                               |     r8 = var_f4h;
    0x0004f112 ldr r2, [r4, 0x40]                                |     r2 = *((r4 + 0x40));
    0x0004f114 ldrh r5, [r4, 0x18]                               |     r5 = *((r4 + 0x18));
    0x0004f116 sub.w r7, r8, r6                                  |     r7 = r8 - r6;
    0x0004f11a ldrb r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x0004f11c ldr.w fp, [r4, 0x38]                              |     fp = *((r4 + 0x38));
    0x0004f120 add.w r2, r2, r7, lsl 1                           |     r2 += (r7 << 1);
    0x0004f124 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x0004f126 add.w r2, sb, r5                                  |     r2 = sb + r5;
    0x0004f12a add r3, r2                                        |     r3 += r2;
    0x0004f12c str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0004f12e ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x0004f130 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 |     if (r6 <= sb) {
    0x0004f132 ble.w 0x4edd8                                     |         goto label_52;
                                                                 |     }
    0x0004f136 mov r1, sb                                        |     r1 = sb;
    0x0004f138 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0004f13a sub.w r2, r6, sb                                  |     r2 = r6 - sb;
    0x0004f13e mov r0, r4                                        |     r0 = r4;
    0x0004f140 bl 0x30394                                        |     r0 = fcn_00030394 (r0, r1, r2, r3);
    0x0004f144 cmp r5, r0                                        |     
    0x0004f146 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r5 < r0) {
    0x0004f148 blt 0x4f1ba                                       |         goto label_151;
                                                                 |     }
    0x0004f14a ldr r0, [r4, 0x40]                                |     r0 = *((r4 + 0x40));
    0x0004f14c lsls r2, r5, 1                                    |     r2 = r5 << 1;
    0x0004f14e subs r5, r5, r1                                   |     r5 -= r1;
    0x0004f150 add.w r1, r0, r1, lsl 1                           |     r1 = r0 + (r1 << 1);
    0x0004f154 blx 0x9928                                        |     fcn_00009928 ();
    0x0004f158 b 0x4edd8                                         |     goto label_52;
                                                                 | label_55:
    0x0004f15e cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x0004f160 ble 0x4f190                                       |         goto label_152;
                                                                 |     }
    0x0004f162 ldr r5, [sp, 0x150]                               |     r5 = var_150h;
    0x0004f164 adds r3, r7, r6                                   |     r3 = r7 + r6;
    0x0004f166 lsl.w r8, r6, 2                                   |     r8 = r6 << 2;
    0x0004f16a add.w sb, r5, r3, lsl 1                           |     sb = r5 + (r3 << 1);
    0x0004f16e add.w r5, r5, r6, lsl 1                           |     r5 += (r6 << 1);
                                                                 |     do {
    0x0004f172 ldrh r3, [r5], 2                                  |         r3 = *(r5);
                                                                 |         r5 += 2;
                                                                 |         if (r3 == 0) {
    0x0004f176 cbnz r3, 0x4f188                                  |             
    0x0004f178 ldrd r0, r3, [sp, 0x148]                          |             __asm ("ldrd r0, r3, [var_14ch]");
    0x0004f17c ldr.w r1, [r3, r8]                                |             r1 = *((r3 + r8));
    0x0004f180 ldr r3, [r0, 0x4c]                                |             r3 = *((r0 + 0x4c));
    0x0004f182 blx r3                                            |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004f184 strh r0, [r5, -0x2]                               |             *((r5 - 0x2)) = r0;
                                                                 |         }
    0x0004f188 cmp r5, sb                                        |         
    0x0004f18a add.w r8, r8, 4                                   |         r8 += 4;
    0x0004f18e bne 0x4f172                                       |         
                                                                 |     } while (r5 != sb);
                                                                 | label_152:
    0x0004f190 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0004f192 mov r2, r7                                        |     r2 = r7;
    0x0004f194 mov r1, r6                                        |     r1 = r6;
    0x0004f196 mov r3, r4                                        |     r3 = r4;
    0x0004f198 bl 0x23590                                        |     fcn_00023590 (r0, r1, r2, r3, r4);
    0x0004f19c str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004f19e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f1a0 beq.w 0x4ef4c                                     |         goto label_53;
                                                                 |     }
    0x0004f1a4 ldr r3, [sp, 0x14c]                               |     r3 = var_14ch;
    0x0004f1a6 mov r6, r0                                        |     r6 = r0;
    0x0004f1a8 ldr r4, [sp, 0x60]                                |     r4 = var_60h;
    0x0004f1aa ldr.w fp, [sp, 0x68]                              |     fp = var_68h;
    0x0004f1ae str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     if (r3 == 0) {
    0x0004f1b0 cbnz r3, 0x4f1e2                                  |         
    0x0004f1b2 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0004f1b4 str r3, [sp, 0x64]                                |         var_64h = r3;
    0x0004f1b6 b.w 0x4e026                                       |         goto label_9;
                                                                 | label_151:
    0x0004f1ba ldr r4, [sp, 0x60]                                |         r4 = var_60h;
    0x0004f1bc movs r6, 0xb                                      |         r6 = 0xb;
    0x0004f1be ldr.w fp, [sp, 0x68]                              |         fp = var_68h;
    0x0004f1c2 blx 0xa230                                        |         fcn_0000a230 ();
    0x0004f1c6 ldr r2, [pc, 0x16c]                               |         
    0x0004f1c8 adds r0, 0x14                                     |         r0 += 0x14;
    0x0004f1ca ldr r1, [pc, 0x16c]                               |         
    0x0004f1cc movw r3, 0x23ce                                   |         
    0x0004f1d0 str r0, [sp]                                      |         *(sp) = r0;
    0x0004f1d2 movt r3, 1                                        |         r3 = 0x123ce;
    0x0004f1d6 add r2, pc                                        |         r2 = 0x9e510;
    0x0004f1d8 movs r0, 0xb                                      |         r0 = 0xb;
    0x0004f1da add r1, pc                                        |         r1 = 0x9e518;
    0x0004f1dc blx 0x9f00                                        |         fcn_00009f00 ();
    0x0004f1e0 b 0x4f00a                                         |         goto label_54;
                                                                 |     }
    0x0004f1e2 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0004f1e4 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0004f1e6 b.w 0x4e81a                                       |     goto label_33;
                                                                 | label_140:
    0x0004f1ea sub.w r8, sb, r6                                  |     r8 = sb - r6;
    0x0004f1ee mov r1, r3                                        |     r1 = r3;
    0x0004f1f0 cmp r8, r7                                        |     
    0x0004f1f2 lsl.w r2, r5, 1                                   |     r2 = r5 << 1;
    0x0004f1f6 it ge                                             |     
                                                                 |     if (r8 < r7) {
    0x0004f1f8 movge r8, r7                                      |         r8 = r7;
                                                                 |     }
    0x0004f1fa str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0004f1fc add.w r0, r3, r8, lsl 1                           |     r0 = r3 + (r8 << 1);
    0x0004f200 blx 0x9928                                        |     fcn_00009928 ();
    0x0004f204 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0004f206 mov r0, r4                                        |     r0 = r4;
    0x0004f208 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0004f20a ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0004f20c strd r8, r2, [sp, 4]                              |     __asm ("strd r8, r2, [var_8h]");
    0x0004f210 add r2, sp, 0xb0                                  |     r2 += var_b0h;
    0x0004f212 str r6, [sp]                                      |     *(sp) = r6;
    0x0004f214 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0004f216 bl 0x23cb4                                        |     r0 = fcn_00023cb4 (r0, r1, r2, r3, r4, r5, r6);
    0x0004f21a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f21c bne 0x4f15e                                       |         goto label_55;
                                                                 |     }
    0x0004f21e ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x0004f220 add r5, r8                                        |     r5 += r8;
    0x0004f222 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0004f224 b 0x4ee1e                                         |     goto label_56;
                                                                 | label_146:
    0x0004f226 mov.w r1, -1                                      |     r1 = -1;
    0x0004f22a mov r0, r5                                        |     r0 = r5;
    0x0004f22c bl 0x31f44                                        |     r0 = fcn_00031f44 (r0, r1);
    0x0004f230 mov r3, r0                                        |     r3 = r0;
    0x0004f232 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004f234 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f236 bne.w 0x4efa0                                     |         goto label_57;
                                                                 |     }
    0x0004f23a ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0004f23c add r2, sp, 0xa8                                  |     r2 += var_a8h;
    0x0004f23e mov r0, r5                                        |     r0 = r5;
    0x0004f240 bl 0x4c9e4                                        |     fcn_0004c9e4 (r0, r1, r2);
    0x0004f244 ldr r3, [sp, 0xa8]                                |     r3 = var_a8h;
    0x0004f246 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f248 bne.w 0x4efa0                                     |         goto label_57;
                                                                 |     }
    0x0004f24c ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x0004f24e mov r1, r5                                        |     r1 = r5;
    0x0004f250 ldr r0, [r5, 0x34]                                |     r0 = *((r5 + 0x34));
    0x0004f252 bl 0x4d63c                                        |     r0 = fcn_0004d63c (r0, r1, r2, r3);
    0x0004f256 mov r3, r0                                        |     r3 = r0;
    0x0004f258 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0004f25a b 0x4efa0                                         |     goto label_57;
                                                                 | label_139:
    0x0004f25c sub.w r2, r3, r8                                  |     r2 = r3 - r8;
    0x0004f260 mov r1, r8                                        |     r1 = r8;
    0x0004f262 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0004f264 mov r0, r4                                        |     r0 = r4;
    0x0004f266 bl 0x30394                                        |     r0 = fcn_00030394 (r0, r1, r2, r3);
    0x0004f26a subs r5, r5, r0                                   |     r5 -= r0;
    0x0004f26c b 0x4ede0                                         |     goto label_58;
                                                                 | label_112:
    0x0004f26e ldr r4, [sp, 0x7c]                                |     r4 = var_7ch;
    0x0004f270 add.w r0, sb, -1                                  |     r0 = sb + -1;
    0x0004f274 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x0004f276 ldr.w fp, [sp, 0x80]                              |     fp = var_80h;
    0x0004f27a ldr.w sl, [sp, 0x8c]                              |     sl = var_8ch;
    0x0004f27e str.w sb, [sp, 0x7c]                              |     __asm ("str.w sb, [var_7ch]");
    0x0004f282 str r6, [sp, 0x50]                                |     var_50h = r6;
    0x0004f284 b.w 0x4e73a                                       |     goto label_59;
                                                                 | label_111:
    0x0004f288 ldrd r4, fp, [sp, 0x7c]                           |     __asm ("ldrd r4, fp, [var_7ch]");
    0x0004f28c blx 0xa230                                        |     fcn_0000a230 ();
    0x0004f290 ldr r2, [pc, 0xa8]                                |     
    0x0004f292 adds r0, 0x14                                     |     r0 += 0x14;
    0x0004f294 ldr r1, [pc, 0xa8]                                |     
    0x0004f296 movw r3, 0x2682                                   |     
    0x0004f29a str r0, [sp]                                      |     *(sp) = r0;
    0x0004f29c movt r3, 1                                        |     r3 = 0x12682;
    0x0004f2a0 add r2, pc                                        |     r2 = 0x9e5e0;
    0x0004f2a2 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004f2a4 add r1, pc                                        |     r1 = 0x9e5e8;
    0x0004f2a6 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0004f2aa b.w 0x4e816                                       |     goto label_28;
                                                                 | label_122:
    0x0004f2ae ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004f2b0 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0004f2b2 ldr r1, [r1, 0x38]                                |     r1 = *((r1 + 0x38));
    0x0004f2b4 cmp r2, r0                                        |     
    0x0004f2b6 ldr r0, [sp, 0x78]                                |     r0 = var_78h;
    0x0004f2b8 ite ge                                            |     
                                                                 |     if (r2 < r0) {
    0x0004f2ba addge r2, sp, 0xd0                                |         r2 += var_d0h;
                                                                 |     }
                                                                 |     if (r2 >= r0) {
    0x0004f2bc addlt r2, sp, 0xdc                                |         r2 += var_dch;
                                                                 |     }
    0x0004f2be add r2, r0                                        |     r2 += r0;
    0x0004f2c0 ldr r2, [r2, 4]                                   |     r2 = var_d4h;
    0x0004f2c2 ldr r2, [r2, 0x38]                                |     r2 = *((r2 + 0x38));
    0x0004f2c4 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004f2c6 str r2, [r1, 8]                                   |     *((r1 + 8)) = r2;
    0x0004f2c8 b 0x4ebae                                         |     goto label_60;
                                                                 | label_144:
    0x0004f2ca ldr r2, [sp, 0xb0]                                |     r2 = var_b0h;
    0x0004f2cc mov r3, r5                                        |     r3 = r5;
    0x0004f2ce mov r1, r7                                        |     r1 = r7;
    0x0004f2d0 mov r0, r7                                        |     r0 = r7;
    0x0004f2d2 bl 0x4c86c                                        |     fcn_0004c86c (r0, r1, r2, r3);
    0x0004f2d6 b 0x4eefc                                         |     goto label_61;
                                                                 | label_85:
    0x0004f2d8 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0004f2da movs r3, 0                                        |     r3 = 0;
    0x0004f2dc str r3, [r2, 0x7c]                                |     *((r2 + 0x7c)) = r3;
    0x0004f2de cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004f2e0 beq.w 0x4dde8                                     |         goto label_0;
                                                                 |     }
    0x0004f2e4 ldr r0, [r5, 0x48]                                |     r0 = *((r5 + 0x48));
    0x0004f2e6 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004f2ea b.w 0x4dde8                                       |     goto label_0;
                                                                 | label_103:
    0x0004f2ee ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004f2f0 add r5, sp, 0xa8                                  |     r5 += var_a8h;
    0x0004f2f2 ldrh r1, [r0, 0x18]                               |     r1 = *((r0 + 0x18));
    0x0004f2f4 str r5, [sp, 8]                                   |     var_8h = r5;
    0x0004f2f6 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0004f2f8 strd r6, r2, [sp]                                 |     __asm ("strd r6, r2, [sp]");
    0x0004f2fc add r2, sp, 0x18c                                 |     r2 += var_18ch;
    0x0004f2fe subs r3, r3, r2                                   |     r3 -= r2;
    0x0004f300 bl 0x4db08                                        |     fcn_0004db08 (r0, r1, r2, r3, r4, r5, r6);
    0x0004f304 ldr r6, [sp, 0xa8]                                |     r6 = var_a8h;
    0x0004f306 b.w 0x4e6ae                                       |     goto label_62;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4f504 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                     |                                ((n & 0x0000ff00) <<  8) | \
                                                                     |                                ((n & 0x00ff0000) >>  8) | \
                                                                     |                                ((n & 0xff000000) >> 24)))
                                                                     |  
    ; (fcn) fcn.0004f504 ()                                          | void fcn_0004f504 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     int32_t var_0h;
                                                                     |     int32_t var_0h_2;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     arithmetic x;
                                                                     |     int32_t var_10h_2;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0004f504 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0004f508 sub sp, 0x24                                          |     
    0x0004f50a ldr r6, [pc, 0x338]                                   |     
    0x0004f50c ldr r5, [pc, 0x338]                                   |     r5 = *(0x4f848);
    0x0004f50e ldrb r3, [r0, 0x11]                                   |     r3 = *(arg_0hx11);
    0x0004f510 add r6, pc                                            |     r6 = 0x9ed5a;
    0x0004f512 ldr r5, [r6, r5]                                      |     
    0x0004f514 cmp r3, 2                                             |     
    0x0004f516 ldr r5, [r5]                                          |     r5 = *(0x9ed5a);
    0x0004f518 str r5, [sp, 0x1c]                                    |     var_1ch = r5;
    0x0004f51a mov.w r5, 0                                           |     r5 = 0;
                                                                     |     if (r3 < 2) {
    0x0004f51e bls 0x4f544                                           |         void (*0x4f544)() ();
                                                                     |     }
    0x0004f520 mov r5, r1                                            |     r5 = r1;
    0x0004f522 movs r1, 1                                            |     r1 = 1;
    0x0004f524 mov r4, r0                                            |     r4 = r0;
    0x0004f526 mov r6, r2                                            |     r6 = r2;
    0x0004f528 bl 0x10820                                            |     r0 = fcn_00010820 (r0, r1);
                                                                     |     if (r0 != 0) {
    0x0004f52c cbnz r0, 0x4f566                                      |         goto label_7;
                                                                     |     }
    0x0004f52e ldr r3, [r4, 0x60]                                    |     r3 = *((r4 + 0x60));
                                                                     |     if (r3 == 0) {
    0x0004f530 cbz r3, 0x4f53c                                       |         goto label_0;
                                                                     |     }
    0x0004f532 movs r2, 1                                            |     r2 = 1;
                                                                     |     do {
    0x0004f534 str r2, [r3, 0x10]                                    |         *((r3 + 0x10)) = r2;
    0x0004f536 ldr r3, [r3, 0x2c]                                    |         r3 = *((r3 + 0x2c));
    0x0004f538 cmp r3, 0                                             |         
    0x0004f53a bne 0x4f534                                           |         
                                                                     |     } while (r3 != 0);
                                                                     | label_0:
    0x0004f53c ldr.w r3, [r4, 0xf8]                                  |     r3 = *((r4 + 0xf8));
    0x0004f540 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f542 beq 0x4f5ce                                           |         void (*0x4f5ce)() ();
                                                                     |     }
                                                                     | label_7:
    0x0004f566 ldr.w r3, [r4, 0xf8]                                  |     r3 = *((r4 + 0xf8));
    0x0004f56a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f56c beq 0x4f5d4                                           |         goto label_8;
                                                                     |     }
    0x0004f56e ldr.w r3, [r4, 0xf4]                                  |     r3 = *((r4 + 0xf4));
    0x0004f572 movs r5, 0                                            |     r5 = 0;
    0x0004f574 str r5, [sp, 0x10]                                    |     x = r5;
    0x0004f576 ldr r0, [r3]                                          |     r0 = *(r3);
    0x0004f578 bl 0x124c4                                            |     r0 = fcn_000124c4 (r0);
    0x0004f57c mov r1, r0                                            |     r1 = r0;
                                                                     |     if (r0 == 0) {
    0x0004f57e cbz r0, 0x4f5ba                                       |         goto label_9;
                                                                     |     }
                                                                     | label_1:
    0x0004f580 ldr r2, [r4, 0x1c]                                    |     r2 = *((r4 + 0x1c));
    0x0004f582 movs r3, 1                                            |     r3 = 1;
    0x0004f584 mov r0, r4                                            |     r0 = r4;
    0x0004f586 bl 0x4af80                                            |     fcn_0004af80 (r0, r1, r2, r3, r4, r5);
    0x0004f58a ldr r2, [sp, 0x10]                                    |     r2 = x;
    0x0004f58c mov fp, r0                                            |     
                                                                     |     if (r2 != 0) {
    0x0004f58e cbz r2, 0x4f596                                       |         
    0x0004f590 mov r0, r2                                            |         r0 = r2;
    0x0004f592 bl 0x10f18                                            |         fcn_00010f18 (r0);
                                                                     |     }
    0x0004f596 cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0004f59a bne 0x4f548                                           |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f59c ldr.w r5, [r4, 0xf4]                                  |     r5 = *((r4 + 0xf4));
    0x0004f5a0 ldr r0, [r5]                                          |     r0 = *(r5);
    0x0004f5a2 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004f5a4 beq 0x4f53c                                           |         goto label_0;
                                                                     |     }
                                                                     | label_9:
    0x0004f5ba mov r3, r0                                            |     r3 = r0;
    0x0004f5bc movs r1, 1                                            |     r1 = 1;
    0x0004f5be ldr.w r6, [r4, 0xdc]                                  |     r6 = *((r4 + 0xdc));
    0x0004f5c2 add r2, sp, 0x10                                      |     r2 += x;
    0x0004f5c4 mov r0, r4                                            |     r0 = r4;
    0x0004f5c6 blx r6                                                |     uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004f5c8 ldr r1, [sp, 0x10]                                    |     r1 = x;
    0x0004f5ca str r5, [r1, 0x10]                                    |     *((r1 + 0x10)) = r5;
    0x0004f5cc b 0x4f580                                             |     goto label_1;
                                                                     | label_8:
    0x0004f5d4 ldrb r3, [r4, 0x13]                                   |     r3 = *((r4 + 0x13));
    0x0004f5d6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f5d8 beq.w 0x4f7b8                                         |         goto label_10;
                                                                     |     }
                                                                     | label_2:
    0x0004f5dc cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0004f5de beq.w 0x4f748                                         |         goto label_11;
                                                                     |     }
    0x0004f5e2 ldrb r3, [r4, 5]                                      |     r3 = *((r4 + 5));
    0x0004f5e4 cmp r3, 4                                             |     
                                                                     |     if (r3 == 4) {
    0x0004f5e6 beq.w 0x4f748                                         |         goto label_11;
                                                                     |     }
    0x0004f5ea ldr.w fp, [r4, 0x44]                                  |     fp = *((r4 + 0x44));
    0x0004f5ee ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0004f5f2 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f5f4 beq.w 0x4f748                                         |         goto label_11;
                                                                     |     }
    0x0004f5f8 movs r3, 1                                            |     r3 = 1;
    0x0004f5fa strb r3, [r4, 0x14]                                   |     *((r4 + 0x14)) = r3;
    0x0004f5fc ldrb r3, [r5]                                         |     r3 = *(r5);
    0x0004f5fe cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f600 beq.w 0x4f820                                         |         goto label_12;
                                                                     |     }
    0x0004f604 movs r7, 0                                            |     r7 = 0;
    0x0004f606 mov r2, r5                                            |     r2 = r5;
    0x0004f608 mov r8, r7                                            |     r8 = r7;
                                                                     |     do {
    0x0004f60a add r8, r3                                            |         r8 += r3;
    0x0004f60c ldrb r3, [r2, 1]!                                     |         r3 = *((r2 += 1));
    0x0004f610 adds r7, 1                                            |         r7++;
    0x0004f612 cmp r3, 0                                             |         
    0x0004f614 bne 0x4f60a                                           |         
                                                                     |     } while (r3 != 0);
    0x0004f616 str r7, [sp, 0xc]                                     |     var_ch = r7;
                                                                     | label_5:
    0x0004f618 ldrb r3, [r4, 8]                                      |     r3 = *((r4 + 8));
    0x0004f61a ldrd sb, sl, [r4, 0x50]                               |     __asm ("ldrd sb, sl, [r4, 0x50]");
                                                                     |     if (r3 != 0) {
    0x0004f61e cbz r3, 0x4f64e                                       |         
    0x0004f620 orrs.w r3, sb, sl                                     |         r3 = sb | sl;
                                                                     |         if (r3 != sb) {
    0x0004f624 beq 0x4f64a                                           |             
    0x0004f626 ldr.w r2, [r4, 0x9c]                                  |             r2 = *((r4 + 0x9c));
    0x0004f62a adds.w r0, sb, -1                                     |             r0 = sb + -1;
    0x0004f62e sbc r1, sl, 0                                         |             __asm ("sbc r1, sl, 0");
    0x0004f632 movs r3, 0                                            |             r3 = 0;
    0x0004f634 str r2, [sp, 8]                                       |             var_8h = r2;
    0x0004f636 bl 0x8ca4c                                            |             fcn_0008ca4c (r0, r1, r2, r3);
    0x0004f63a ldr r2, [sp, 8]                                       |             r2 = var_8h;
    0x0004f63c adds r0, 1                                            |             r0++;
    0x0004f63e adc r1, r1, 0                                         |             __asm ("adc r1, r1, 0");
    0x0004f642 umull sb, sl, r0, r2                                  |             sb:sl = r0 * r2;
    0x0004f646 mla sl, r2, r1, sl                                    |             __asm ("mla sl, r2, r1, sl");
                                                                     |         }
    0x0004f64a strd sb, sl, [r4, 0x50]                               |         __asm ("strd sb, sl, [r4, 0x50]");
                                                                     |     }
    0x0004f64e ldr.w r3, [r4, 0xa4]                                  |     r3 = *((r4 + 0xa4));
    0x0004f652 add r2, sp, 0x18                                      |     r2 += var_18h;
    0x0004f654 mov r1, r2                                            |     r1 = r2;
    0x0004f656 mov r0, fp                                            |     r0 = fp;
    0x0004f658 movs r2, 4                                            |     r2 = 4;
    0x0004f65a str r1, [sp, 8]                                       |     var_8h = r1;
    0x0004f65c rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0004f65e str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0004f660 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0004f664 strd sb, sl, [sp]                                     |     __asm ("strd sb, sl, [sp]");
    0x0004f668 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0004f66a blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004f66c mov fp, r0                                            |     
    0x0004f66e cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f670 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f674 ldr r0, [r4, 0x44]                                    |     r0 = *((r4 + 0x44));
    0x0004f676 adds.w sb, sb, 4                                      |     sb += 4;
    0x0004f67a adc sl, sl, 0                                         |     __asm ("adc sl, sl, 0");
    0x0004f67e mov r2, r7                                            |     r2 = r7;
    0x0004f680 mov r1, r5                                            |     r1 = r5;
    0x0004f682 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004f684 strd sb, sl, [sp]                                     |     __asm ("strd sb, sl, [sp]");
    0x0004f688 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0004f68a blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004f68c mov fp, r0                                            |     
    0x0004f68e cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f690 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f694 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004f696 adds.w sb, r7, sb                                     |     sb = r7 + sb;
    0x0004f69a ldr r0, [r4, 0x44]                                    |     r0 = *((r4 + 0x44));
    0x0004f69c adc.w sl, sl, r7, asr 31                              |     __asm ("adc.w sl, sl, r7, asr 31");
    0x0004f6a0 ldr r1, [sp, 8]                                       |     r1 = var_8h;
    0x0004f6a2 movs r2, 4                                            |     r2 = 4;
    0x0004f6a4 rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0004f6a6 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0004f6a8 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004f6aa strd sb, sl, [sp]                                     |     __asm ("strd sb, sl, [sp]");
    0x0004f6ae ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0004f6b0 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004f6b2 mov fp, r0                                            |     
    0x0004f6b4 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f6b6 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f6ba ldr r0, [r4, 0x44]                                    |     r0 = *((r4 + 0x44));
    0x0004f6bc rev.w r3, r8                                          |     r8 = SWAP32 (r3);
    0x0004f6c0 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0004f6c2 adds.w lr, sb, 4                                      |     lr = sb + 4;
    0x0004f6c6 adc ip, sl, 0                                         |     __asm ("adc ip, sl, 0");
    0x0004f6ca ldr r1, [sp, 8]                                       |     r1 = var_8h;
    0x0004f6cc ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004f6ce movs r2, 4                                            |     r2 = 4;
    0x0004f6d0 strd lr, ip, [sp]                                     |     __asm ("strd lr, ip, [sp]");
    0x0004f6d4 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0004f6d6 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004f6d8 mov fp, r0                                            |     
    0x0004f6da cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f6dc bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f6e0 ldr r0, [r4, 0x44]                                    |     r0 = *((r4 + 0x44));
    0x0004f6e2 adds.w sb, sb, 8                                      |     sb += 8;
    0x0004f6e6 ldr r1, [pc, 0x168]                                   |     
    0x0004f6e8 adc sl, sl, 0                                         |     __asm ("adc sl, sl, 0");
    0x0004f6ec movs r2, 8                                            |     r2 = 8;
    0x0004f6ee ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004f6f0 add r1, pc                                            |     
    0x0004f6f2 strd sb, sl, [sp]                                     |     __asm ("strd sb, sl, [sp]");
    0x0004f6f6 add.w r1, r1, 0xd70                                   |     r1 = 0x9fcb6;
    0x0004f6fa ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0004f6fc blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004f6fe mov fp, r0                                            |     
    0x0004f700 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f702 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f706 ldr r3, [r4, 0x50]                                    |     r3 = *((r4 + 0x50));
    0x0004f708 adds r7, 0x14                                         |     r7 += 0x14;
    0x0004f70a ldr r0, [r4, 0x44]                                    |     r0 = *((r4 + 0x44));
    0x0004f70c add r1, sp, 0x10                                      |     r1 += x;
    0x0004f70e adds r3, r3, r7                                       |     r3 += r7;
    0x0004f710 str r3, [r4, 0x50]                                    |     *((r4 + 0x50)) = r3;
    0x0004f712 ldr r3, [r4, 0x54]                                    |     r3 = *((r4 + 0x54));
    0x0004f714 adc.w r3, r3, r7, asr 31                              |     __asm ("adc.w r3, r3, r7, asr 31");
    0x0004f718 str r3, [r4, 0x54]                                    |     *((r4 + 0x54)) = r3;
    0x0004f71a ldr r3, [r0]                                          |     r3 = *(r0);
    0x0004f71c ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0004f71e blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004f720 mov fp, r0                                            |     
    0x0004f722 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f724 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f728 ldrd r2, r3, [r4, 0x50]                               |     __asm ("ldrd r2, r3, [r4, 0x50]");
    0x0004f72c ldrd r0, r1, [sp, 0x10]                               |     __asm ("ldrd r0, r1, [x]");
    0x0004f730 cmp r2, r0                                            |     
    0x0004f732 sbcs.w r1, r3, r1                                     |     __asm ("sbcs.w r1, r3, r1");
                                                                     |     if (r2 >= r0) {
    0x0004f736 bge 0x4f748                                           |         goto label_11;
                                                                     |     }
    0x0004f738 ldr r0, [r4, 0x44]                                    |     r0 = *((r4 + 0x44));
    0x0004f73a ldr r1, [r0]                                          |     r1 = *(r0);
    0x0004f73c ldr r1, [r1, 0x10]                                    |     r1 = *((r1 + 0x10));
    0x0004f73e blx r1                                                |     r0 = uint32_t (*r1)(uint32_t, uint32_t) (r0, r1);
    0x0004f740 mov fp, r0                                            |     
    0x0004f742 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f744 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
                                                                     | label_11:
    0x0004f748 ldr.w fp, [r4, 0x2c]                                  |     fp = *((r4 + 0x2c));
    0x0004f74c cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0004f750 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f754 ldr.w r3, [r4, 0xf8]                                  |     r3 = *((r4 + 0xf8));
    0x0004f758 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f75a beq 0x4f828                                           |         goto label_13;
                                                                     |     }
                                                                     | label_6:
    0x0004f75c movs r1, 0                                            |     r1 = 0;
    0x0004f75e mov r0, r4                                            |     r0 = r4;
    0x0004f760 bl 0x47c9c                                            |     r0 = fcn_00047c9c (r0, r1, r2);
    0x0004f764 mov fp, r0                                            |     
    0x0004f766 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f768 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f76c ldr.w r3, [r4, 0xf4]                                  |     r3 = *((r4 + 0xf4));
    0x0004f770 ldr r0, [r3]                                          |     r0 = *(r3);
    0x0004f772 bl 0x124c4                                            |     r0 = fcn_000124c4 (r0);
    0x0004f776 mov r1, r0                                            |     r1 = r0;
    0x0004f778 mov r0, r4                                            |     r0 = r4;
    0x0004f77a bl 0x4addc                                            |     r0 = fcn_0004addc (r0, r1);
    0x0004f77e mov fp, r0                                            |     
    0x0004f780 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f782 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f786 ldr.w r7, [r4, 0xf4]                                  |     r7 = *((r4 + 0xf4));
    0x0004f78a ldr r0, [r7]                                          |     r0 = *(r7);
                                                                     |     if (r0 == 0) {
    0x0004f78c cbz r0, 0x4f798                                       |         goto label_14;
                                                                     |     }
                                                                     |     do {
    0x0004f78e bl 0x13668                                            |         fcn_00013668 (r0);
    0x0004f792 ldr r0, [r7]                                          |         r0 = *(r7);
    0x0004f794 cmp r0, 0                                             |         
    0x0004f796 bne 0x4f78e                                           |         
                                                                     |     } while (r0 != 0);
                                                                     | label_14:
    0x0004f798 ldr r1, [r4, 0x1c]                                    |     r1 = *((r4 + 0x1c));
    0x0004f79a ldr r3, [r4, 0x24]                                    |     r3 = *((r4 + 0x24));
    0x0004f79c cmp r1, r3                                            |     
                                                                     |     if (r1 > r3) {
    0x0004f79e bhi 0x4f808                                           |         goto label_15;
                                                                     |     }
                                                                     | label_4:
    0x0004f7a0 cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0004f7a2 bne.w 0x4f53c                                         |         goto label_0;
                                                                     |     }
    0x0004f7a6 mov r1, r5                                            |     r1 = r5;
    0x0004f7a8 mov r0, r4                                            |     r0 = r4;
    0x0004f7aa bl 0x13324                                            |     r0 = fcn_00013324 (r0, r1);
    0x0004f7ae mov fp, r0                                            |     
    0x0004f7b0 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0004f7b2 bne.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f7b6 b 0x4f53c                                             |     goto label_0;
                                                                     | label_10:
    0x0004f7b8 ldr r2, [r4, 0x1c]                                    |     r2 = *((r4 + 0x1c));
    0x0004f7ba cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0004f7bc beq.w 0x4f5dc                                         |         goto label_2;
                                                                     |     }
    0x0004f7c0 ldr.w r7, [r4, 0xdc]                                  |     r7 = *((r4 + 0xdc));
    0x0004f7c4 add r2, sp, 0x10                                      |     r2 += x;
    0x0004f7c6 movs r1, 1                                            |     r1 = 1;
    0x0004f7c8 mov r0, r4                                            |     r0 = r4;
    0x0004f7ca blx r7                                                |     r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0004f7cc mov fp, r0                                            |     
    0x0004f7ce ldr r0, [sp, 0x10]                                    |     r0 = x;
    0x0004f7d0 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0004f7d4 beq 0x4f7e2                                           |         goto label_16;
                                                                     |     }
                                                                     | label_3:
    0x0004f7d6 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004f7d8 beq.w 0x4f548                                         |         void (*0x4f548)() ();
                                                                     |     }
    0x0004f7dc bl 0x10f18                                            |     fcn_00010f18 (r0);
    0x0004f7e0 b 0x4f548                                             |     void (*0x4f548)() ();
                                                                     | label_16:
    0x0004f7e2 bl 0x4816c                                            |     r0 = fcn_0004816c (r0);
    0x0004f7e6 mov fp, r0                                            |     
    0x0004f7e8 ldr r0, [sp, 0x10]                                    |     r0 = x;
    0x0004f7ea cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0004f7ee bne 0x4f7d6                                           |         goto label_3;
                                                                     |     }
                                                                     |     if (r0 == 0) {
    0x0004f7f0 cbz r0, 0x4f838                                       |         goto label_17;
                                                                     |     }
    0x0004f7f2 bl 0x14e60                                            |     fcn_00014e60 (r0);
    0x0004f7f6 ldr r0, [sp, 0x10]                                    |     r0 = x;
    0x0004f7f8 movs r3, 1                                            |     r3 = 1;
    0x0004f7fa strb r3, [r4, 0x13]                                   |     *((r4 + 0x13)) = r3;
    0x0004f7fc cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004f7fe beq.w 0x4f5dc                                         |         goto label_2;
                                                                     |     }
    0x0004f802 bl 0x10f18                                            |     fcn_00010f18 (r0);
    0x0004f806 b 0x4f5dc                                             |     goto label_2;
                                                                     | label_15:
    0x0004f808 ldr.w r3, [r4, 0xa4]                                  |     r3 = *((r4 + 0xa4));
    0x0004f80c mov r0, r4                                            |     r0 = r4;
    0x0004f80e cmp r3, r1                                            |     
    0x0004f810 it eq                                                 |     
                                                                     |     if (r3 != r1) {
    0x0004f812 subeq r1, 1                                           |         r1--;
                                                                     |     }
    0x0004f814 bl 0xd090                                             |     r0 = fcn_0000d090 (r0, r1);
    0x0004f818 mov fp, r0                                            |     
    0x0004f81a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004f81c beq 0x4f7a0                                           |         goto label_4;
                                                                     |     }
    0x0004f81e b 0x4f548                                             |     void (*0x4f548)() ();
                                                                     | label_12:
    0x0004f820 mov r8, r3                                            |     r8 = r3;
    0x0004f822 mov r7, r3                                            |     r7 = r3;
    0x0004f824 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0004f826 b 0x4f618                                             |     goto label_5;
                                                                     | label_13:
    0x0004f828 movs r1, 4                                            |     r1 = 4;
    0x0004f82a mov r0, r4                                            |     r0 = r4;
    0x0004f82c bl 0x132cc                                            |     r0 = fcn_000132cc (r0, r1);
    0x0004f830 mov fp, r0                                            |     
    0x0004f832 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004f834 beq 0x4f75c                                           |         goto label_6;
                                                                     |     }
    0x0004f836 b 0x4f548                                             |     void (*0x4f548)() ();
                                                                     | label_17:
    0x0004f838 movs r3, 1                                            |     r3 = 1;
    0x0004f83a strb r3, [r4, 0x13]                                   |     *((r4 + 0x13)) = r3;
    0x0004f83c b 0x4f5dc                                             |     goto label_2;
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4f854 */
                                                                     | #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.0004f854 ()                                          | void fcn_0004f854 (int16_t arg_18h, int16_t arg_38h, arithmetic x, int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_1h;
                                                                     |     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_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0004f854 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0004f858 mov r4, r1                                            |     r4 = r1;
    0x0004f85a ldr r5, [pc, 0x2c8]                                   |     
    0x0004f85c sub sp, 0x34                                          |     
    0x0004f85e mov r8, r2                                            |     r8 = r2;
    0x0004f860 ldr r1, [pc, 0x2c4]                                   |     r1 = *(0x4fb28);
    0x0004f862 add r5, pc                                            |     r5 = 0x9f38c;
    0x0004f864 ldr.w fp, [r0, 0x74]                                  |     fp = *(arg_58hx74);
    0x0004f868 ldrh.w r2, [r0, 0x46]                                 |     r2 = *(arg_58hx46);
    0x0004f86c ldr r1, [r5, r1]                                      |     
    0x0004f86e ldr.w sl, [r0, 0x14]                                  |     sl = *(arg_58hx14);
    0x0004f872 ldr r1, [r1]                                          |     r1 = *(0x9f38c);
    0x0004f874 str r1, [sp, 0x2c]                                    |     var_2ch = r1;
    0x0004f876 mov.w r1, 0                                           |     r1 = 0;
    0x0004f87a str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0004f87c ldrh.w r3, [fp, 0x18]                                 |     r3 = *(arg_18h);
    0x0004f880 cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0004f882 bhs.w 0x4f9de                                         |         goto label_13;
                                                                     |     }
    0x0004f886 mov r6, r0                                            |     r6 = r0;
    0x0004f888 bl 0xe26c                                             |     fcn_0000e26c (r0);
    0x0004f88c ldr.w r3, [fp, 0x38]                                  |     r3 = *(arg_38h);
    0x0004f890 ldr r5, [r6, 0x28]                                    |     r5 = *((r6 + 0x28));
    0x0004f892 ldrh r1, [r6, 0x30]                                   |     r1 = *((r6 + 0x30));
    0x0004f894 subs r2, r5, r3                                       |     r2 = r5 - r3;
    0x0004f896 ldr.w r3, [sl, 0x28]                                  |     r3 = *((sl + 0x28));
    0x0004f89a subs r3, r3, r1                                       |     r3 -= r1;
    0x0004f89c cmp r2, r3                                            |     
                                                                     |     if (r2 > r3) {
    0x0004f89e bhi.w 0x4fae4                                         |         goto label_14;
                                                                     |     }
    0x0004f8a2 cmp r1, r4                                            |     
                                                                     |     if (r1 > r4) {
    0x0004f8a4 bhi 0x4f954                                           |         goto label_15;
                                                                     |     }
    0x0004f8a6 subs.w r7, r8, 0                                      |     r7 = r8 - 0;
    0x0004f8aa sub.w r4, r4, r1                                      |     r4 -= r1;
    0x0004f8ae it ne                                                 |     
                                                                     |     if (r7 == r8) {
    0x0004f8b0 movne r7, 1                                           |         r7 = 1;
                                                                     |     }
                                                                     | label_0:
    0x0004f8b2 mov r3, r7                                            |     r3 = r7;
    0x0004f8b4 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0004f8b6 beq.w 0x4f9c0                                         |         goto label_8;
                                                                     |     }
    0x0004f8ba ldr.w r3, [sl, 0x28]                                  |     r3 = *((sl + 0x28));
    0x0004f8be ldrh r0, [r6, 0x30]                                   |     r0 = *((r6 + 0x30));
    0x0004f8c0 ldrb r2, [r6, 1]                                      |     r2 = *((r6 + 1));
    0x0004f8c2 sub.w sb, r3, 4                                       |     sb = r3 - 4;
    0x0004f8c6 ldr r3, [r6, 0xc]                                     |     r3 = *((r6 + 0xc));
    0x0004f8c8 ldr.w fp, [r5, r0]                                    |     fp = *((r5 + r0));
    0x0004f8ca add sp, 0                                             |     
    0x0004f8cc str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0004f8ce lsls r3, r2, 0x1d                                     |     r3 = r2 << 0x1d;
    0x0004f8d0 rev.w r5, fp                                          |     fp = SWAP32 (r5);
    0x0004f8d4 str r5, [sp, 0x24]                                    |     var_24h = r5;
                                                                     |     if (r3 >= r2) {
    0x0004f8d6 bpl.w 0x4fa18                                         |         goto label_16;
                                                                     |     }
    0x0004f8d8 strh r7, [r3, 4]                                      |     *((r3 + 4)) = r7;
    0x0004f8da mov r1, sb                                            |     r1 = sb;
    0x0004f8dc mov r0, r4                                            |     r0 = r4;
    0x0004f8de bl 0x8c1ec                                            |     fcn_0008c1ec (r0, r1, r2);
    0x0004f8e2 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0004f8e4 mov r7, r0                                            |     r7 = r0;
    0x0004f8e6 ldr.w r3, [r3, r0, lsl 2]                             |     offset_0 = r0 << 2;
                                                                     |     r3 = *((r3 + offset_0));
    0x0004f8ea cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f8ec beq.w 0x4fa4e                                         |         goto label_17;
                                                                     |     }
    0x0004f8f0 mov r4, r1                                            |     r4 = r1;
    0x0004f8f2 mov r5, r3                                            |     r5 = r3;
    0x0004f8f4 str r3, [sp, 0x24]                                    |     var_24h = r3;
                                                                     | label_1:
    0x0004f8f6 ldr r3, [sp, 0x58]                                    |     r3 = *(arg_58h);
    0x0004f8f8 adds r7, 1                                            |     r7++;
    0x0004f8fa lsls r7, r7, 2                                        |     r7 <<= 2;
    0x0004f8fc mov r1, r5                                            |     r1 = r5;
    0x0004f8fe eor r3, r3, 1                                         |     r3 ^= 1;
    0x0004f902 lsls r3, r3, 1                                        |     r3 <<= 1;
    0x0004f904 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0004f906 add r3, sp, 0x28                                      |     r3 += var_28h;
    0x0004f908 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0004f90a add r3, sp, 0x24                                      |     r3 += var_24h;
    0x0004f90c str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     | label_4:
    0x0004f90e ldr.w r3, [sl, 0x30]                                  |     r3 = *((sl + 0x30));
    0x0004f912 cmp r3, r1                                            |     
                                                                     |     if (r3 <= r1) {
    0x0004f914 blo 0x4f93e                                           |         goto label_18;
                                                                     |     }
                                                                     |     do {
    0x0004f916 ldr r3, [r6, 0xc]                                     |         r3 = *((r6 + 0xc));
    0x0004f918 cmp sb, r4                                            |         
    0x0004f91a add.w r2, r3, r7                                      |         r2 = r3 + r7;
    0x0004f91e str r1, [r2, -0x4]                                    |         *((r2 - 0x4)) = r1;
                                                                     |         if (sb > r4) {
    0x0004f922 bhi 0x4f994                                           |             goto label_19;
                                                                     |         }
    0x0004f924 ldr r2, [r3, r7]                                      |         r2 = *((r3 + r7));
    0x0004f926 sub.w r4, r4, sb                                      |         r4 -= sb;
    0x0004f92a cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0004f92c beq.w 0x4fad8                                         |             goto label_20;
                                                                     |         }
    0x0004f930 ldr.w r3, [sl, 0x30]                                  |         r3 = *((sl + 0x30));
    0x0004f934 mov r1, r2                                            |         r1 = r2;
    0x0004f936 adds r7, 4                                            |         r7 += 4;
    0x0004f938 str r2, [sp, 0x24]                                    |         var_24h = r2;
    0x0004f93a cmp r3, r1                                            |         
    0x0004f93c bhs 0x4f916                                           |         
                                                                     |     } while (r3 >= r1);
                                                                     | label_18:
    0x0004f93e blx 0xa230                                            |     fcn_0000a230 ();
    0x0004f942 ldr r2, [pc, 0x1e8]                                   |     
    0x0004f944 add.w r4, r0, 0x14                                    |     r4 = r0 + 0x14;
    0x0004f948 ldr r1, [pc, 0x1e4]                                   |     
    0x0004f94a movw r3, 0x1a0e                                       |     r3 = 0x1a0e;
    0x0004f94e add r2, pc                                            |     r2 = 0x9f480;
    0x0004f950 add r1, pc                                            |     r1 = 0x9f484;
    0x0004f952 b 0x4f9f2                                             |     goto label_21;
                                                                     | label_15:
    0x0004f954 add.w r3, r4, r8                                      |     r3 = r4 + r8;
    0x0004f958 cmp r1, r3                                            |     
    0x0004f95a itt hs                                                |     
                                                                     |     if (r1 < r3) {
    0x0004f95c movhs r7, 0                                           |         r7 = 0;
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0004f95e movhs sb, r7                                          |         sb = r7;
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0004f960 bhs 0x4f974                                           |         
    0x0004f962 sub.w sb, r4, r1                                      |         sb = r4 - r1;
    0x0004f966 adds.w sb, sb, r8                                     |         sb += r8;
    0x0004f96a sub.w r8, r1, r4                                      |         r8 = r1 - r4;
    0x0004f96e ite ne                                                |         
                                                                     |         if (sb == sb) {
    0x0004f970 movne r7, 1                                           |             r7 = 1;
                                                                     |         }
                                                                     |         if (sb == sb) {
    0x0004f972 moveq r7, 0                                           |             r7 = 0;
                                                                     |             goto label_22;
                                                                     |         }
                                                                     |     }
                                                                     | label_22:
    0x0004f974 ldr r3, [sp, 0x58]                                    |     r3 = *(arg_58h);
    0x0004f976 add r4, r5                                            |     r4 += r5;
    0x0004f978 ldr.w r0, [fp, 0x48]                                  |     r0 = *(x);
    0x0004f97c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004f97e beq 0x4fa02                                           |         goto label_23;
                                                                     |     }
    0x0004f980 bl 0x4816c                                            |     r0 = fcn_0004816c (r0);
    0x0004f984 mov r3, r0                                            |     r3 = r0;
                                                                     |     if (r0 != 0) {
    0x0004f986 cbnz r0, 0x4f9c0                                      |         goto label_8;
                                                                     |     }
    0x0004f988 ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0004f98a mov r0, r4                                            |     r0 = r4;
    0x0004f98c mov r2, r8                                            |     r2 = r8;
    0x0004f98e blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0004f992 b 0x4fa0c                                             |     goto label_24;
                                                                     | label_19:
    0x0004f994 ldr.w r0, [sl]                                        |     r0 = *(sl);
    0x0004f998 add.w r3, r8, r4                                      |     r3 = r8 + r4;
    0x0004f99c cmp r3, sb                                            |     
    0x0004f99e ldrd r3, r2, [sp, 0x10]                               |     __asm ("ldrd r3, r2, [var_10h]");
    0x0004f9a2 ite hi                                                |     
                                                                     |     if (r3 <= sb) {
    0x0004f9a4 subhi r5, r4, sb                                      |         r5 = r4 - sb;
                                                                     |     }
                                                                     |     if (r3 <= sb) {
    0x0004f9a8 movs r5, 0                                            |         r5 = 0;
                                                                     |     }
    0x0004f9aa ldr.w fp, [r0, 0xdc]                                  |     fp = *((r0 + 0xdc));
    0x0004f9ae itt hi                                                |     
                                                                     |     if (r5 <= 0) {
    0x0004f9b0 addhi r5, r8                                          |         r5 += r8;
                                                                     |     }
                                                                     |     if (r5 <= 0) {
    0x0004f9b2 subhi r8, sb, r4                                      |         r8 = sb - r4;
                                                                     |     }
    0x0004f9b6 blx fp                                                |     r0 = fp (r0, r3);
    0x0004f9b8 mov fp, r0                                            |     
    0x0004f9ba cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004f9bc beq 0x4fa7a                                           |         goto label_25;
                                                                     |     }
                                                                     | label_3:
    0x0004f9be mov r3, fp                                            |     r3 = fp;
                                                                     |     do {
                                                                     | label_8:
    0x0004f9c0 ldr r1, [pc, 0x170]                                   |         
    0x0004f9c2 ldr r2, [pc, 0x164]                                   |         r2 = *(0x4fb2a);
    0x0004f9c4 add r1, pc                                            |         r1 = 0x9f4fc;
    0x0004f9c6 ldr r2, [r1, r2]                                      |         r2 = *(0x9f4fc);
    0x0004f9c8 ldr r1, [r2]                                          |         r1 = *(0x9f4fc);
    0x0004f9ca ldr r2, [sp, 0x2c]                                    |         r2 = var_2ch;
    0x0004f9cc eors r1, r2                                           |         r1 ^= r2;
    0x0004f9ce mov.w r2, 0                                           |         r2 = 0;
                                                                     |         if (r1 != r2) {
    0x0004f9d2 bne.w 0x4fb20                                         |             goto label_26;
                                                                     |         }
    0x0004f9d6 mov r0, r3                                            |         r0 = r3;
    0x0004f9d8 add sp, 0x34                                          |         
    0x0004f9da pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_13:
    0x0004f9de blx 0xa230                                            |         fcn_0000a230 ();
    0x0004f9e2 ldr r2, [pc, 0x154]                                   |         
    0x0004f9e4 add.w r4, r0, 0x14                                    |         r4 = r0 + 0x14;
    0x0004f9e8 ldr r1, [pc, 0x150]                                   |         
    0x0004f9ea movw r3, 0x19c1                                       |         r3 = 0x19c1;
    0x0004f9ee add r2, pc                                            |         r2 = 0x9f52c;
    0x0004f9f0 add r1, pc                                            |         r1 = 0x9f530;
                                                                     | label_21:
    0x0004f9f2 movt r3, 1                                            |         r3 = (r3 & 0xFFFF) | 0x10000;
    0x0004f9f6 movs r0, 0xb                                          |         r0 = 0xb;
    0x0004f9f8 str r4, [sp]                                          |         *(sp) = r4;
    0x0004f9fa blx 0x9f00                                            |         fcn_00009f00 ();
                                                                     | label_2:
    0x0004f9fe movs r3, 0xb                                          |         r3 = 0xb;
    0x0004fa00 b 0x4f9c0                                             |         
                                                                     |     } while (1);
                                                                     | label_23:
    0x0004fa02 ldr r0, [sp, 0xc]                                     |     r0 = var_ch;
    0x0004fa04 mov r1, r4                                            |     r1 = r4;
    0x0004fa06 mov r2, r8                                            |     r2 = r8;
    0x0004fa08 blx 0x9e2c                                            |     fcn_00009e2c ();
                                                                     | label_24:
    0x0004fa0c ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004fa0e movs r4, 0                                            |     r4 = 0;
    0x0004fa10 add r3, r8                                            |     r3 += r8;
    0x0004fa12 mov r8, sb                                            |     r8 = sb;
    0x0004fa14 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0004fa16 b 0x4f8b2                                             |     goto label_0;
                                                                     | label_16:
    0x0004fa18 ldr r2, [r6, 0x2c]                                    |     r2 = *((r6 + 0x2c));
    0x0004fa1a mov r1, sb                                            |     r1 = sb;
    0x0004fa1c subs r2, 1                                            |     r2--;
    0x0004fa1e add r2, sb                                            |     r2 += sb;
    0x0004fa20 subs r0, r2, r0                                       |     r0 = r2 - r0;
    0x0004fa22 bl 0x8bf90                                            |     fcn_0008bf90 (r0, r1, r2);
    0x0004fa26 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0004fa28 mov r7, r0                                            |     r7 = r0;
    0x0004fa2a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0004fa2c beq 0x4fb08                                           |         goto label_27;
                                                                     |     }
    0x0004fa2e mov r0, r3                                            |     r0 = r3;
    0x0004fa30 ldr r3, [pc, 0x10c]                                   |     
    0x0004fa32 add r3, pc                                            |     
    0x0004fa34 ldr r3, [r3, 0x2c]                                    |     r3 = *(0x9f5a2);
    0x0004fa36 blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0004fa38 lsls r2, r7, 2                                        |     r2 = r7 << 2;
    0x0004fa3a cmp r2, r0                                            |     
                                                                     |     if (r2 > r0) {
    0x0004fa3c bgt 0x4fb06                                           |         goto label_28;
                                                                     |     }
    0x0004fa3e ldr r0, [r6, 0xc]                                     |     r0 = *((r6 + 0xc));
                                                                     | label_9:
    0x0004fa40 movs r1, 0                                            |     r1 = 0;
    0x0004fa42 blx 0x97d4                                            |     fcn_000097d4 ();
    0x0004fa46 ldrb r3, [r6, 1]                                      |     r3 = *((r6 + 1));
    0x0004fa48 orr r3, r3, 4                                         |     r3 |= 4;
    0x0004fa4c strb r3, [r6, 1]                                      |     *((r6 + 1)) = r3;
                                                                     | label_17:
    0x0004fa4e movs r7, 0                                            |     r7 = 0;
    0x0004fa50 cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0004fa54 bne.w 0x4f8f6                                         |         goto label_1;
                                                                     |     }
                                                                     | label_5:
    0x0004fa58 blx 0xa230                                            |     fcn_0000a230 ();
    0x0004fa5c ldr r2, [pc, 0xe4]                                    |     
    0x0004fa5e add.w r4, r0, 0x14                                    |     r4 = r0 + 0x14;
    0x0004fa62 ldr r1, [pc, 0xe4]                                    |     
    0x0004fa64 movw r3, 0x1a63                                       |     
    0x0004fa68 movt r3, 1                                            |     r3 = 0x11a63;
    0x0004fa6c movs r0, 0xb                                          |     r0 = 0xb;
    0x0004fa6e add r2, pc                                            |     r2 = 0x9f5b6;
    0x0004fa70 str r4, [sp]                                          |     *(sp) = r4;
    0x0004fa72 add r1, pc                                            |     r1 = 0x9f5c0;
    0x0004fa74 blx 0x9f00                                            |     fcn_00009f00 ();
    0x0004fa78 b 0x4f9fe                                             |     goto label_2;
                                                                     | label_25:
    0x0004fa7a adds r1, r4, 4                                        |     r1 = r4 + 4;
    0x0004fa7c ldr r4, [sp, 0x28]                                    |     r4 = var_28h;
    0x0004fa7e ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0004fa80 add r1, r3                                            |     r1 += r3;
    0x0004fa82 ldr r3, [r3]                                          |     r3 = *(r3);
                                                                     | label_12:
    0x0004fa84 rev r3, r3                                            |     r3 = SWAP32 (r3);
    0x0004fa86 str r3, [sp, 0x24]                                    |     var_24h = r3;
                                                                     | label_10:
    0x0004fa88 ldr r3, [sp, 0x58]                                    |     r3 = *(arg_58h);
                                                                     |     if (r3 == 0) {
    0x0004fa8a cbz r3, 0x4fac8                                       |         goto label_29;
                                                                     |     }
    0x0004fa8c mov r0, r4                                            |     r0 = r4;
    0x0004fa8e str r1, [sp, 0x1c]                                    |     var_1ch = r1;
    0x0004fa90 bl 0x4816c                                            |     r0 = fcn_0004816c (r0);
    0x0004fa94 mov fp, r0                                            |     
                                                                     |     if (r0 == 0) {
    0x0004fa96 cbnz r0, 0x4faa4                                      |         
    0x0004fa98 ldr r1, [sp, 0x1c]                                    |         r1 = var_1ch;
    0x0004fa9a mov r2, r8                                            |         r2 = r8;
    0x0004fa9c mov r0, r1                                            |         r0 = r1;
    0x0004fa9e ldr r1, [sp, 0xc]                                     |         r1 = var_ch;
    0x0004faa0 blx 0x9e2c                                            |         fcn_00009e2c ();
                                                                     |     }
    0x0004faa4 ldr r4, [sp, 0x28]                                    |     r4 = var_28h;
                                                                     |     if (r4 != 0) {
    0x0004faa6 cbnz r4, 0x4fad0                                      |         goto label_30;
                                                                     |     }
                                                                     | label_6:
    0x0004faa8 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0004faaa beq 0x4f9be                                           |         goto label_3;
                                                                     |     }
    0x0004faac ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0004faae movs r4, 0                                            |     r4 = 0;
                                                                     | label_11:
    0x0004fab0 add r3, r8                                            |     r3 += r8;
    0x0004fab2 mov r8, r5                                            |     r8 = r5;
    0x0004fab4 str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     | label_7:
    0x0004fab6 cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0004faba bne 0x4f9be                                           |         goto label_3;
                                                                     |     }
    0x0004fabc ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0004fabe adds r7, 4                                            |     r7 += 4;
    0x0004fac0 cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0004fac2 bne.w 0x4f90e                                         |         goto label_4;
                                                                     |     }
    0x0004fac4 add r7, sp, 0x90                                      |     r7 = sp + 0x90;
    0x0004fac6 b 0x4fa58                                             |     goto label_5;
                                                                     | label_29:
    0x0004fac8 ldr r0, [sp, 0xc]                                     |     r0 = var_ch;
    0x0004faca mov r2, r8                                            |     r2 = r8;
    0x0004facc blx 0x9e2c                                            |     fcn_00009e2c ();
                                                                     | label_30:
    0x0004fad0 mov r0, r4                                            |     r0 = r4;
    0x0004fad2 bl 0x10f18                                            |     fcn_00010f18 (r0);
    0x0004fad6 b 0x4faa8                                             |     goto label_6;
                                                                     | label_20:
    0x0004fad8 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0004fada mov r0, sl                                            |     r0 = sl;
    0x0004fadc bl 0x23448                                            |     r0 = fcn_00023448 (r0, r1, r2, r3, r4, r5);
    0x0004fae0 mov fp, r0                                            |     
    0x0004fae2 b 0x4fab6                                             |     goto label_7;
                                                                     | label_14:
    0x0004fae4 blx 0xa230                                            |     fcn_0000a230 ();
    0x0004fae8 ldr r2, [pc, 0x60]                                    |     
    0x0004faea add.w r4, r0, 0x14                                    |     r4 = r0 + 0x14;
    0x0004faee ldr r1, [pc, 0x60]                                    |     
    0x0004faf0 movw r3, 0x19d0                                       |     
    0x0004faf4 movt r3, 1                                            |     r3 = 0x119d0;
    0x0004faf8 movs r0, 0xb                                          |     r0 = 0xb;
    0x0004fafa add r2, pc                                            |     r2 = 0x9f64a;
    0x0004fafc str r4, [sp]                                          |     *(sp) = r4;
    0x0004fafe add r1, pc                                            |     r1 = 0x9f654;
    0x0004fb00 blx 0x9f00                                            |     fcn_00009f00 ();
    0x0004fb04 b 0x4f9fe                                             |     goto label_2;
                                                                     | label_28:
    0x0004fb06 ldr r3, [r6, 0xc]                                     |     r3 = *((r6 + 0xc));
                                                                     | label_27:
    0x0004fb08 mov r0, r3                                            |     r0 = r3;
    0x0004fb0a lsls r2, r7, 3                                        |     r2 = r7 << 3;
    0x0004fb0c movs r3, 0                                            |     r3 = 0;
    0x0004fb0e bl 0x1187c                                            |     fcn_0001187c (r0, r1, r2);
    0x0004fb12 movs r3, 7                                            |     r3 = 7;
    0x0004fb14 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0004fb16 beq.w 0x4f9c0                                         |         goto label_8;
                                                                     |     }
    0x0004fb1a lsls r2, r7, 2                                        |     r2 = r7 << 2;
    0x0004fb1c str r0, [r6, 0xc]                                     |     *((r6 + 0xc)) = r0;
    0x0004fb1e b 0x4fa40                                             |     goto label_9;
                                                                     | label_26:
    0x0004fb20 blx 0x9b44                                            |     fcn_00009b44 ();
    0x0004fb24 asrs r6, r3, 0xa                                      |     r6 = r3 >> 0xa;
    0x0004fb26 movs r5, r0                                           |     r5 = r0;
    0x0004fb28 lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0004fb2a movs r0, r0                                           |     
                                                                     |     if (r0 < r0) {
    0x0004fb2c blt 0x4fbbc                                           |         void (*0x4fbbc)() ();
                                                                     |     }
    0x0004fb2e movs r3, r0                                           |     r3 = r0;
                                                                     |     if (r3 < r0) {
    0x0004fb30 bls 0x4fbe4                                           |         goto label_31;
                                                                     |     }
    0x0004fb32 movs r3, r0                                           |     r3 = r0;
    0x0004fb34 asrs r4, r7, 4                                        |     r4 = r7 >> 4;
    0x0004fb36 movs r5, r0                                           |     r5 = r0;
                                                                     |     if (r5 >= r0) {
    0x0004fb38 bge 0x4fa88                                           |         goto label_10;
                                                                     |     }
    0x0004fb3a movs r3, r0                                           |     r3 = r0;
                                                                     |     if (r3 > r0) {
    0x0004fb3c bhi 0x4fab0                                           |         goto label_11;
                                                                     |     }
    0x0004fb3e movs r3, r0                                           |     r3 = r0;
    0x0004fb40 asrs r2, r2, 0x17                                     |     r2 >>= 0x17;
    0x0004fb42 movs r5, r0                                           |     r5 = r0;
                                                                     |     if (r5 >= r0) {
    0x0004fb44 bge 0x4fb94                                           |         void (*0x4fb94)() ();
                                                                     |     }
    0x0004fb46 movs r3, r0                                           |     r3 = r0;
                                                                     |     if (r3 > r0) {
    0x0004fb48 bhi 0x4fbb8                                           |         void (*0x4fbb8)() ();
                                                                     |     }
    0x0004fb4a movs r3, r0                                           |     r3 = r0;
                                                                     |     if (r3 < r0) {
    0x0004fb4c bls 0x4fa84                                           |         goto label_12;
                                                                     |     }
    0x0004fb4e movs r3, r0                                           |     r3 = r0;
    0x0004fb50 bvc 0x4faa8                                           |     __asm ("bvc aav.0x000000ff");
                                                                     |     goto label_6;
    0x0004fb52 movs r3, r0                                           |     r3 = r0;
                                                                     | label_31:
    0x0004fbe4 bl 0x4fb54                                            |     r0 = fcn_0004fb54 (r0);
    0x0004fbe8 mov r6, r0                                            |     r6 = r0;
                                                                     |     if (r0 != 0) {
    0x0004fbea cbnz r0, 0x4fc22                                      |         goto label_32;
                                                                     |     }
    0x0004fbec ldrsb.w r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x0004fbf0 cmp r3, 0                                             |     
                                                                     |     if (r3 < 0) {
    0x0004fbf2 blt 0x4fc1e                                           |         goto label_33;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0004fbf4 beq 0x4fc10                                           |         goto label_34;
                                                                     |     }
    0x0004fbf6 add.w r7, r4, 0x74                                    |     r7 = r4 + 0x74;
    0x0004fbfa mov r5, r0                                            |     r5 = r0;
                                                                     |     do {
    0x0004fbfc ldr r3, [r7, 4]!                                      |         r3 = *((r7 += 4));
    0x0004fc00 adds r5, 1                                            |         r5++;
    0x0004fc02 ldr r0, [r3, 0x48]                                    |         r0 = *((r3 + 0x48));
    0x0004fc04 bl 0x10f18                                            |         fcn_00010f18 (r0);
    0x0004fc08 ldrsb.w r3, [r4, 0x44]                                |         r3 = *((r4 + 0x44));
    0x0004fc0c cmp r5, r3                                            |         
    0x0004fc0e blt 0x4fbfc                                           |         
                                                                     |     } while (r5 < r3);
                                                                     | label_34:
    0x0004fc10 ldr r3, [r4, 0x74]                                    |     r3 = *((r4 + 0x74));
    0x0004fc12 ldr r0, [r3, 0x48]                                    |     r0 = *((r3 + 0x48));
    0x0004fc14 bl 0x10f18                                            |     fcn_00010f18 (r0);
    0x0004fc18 movs r3, 0xff                                         |     r3 = 0xff;
    0x0004fc1a strb.w r3, [r4, 0x44]                                 |     *((r4 + 0x44)) = r3;
                                                                     | label_33:
    0x0004fc1e movs r3, 3                                            |     r3 = 3;
    0x0004fc20 strb r3, [r4]                                         |     *(r4) = r3;
                                                                     | label_32:
    0x0004fc22 ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0004fc24 bic r3, r3, 0xe                                       |     r3 = BIT_MASK (r3, 0xe);
    0x0004fc28 strb r3, [r4, 1]                                      |     *((r4 + 1)) = r3;
    0x0004fc2a mov r0, r6                                            |     r0 = r6;
    0x0004fc2c pop {r3, r4, r5, r6, r7, pc}                          |     
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x500e0 */
                                                                 | #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.000500e0 ()                                      | void fcn_000500e0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_13h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000500e0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000500e4 mov r8, r2                                        |     r8 = r2;
    0x000500e6 ldr r2, [pc, 0x2f4]                               |     
    0x000500e8 sub sp, 0x34                                      |     
    0x000500ea ldr r5, [r0, 4]                                   |     r5 = *((r0 + 4));
    0x000500ec ldr r3, [pc, 0x2f0]                               |     r3 = *(0x503e0);
    0x000500ee add r2, pc                                        |     r2 = 0xa04d0;
    0x000500f0 str r1, [sp, 8]                                   |     var_8h = r1;
    0x000500f2 ldr r3, [r2, r3]                                  |     
    0x000500f4 ldrb r2, [r5, 0x11]                               |     r2 = *((r5 + 0x11));
    0x000500f6 ldr r3, [r3]                                      |     r3 = *(0xa04d0);
    0x000500f8 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000500fa mov.w r3, 0                                       |     r3 = 0;
    0x000500fe cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00050100 beq.w 0x50270                                     |         goto label_7;
                                                                 |     }
    0x00050104 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00050106 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 == 0) {
    0x00050108 cbz r3, 0x50118                                   |         goto label_8;
                                                                 |     }
                                                                 |     do {
    0x0005010a ldrb r2, [r3, 1]                                  |         r2 = *((r3 + 1));
    0x0005010c bic r2, r2, 4                                     |         r2 = BIT_MASK (r2, 4);
    0x00050110 strb r2, [r3, 1]                                  |         *((r3 + 1)) = r2;
    0x00050112 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00050114 cmp r3, 0                                         |         
    0x00050116 bne 0x5010a                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_8:
    0x00050118 ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
                                                                 |     if (r3 != 0) {
    0x0005011a cbz r3, 0x50134                                   |         
    0x0005011c ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x0005011e ldrb r2, [r6, 0xa]                                |         r2 = *((r6 + 0xa));
    0x00050120 adds r3, 1                                        |         r3++;
    0x00050122 str r3, [r6, 0xc]                                 |         *((r6 + 0xc)) = r3;
    0x00050124 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00050126 beq 0x5021c                                       |             goto label_9;
                                                                 |         }
    0x00050128 ldr r2, [r5, 0xc]                                 |         r2 = *((r5 + 0xc));
    0x0005012a ldr r2, [r2, 0x38]                                |         r2 = *((r2 + 0x38));
    0x0005012c ldr r4, [r2, 0x34]                                |         r4 = *((r2 + 0x34));
    0x0005012e rev r4, r4                                        |         r4 = SWAP32 (r4);
    0x00050130 str r4, [sp, 0x18]                                |         var_18h = r4;
    0x00050132 b 0x50234                                         |         goto label_10;
                                                                 |     }
    0x00050134 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00050136 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x00050138 ldr r4, [r3, 0x34]                                |     r4 = *((r3 + 0x34));
    0x0005013a rev r4, r4                                        |     r4 = SWAP32 (r4);
                                                                 | label_1:
    0x0005013c ldr r3, [r5, 0x30]                                |     r3 = *((r5 + 0x30));
    0x0005013e cmp r3, r4                                        |     
                                                                 |     if (r3 <= r4) {
    0x00050140 blo.w 0x5024c                                     |         goto label_11;
                                                                 |     }
                                                                 | label_2:
    0x00050144 ldr r3, [pc, 0x29c]                               |     
    0x00050146 adds r4, 1                                        |     r4++;
    0x00050148 ldr r1, [r5, 0x24]                                |     r1 = *((r5 + 0x24));
    0x0005014a movw fp, 0xcccd                                   |     
    0x0005014e str r4, [sp, 0x18]                                |     var_18h = r4;
    0x00050150 movt fp, 0xcccc                                   |     fp = 0xcccccccd;
    0x00050154 add r3, pc                                        |     r3 = 0xa053c;
    0x00050156 mov.w sl, 0                                       |     sl = 0;
    0x0005015a ldr.w r0, [r3, 0x118]                             |     r0 = sqlite3_column_table_name16;
    0x0005015e bl 0x8bf90                                        |     r0 = fcn_0008bf90 (r0, r1, r2);
    0x00050162 add.w sb, r0, 1                                   |     sb = r0 + 1;
    0x00050166 b 0x5016e                                         |     
                                                                 |     while (r2 == r4) {
                                                                 | label_0:
    0x00050168 adds r4, 1                                        |         r4++;
    0x0005016a mov.w sl, 1                                       |         sl = 1;
    0x0005016e cmp r4, 1                                         |         
    0x00050170 it ls                                             |         
                                                                 |         if (r4 > 1) {
    0x00050172 movls r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r4 >= 1) {
    0x00050174 bls 0x50192                                       |             
    0x00050176 ldr r1, [r5, 0x28]                                |             r1 = *((r5 + 0x28));
    0x00050178 subs r7, r4, 2                                    |             r7 = r4 - 2;
    0x0005017a mov r0, r7                                        |             r0 = r7;
    0x0005017c umull r2, r1, fp, r1                              |             r2:r1 = fp * r1;
    0x00050180 lsrs r1, r1, 2                                    |             r1 >>= 2;
    0x00050182 adds r1, 1                                        |             r1++;
    0x00050184 bl 0x8c1ec                                        |             fcn_0008c1ec (r0, r1, r2);
    0x00050188 subs r3, r7, r1                                   |             r3 = r7 - r1;
    0x0005018a adds r2, r3, 2                                    |             r2 = r3 + 2;
    0x0005018c cmp r2, sb                                        |             
    0x0005018e it eq                                             |             
                                                                 |             if (r2 == sb) {
    0x00050190 addeq r2, r3, 3                                   |                 r2 = r3 + 3;
                                                                 |                 goto label_12;
                                                                 |             }
                                                                 |         }
                                                                 | label_12:
    0x00050192 cmp r2, r4                                        |         
    0x00050194 beq 0x50168                                       |         
                                                                 |     }
    0x00050196 cmp r4, sb                                        |     
                                                                 |     if (r4 == sb) {
    0x00050198 beq 0x50168                                       |         goto label_0;
                                                                 |     }
    0x0005019a cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0005019e beq 0x501a2                                       |         
    0x000501a0 str r4, [sp, 0x18]                                |         var_18h = r4;
                                                                 |     }
    0x000501a2 mov.w sl, 1                                       |     sl = 1;
    0x000501a6 mov r3, r4                                        |     r3 = r4;
    0x000501a8 add r2, sp, 0x20                                  |     r2 += var_20h;
    0x000501aa add r1, sp, 0x24                                  |     r1 += var_24h;
    0x000501ac mov r0, r5                                        |     r0 = r5;
    0x000501ae str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x000501b2 bl 0x4c088                                        |     r0 = fcn_0004c088 (r0, r1, r2, r3, r4);
    0x000501b6 mov r3, r0                                        |     r3 = r0;
    0x000501b8 str r0, [sp, 0x1c]                                |     var_1ch = r0;
                                                                 |     if (r0 == 0) {
    0x000501ba cbnz r0, 0x501fe                                  |         
    0x000501bc ldrd fp, sb, [sp, 0x20]                           |         __asm ("ldrd fp, sb, [var_20h]");
    0x000501c0 cmp fp, r4                                        |         
                                                                 |         if (fp != r4) {
    0x000501c2 bne 0x502ae                                       |             goto label_13;
                                                                 |         }
    0x000501c4 add r1, sp, 0x1c                                  |         r1 += var_1ch;
    0x000501c6 mov r2, sl                                        |         r2 = sl;
    0x000501c8 str r1, [sp]                                      |         *(sp) = r1;
    0x000501ca mov r0, r5                                        |         r0 = r5;
    0x000501cc mov r1, r4                                        |         r1 = r4;
    0x000501ce str.w sb, [sp, 0x14]                              |         __asm ("str.w sb, [var_14h]");
    0x000501d2 bl 0x4c6ec                                        |         fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x000501d6 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
                                                                 |         if (r3 == 0) {
    0x000501d8 cbnz r3, 0x501ec                                  |             
                                                                 | label_5:
    0x000501da mov r2, r4                                        |             r2 = r4;
    0x000501dc mov r0, r6                                        |             r0 = r6;
    0x000501de movs r1, 4                                        |             r1 = 4;
    0x000501e0 bl 0x4bfa0                                        |             r0 = fcn_0004bfa0 (r0, r1, r2);
    0x000501e4 mov r3, r0                                        |             r3 = r0;
    0x000501e6 str r0, [sp, 0x1c]                                |             var_1ch = r0;
    0x000501e8 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x000501ea beq 0x5028a                                       |                 goto label_14;
                                                                 |             }
                                                                 |         }
    0x000501ec cmp.w sb, 0                                       |         
                                                                 |         if (sb == 0) {
    0x000501f0 beq 0x501fe                                       |             goto label_3;
                                                                 |         }
                                                                 | label_4:
    0x000501f2 ldr.w r0, [sb, 0x48]                              |         r0 = *((sb + 0x48));
    0x000501f6 str r3, [sp, 8]                                   |         var_8h = r3;
    0x000501f8 bl 0x10f18                                        |         fcn_00010f18 (r0);
    0x000501fc ldr r3, [sp, 8]                                   |         r3 = var_8h;
                                                                 |     }
                                                                 | label_3:
    0x000501fe ldr r1, [pc, 0x1e8]                               |     
    0x00050200 ldr r2, [pc, 0x1dc]                               |     r2 = *(0x503e0);
    0x00050202 add r1, pc                                        |     r1 = 0xa05f0;
    0x00050204 ldr r2, [r1, r2]                                  |     r2 = sqlite3_bind_text;
    0x00050206 ldr r1, [r2]                                      |     r1 = sqlite3_bind_text;
    0x00050208 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0005020a eors r1, r2                                       |     r1 ^= r2;
    0x0005020c mov.w r2, 0                                       |     r2 = 0;
                                                                 |     if (r1 != r2) {
    0x00050210 bne.w 0x503c6                                     |         goto label_15;
                                                                 |     }
    0x00050214 mov r0, r3                                        |     r0 = r3;
    0x00050216 add sp, 0x34                                      |     
    0x00050218 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_9:
    0x0005021c mov r0, r6                                        |     r0 = r6;
    0x0005021e bl 0x11258                                        |     fcn_00011258 (r0);
    0x00050222 ldr r2, [r5, 0xc]                                 |     r2 = *((r5 + 0xc));
    0x00050224 ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
    0x00050226 ldr r2, [r2, 0x38]                                |     r2 = *((r2 + 0x38));
    0x00050228 ldr r4, [r2, 0x34]                                |     r4 = *((r2 + 0x34));
    0x0005022a rev r4, r4                                        |     r4 = SWAP32 (r4);
    0x0005022c str r4, [sp, 0x18]                                |     var_18h = r4;
    0x0005022e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050230 beq 0x5013c                                       |         goto label_1;
                                                                 |     }
    0x00050232 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
                                                                 | label_10:
    0x00050234 subs r3, 1                                        |     r3--;
    0x00050236 str r3, [r6, 0xc]                                 |     *((r6 + 0xc)) = r3;
    0x00050238 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005023a bne.w 0x5013c                                     |         goto label_1;
                                                                 |     }
    0x0005023e mov r0, r6                                        |     r0 = r6;
    0x00050240 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00050244 ldr r3, [r5, 0x30]                                |     r3 = *((r5 + 0x30));
    0x00050246 cmp r3, r4                                        |     
                                                                 |     if (r3 >= r4) {
    0x00050248 bhs.w 0x50144                                     |         goto label_2;
                                                                 |     }
                                                                 | label_11:
    0x0005024c blx 0xa230                                        |     fcn_0000a230 ();
    0x00050250 ldr r2, [pc, 0x198]                               |     
    0x00050252 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00050256 ldr r1, [pc, 0x198]                               |     
    0x00050258 movw r3, 0x2c26                                   |     
    0x0005025c movt r3, 1                                        |     r3 = 0x12c26;
    0x00050260 movs r0, 0xb                                      |     r0 = 0xb;
    0x00050262 add r2, pc                                        |     r2 = 0xa0652;
    0x00050264 str r4, [sp]                                      |     *(sp) = r4;
    0x00050266 add r1, pc                                        |     r1 = 0xa065c;
    0x00050268 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0005026c movs r3, 0xb                                      |     r3 = 0xb;
    0x0005026e b 0x501fe                                         |     goto label_3;
                                                                 | label_7:
    0x00050270 movs r3, 1                                        |     r3 = 1;
    0x00050272 str r2, [sp]                                      |     *(sp) = r2;
    0x00050274 mov r0, r5                                        |     r0 = r5;
    0x00050276 add r2, sp, 0x18                                  |     r2 += var_18h;
    0x00050278 add r1, sp, 0x14                                  |     r1 += var_14h;
    0x0005027a bl 0x4c088                                        |     r0 = fcn_0004c088 (r0, r1, r2, r3, r4);
    0x0005027e mov r3, r0                                        |     r3 = r0;
    0x00050280 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00050282 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050284 bne 0x501fe                                       |         goto label_3;
                                                                 |     }
    0x00050286 ldr.w sb, [sp, 0x14]                              |     sb = var_14h;
                                                                 | label_14:
    0x0005028a tst.w r8, 1                                       |     
    0x0005028e mov r0, sb                                        |     r0 = sb;
    0x00050290 ite eq                                            |     
                                                                 |     if ((r8 & 1) != 0) {
    0x00050292 moveq r1, 0xa                                     |         r1 = 0xa;
                                                                 |     }
                                                                 |     if ((r8 & 1) == 0) {
    0x00050294 movne r1, 0xd                                     |         r1 = 0xd;
                                                                 |     }
    0x00050296 bl 0x22368                                        |     fcn_00022368 (r0, r1);
    0x0005029a ldr.w r0, [sb, 0x48]                              |     r0 = *((sb + 0x48));
                                                                 |     if (r0 != 0) {
    0x0005029e cbz r0, 0x502a4                                   |         
    0x000502a0 bl 0x10f18                                        |         fcn_00010f18 (r0);
                                                                 |     }
    0x000502a4 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000502a6 movs r3, 0                                        |     r3 = 0;
    0x000502a8 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x000502aa str r2, [r1]                                      |     *(r1) = r2;
    0x000502ac b 0x501fe                                         |     goto label_3;
                                                                 | label_13:
    0x000502ae strb.w r0, [sp, 0x13]                             |     var_13h = r0;
    0x000502b2 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x000502b4 ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x000502b6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000502b8 beq.w 0x503ca                                     |         goto label_16;
                                                                 |     }
    0x000502bc mov r2, r3                                        |     r2 = r3;
    0x000502be mov r1, r3                                        |     r1 = r3;
    0x000502c0 bl 0x4fc30                                        |     r0 = fcn_0004fc30 (r0, r1, r2);
    0x000502c4 mov r3, r0                                        |     r3 = r0;
    0x000502c6 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x000502c8 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x000502cc beq 0x502da                                       |         
    0x000502ce str r0, [sp, 0xc]                                 |         var_ch = r0;
    0x000502d0 ldr.w r0, [sb, 0x48]                              |         r0 = *((sb + 0x48));
    0x000502d4 bl 0x10f18                                        |         fcn_00010f18 (r0);
    0x000502d8 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
                                                                 |     }
    0x000502da cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000502dc bne 0x501fe                                       |         goto label_3;
                                                                 |     }
                                                                 | label_6:
    0x000502de add.w sb, sp, 0x14                                |     sb += var_14h;
    0x000502e2 movs r3, 0                                        |     r3 = 0;
    0x000502e4 mov r2, sb                                        |     r2 = sb;
    0x000502e6 mov r1, r4                                        |     r1 = r4;
    0x000502e8 mov r0, r5                                        |     r0 = r5;
    0x000502ea bl 0xba58                                         |     r0 = fcn_0000ba58 (r0, r1, r2);
    0x000502ee mov r3, r0                                        |     r3 = r0;
    0x000502f0 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x000502f2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000502f4 bne 0x501fe                                       |         goto label_3;
                                                                 |     }
    0x000502f6 add r3, sp, 0x28                                  |     r3 += var_28h;
    0x000502f8 add.w r2, sp, 0x13                                |     r2 += var_13h;
    0x000502fc mov r1, r4                                        |     r1 = r4;
    0x000502fe mov r0, r5                                        |     r0 = r5;
    0x00050300 bl 0x2331c                                        |     fcn_0002331c (r0, r1, r2, r3, r4, r5);
    0x00050304 ldrb.w r2, [sp, 0x13]                             |     r2 = var_13h;
    0x00050308 mov r3, r0                                        |     r3 = r0;
    0x0005030a ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0005030e str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00050310 subs r1, r2, 1                                    |     r1 = r2 - 1;
    0x00050312 cmp r1, 1                                         |     
                                                                 |     if (r1 < 1) {
    0x00050314 bls 0x50382                                       |         goto label_17;
                                                                 |     }
    0x00050316 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050318 bne 0x503a2                                       |         goto label_18;
                                                                 |     }
    0x0005031a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0005031c mov r1, sl                                        |     r1 = sl;
    0x0005031e strd fp, r0, [sp]                                 |     __asm ("strd fp, r0, [sp]");
    0x00050322 mov r0, r5                                        |     r0 = r5;
    0x00050324 bl 0x4cda8                                        |     r0 = fcn_0004cda8 (r0, r1, r2, r3, r4, r5);
    0x00050328 mov r3, r0                                        |     r3 = r0;
    0x0005032a str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x0005032c cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00050330 beq 0x5033e                                       |         
    0x00050332 str r0, [sp, 0xc]                                 |         var_ch = r0;
    0x00050334 ldr.w r0, [sl, 0x48]                              |         r0 = *((sl + 0x48));
    0x00050338 bl 0x178bc                                        |         fcn_000178bc (r0);
    0x0005033c ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
                                                                 |     }
    0x0005033e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050340 bne.w 0x501fe                                     |         goto label_3;
                                                                 |     }
    0x00050344 mov r2, sb                                        |     r2 = sb;
    0x00050346 mov r1, r4                                        |     r1 = r4;
    0x00050348 mov r0, r5                                        |     r0 = r5;
    0x0005034a bl 0xba58                                         |     fcn_0000ba58 (r0, r1, r2);
    0x0005034c smull r4, r6, r5, r3                              |     r4:r6 = r5 * r3;
    0x00050350 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00050352 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050354 bne.w 0x501fe                                     |         goto label_3;
                                                                 |     }
    0x00050358 ldr.w sb, [sp, 0x14]                              |     sb = var_14h;
    0x0005035c ldr.w r0, [sb, 0x48]                              |     r0 = *((sb + 0x48));
    0x00050360 bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x00050364 mov r3, r0                                        |     r3 = r0;
    0x00050366 str r0, [sp, 0x1c]                                |     var_1ch = r0;
                                                                 |     if (r0 != 0) {
    0x00050368 cbnz r0, 0x503b8                                  |         goto label_19;
                                                                 |     }
    0x0005036a add r2, sp, 0x1c                                  |     r2 += var_1ch;
    0x0005036c mov r0, r5                                        |     r0 = r5;
    0x0005036e str r2, [sp]                                      |     *(sp) = r2;
    0x00050370 mov r1, r4                                        |     r1 = r4;
    0x00050372 movs r2, 1                                        |     r2 = 1;
    0x00050374 bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x00050378 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005037a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005037c bne.w 0x501f2                                     |         goto label_4;
                                                                 |     }
    0x00050380 b 0x501da                                         |     goto label_5;
                                                                 | label_17:
    0x00050382 blx 0xa230                                        |     fcn_0000a230 ();
    0x00050386 ldr r2, [pc, 0x6c]                                |     
    0x00050388 adds r0, 0x14                                     |     r0 += 0x14;
    0x0005038a ldr r1, [pc, 0x6c]                                |     
    0x0005038c movw r3, 0x2c56                                   |     
    0x00050390 movt r3, 1                                        |     r3 = 0x12c56;
    0x00050394 str r0, [sp]                                      |     *(sp) = r0;
    0x00050396 add r2, pc                                        |     r2 = 0xa0790;
    0x00050398 movs r0, 0xb                                      |     r0 = 0xb;
    0x0005039a add r1, pc                                        |     r1 = 0xa0798;
    0x0005039c blx 0x9f00                                        |     fcn_00009f00 ();
    0x000503a0 movs r3, 0xb                                      |     r3 = 0xb;
                                                                 | label_18:
    0x000503a2 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000503a6 beq.w 0x501fe                                     |         goto label_3;
                                                                 |     }
    0x000503aa ldr.w r0, [sl, 0x48]                              |     r0 = *((sl + 0x48));
    0x000503ae str r3, [sp, 8]                                   |     var_8h = r3;
    0x000503b0 bl 0x178bc                                        |     fcn_000178bc (r0);
    0x000503b4 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000503b6 b 0x501fe                                         |     goto label_3;
                                                                 | label_19:
    0x000503b8 str r0, [sp, 8]                                   |     var_8h = r0;
    0x000503ba ldr.w r0, [sb, 0x48]                              |     r0 = *((sb + 0x48));
    0x000503be bl 0x178bc                                        |     fcn_000178bc (r0);
    0x000503c2 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000503c4 b 0x501fe                                         |     goto label_3;
                                                                 | label_15:
    0x000503c6 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_16:
    0x000503ca cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x000503ce beq 0x502de                                       |         goto label_6;
                                                                 |     }
    0x000503d0 ldr.w r0, [sb, 0x48]                              |     r0 = *((sb + 0x48));
    0x000503d4 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x000503d8 b 0x502de                                         |     goto label_6;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x516f4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000516f4 ()                                      | void fcn_000516f4 (int16_t arg_0h, int16_t arg_7ch, int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
    0x000516f4 ldr.w r2, [pc, 0x994]                             |     r2 = *(0x0005208c);
    0x000516f8 ldr.w r3, [pc, 0x994]                             |     
    0x000516fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00051700 sub sp, 0x34                                      |     
    0x00051702 add r2, pc                                        |     r2 += pc;
    0x00051704 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00051706 mov r4, r0                                        |     r4 = r0;
    0x00051708 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0005170a ldr r3, [r3]                                      |     r3 = *(0x52090);
    0x0005170c str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0005170e mov.w r3, 0                                       |     r3 = 0;
    0x00051712 ldrb.w r3, [r5, 0x57]                             |     r3 = *((r5 + 0x57));
                                                                 |     if (r3 != 0) {
    0x00051716 cbz r3, 0x5171c                                   |         
    0x00051718 movs r3, 7                                        |         r3 = 7;
    0x0005171a str r3, [r0, 0x24]                                |         *(arg_0hx24) = r3;
                                                                 |     }
    0x0005171c ldr.w r6, [r4, 0xcc]                              |     r6 = *((r4 + 0xcc));
                                                                 |     if (r6 == 0) {
    0x00051720 cbz r6, 0x51736                                   |         goto label_38;
                                                                 |     }
                                                                 |     do {
    0x00051722 mov r0, r6                                        |         r0 = r6;
    0x00051724 ldr r6, [r6, 4]                                   |         r6 = *((r6 + 4));
    0x00051726 cmp r6, 0                                         |         
    0x00051728 bne 0x51722                                       |         
                                                                 |     } while (r6 != 0);
    0x0005172a bl 0x51650                                        |     fcn_00051650 (r0);
    0x0005172e str.w r6, [r4, 0xcc]                              |     __asm ("str.w r6, [r4, 0xcc]");
    0x00051732 str.w r6, [r4, 0xd4]                              |     __asm ("str.w r6, [r4, 0xd4]");
                                                                 | label_38:
    0x00051736 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x00051738 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0005173a ble 0x5175c                                       |         goto label_39;
                                                                 |     }
    0x0005173c ldr r3, [r4, 0x60]                                |     r3 = *((r4 + 0x60));
    0x0005173e movs r6, 0                                        |     r6 = 0;
    0x00051740 mov r7, r6                                        |     r7 = r6;
                                                                 |     do {
    0x00051742 ldr.w r1, [r3, r6, lsl 2]                         |         offset_0 = r6 << 2;
                                                                 |         r1 = *((r3 + offset_0));
                                                                 |         if (r1 != 0) {
    0x00051746 cbz r1, 0x51756                                   |             
    0x00051748 mov r0, r4                                        |             r0 = r4;
    0x0005174a bl 0x51444                                        |             fcn_00051444 (r0, r1);
    0x0005174e ldr r3, [r4, 0x60]                                |             r3 = *((r4 + 0x60));
    0x00051750 ldr r2, [r4, 0x18]                                |             r2 = *((r4 + 0x18));
    0x00051752 str.w r7, [r3, r6, lsl 2]                         |             __asm ("str.w r7, [r3, r6, lsl 2]");
                                                                 |         }
    0x00051756 adds r6, 1                                        |         r6++;
    0x00051758 cmp r6, r2                                        |         
    0x0005175a blt 0x51742                                       |         
                                                                 |     } while (r6 < r2);
                                                                 | label_39:
    0x0005175c ldr r0, [r4, 0x58]                                |     r0 = *((r4 + 0x58));
    0x0005175e ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x00051760 cmp r0, 0                                         |     
    0x00051762 it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x00051764 cmpne r1, 0                                       |         __asm ("cmpne r1, 0");
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x00051766 beq 0x5176c                                       |         
    0x00051768 bl 0x14448                                        |         fcn_00014448 (r0, r1);
                                                                 |     }
    0x0005176c ldr.w r7, [r4, 0xd0]                              |     r7 = *((r4 + 0xd0));
    0x00051770 mov sb, r5                                        |     sb = r5;
    0x00051772 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00051774 beq 0x517ec                                       |         goto label_40;
                                                                 |     }
                                                                 | label_0:
    0x00051776 ldr r1, [r7, 0x3c]                                |     r1 = *((r7 + 0x3c));
    0x00051778 ldr r3, [r7, 0x40]                                |     r3 = *((r7 + 0x40));
    0x0005177a ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x0005177c add.w r8, r1, r1, lsl 2                           |     r8 = r1 + (r1 << 2);
    0x00051780 cmp r3, 0                                         |     
    0x00051782 str.w r2, [r4, 0xd0]                              |     __asm ("str.w r2, [r4, 0xd0]");
    0x00051786 lsl.w r8, r8, 3                                   |     r8 <<= 3;
                                                                 |     if (r3 <= 0) {
    0x0005178a ble 0x517aa                                       |         goto label_41;
                                                                 |     }
    0x0005178c add.w r8, r8, 0x54                                |     r8 += 0x54;
    0x00051790 movs r6, 0                                        |     r6 = 0;
    0x00051792 add r8, r7                                        |     r8 += r7;
                                                                 |     do {
    0x00051794 ldr r1, [r8, 4]!                                  |         r1 = *((r8 += 4));
                                                                 |         if (r1 != 0) {
    0x00051798 cbz r1, 0x517a2                                   |             
    0x0005179a ldr r0, [r7]                                      |             r0 = *(r7);
    0x0005179c bl 0x51444                                        |             fcn_00051444 (r0, r1);
    0x000517a0 ldr r3, [r7, 0x40]                                |             r3 = *((r7 + 0x40));
                                                                 |         }
    0x000517a2 adds r6, 1                                        |         r6++;
    0x000517a4 cmp r6, r3                                        |         
    0x000517a6 blt 0x51794                                       |         
                                                                 |     } while (r6 < r3);
    0x000517a8 ldr r1, [r7, 0x3c]                                |     r1 = *((r7 + 0x3c));
                                                                 |     if (r1 != 0) {
                                                                 | label_41:
    0x000517aa cbz r1, 0x517b4                                   |         
    0x000517ac add.w r0, r7, 0x58                                |         r0 = r7 + 0x58;
    0x000517b0 bl 0x14448                                        |         fcn_00014448 (r0, r1);
                                                                 |     }
    0x000517b4 ldr r6, [r7, 0x28]                                |     r6 = *((r7 + 0x28));
    0x000517b6 ldr r3, [r7]                                      |     r3 = *(r7);
    0x000517b8 ldr r5, [r3]                                      |     r5 = *(r3);
                                                                 |     if (r6 == 0) {
    0x000517ba cbz r6, 0x517da                                   |         goto label_42;
                                                                 |     }
                                                                 |     do {
    0x000517bc ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
                                                                 |         if (r3 != 0) {
    0x000517be cbz r3, 0x517c4                                   |             
    0x000517c0 ldr r0, [r6, 8]                                   |             r0 = *((r6 + 8));
    0x000517c2 blx r3                                            |             uint32_t (*r3)(uint32_t) (r0);
                                                                 |         }
    0x000517c4 ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x000517c6 mov r1, r6                                        |         r1 = r6;
    0x000517c8 mov r0, r5                                        |         r0 = r5;
    0x000517ca str r3, [r7, 0x28]                                |         *((r7 + 0x28)) = r3;
    0x000517cc bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x000517d0 ldr r6, [r7, 0x28]                                |         r6 = *((r7 + 0x28));
    0x000517d2 cmp r6, 0                                         |         
    0x000517d4 bne 0x517bc                                       |         
                                                                 |     } while (r6 != 0);
    0x000517d6 ldr r3, [r7]                                      |     r3 = *(r7);
    0x000517d8 ldr r5, [r3]                                      |     r5 = *(r3);
                                                                 | label_42:
    0x000517da mov r1, r7                                        |     r1 = r7;
    0x000517dc mov r0, r5                                        |     r0 = r5;
    0x000517de bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x000517e2 ldr.w r7, [r4, 0xd0]                              |     r7 = *((r4 + 0xd0));
    0x000517e6 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000517e8 bne 0x51776                                       |         goto label_0;
                                                                 |     }
    0x000517ea mov r5, sb                                        |     r5 = sb;
                                                                 | label_40:
    0x000517ec ldr.w r6, [r4, 0xe0]                              |     r6 = *((r4 + 0xe0));
                                                                 |     if (r6 == 0) {
    0x000517f0 cbz r6, 0x51812                                   |         goto label_43;
                                                                 |     }
    0x000517f2 ldr r7, [r4]                                      |     r7 = *(r4);
                                                                 |     do {
    0x000517f4 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
                                                                 |         if (r3 != 0) {
    0x000517f6 cbz r3, 0x517fc                                   |             
    0x000517f8 ldr r0, [r6, 8]                                   |             r0 = *((r6 + 8));
    0x000517fa blx r3                                            |             uint32_t (*r3)(uint32_t) (r0);
                                                                 |         }
    0x000517fc ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x000517fe mov r1, r6                                        |         r1 = r6;
    0x00051800 mov r0, r7                                        |         r0 = r7;
    0x00051802 str.w r3, [r4, 0xe0]                              |         __asm ("str.w r3, [r4, 0xe0]");
    0x00051806 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x0005180a ldr.w r6, [r4, 0xe0]                              |         r6 = *((r4 + 0xe0));
    0x0005180e cmp r6, 0                                         |         
    0x00051810 bne 0x517f4                                       |         
                                                                 |     } while (r6 != 0);
                                                                 | label_43:
    0x00051812 ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x00051816 lsls r6, r3, 0x18                                 |     r6 = r3 << 0x18;
                                                                 |     if (r6 < r3) {
    0x00051818 bmi 0x51870                                       |         goto label_44;
                                                                 |     }
    0x0005181a ldr.w r2, [r5, 0xb8]                              |     r2 = *((r5 + 0xb8));
    0x0005181e lsls r1, r3, 0x19                                 |     r1 = r3 << 0x19;
    0x00051820 add.w r2, r2, -1                                  |     r2 += -1;
    0x00051824 str.w r2, [r5, 0xb8]                              |     __asm ("str.w r2, [r5, 0xb8]");
                                                                 |     if (r1 >= r3) {
    0x00051828 bmi 0x51834                                       |         
    0x0005182a ldr.w r3, [r5, 0xc0]                              |         r3 = *((r5 + 0xc0));
    0x0005182e subs r3, 1                                        |         r3--;
    0x00051830 str.w r3, [r5, 0xc0]                              |         __asm ("str.w r3, [r5, 0xc0]");
                                                                 |     }
    0x00051834 movs r3, 3                                        |     r3 = 3;
    0x00051836 strb.w r3, [r4, 0x95]                             |     *((r4 + 0x95)) = r3;
    0x0005183a ldrb.w r3, [r5, 0x57]                             |     r3 = *((r5 + 0x57));
                                                                 |     if (r3 != 0) {
    0x0005183e cbnz r3, 0x5186a                                  |         goto label_2;
                                                                 |     }
                                                                 | label_1:
    0x00051840 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00051842 cmp r3, 5                                         |     
                                                                 |     if (r3 == 5) {
    0x00051844 beq.w 0x51dac                                     |         goto label_45;
                                                                 |     }
                                                                 |     do {
    0x00051848 movs r0, 0                                        |         r0 = 0;
                                                                 | label_17:
    0x0005184a ldr.w r2, [pc, 0x848]                             |         r2 = *(0x00052094);
    0x0005184e ldr.w r3, [pc, 0x840]                             |         r3 = *(0x52092);
    0x00051852 add r2, pc                                        |         r2 += pc;
    0x00051854 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00051856 ldr r2, [r3]                                      |         r2 = *(0x52092);
    0x00051858 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0005185a eors r2, r3                                       |         r2 ^= r3;
    0x0005185c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00051860 bne.w 0x51d3a                                     |             goto label_46;
                                                                 |         }
    0x00051864 add sp, 0x34                                      |         
    0x00051866 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_2:
    0x0005186a movs r3, 7                                        |         r3 = 7;
    0x0005186c str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
    0x0005186e b 0x51848                                         |         
                                                                 |     } while (1);
                                                                 | label_44:
    0x00051870 ldr.w r3, [r4, 0x9c]                              |     r3 = *((r4 + 0x9c));
                                                                 |     if (r3 != 0) {
    0x00051874 cbz r3, 0x5187c                                   |         
    0x00051876 mov r0, r4                                        |         r0 = r4;
    0x00051878 bl 0x14db0                                        |         fcn_00014db0 (r0);
                                                                 |     }
    0x0005187c ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x0005187e mov r6, r2                                        |     r6 = r2;
    0x00051880 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00051882 bne 0x5196c                                       |         goto label_47;
                                                                 |     }
                                                                 | label_6:
    0x00051884 ldrd r1, r3, [r4, 0x40]                           |     __asm ("ldrd r1, r3, [r4, 0x40]");
    0x00051888 cmp r1, 1                                         |     
    0x0005188a sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r1 >= 1) {
    0x0005188e blt 0x518aa                                       |         
    0x00051890 ldr.w r1, [pc, 0x804]                             |         r1 = *(0x00052098);
    0x00051894 movw r2, 0x313                                    |         r2 = 0x313;
    0x00051898 movs r3, 2                                        |         r3 = 2;
    0x0005189a str r2, [r4, 0x24]                                |         *((r4 + 0x24)) = r2;
    0x0005189c mov r0, r4                                        |         r0 = r4;
    0x0005189e strb.w r3, [r4, 0x92]                             |         *((r4 + 0x92)) = r3;
    0x000518a2 add r1, pc                                        |         r1 += pc;
    0x000518a4 bl 0x20e24                                        |         fcn_00020e24 (r0);
    0x000518a8 ldr r2, [r4, 0x24]                                |         r2 = *((r4 + 0x24));
                                                                 |     }
    0x000518aa ldr.w r3, [r5, 0x17c]                             |     r3 = *((r5 + 0x17c));
    0x000518ae cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x000518b0 ble 0x518b8                                       |         
    0x000518b2 ldr.w r1, [r5, 0x194]                             |         r1 = *((r5 + 0x194));
                                                                 |         if (r1 == 0) {
    0x000518b6 cbz r1, 0x518d4                                   |             goto label_48;
                                                                 |         }
                                                                 |     }
    0x000518b8 ldrb.w r1, [r5, 0x55]                             |     r1 = *((r5 + 0x55));
                                                                 |     if (r1 != 0) {
    0x000518bc cbz r1, 0x518d4                                   |         
                                                                 | label_10:
    0x000518be ldrb.w r1, [r4, 0x96]                             |         r1 = *((r4 + 0x96));
    0x000518c2 ldr.w r0, [r5, 0xc0]                              |         r0 = *((r5 + 0xc0));
    0x000518c6 eor r1, r1, 0x40                                  |         r1 ^= 0x40;
    0x000518ca ubfx r1, r1, 6, 1                                 |         r1 = (r1 >> 6) & ((1 << 1) - 1);
    0x000518ce cmp r1, r0                                        |         
                                                                 |         if (r1 == r0) {
    0x000518d0 beq.w 0x51aac                                     |             goto label_49;
                                                                 |         }
                                                                 |     }
                                                                 | label_48:
    0x000518d4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000518d6 bne.w 0x51a98                                     |         goto label_20;
                                                                 |     }
                                                                 | label_11:
    0x000518da movs r6, 1                                        |     r6 = 1;
                                                                 | label_12:
    0x000518dc ldr r3, [r4]                                      |     r3 = *(r4);
    0x000518de ldr.w r3, [r3, 0x1f8]                             |     r3 = *((r3 + 0x1f8));
                                                                 |     if (r3 != 0) {
    0x000518e2 cbz r3, 0x518ec                                   |         
    0x000518e4 ldr r3, [r4, 0x30]                                |         r3 = *((r4 + 0x30));
    0x000518e6 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000518e8 bne.w 0x51b3c                                     |             goto label_50;
                                                                 |         }
                                                                 |     }
                                                                 | label_15:
    0x000518ec ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x000518f0 lsls r2, r3, 0x1b                                 |     r2 = r3 << 0x1b;
                                                                 |     if (r2 < r3) {
    0x000518f2 bpl 0x51918                                       |         
    0x000518f4 cmp r6, 2                                         |         
                                                                 |         if (r6 == 2) {
    0x000518f6 beq.w 0x51a6c                                     |             goto label_51;
                                                                 |         }
                                                                 | label_4:
    0x000518fa ldrd r2, r0, [r4, 0x28]                           |         __asm ("ldrd r2, r0, [r4, 0x28]");
    0x000518fe ldr r1, [r5, 0x70]                                |         r1 = *((r5 + 0x70));
    0x00051900 adds r1, r1, r2                                   |         r1 += r2;
    0x00051902 str r1, [r5, 0x70]                                |         *((r5 + 0x70)) = r1;
    0x00051904 ldr r1, [r5, 0x74]                                |         r1 = *((r5 + 0x74));
    0x00051906 adc.w r1, r0, r1                                  |         __asm ("adc.w r1, r0, r1");
    0x0005190a str r1, [r5, 0x74]                                |         *((r5 + 0x74)) = r1;
                                                                 | label_9:
    0x0005190c vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x00051910 strd r2, r0, [r5, 0x68]                           |         __asm ("strd r2, r0, [r5, 0x68]");
    0x00051914 vstr d16, [r4, 0x28]                              |         __asm ("vstr d16, [r4, 0x28]");
                                                                 |     }
                                                                 | label_3:
    0x00051918 ldr.w r2, [r4, 0x9c]                              |     r2 = *((r4 + 0x9c));
                                                                 |     if (r2 != 0) {
    0x0005191c cbz r2, 0x51928                                   |         
    0x0005191e mov r0, r4                                        |         r0 = r4;
    0x00051920 bl 0x14bc8                                        |         fcn_00014bc8 (r0);
    0x00051924 ldrb.w r3, [r4, 0x96]                             |         r3 = *((r4 + 0x96));
                                                                 |     }
    0x00051928 sxtb r1, r3                                       |     r1 = (int32_t) r3;
    0x0005192a lsls r3, r3, 0x19                                 |     r3 <<= 0x19;
    0x0005192c it pl                                             |     
                                                                 |     if (r3 < r3) {
    0x0005192e ldrpl r3, [r5, 0xc0]                              |         r3 = *((r5 + 0xc0));
                                                                 |     }
    0x00051932 ldr.w r2, [r5, 0xb8]                              |     r2 = *((r5 + 0xb8));
    0x00051936 itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x00051938 addpl r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
                                                                 |     if (r3 >= r3) {
    0x0005193c str.w r3, [r5, 0xc0]                              |         __asm ("str.w r3, [r5, 0xc0]");
                                                                 |     }
    0x00051940 cmp r1, 0                                         |     
    0x00051942 it lt                                             |     
                                                                 |     if (r1 >= 0) {
    0x00051944 ldrlt r3, [r5, 0xbc]                              |         r3 = *((r5 + 0xbc));
                                                                 |     }
    0x00051948 add.w r2, r2, -1                                  |     r2 += -1;
    0x0005194c str.w r2, [r5, 0xb8]                              |     __asm ("str.w r2, [r5, 0xb8]");
    0x00051950 itt lt                                            |     
                                                                 |     if (r1 >= 0) {
    0x00051952 addlt r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
                                                                 |     if (r1 < 0) {
    0x00051956 str.w r3, [r5, 0xbc]                              |         __asm ("str.w r3, [r5, 0xbc]");
                                                                 |     }
    0x0005195a movs r3, 3                                        |     r3 = 3;
    0x0005195c strb.w r3, [r4, 0x95]                             |     *((r4 + 0x95)) = r3;
    0x00051960 ldrb.w r3, [r5, 0x57]                             |     r3 = *((r5 + 0x57));
    0x00051964 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051966 beq.w 0x51840                                     |         goto label_1;
                                                                 |     }
    0x0005196a b 0x5186a                                         |     goto label_2;
                                                                 | label_47:
    0x0005196c uxtb r1, r2                                       |     r1 = (int8_t) r2;
    0x0005196e sub.w r0, r1, 7                                   |     r0 = r1 - 7;
    0x00051972 clz r0, r0                                        |     r0 &= r0;
    0x00051976 lsrs r0, r0, 5                                    |     r0 >>= 5;
    0x00051978 cmp r1, 0xa                                       |     
    0x0005197a ite ne                                            |     
                                                                 |     if (r1 == 0xa) {
    0x0005197c movne r6, r0                                      |         r6 = r0;
                                                                 |     }
                                                                 |     if (r1 != 0xa) {
    0x0005197e orreq r6, r0, 1                                   |         r6 = r0 | 1;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x00051982 cbz r6, 0x519e6                                   |         goto label_52;
                                                                 |     }
    0x00051984 ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
                                                                 | label_5:
    0x00051988 cmp r1, 0xd                                       |     
    0x0005198a it eq                                             |     
                                                                 |     if (r1 != 0xd) {
    0x0005198c orreq r0, r0, 1                                   |         r0 |= 1;
                                                                 |     }
    0x00051990 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00051992 beq 0x51a1e                                       |         goto label_53;
                                                                 |     }
    0x00051994 lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 >= r3) {
    0x00051996 bpl 0x51a1e                                       |         goto label_53;
                                                                 |     }
    0x00051998 ldr.w r2, [r5, 0x17c]                             |     r2 = *((r5 + 0x17c));
    0x0005199c cmp r2, 0                                         |     
                                                                 |     if (r2 > 0) {
    0x0005199e ble 0x519a8                                       |         
    0x000519a0 ldr.w r2, [r5, 0x194]                             |         r2 = *((r5 + 0x194));
    0x000519a4 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000519a6 beq 0x51aa8                                       |             goto label_54;
                                                                 |         }
                                                                 |     }
    0x000519a8 ldrb.w r2, [r5, 0x55]                             |     r2 = *((r5 + 0x55));
    0x000519ac cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000519ae beq 0x51aa8                                       |         goto label_54;
                                                                 |     }
    0x000519b0 ldr.w r2, [r5, 0xc0]                              |     r2 = *((r5 + 0xc0));
    0x000519b4 eor r3, r3, 0x40                                  |     r3 ^= 0x40;
    0x000519b8 ubfx r3, r3, 6, 1                                 |     r3 = (r3 >> 6) & ((1 << 1) - 1);
    0x000519bc cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x000519be bne 0x51aa8                                       |         goto label_54;
                                                                 |     }
    0x000519c0 movs r6, 2                                        |     r6 = 2;
                                                                 | label_8:
    0x000519c2 movs r1, 0                                        |     r1 = 0;
    0x000519c4 mov r0, r5                                        |     r0 = r5;
    0x000519c6 bl 0x51260                                        |     fcn_00051260 (r0, r1);
    0x000519ca vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000519ce vstr d16, [r4, 0x28]                              |     __asm ("vstr d16, [r4, 0x28]");
                                                                 | label_13:
    0x000519d2 movs r3, 0                                        |     r3 = 0;
    0x000519d4 str.w r3, [r5, 0x1f8]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x000519d8 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000519da bne 0x51aa8                                       |         goto label_54;
                                                                 |     }
                                                                 | label_14:
    0x000519dc ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x000519e0 lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
                                                                 |     if (r1 >= r3) {
    0x000519e2 bpl 0x51918                                       |         goto label_3;
                                                                 |     }
    0x000519e4 b 0x518fa                                         |     goto label_4;
                                                                 | label_52:
    0x000519e6 and r3, r2, 0xfb                                  |     r3 = r2 & 0xfb;
    0x000519ea cmp r3, 9                                         |     
                                                                 |     if (r3 != 9) {
    0x000519ec bne 0x51a72                                       |         goto label_55;
                                                                 |     }
    0x000519ee ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x000519f2 eor r6, r3, 0x40                                  |     r6 = r3 ^ 0x40;
    0x000519f6 ubfx r6, r6, 6, 1                                 |     r6 = (r6 >> 6) & ((1 << 1) - 1);
    0x000519fa cmp r1, 9                                         |     
    0x000519fc it ne                                             |     
                                                                 |     if (r1 == 9) {
    0x000519fe orrne r6, r6, 1                                   |         r6 |= 1;
                                                                 |     }
    0x00051a02 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051a04 bne 0x51988                                       |         goto label_5;
                                                                 |     }
    0x00051a06 ldr.w r3, [r5, 0x17c]                             |     r3 = *((r5 + 0x17c));
    0x00051a0a cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00051a0c ble.w 0x51d02                                     |         goto label_56;
                                                                 |     }
    0x00051a10 ldr.w r1, [r5, 0x194]                             |     r1 = *((r5 + 0x194));
    0x00051a14 movs r6, 1                                        |     r6 = 1;
                                                                 |     if (r1 != 0) {
    0x00051a16 cbnz r1, 0x51a8e                                  |         goto label_57;
                                                                 |     }
                                                                 | label_7:
    0x00051a18 ldrb.w r0, [r4, 0x92]                             |     r0 = *((r4 + 0x92));
    0x00051a1c b 0x51a9e                                         |     goto label_58;
                                                                 | label_53:
    0x00051a1e mov.w r1, 0x204                                   |     r1 = 0x204;
    0x00051a22 mov r0, r5                                        |     r0 = r5;
    0x00051a24 bl 0x51260                                        |     fcn_00051260 (r0, r1);
    0x00051a28 movs r6, 1                                        |     r6 = 1;
    0x00051a2a mov r0, r5                                        |     r0 = r5;
    0x00051a2c bl 0x145d8                                        |     fcn_000145d8 (r0);
    0x00051a30 strb.w r6, [r5, 0x55]                             |     *((r5 + 0x55)) = r6;
    0x00051a34 ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x00051a36 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00051a3a vstr d16, [r4, 0x28]                              |     __asm ("vstr d16, [r4, 0x28]");
    0x00051a3e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00051a40 beq.w 0x51884                                     |         goto label_6;
                                                                 |     }
    0x00051a44 ldr.w r3, [r5, 0x17c]                             |     r3 = *((r5 + 0x17c));
    0x00051a48 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00051a4a ble 0x51a54                                       |         goto label_59;
                                                                 |     }
    0x00051a4c ldr.w r3, [r5, 0x194]                             |     r3 = *((r5 + 0x194));
    0x00051a50 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051a52 beq 0x51a18                                       |         goto label_7;
                                                                 |     }
                                                                 | label_59:
    0x00051a54 ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x00051a58 ldr.w r2, [r5, 0xc0]                              |     r2 = *((r5 + 0xc0));
    0x00051a5c eor r3, r3, 0x40                                  |     r3 ^= 0x40;
    0x00051a60 ubfx r3, r3, 6, 1                                 |     r3 = (r3 >> 6) & ((1 << 1) - 1);
    0x00051a64 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00051a66 bne 0x51a98                                       |         goto label_20;
                                                                 |     }
    0x00051a68 movs r6, 0                                        |     r6 = 0;
    0x00051a6a b 0x519c2                                         |     goto label_8;
                                                                 | label_51:
    0x00051a6c movs r2, 0                                        |     r2 = 0;
    0x00051a6e mov r0, r2                                        |     r0 = r2;
    0x00051a70 b 0x5190c                                         |     goto label_9;
                                                                 | label_55:
    0x00051a72 ldrb.w r1, [r4, 0x92]                             |     r1 = *((r4 + 0x92));
    0x00051a76 cmp r1, 3                                         |     
    0x00051a78 mov r0, r1                                        |     r0 = r1;
                                                                 |     if (r1 == 3) {
    0x00051a7a beq.w 0x51884                                     |         goto label_6;
                                                                 |     }
    0x00051a7e ldr.w r3, [r5, 0x17c]                             |     r3 = *((r5 + 0x17c));
    0x00051a82 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00051a84 ble.w 0x51d18                                     |         goto label_60;
                                                                 |     }
    0x00051a88 ldr.w r1, [r5, 0x194]                             |     r1 = *((r5 + 0x194));
                                                                 |     if (r1 == 0) {
    0x00051a8c cbz r1, 0x51aa4                                   |         goto label_21;
                                                                 |     }
                                                                 | label_57:
    0x00051a8e ldrb.w r1, [r5, 0x55]                             |     r1 = *((r5 + 0x55));
    0x00051a92 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00051a94 bne.w 0x518be                                     |         goto label_10;
                                                                 |     }
                                                                 | label_20:
    0x00051a98 ldrb.w r1, [r4, 0x92]                             |     r1 = *((r4 + 0x92));
                                                                 | label_22:
    0x00051a9c mov r0, r1                                        |     r0 = r1;
                                                                 | label_58:
    0x00051a9e cmp r0, 3                                         |     
                                                                 |     if (r0 == 3) {
    0x00051aa0 beq.w 0x518da                                     |         goto label_11;
                                                                 |     }
                                                                 | label_21:
    0x00051aa4 cmp r0, 2                                         |     
                                                                 |     if (r0 != 2) {
    0x00051aa6 bne 0x51b1c                                       |         goto label_61;
                                                                 |     }
                                                                 | label_54:
    0x00051aa8 movs r6, 2                                        |     r6 = 2;
    0x00051aaa b 0x518dc                                         |     goto label_12;
                                                                 |     if (r2 == 0) {
                                                                 | label_49:
    0x00051aac cbz r2, 0x51ac6                                   |         goto label_62;
                                                                 |     }
    0x00051aae ldrb.w r2, [r4, 0x92]                             |     r2 = *((r4 + 0x92));
    0x00051ab2 eor r6, r6, 1                                     |     r6 ^= 1;
    0x00051ab6 cmp r2, 3                                         |     
    0x00051ab8 ite ne                                            |     
                                                                 |     if (r2 == 3) {
    0x00051aba movne r6, 0                                       |         r6 = 0;
                                                                 |     }
                                                                 |     if (r2 != 3) {
    0x00051abc andeq r6, r6, 1                                   |         r6 &= 1;
                                                                 |     }
    0x00051ac0 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051ac2 beq.w 0x519c2                                     |         goto label_8;
                                                                 |     }
                                                                 | label_62:
    0x00051ac6 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00051ac8 ldr.w r1, [r0, 0x208]                             |     r1 = *((r0 + 0x208));
    0x00051acc ldr.w r2, [r0, 0x200]                             |     r2 = *((r0 + 0x200));
    0x00051ad0 adds r2, r2, r1                                   |     r2 += r1;
    0x00051ad2 ldr.w r1, [r0, 0x204]                             |     r1 = *((r0 + 0x204));
    0x00051ad6 ldr.w r0, [r0, 0x20c]                             |     r0 = *((r0 + 0x20c));
    0x00051ada adc.w r1, r1, r0                                  |     __asm ("adc.w r1, r1, r0");
    0x00051ade cmp r2, 1                                         |     
    0x00051ae0 sbcs r1, r1, 0                                    |     __asm ("sbcs r1, r1, 0");
                                                                 |     if (r2 < 1) {
    0x00051ae4 blt 0x51b86                                       |         goto label_63;
                                                                 |     }
    0x00051ae6 ldr.w r1, [pc, 0x5b4]                             |     
    0x00051aea movs r3, 2                                        |     r3 = 2;
    0x00051aec movw r6, 0x313                                    |     r6 = 0x313;
    0x00051af0 strb.w r3, [r4, 0x92]                             |     *((r4 + 0x92)) = r3;
    0x00051af4 mov r0, r4                                        |     r0 = r4;
    0x00051af6 str r6, [r4, 0x24]                                |     *((r4 + 0x24)) = r6;
    0x00051af8 add r1, pc                                        |     r1 = 0xa3b9a;
    0x00051afa bl 0x20e24                                        |     fcn_00020e24 (r0);
    0x00051afe ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x00051b02 lsls r7, r3, 0x19                                 |     r7 = r3 << 0x19;
                                                                 |     if (r7 < r3) {
    0x00051b04 bmi 0x51b98                                       |         goto label_64;
                                                                 |     }
                                                                 | label_16:
    0x00051b06 movs r1, 0                                        |     r1 = 0;
    0x00051b08 mov r0, r5                                        |     r0 = r5;
    0x00051b0a str r6, [r4, 0x24]                                |     *((r4 + 0x24)) = r6;
    0x00051b0c bl 0x51260                                        |     fcn_00051260 (r0, r1);
    0x00051b10 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00051b14 vstr d16, [r4, 0x28]                              |     __asm ("vstr d16, [r4, 0x28]");
                                                                 | label_18:
    0x00051b18 movs r6, 0                                        |     r6 = 0;
    0x00051b1a b 0x519d2                                         |     goto label_13;
                                                                 | label_61:
    0x00051b1c mov.w r1, 0x204                                   |     r1 = 0x204;
    0x00051b20 mov r0, r5                                        |     r0 = r5;
    0x00051b22 bl 0x51260                                        |     fcn_00051260 (r0, r1);
    0x00051b26 mov r0, r5                                        |     r0 = r5;
    0x00051b28 bl 0x145d8                                        |     fcn_000145d8 (r0);
    0x00051b2c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00051b30 movs r3, 1                                        |     r3 = 1;
    0x00051b32 strb.w r3, [r5, 0x55]                             |     *((r5 + 0x55)) = r3;
    0x00051b36 vstr d16, [r4, 0x28]                              |     __asm ("vstr d16, [r4, 0x28]");
    0x00051b3a b 0x519dc                                         |     goto label_14;
                                                                 | label_50:
    0x00051b3c mov r1, r6                                        |     r1 = r6;
    0x00051b3e mov r0, r4                                        |     r0 = r4;
    0x00051b40 bl 0x5000c                                        |     r0 = fcn_0005000c (r0, r1);
    0x00051b44 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00051b46 beq.w 0x518ec                                     |         goto label_15;
                                                                 |     }
    0x00051b4a ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
                                                                 |     if (r3 == 0) {
    0x00051b4c cbz r3, 0x51b74                                   |         goto label_65;
                                                                 |     }
    0x00051b4e uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00051b50 cmp r3, 0x13                                      |     
    0x00051b52 beq 0x51b74                                       |     
                                                                 |     while (1) {
    0x00051b54 mov.w r1, 0x204                                   |         r1 = 0x204;
    0x00051b58 mov r0, r5                                        |         r0 = r5;
    0x00051b5a bl 0x51260                                        |         fcn_00051260 (r0, r1);
    0x00051b5e mov r0, r5                                        |         r0 = r5;
    0x00051b60 bl 0x145d8                                        |         fcn_000145d8 (r0);
    0x00051b64 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x00051b68 movs r3, 1                                        |         r3 = 1;
    0x00051b6a strb.w r3, [r5, 0x55]                             |         *((r5 + 0x55)) = r3;
    0x00051b6e vstr d16, [r4, 0x28]                              |         __asm ("vstr d16, [r4, 0x28]");
    0x00051b72 b 0x518ec                                         |         goto label_15;
                                                                 | label_65:
    0x00051b74 ldr r1, [r4, 0x7c]                                |         r1 = *((r4 + 0x7c));
    0x00051b76 str r0, [r4, 0x24]                                |         *((r4 + 0x24)) = r0;
                                                                 |         if (r1 != 0) {
    0x00051b78 cbz r1, 0x51b80                                   |             
    0x00051b7a mov r0, r5                                        |             r0 = r5;
    0x00051b7c bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x00051b80 movs r3, 0                                        |         r3 = 0;
    0x00051b82 str r3, [r4, 0x7c]                                |         *((r4 + 0x7c)) = r3;
    0x00051b84 b 0x51b54                                         |         
                                                                 |     }
                                                                 | label_63:
    0x00051b86 ldr r2, [r5, 0x24]                                |     r2 = *((r5 + 0x24));
    0x00051b88 and r7, r2, 2                                     |     r7 = r2 & 2;
                                                                 |     if (r7 != 0) {
    0x00051b8c cbz r7, 0x51ba8                                   |         
    0x00051b8e bic r2, r2, 2                                     |         r2 = BIT_MASK (r2, 2);
    0x00051b92 movs r6, 0xb                                      |         r6 = 0xb;
    0x00051b94 str r2, [r5, 0x24]                                |         *((r5 + 0x24)) = r2;
    0x00051b96 b 0x51b06                                         |         goto label_16;
                                                                 | label_64:
    0x00051b98 ldr.w r3, [r4, 0x9c]                              |         r3 = *((r4 + 0x9c));
                                                                 |         if (r3 != 0) {
    0x00051b9c cbz r3, 0x51ba4                                   |             
    0x00051b9e mov r0, r4                                        |             r0 = r4;
    0x00051ba0 bl 0x14bc8                                        |             fcn_00014bc8 (r0);
                                                                 |         }
    0x00051ba4 movs r0, 1                                        |         r0 = 1;
    0x00051ba6 b 0x5184a                                         |         goto label_17;
                                                                 |     }
    0x00051ba8 ldr.w r8, [r5, 0x194]                             |     r8 = *((r5 + 0x194));
    0x00051bac mov sl, r7                                        |     sl = r7;
    0x00051bae mov fp, r4                                        |     
    0x00051bb0 str.w r7, [r5, 0x194]                             |     __asm ("str.w r7, aav.0x000000ff");
    0x00051bb4 sub.w sb, r8, 4                                   |     sb = r8 - 4;
                                                                 | label_19:
    0x00051bb8 cmp r7, r3                                        |     
                                                                 |     if (r7 >= r3) {
    0x00051bba bge 0x51c14                                       |         goto label_66;
                                                                 |     }
                                                                 |     do {
    0x00051bbc ldr r2, [sb, 4]!                                  |         r2 = *((sb += 4));
    0x00051bc0 ldr r4, [r2, 8]                                   |         r4 = *((r2 + 8));
    0x00051bc2 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00051bc4 beq.w 0x51cfe                                     |             goto label_67;
                                                                 |         }
    0x00051bc8 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00051bca ldr r2, [r2, 0x3c]                                |         r2 = *((r2 + 0x3c));
    0x00051bcc cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00051bce beq.w 0x51cfe                                     |             goto label_67;
                                                                 |         }
    0x00051bd2 mov r0, r4                                        |         r0 = r4;
    0x00051bd4 blx r2                                            |         uint32_t (*r2)(uint32_t) (r0);
    0x00051bd6 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x00051bd8 mov r6, r0                                        |         r6 = r0;
                                                                 |         if (r3 != 0) {
    0x00051bda cbz r3, 0x51c04                                   |             
    0x00051bdc ldr.w r1, [fp, 0x7c]                              |             r1 = *(arg_7ch);
    0x00051be0 ldr.w r0, [fp]                                    |             r0 = *(fp);
                                                                 |             if (r1 != 0) {
    0x00051be4 cbz r1, 0x51bf0                                   |                 
    0x00051be6 str r0, [sp, 0xc]                                 |                 var_ch = r0;
    0x00051be8 bl 0x137d0                                        |                 fcn_000137d0 (r0, r1);
    0x00051bec ldr r3, [r4, 8]                                   |                 r3 = *((r4 + 8));
    0x00051bee ldr r0, [sp, 0xc]                                 |                 r0 = var_ch;
                                                                 |             }
    0x00051bf0 mov r1, r3                                        |             r1 = r3;
    0x00051bf2 bl 0x1e948                                        |             fcn_0001e948 (r0, r1);
    0x00051bf6 str.w r0, [fp, 0x7c]                              |             __asm ("str.w r0, [arg_7ch]");
    0x00051bfa ldr r0, [r4, 8]                                   |             r0 = *((r4 + 8));
    0x00051bfc blx 0x9c24                                        |             fcn_00009c24 ();
    0x00051c00 str.w sl, [r4, 8]                                 |             __asm ("str.w sl, [r4, 8]");
                                                                 |         }
    0x00051c04 adds r7, 1                                        |         r7++;
    0x00051c06 cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x00051c08 bne.w 0x51e7c                                     |             goto label_68;
                                                                 |         }
    0x00051c0c ldr.w r3, [r5, 0x17c]                             |         r3 = *((r5 + 0x17c));
    0x00051c10 cmp r7, r3                                        |         
    0x00051c12 blt 0x51bbc                                       |         
                                                                 |     } while (r7 < r3);
                                                                 | label_66:
    0x00051c14 ldr.w sl, [pc, 0x488]                             |     sl = *(0x000520a0);
    0x00051c18 movs r1, 0                                        |     r1 = 0;
    0x00051c1a ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051c1c mov r4, fp                                        |     r4 = fp;
    0x00051c1e str.w r8, [r5, 0x194]                             |     __asm ("str.w r8, aav.0x000000ff");
    0x00051c22 mov sb, r1                                        |     sb = r1;
    0x00051c24 mov r8, r1                                        |     r8 = r1;
    0x00051c26 add sl, pc                                        |     sl += pc;
                                                                 | label_23:
    0x00051c28 cmp r2, r8                                        |     
                                                                 |     if (r2 <= r8) {
    0x00051c2a ble 0x51c46                                       |         goto label_69;
                                                                 |     }
                                                                 |     do {
    0x00051c2c ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00051c2e lsl.w r6, r8, 4                                   |         r6 = r8 << 4;
    0x00051c32 add r3, r6                                        |         r3 += r6;
    0x00051c34 ldr r7, [r3, 4]                                   |         r7 = *((r3 + 4));
                                                                 |         if (r7 != 0) {
    0x00051c36 cbz r7, 0x51c3e                                   |             
    0x00051c38 ldrb r0, [r7, 8]                                  |             r0 = *((r7 + 8));
    0x00051c3a cmp r0, 2                                         |             
                                                                 |             if (r0 == 2) {
    0x00051c3c beq 0x51d3e                                       |                 goto label_70;
                                                                 |             }
                                                                 |         }
    0x00051c3e add.w r8, r8, 1                                   |         r8++;
    0x00051c42 cmp r2, r8                                        |         
    0x00051c44 bgt 0x51c2c                                       |         
                                                                 |     } while (r2 > r8);
                                                                 |     if (r1 != 0) {
                                                                 | label_69:
    0x00051c46 cbz r1, 0x51c5a                                   |         
    0x00051c48 ldr.w r3, [r5, 0xe8]                              |         r3 = *((r5 + 0xe8));
                                                                 |         if (r3 == 0) {
    0x00051c4c cbz r3, 0x51c5a                                   |             goto label_71;
                                                                 |         }
    0x00051c4e ldr.w r0, [r5, 0xe4]                              |         r0 = *((r5 + 0xe4));
    0x00051c52 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t) (r0);
    0x00051c54 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00051c56 bne.w 0x51e84                                     |             goto label_72;
                                                                 |         }
                                                                 |     }
                                                                 | label_71:
    0x00051c5a ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00051c5c mov.w sl, 0                                       |     sl = 0;
    0x00051c60 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00051c62 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00051c64 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00051c66 ldrb r6, [r3, 0xf]                                |     r6 = *((r3 + 0xf));
                                                                 |     if (r6 == 0) {
    0x00051c68 cbnz r6, 0x51c96                                  |         
    0x00051c6a ldr.w sl, [r3, 0xb8]                              |         sl = *((r3 + 0xb8));
    0x00051c6e cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x00051c72 beq 0x51c96                                       |             goto label_73;
                                                                 |         }
    0x00051c74 mov r0, sl                                        |         r0 = sl;
    0x00051c76 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00051c7a bics r8, r0, 0xc0000000                           |         __asm ("bics r8, r0, aav.0x000000ff");
    0x00051c7e ite eq                                            |         
                                                                 |         if (sl != 0) {
    0x00051c80 moveq r7, 1                                       |             r7 = 1;
                                                                 |         }
                                                                 |         if (sl == 0) {
    0x00051c82 movne r7, 0                                       |             r7 = 0;
                                                                 |         }
    0x00051c84 cmp.w sb, 1                                       |         
    0x00051c88 it le                                             |         
                                                                 |         if (sb > 1) {
    0x00051c8a orrle r7, r7, 1                                   |             r7 |= 1;
                                                                 |         }
    0x00051c8e cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x00051c90 beq.w 0x51dd8                                     |             goto label_74;
                                                                 |         }
    0x00051c94 mov sl, r6                                        |         sl = r6;
                                                                 |     }
                                                                 | label_73:
    0x00051c96 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051c98 cmp r2, sl                                        |     
                                                                 |     if (r2 <= sl) {
    0x00051c9a ble 0x51cb6                                       |         goto label_75;
                                                                 |     }
                                                                 |     do {
    0x00051c9c ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00051c9e add.w r3, r3, sl, lsl 4                           |         r3 += (sl << 4);
    0x00051ca2 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00051ca4 cbz r0, 0x51cae                                   |             
    0x00051ca6 ldrb r3, [r0, 8]                                  |             r3 = *((r0 + 8));
    0x00051ca8 cmp r3, 2                                         |             
                                                                 |             if (r3 == 2) {
    0x00051caa beq.w 0x51dc8                                     |                 goto label_76;
                                                                 |             }
                                                                 |         }
                                                                 | label_25:
    0x00051cae add.w sl, sl, 1                                   |         sl++;
    0x00051cb2 cmp r2, sl                                        |         
    0x00051cb4 bgt 0x51c9c                                       |         
                                                                 |     } while (r2 > sl);
                                                                 | label_75:
    0x00051cb6 movs r7, 0                                        |     r7 = 0;
    0x00051cb8 cmp r2, r7                                        |     
                                                                 |     if (r2 <= r7) {
    0x00051cba ble 0x51cd8                                       |         goto label_29;
                                                                 |     }
                                                                 |     do {
    0x00051cbc ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00051cbe add.w r3, r3, r7, lsl 4                           |         r3 += (r7 << 4);
    0x00051cc2 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00051cc4 cbz r0, 0x51cd2                                   |             
    0x00051cc6 movs r1, 0                                        |             r1 = 0;
    0x00051cc8 bl 0x4a6d0                                        |             r0 = fcn_0004a6d0 (r0, r1);
    0x00051ccc cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x00051cce bne 0x51dd0                                       |                 goto label_77;
                                                                 |             }
    0x00051cd0 ldr r2, [r5, 0x14]                                |             r2 = *((r5 + 0x14));
                                                                 |         }
    0x00051cd2 adds r7, 1                                        |         r7++;
    0x00051cd4 cmp r2, r7                                        |         
    0x00051cd6 bgt 0x51cbc                                       |         
                                                                 |     } while (r2 > r7);
                                                                 | label_29:
    0x00051cd8 movs r1, 0x40                                     |     r1 = 0x40;
    0x00051cda mov r0, r5                                        |     r0 = r5;
    0x00051cdc bl 0x14030                                        |     fcn_00014030 (r0, r1);
    0x00051ce0 ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x00051ce2 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00051ce4 vmov.i32 q8, 0                                    |     __asm ("vmov.i32 q8, 0");
    0x00051ce8 bic r2, r2, 0x80000                               |     r2 = BIT_MASK (r2, 0x80000);
    0x00051cec bic r3, r3, 1                                     |     r3 = BIT_MASK (r3, 1);
    0x00051cf0 str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00051cf2 vstr d16, [r5, 0x200]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x00051cf6 vstr d17, [r5, 0x208]                             |     __asm ("vstr d17, aav.0x000000ff");
    0x00051cfa str r3, [r5, 0x18]                                |     *((r5 + 0x18)) = r3;
    0x00051cfc b 0x51b18                                         |     goto label_18;
                                                                 | label_67:
    0x00051cfe adds r7, 1                                        |     r7++;
    0x00051d00 b 0x51bb8                                         |     goto label_19;
                                                                 | label_56:
    0x00051d02 ldrb.w r3, [r5, 0x55]                             |     r3 = *((r5 + 0x55));
    0x00051d06 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051d08 beq.w 0x51a18                                     |         goto label_7;
                                                                 |     }
    0x00051d0c ldr.w r6, [r5, 0xc0]                              |     r6 = *((r5 + 0xc0));
    0x00051d10 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051d12 bne.w 0x51a98                                     |         goto label_20;
                                                                 |     }
    0x00051d16 b 0x519c2                                         |     goto label_8;
                                                                 | label_60:
    0x00051d18 ldrb.w r3, [r5, 0x55]                             |     r3 = *((r5 + 0x55));
    0x00051d1c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051d1e beq.w 0x51aa4                                     |         goto label_21;
                                                                 |     }
    0x00051d22 ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x00051d26 ldr.w r2, [r5, 0xc0]                              |     r2 = *((r5 + 0xc0));
    0x00051d2a eor r3, r3, 0x40                                  |     r3 ^= 0x40;
    0x00051d2e ubfx r3, r3, 6, 1                                 |     r3 = (r3 >> 6) & ((1 << 1) - 1);
    0x00051d32 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00051d34 bne.w 0x51a9c                                     |         goto label_22;
                                                                 |     }
    0x00051d38 b 0x519c2                                         |     goto label_8;
                                                                 | label_46:
    0x00051d3a blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_70:
    0x00051d3e ldrb r2, [r7, 9]                                  |     r2 = *((r7 + 9));
                                                                 |     if (r2 != 0) {
    0x00051d40 cbz r2, 0x51d56                                   |         
    0x00051d42 ldr r2, [r7, 0xc]                                 |         r2 = *((r7 + 0xc));
    0x00051d44 adds r2, 1                                        |         r2++;
    0x00051d46 str r2, [r7, 0xc]                                 |         *((r7 + 0xc)) = r2;
    0x00051d48 ldrb r2, [r7, 0xa]                                |         r2 = *((r7 + 0xa));
                                                                 |         if (r2 != 0) {
    0x00051d4a cbnz r2, 0x51d56                                  |             goto label_78;
                                                                 |         }
    0x00051d4c mov r0, r7                                        |         r0 = r7;
    0x00051d4e bl 0x11258                                        |         fcn_00011258 (r0);
    0x00051d52 ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00051d54 add r3, r6                                        |         r3 += r6;
                                                                 |     }
                                                                 | label_78:
    0x00051d56 ldrb r3, [r3, 8]                                  |     r3 = *((r3 + 8));
    0x00051d58 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x00051d5a cmp r3, 1                                         |     
    0x00051d5c ldr r0, [r2]                                      |     r0 = *(r2);
                                                                 |     if (r3 != 1) {
    0x00051d5e beq 0x51d76                                       |         
    0x00051d60 ldrb r3, [r0, 5]                                  |         r3 = *((r0 + 5));
    0x00051d62 add r3, sl                                        |         r3 += sl;
    0x00051d64 ldrb.w r3, [r3, 0x128]                            |         r3 = *((r3 + 0x128));
                                                                 |         if (r3 == 0) {
    0x00051d68 cbz r3, 0x51d76                                   |             goto label_79;
                                                                 |         }
    0x00051d6a ldrb r3, [r0, 0xc]                                |         r3 = *((r0 + 0xc));
                                                                 |         if (r3 != 0) {
    0x00051d6c cbnz r3, 0x51d76                                  |             goto label_79;
                                                                 |         }
    0x00051d6e ldrb r3, [r0, 0x10]                               |         r3 = *((r0 + 0x10));
                                                                 |         if (r3 != 0) {
    0x00051d70 cbnz r3, 0x51d76                                  |             goto label_79;
                                                                 |         }
    0x00051d72 add.w sb, sb, 1                                   |         sb++;
                                                                 |     }
                                                                 | label_79:
    0x00051d76 ldr r6, [r0, 0x2c]                                |     r6 = *((r0 + 0x2c));
                                                                 |     if (r6 == 0) {
    0x00051d78 cbz r6, 0x51db0                                   |         goto label_80;
                                                                 |     }
    0x00051d7a ldrb r3, [r7, 9]                                  |     r3 = *((r7 + 9));
                                                                 |     if (r3 != 0) {
    0x00051d7c cbz r3, 0x51d8c                                   |         
    0x00051d7e ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00051d80 subs r3, 1                                        |         r3--;
    0x00051d82 str r3, [r7, 0xc]                                 |         *((r7 + 0xc)) = r3;
                                                                 |         if (r3 != 0) {
    0x00051d84 cbnz r3, 0x51d8c                                  |             goto label_24;
                                                                 |         }
    0x00051d86 mov r0, r7                                        |         r0 = r7;
    0x00051d88 bl 0xb868                                         |         fcn_0000b868 (r0);
                                                                 |     }
                                                                 | label_24:
    0x00051d8c cmp r6, 5                                         |     
                                                                 |     if (r6 != 5) {
    0x00051d8e bne.w 0x51b06                                     |         goto label_16;
                                                                 |     }
    0x00051d92 ldrb.w r3, [r4, 0x96]                             |     r3 = *((r4 + 0x96));
    0x00051d96 lsls r0, r3, 0x19                                 |     r0 = r3 << 0x19;
    0x00051d98 it pl                                             |     
                                                                 |     if (r0 >= r3) {
    0x00051d9a movpl r6, 5                                       |         r6 = 5;
                                                                 |         goto label_81;
                                                                 |     }
                                                                 |     if (r0 >= r3) {
                                                                 | label_81:
    0x00051d9c bpl.w 0x51b06                                     |         goto label_16;
                                                                 |     }
    0x00051da0 ldr.w r3, [r4, 0x9c]                              |     r3 = *((r4 + 0x9c));
                                                                 |     if (r3 != 0) {
    0x00051da4 cbz r3, 0x51dac                                   |         
    0x00051da6 mov r0, r4                                        |         r0 = r4;
    0x00051da8 bl 0x14bc8                                        |         fcn_00014bc8 (r0);
                                                                 |     }
                                                                 | label_45:
    0x00051dac movs r0, 5                                        |     r0 = 5;
    0x00051dae b 0x5184a                                         |     goto label_17;
                                                                 | label_80:
    0x00051db0 ldr.w r3, [r0, 0xf8]                              |     r3 = *((r0 + 0xf8));
    0x00051db4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051db6 beq 0x51e5e                                       |         goto label_82;
                                                                 |     }
    0x00051db8 ldrb r3, [r7, 9]                                  |     r3 = *((r7 + 9));
    0x00051dba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051dbc bne 0x51e6a                                       |         goto label_83;
                                                                 |     }
                                                                 | label_27:
    0x00051dbe ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051dc0 add.w r8, r8, 1                                   |     r8++;
    0x00051dc4 movs r1, 1                                        |     r1 = 1;
    0x00051dc6 b 0x51c28                                         |     goto label_23;
                                                                 | label_76:
    0x00051dc8 movs r1, 0                                        |     r1 = 0;
    0x00051dca bl 0x503fc                                        |     r0 = fcn_000503fc (r0, r1, r2);
                                                                 |     if (r0 != 0) {
    0x00051dce cbz r0, 0x51dd4                                   |         
                                                                 | label_77:
    0x00051dd0 mov r6, r0                                        |         r6 = r0;
    0x00051dd2 b 0x51d8c                                         |         goto label_24;
                                                                 |     }
    0x00051dd4 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051dd6 b 0x51cae                                         |     goto label_25;
                                                                 | label_74:
    0x00051dd8 ldr r1, [pc, 0x2c8]                               |     
    0x00051dda mov r3, sl                                        |     r3 = sl;
    0x00051ddc mov r2, r7                                        |     r2 = r7;
    0x00051dde ldr.w sl, [r5]                                    |     sl = *(r5);
    0x00051de2 mov r0, r5                                        |     r0 = r5;
    0x00051de4 str r7, [sp]                                      |     *(sp) = r7;
    0x00051de6 add r1, pc                                        |     r1 = 0xa3e8e;
    0x00051de8 str r7, [sp, 0x20]                                |     var_20h = r7;
    0x00051dea bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00051dee str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x00051df0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00051df2 beq.w 0x52064                                     |         goto label_84;
                                                                 |     }
    0x00051df6 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00051df8 add.w fp, r3, 4                                   |     
    0x00051dfc ldr r3, [pc, 0x2a8]                               |     
    0x00051dfe add.w sb, fp, r8                                  |     sb = fp + r8;
    0x00051e02 add r3, pc                                        |     r3 = 0xa3eae;
    0x00051e04 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00051e06 ldr r3, [pc, 0x2a4]                               |     
    0x00051e08 add r3, pc                                        |     r3 = 0xa3eba;
    0x00051e0a str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00051e0c add r3, sp, 0x28                                  |     r3 += var_28h;
    0x00051e0e str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00051e10 add r3, sp, 0x24                                  |     r3 += var_24h;
    0x00051e12 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     do {
                                                                 | label_26:
    0x00051e14 ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x00051e16 movs r0, 4                                        |         r0 = 4;
    0x00051e18 blx 0xa0d8                                        |         fcn_0000a0d8 ();
    0x00051e1c ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00051e1e mov r1, sb                                        |         r1 = sb;
    0x00051e20 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00051e22 movs r0, 0xd                                      |         r0 = 0xd;
    0x00051e24 adds r7, 1                                        |         r7++;
    0x00051e26 uxtb r6, r3                                       |         r6 = (int8_t) r3;
    0x00051e28 lsrs r3, r3, 8                                    |         r3 >>= 8;
    0x00051e2a str r6, [sp]                                      |         *(sp) = r6;
    0x00051e2c blx 0x9724                                        |         fcn_00009724 ();
    0x00051e30 ldr.w r6, [sl, 0x20]                              |         r6 = *((sl + 0x20));
    0x00051e34 movs r2, 0                                        |         r2 = 0;
    0x00051e36 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00051e38 mov r1, fp                                        |         r1 = fp;
    0x00051e3a mov r0, sl                                        |         r0 = sl;
    0x00051e3c blx r6                                            |         r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00051e3e mov r8, r0                                        |         r8 = r0;
    0x00051e40 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00051e42 bne.w 0x52058                                     |             goto label_85;
                                                                 |         }
    0x00051e46 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
                                                                 |         if (r3 == 0) {
    0x00051e48 cbz r3, 0x51ea4                                   |             goto label_86;
                                                                 |         }
    0x00051e4a cmp r7, 0x65                                      |         
                                                                 |         if (r7 == 0x65) {
    0x00051e4c beq 0x51e8a                                       |             goto label_87;
                                                                 |         }
    0x00051e4e cmp r7, 1                                         |         
    0x00051e50 bne 0x51e14                                       |         
                                                                 |     } while (r7 != 1);
    0x00051e52 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00051e54 mov r2, fp                                        |     r2 = fp;
    0x00051e56 movs r0, 0xd                                      |     r0 = 0xd;
    0x00051e58 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00051e5c b 0x51e14                                         |     goto label_26;
                                                                 | label_82:
    0x00051e5e movs r1, 4                                        |     r1 = 4;
    0x00051e60 bl 0x132cc                                        |     fcn_000132cc (r0, r1);
    0x00051e64 ldrb r3, [r7, 9]                                  |     r3 = *((r7 + 9));
    0x00051e66 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x00051e68 cbz r3, 0x51e76                                   |         
                                                                 | label_83:
    0x00051e6a ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00051e6c subs r3, 1                                        |         r3--;
    0x00051e6e str r3, [r7, 0xc]                                 |         *((r7 + 0xc)) = r3;
    0x00051e70 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00051e72 beq.w 0x52074                                     |             goto label_88;
                                                                 |         }
                                                                 |     }
    0x00051e76 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051e78 beq 0x51dbe                                       |         goto label_27;
                                                                 |     }
    0x00051e7a b 0x51d8c                                         |     goto label_24;
                                                                 | label_68:
    0x00051e7c mov r4, fp                                        |     r4 = fp;
    0x00051e7e str.w r8, [r5, 0x194]                             |     __asm ("str.w r8, aav.0x000000ff");
    0x00051e82 b 0x51d8c                                         |     goto label_24;
                                                                 | label_72:
    0x00051e84 movw r6, 0x213                                    |     r6 = 0x213;
    0x00051e88 b 0x51b06                                         |     goto label_16;
                                                                 | label_87:
    0x00051e8a ldr r1, [pc, 0x224]                               |     
    0x00051e8c mov r2, fp                                        |     r2 = fp;
    0x00051e8e movs r0, 0xd                                      |     r0 = 0xd;
    0x00051e90 add r1, pc                                        |     r1 = 0xa3f46;
    0x00051e92 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00051e96 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
                                                                 |     if (r3 != 0) {
    0x00051e9a cbz r3, 0x51ea4                                   |         
    0x00051e9c mov r2, r8                                        |         r2 = r8;
    0x00051e9e mov r1, fp                                        |         r1 = fp;
    0x00051ea0 mov r0, sl                                        |         r0 = sl;
    0x00051ea2 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                                 |     }
                                                                 | label_86:
    0x00051ea4 movs r3, 0                                        |     r3 = 0;
    0x00051ea6 add r2, sp, 0x20                                  |     r2 += var_20h;
    0x00051ea8 str r3, [sp]                                      |     *(sp) = r3;
    0x00051eaa mov r1, fp                                        |     r1 = fp;
    0x00051eac movw r3, 0x4016                                   |     r3 = 0x4016;
    0x00051eb0 mov r0, sl                                        |     r0 = sl;
    0x00051eb2 bl 0x14c14                                        |     r0 = fcn_00014c14 (r0, r1, r2, r3, r4);
    0x00051eb6 mov r8, r0                                        |     r8 = r0;
    0x00051eb8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051eba bne.w 0x52058                                     |         goto label_85;
                                                                 |     }
    0x00051ebe ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051ec0 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x00051ec2 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00051ec4 ble 0x51f44                                       |         goto label_89;
                                                                 |     }
    0x00051ec6 strd r0, r4, [sp, 0x10]                           |     __asm ("strd r0, r4, [var_10h]");
    0x00051eca mov sb, r0                                        |     sb = r0;
    0x00051ecc mov r4, r0                                        |     r4 = r0;
    0x00051ece b 0x51ed6                                         |     
                                                                 |     while (r1 == 0) {
                                                                 | label_28:
    0x00051ed0 adds r4, 1                                        |         r4++;
    0x00051ed2 cmp r4, r2                                        |         
                                                                 |         if (r4 >= r2) {
    0x00051ed4 bge 0x51f42                                       |             goto label_90;
                                                                 |         }
    0x00051ed6 ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00051ed8 add.w r3, r3, r4, lsl 4                           |         r3 += (r4 << 4);
    0x00051edc ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x00051ede ldr r3, [r7]                                      |         r3 = *(r7);
    0x00051ee0 cmp r1, 0                                         |         
    0x00051ee2 beq 0x51ed0                                       |         
                                                                 |     }
    0x00051ee4 ldrb r0, [r1, 8]                                  |     r0 = *((r1 + 8));
    0x00051ee6 cmp r0, 2                                         |     
                                                                 |     if (r0 != 2) {
    0x00051ee8 bne 0x51ed0                                       |         goto label_28;
                                                                 |     }
    0x00051eea ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x00051eec str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00051eee ldr r1, [r1]                                      |     r1 = *(r1);
    0x00051ef0 ldr.w r6, [r1, 0xbc]                              |     r6 = *((r1 + 0xbc));
    0x00051ef4 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051ef6 beq 0x51ed0                                       |         goto label_28;
                                                                 |     }
    0x00051ef8 mov r0, r6                                        |     r0 = r6;
    0x00051efa blx 0x9e8c                                        |     fcn_00009e8c ();
    0x00051efe ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00051f00 bic r2, r0, 0xc0000000                            |     r2 = BIT_MASK (r0, 0xc0000000);
    0x00051f04 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00051f08 adds r2, 1                                        |     r2++;
    0x00051f0a mov r1, r6                                        |     r1 = r6;
    0x00051f0c mov r0, r7                                        |     r0 = r7;
    0x00051f0e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00051f10 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00051f12 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00051f14 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00051f16 mov r2, r0                                        |     r2 = r0;
    0x00051f18 mov r0, r6                                        |     r0 = r6;
    0x00051f1a str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00051f1c blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x00051f20 bic r3, r0, 0xc0000000                            |     r3 = BIT_MASK (r0, 0xc0000000);
    0x00051f24 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00051f26 adds r3, 1                                        |     r3++;
    0x00051f28 adds.w r3, r3, sb                                 |     r3 += sb;
    0x00051f2c mov sb, r3                                        |     sb = r3;
    0x00051f2e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00051f30 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00051f34 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00051f36 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00051f38 bne.w 0x52068                                     |         goto label_91;
                                                                 |     }
    0x00051f3c ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051f3e ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x00051f40 b 0x51ed0                                         |     goto label_28;
                                                                 | label_90:
    0x00051f42 ldr r4, [sp, 0x14]                                |     r4 = var_14h;
                                                                 | label_89:
    0x00051f44 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00051f46 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051f48 beq 0x52024                                       |         goto label_92;
                                                                 |     }
    0x00051f4a ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00051f4c mov r0, r7                                        |     r0 = r7;
    0x00051f4e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00051f50 lsls r6, r0, 0x15                                 |     r6 = r0 << 0x15;
                                                                 |     if (r6 >= r0) {
    0x00051f52 bpl 0x52022                                       |         goto label_93;
                                                                 |     }
                                                                 | label_33:
    0x00051f54 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051f56 mov.w sb, 0                                       |     sb = 0;
                                                                 | label_37:
    0x00051f5a cmp sb, r2                                        |     
                                                                 |     if (sb >= r2) {
    0x00051f5c bge 0x51f76                                       |         goto label_94;
                                                                 |     }
                                                                 |     do {
    0x00051f5e ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00051f60 add.w r3, r3, sb, lsl 4                           |         r3 += (sb << 4);
    0x00051f64 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00051f66 cbz r0, 0x51f6e                                   |             
    0x00051f68 ldrb r3, [r0, 8]                                  |             r3 = *((r0 + 8));
    0x00051f6a cmp r3, 2                                         |             
                                                                 |             if (r3 == 2) {
    0x00051f6c beq 0x51ff8                                       |                 goto label_95;
                                                                 |             }
                                                                 |         }
    0x00051f6e add.w sb, sb, 1                                   |         sb++;
    0x00051f72 cmp sb, r2                                        |         
    0x00051f74 blt 0x51f5e                                       |         
                                                                 |     } while (sb < r2);
                                                                 | label_94:
    0x00051f76 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00051f78 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051f7a beq 0x5201a                                       |         goto label_96;
                                                                 |     }
    0x00051f7c movs r6, 0                                        |     r6 = 0;
                                                                 | label_31:
    0x00051f7e ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00051f80 mov r0, r7                                        |     r0 = r7;
    0x00051f82 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00051f84 movs r3, 0                                        |     r3 = 0;
    0x00051f86 mov r0, r7                                        |     r0 = r7;
    0x00051f88 str r3, [r7]                                      |     *(r7) = r3;
    0x00051f8a blx 0x9c24                                        |     fcn_00009c24 ();
    0x00051f8e cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051f90 bne 0x52010                                       |         goto label_34;
                                                                 |     }
                                                                 | label_32:
    0x00051f92 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
                                                                 |     if (r3 == 0) {
    0x00051f96 cbz r3, 0x51fee                                   |         goto label_97;
                                                                 |     }
    0x00051f98 mov r1, fp                                        |     r1 = fp;
    0x00051f9a mov r0, sl                                        |     r0 = sl;
    0x00051f9c movs r2, 1                                        |     r2 = 1;
    0x00051f9e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00051fa0 mov r6, r0                                        |     r6 = r0;
    0x00051fa2 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00051fa4 mov r0, r5                                        |     r0 = r5;
    0x00051fa6 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00051faa cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051fac bne.w 0x51d8c                                     |         goto label_24;
                                                                 |     }
                                                                 | label_30:
    0x00051fb0 ldr r3, [pc, 0x100]                               |     
    0x00051fb2 add r3, pc                                        |     
    0x00051fb4 ldr.w r3, [r3, 0x120]                             |     r3 = imp.atan;
                                                                 |     if (r3 != 0) {
    0x00051fb8 cbz r3, 0x51fbc                                   |         
    0x00051fba blx r3                                            |         uint32_t (*r3)(uint32_t) (r0);
                                                                 |     }
    0x00051fbc ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00051fbe cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00051fc0 ble 0x51fdc                                       |         goto label_98;
                                                                 |     }
                                                                 |     do {
    0x00051fc2 ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00051fc4 add.w r3, r3, r8, lsl 4                           |         r3 += (r8 << 4);
    0x00051fc8 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00051fca cbz r0, 0x51fd4                                   |             
    0x00051fcc movs r1, 1                                        |             r1 = 1;
    0x00051fce bl 0x4a6d0                                        |             fcn_0004a6d0 (r0, r1);
    0x00051fd2 ldr r2, [r5, 0x14]                                |             r2 = *((r5 + 0x14));
                                                                 |         }
    0x00051fd4 add.w r8, r8, 1                                   |         r8++;
    0x00051fd8 cmp r8, r2                                        |         
    0x00051fda blt 0x51fc2                                       |         
                                                                 |     } while (r8 < r2);
                                                                 | label_98:
    0x00051fdc ldr r3, [pc, 0xd8]                                |     
    0x00051fde add r3, pc                                        |     
    0x00051fe0 ldr.w r3, [r3, 0x124]                             |     r3 = imp.atan;
    0x00051fe4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051fe6 beq.w 0x51cd8                                     |         goto label_29;
                                                                 |     }
    0x00051fea blx r3                                            |     uint32_t (*r3)() ();
    0x00051fec b 0x51cd8                                         |     goto label_29;
                                                                 | label_97:
    0x00051fee ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00051ff0 mov r0, r5                                        |     r0 = r5;
    0x00051ff2 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00051ff6 b 0x51fb0                                         |     goto label_30;
                                                                 | label_95:
    0x00051ff8 mov r1, fp                                        |     r1 = fp;
    0x00051ffa bl 0x503fc                                        |     r0 = fcn_000503fc (r0, r1, r2);
    0x00051ffe cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052000 beq 0x52082                                       |         goto label_99;
                                                                 |     }
    0x00052002 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00052004 mov r6, r0                                        |     r6 = r0;
    0x00052006 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052008 bne 0x51f7e                                       |         goto label_31;
                                                                 |     }
    0x0005200a mov r0, r7                                        |     r0 = r7;
    0x0005200c blx 0x9c24                                        |     fcn_00009c24 ();
                                                                 | label_34:
    0x00052010 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00052012 mov r0, r5                                        |     r0 = r5;
    0x00052014 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00052018 b 0x51d8c                                         |     goto label_24;
                                                                 | label_96:
    0x0005201a mov r0, r7                                        |     r0 = r7;
    0x0005201c blx 0x9c24                                        |     fcn_00009c24 ();
    0x00052020 b 0x51f92                                         |     goto label_32;
                                                                 | label_93:
    0x00052022 ldr r3, [r7]                                      |     r3 = *(r7);
                                                                 | label_92:
    0x00052024 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x00052026 movs r1, 2                                        |     r1 = 2;
    0x00052028 mov r0, r7                                        |     r0 = r7;
    0x0005202a blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0005202c mov r6, r0                                        |     r6 = r0;
    0x0005202e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052030 beq 0x51f54                                       |         goto label_33;
                                                                 |     }
    0x00052032 ldr r3, [r7]                                      |     r3 = *(r7);
                                                                 |     if (r3 != 0) {
    0x00052034 cbz r3, 0x52040                                   |         
                                                                 | label_35:
    0x00052036 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00052038 mov r0, r7                                        |         r0 = r7;
    0x0005203a blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0005203c movs r3, 0                                        |         r3 = 0;
    0x0005203e str r3, [r7]                                      |         *(r7) = r3;
                                                                 |     }
                                                                 | label_36:
    0x00052040 mov r0, r7                                        |     r0 = r7;
    0x00052042 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00052046 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x0005204a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005204c beq 0x52010                                       |         goto label_34;
                                                                 |     }
    0x0005204e mov r1, fp                                        |     r1 = fp;
    0x00052050 mov r0, sl                                        |     r0 = sl;
    0x00052052 movs r2, 0                                        |     r2 = 0;
    0x00052054 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00052056 b 0x52010                                         |     goto label_34;
                                                                 | label_85:
    0x00052058 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0005205a mov r0, r5                                        |     r0 = r5;
    0x0005205c mov r6, r8                                        |     r6 = r8;
    0x0005205e bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00052062 b 0x51d8c                                         |     goto label_24;
                                                                 | label_84:
    0x00052064 movs r6, 7                                        |     r6 = 7;
    0x00052066 b 0x51b06                                         |     goto label_16;
                                                                 | label_91:
    0x00052068 ldr r3, [r7]                                      |     r3 = *(r7);
    0x0005206a mov r6, r2                                        |     r6 = r2;
    0x0005206c ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x0005206e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052070 bne 0x52036                                       |         goto label_35;
                                                                 |     }
    0x00052072 b 0x52040                                         |     goto label_36;
                                                                 | label_88:
    0x00052074 mov r0, r7                                        |     r0 = r7;
    0x00052076 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0005207a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005207c beq.w 0x51dbe                                     |         goto label_27;
                                                                 |     }
    0x00052080 b 0x51d8c                                         |     goto label_24;
                                                                 | label_99:
    0x00052082 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00052084 add.w sb, sb, 1                                   |     sb++;
    0x00052088 b 0x51f5a                                         |     goto label_37;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5210c */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0005210c ()                              | void fcn_0005210c (int16_t arg_28h, uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                         |     int16_t var_0h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x0005210c push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x00052110 sub sp, 0xc                               |     
    0x00052112 cmp r0, 0                                 |     
                                                         |     if (arg_28h == ) {
    0x00052114 beq 0x521f0                               |         goto label_6;
                                                         |     }
    0x00052116 mov r7, r2                                |     r7 = r2;
    0x00052118 mov r6, r3                                |     r6 = r3;
    0x0005211a ldr r5, [r0, 0x14]                        |     r5 = *(arg_28hx14);
    0x0005211c mov r4, r0                                |     r4 = r0;
    0x0005211e mov r8, r1                                |     r8 = r1;
    0x00052120 ldr r0, [r5, 0xc]                         |     r0 = *((r5 + 0xc));
    0x00052122 blx 0xa12c                                |     fcn_0000a12c ();
    0x00052126 orrs.w r3, r7, r6                         |     r3 = r7 | r6;
    0x0005212a ldr.w sb, [r4, 0x10]                      |     sb = *((r4 + 0x10));
                                                         |     if (r3 < r7) {
    0x0005212e bmi 0x5216a                               |         goto label_7;
                                                         |     }
    0x00052130 ldr r1, [r4]                              |     r1 = *(r4);
    0x00052132 asrs r3, r7, 0x1f                         |     r3 = r7 >> 0x1f;
    0x00052134 adds r0, r6, r7                           |     r0 = r6 + r7;
    0x00052136 adc.w r3, r3, r6, asr 31                  |     __asm ("adc.w r3, r3, r6, asr 31");
    0x0005213a cmp r1, r0                                |     
    0x0005213c asr.w r2, r1, 0x1f                        |     r2 = r1 >> 0x1f;
    0x00052140 sbcs r2, r3                               |     __asm ("sbcs r2, r3");
                                                         |     if (r1 >= r0) {
    0x00052142 bge 0x52178                               |         goto label_8;
                                                         |     }
    0x00052144 movs r3, 1                                |     r3 = 1;
    0x00052146 mov r6, r3                                |     r6 = r3;
    0x00052148 str r3, [r5, 0x40]                        |     *((r5 + 0x40)) = r3;
                                                         | label_0:
    0x0005214a mov r1, r6                                |     r1 = r6;
    0x0005214c mov r0, r5                                |     r0 = r5;
    0x0005214e bl 0x14a2c                                |     fcn_00014a2c (r0, r1);
                                                         |     do {
                                                         | label_2:
    0x00052152 mov r1, r6                                |         r1 = r6;
    0x00052154 mov r0, r5                                |         r0 = r5;
    0x00052156 bl 0x14ab4                                |         r0 = fcn_00014ab4 (r0, r1);
    0x0005215a mov r6, r0                                |         r6 = r0;
                                                         | label_1:
    0x0005215c ldr r0, [r5, 0xc]                         |         r0 = *((r5 + 0xc));
    0x0005215e blx 0x9d10                                |         fcn_00009d10 ();
    0x00052162 mov r0, r6                                |         r0 = r6;
    0x00052164 add sp, 0xc                               |         
    0x00052166 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         | label_7:
    0x0005216a movs r1, 1                                |         r1 = 1;
    0x0005216c mov r0, r5                                |         r0 = r5;
    0x0005216e str r1, [r5, 0x40]                        |         *((r5 + 0x40)) = r1;
    0x00052170 mov r6, r1                                |         r6 = r1;
    0x00052172 bl 0x14a2c                                |         fcn_00014a2c (r0, r1);
    0x00052176 b 0x52152                                 |         
                                                         |     } while (1);
                                                         | label_8:
    0x00052178 cmp.w sb, 0                               |     
                                                         |     if (sb == 0) {
    0x0005217c beq 0x521e8                               |         goto label_9;
                                                         |     }
    0x0005217e ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00052180 ldr r3, [r0, 8]                           |     r3 = *((r0 + 8));
    0x00052182 ldrb r2, [r3, 9]                          |     r2 = *((r3 + 9));
                                                         |     if (r2 != 0) {
    0x00052184 cbz r2, 0x52192                           |         
    0x00052186 ldr r2, [r3, 0xc]                         |         r2 = *((r3 + 0xc));
    0x00052188 adds r2, 1                                |         r2++;
    0x0005218a str r2, [r3, 0xc]                         |         *((r3 + 0xc)) = r2;
    0x0005218c ldrb r2, [r3, 0xa]                        |         r2 = *((r3 + 0xa));
    0x0005218e cmp r2, 0                                 |         
                                                         |         if (r2 == 0) {
    0x00052190 beq 0x5222a                               |             goto label_10;
                                                         |         }
                                                         |     }
                                                         | label_3:
    0x00052192 ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x00052194 mov r3, r8                                |     r3 = r8;
    0x00052196 mov r2, r7                                |     r2 = r7;
    0x00052198 add r1, r6                                |     r1 += r6;
    0x0005219a ldr r6, [sp, 0x28]                        |     r6 = *(arg_28h);
    0x0005219c blx r6                                    |     uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x0005219e ldr r3, [r4, 0xc]                         |     r3 = *((r4 + 0xc));
    0x000521a0 mov r6, r0                                |     r6 = r0;
    0x000521a2 ldr r0, [r3, 8]                           |     r0 = *((r3 + 8));
    0x000521a4 ldrb r3, [r0, 9]                          |     r3 = *((r0 + 9));
                                                         |     if (r3 != 0) {
    0x000521a6 cbz r3, 0x521b2                           |         
    0x000521a8 ldr r3, [r0, 0xc]                         |         r3 = *((r0 + 0xc));
    0x000521aa subs r3, 1                                |         r3--;
    0x000521ac str r3, [r0, 0xc]                         |         *((r0 + 0xc)) = r3;
    0x000521ae cmp r3, 0                                 |         
                                                         |         if (r3 == 0) {
    0x000521b0 beq 0x52234                               |             goto label_11;
                                                         |         }
                                                         |     }
                                                         | label_4:
    0x000521b2 cmp r6, 4                                 |     
                                                         |     if (r6 == 4) {
    0x000521b4 beq 0x521d8                               |         goto label_12;
                                                         |     }
    0x000521b6 str.w r6, [sb, 0x24]                      |     __asm ("str.w r6, [sb, 0x24]");
    0x000521ba str r6, [r5, 0x40]                        |     *((r5 + 0x40)) = r6;
    0x000521bc cmp r6, 0                                 |     
                                                         |     if (r6 != 0) {
    0x000521be bne 0x5214a                               |         goto label_0;
                                                         |     }
    0x000521c0 ldr.w r3, [r5, 0x120]                     |     r3 = *((r5 + 0x120));
                                                         |     if (r3 == 0) {
    0x000521c4 cbz r3, 0x5221a                           |         goto label_13;
                                                         |     }
    0x000521c6 mov r1, r6                                |     r1 = r6;
    0x000521c8 mov r0, r5                                |     r0 = r5;
    0x000521ca bl 0x14a2c                                |     fcn_00014a2c (r0, r1);
    0x000521ce ldrb.w r3, [r5, 0x57]                     |     r3 = *((r5 + 0x57));
    0x000521d2 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x000521d4 beq 0x5215c                               |         goto label_1;
                                                         |     }
    0x000521d6 b 0x52152                                 |     goto label_2;
                                                         | label_12:
    0x000521d8 ldrb.w r3, [sb, 0x95]                     |     r3 = *((sb + 0x95));
                                                         |     if (r3 != 0) {
    0x000521dc cbnz r3, 0x5223a                          |         goto label_14;
                                                         |     }
                                                         | label_5:
    0x000521de mov r0, sb                                |     r0 = sb;
    0x000521e0 bl 0x18864                                |     fcn_00018864 (r0);
    0x000521e4 movs r3, 0                                |     r3 = 0;
    0x000521e6 str r3, [r4, 0x10]                        |     *((r4 + 0x10)) = r3;
                                                         | label_9:
    0x000521e8 movs r3, 4                                |     r3 = 4;
    0x000521ea mov r6, r3                                |     r6 = r3;
    0x000521ec str r3, [r5, 0x40]                        |     *((r5 + 0x40)) = r3;
    0x000521ee b 0x5214a                                 |     goto label_0;
                                                         | label_6:
    0x000521f0 blx 0xa230                                |     fcn_0000a230 ();
    0x000521f4 ldr r2, [pc, 0x4c]                        |     
    0x000521f6 add.w r4, r0, 0x14                        |     r4 = r0 + 0x14;
    0x000521fa ldr r1, [pc, 0x4c]                        |     
    0x000521fc movw r3, 0x7e3e                           |     
    0x00052200 movt r3, 1                                |     r3 = 0x17e3e;
    0x00052204 movs r0, 0x15                             |     r0 = 0x15;
    0x00052206 add r2, pc                                |     r2 = 0xa444e;
    0x00052208 movs r6, 0x15                             |     r6 = 0x15;
    0x0005220a add r1, pc                                |     r1 = 0xa4458;
    0x0005220c str r4, [sp]                              |     *(sp) = r4;
    0x0005220e blx 0x9f00                                |     fcn_00009f00 ();
    0x00052212 mov r0, r6                                |     r0 = r6;
    0x00052214 add sp, 0xc                               |     
    0x00052216 pop.w {r4, r5, r6, r7, r8, sb, pc}        |     
                                                         | label_13:
    0x0005221a ldrb.w r3, [r5, 0x57]                     |     r3 = *((r5 + 0x57));
    0x0005221e mov.w r2, -1                              |     r2 = -1;
    0x00052222 str r2, [r5, 0x44]                        |     *((r5 + 0x44)) = r2;
    0x00052224 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00052226 beq 0x5215c                               |         goto label_1;
                                                         |     }
    0x00052228 b 0x52152                                 |     goto label_2;
                                                         | label_10:
    0x0005222a mov r0, r3                                |     r0 = r3;
    0x0005222c bl 0x11258                                |     fcn_00011258 (r0);
    0x00052230 ldr r0, [r4, 0xc]                         |     r0 = *((r4 + 0xc));
    0x00052232 b 0x52192                                 |     goto label_3;
                                                         | label_11:
    0x00052234 bl 0xb868                                 |     fcn_0000b868 (r0);
    0x00052238 b 0x521b2                                 |     goto label_4;
                                                         | label_14:
    0x0005223a mov r0, sb                                |     r0 = sb;
    0x0005223c bl 0x520bc                                |     fcn_000520bc (r0);
    0x00052240 b 0x521de                                 |     goto label_5;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x53234 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00053234 ()                                      | void fcn_00053234 (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_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ah;
                                                                 |     int16_t var_44h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00053234 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00053238 mov r6, r1                                        |     r6 = r1;
    0x0005323a ldr.w r1, [pc, 0x448]                             |     r1 = *(0x00053684);
    0x0005323e sub sp, 0x4c                                      |     
    0x00053240 mov r4, r0                                        |     r4 = r0;
    0x00053242 ldr.w r2, [pc, 0x444]                             |     
    0x00053246 add r1, pc                                        |     r1 += pc;
    0x00053248 ldr r7, [r0, 8]                                   |     r7 = *((r0 + 8));
    0x0005324a ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x0005324c ldr.w sb, [r7, 4]                                 |     sb = *((r7 + 4));
    0x00053250 ldr r2, [r2]                                      |     r2 = *(0x5368a);
    0x00053252 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00053254 mov.w r2, 0                                       |     r2 = 0;
    0x00053258 ldrb r2, [r0]                                     |     r2 = *(r0);
                                                                 |     if (r2 != 0) {
    0x0005325a cbz r2, 0x53278                                   |         
    0x0005325c cmp r2, 2                                         |         
                                                                 |         if (r2 < 2) {
    0x0005325e bls.w 0x53446                                     |             goto label_11;
                                                                 |         }
    0x00053262 bl 0x53088                                        |         r0 = fcn_00053088 (r0);
    0x00053266 mov fp, r0                                        |         
    0x00053268 str r0, [sp, 0x24]                                |         var_24h = r0;
    0x0005326a cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0005326c bne.w 0x53428                                     |             goto label_2;
                                                                 |         }
    0x00053270 ldrb r2, [r4]                                     |         r2 = *(r4);
    0x00053272 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00053274 bne.w 0x53428                                     |             goto label_2;
                                                                 |         }
                                                                 |     }
    0x00053278 ldr r5, [r4, 0x74]                                |     r5 = *((r4 + 0x74));
    0x0005327a ldrh.w r8, [r4, 0x46]                             |     r8 = *((r4 + 0x46));
    0x0005327e ldrsb.w sl, [r4, 0x44]                            |     sl = *((r4 + 0x44));
    0x00053282 ldrh r2, [r5, 0x18]                               |     r2 = *((r5 + 0x18));
    0x00053284 cmp r2, r8                                        |     
                                                                 |     if (r2 < r8) {
    0x00053286 bls.w 0x53508                                     |         goto label_12;
                                                                 |     }
    0x0005328a ldr r2, [r5, 0x40]                                |     r2 = *((r5 + 0x40));
    0x0005328c ldr r3, [r5, 0x38]                                |     r3 = *((r5 + 0x38));
    0x0005328e ldrh.w r1, [r2, r8, lsl 1]                        |     offset_0 = r8 << 1;
                                                                 |     r1 = *((r2 + offset_0));
    0x00053292 ldrh r2, [r5, 0x1a]                               |     r2 = *((r5 + 0x1a));
    0x00053294 rev16 r1, r1                                      |     __asm ("rev16 r1, r1");
    0x00053296 ands r2, r1                                       |     r2 &= r1;
    0x00053298 add r3, r2                                        |     r3 += r2;
    0x0005329a ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x0005329c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0005329e cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x000532a0 blt.w 0x5346c                                     |         goto label_13;
                                                                 |     }
                                                                 | label_0:
    0x000532a4 ands r6, r6, 2                                    |     r6 &= 2;
    0x000532a8 ldrb r2, [r5, 8]                                  |     r2 = *((r5 + 8));
                                                                 |     if (r6 != r6) {
    0x000532aa beq 0x532e6                                       |         
    0x000532ac cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000532ae beq.w 0x534b8                                     |             goto label_14;
                                                                 |         }
    0x000532b2 ldr r2, [r5, 0x4c]                                |         r2 = *((r5 + 0x4c));
    0x000532b4 mov r0, r5                                        |         r0 = r5;
    0x000532b6 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x000532b8 ldr r6, [r5, 0x14]                                |         r6 = *((r5 + 0x14));
    0x000532ba blx r2                                            |         uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x000532bc ldr.w r2, [sb, 0x28]                              |         r2 = *((sb + 0x28));
    0x000532c0 movw r1, 0xaaab                                   |         
                                                                 |         /* if there is a right shift of 1, then it's a division by 1/3 */
    0x000532c4 movt r1, 0xaaaa                                   |         r1 = 0xaaaaaaab;
    0x000532c8 add r0, r6                                        |         r0 += r6;
    0x000532ca adds r0, 1                                        |         r0++;
    0x000532cc lsls r2, r2, 1                                    |         r2 <<= 1;
    0x000532ce umull r1, r2, r1, r2                              |         r1:r2 = r1 * r2;
    0x000532d2 cmp.w r0, r2, lsr 1                               |         
                                                                 |         if (r0 >= r2) {
    0x000532d6 bge.w 0x534b8                                     |             goto label_14;
                                                                 |         }
    0x000532da ldrh r2, [r5, 0x18]                               |         r2 = *((r5 + 0x18));
    0x000532dc cmp r2, 1                                         |         
                                                                 |         if (r2 == 1) {
    0x000532de beq.w 0x534b8                                     |             goto label_14;
                                                                 |         }
    0x000532e2 ldrb r2, [r5, 8]                                  |         r2 = *((r5 + 8));
    0x000532e4 movs r6, 2                                        |         r6 = 2;
                                                                 |     }
    0x000532e6 ldrb r1, [r4, 1]                                  |     r1 = *((r4 + 1));
    0x000532e8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000532ea beq.w 0x534d2                                     |         goto label_15;
                                                                 |     }
                                                                 | label_4:
    0x000532ee lsls r2, r1, 0x1a                                 |     r2 = r1 << 0x1a;
                                                                 |     if (r2 < r1) {
    0x000532f0 bmi.w 0x5352a                                     |         goto label_16;
                                                                 |     }
                                                                 | label_5:
    0x000532f4 ldr r1, [r4, 0x70]                                |     r1 = *((r4 + 0x70));
    0x000532f6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000532f8 beq.w 0x53542                                     |         goto label_17;
                                                                 |     }
                                                                 | label_6:
    0x000532fc ldr r0, [r5, 0x48]                                |     r0 = *((r5 + 0x48));
    0x000532fe bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x00053302 mov fp, r0                                        |     
    0x00053304 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00053306 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053308 bne.w 0x53428                                     |         goto label_2;
                                                                 |     }
    0x0005330c ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x0005330e add r2, sp, 0x28                                  |     r2 += var_28h;
    0x00053310 ldr r3, [r5, 0x50]                                |     r3 = *((r5 + 0x50));
    0x00053312 mov r0, r5                                        |     r0 = r5;
    0x00053314 mov r1, r7                                        |     r1 = r7;
    0x00053316 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00053318 ldrh.w ip, [sp, 0x38]                             |     ip = var_38h;
    0x0005331c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005331e cmp ip, r3                                        |     
    0x00053320 it eq                                             |     
                                                                 |     if (ip != r3) {
    0x00053322 streq fp, [sp, 0x24]                              |         var_24h = fp;
                                                                 |     }
                                                                 |     if (ip != r3) {
    0x00053326 bne.w 0x5349a                                     |         goto label_18;
                                                                 |     }
                                                                 | label_3:
    0x0005332a add r3, sp, 0x24                                  |     r3 += var_24h;
    0x0005332c ldrh.w r2, [sp, 0x3a]                             |     r2 = var_3ah;
    0x00053330 mov r1, r8                                        |     r1 = r8;
    0x00053332 mov r0, r5                                        |     r0 = r5;
    0x00053334 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00053336 bl 0x3044c                                        |     fcn_0003044c (r0, r1, r2, r3);
    0x0005333a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0005333c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005333e bne.w 0x53680                                     |         goto label_19;
                                                                 |     }
    0x00053342 ldrb r3, [r5, 8]                                  |     r3 = *((r5 + 8));
    0x00053344 ldr r7, [r4, 0x74]                                |     r7 = *((r4 + 0x74));
    0x00053346 ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00053348 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005334a bne 0x533de                                       |         
    0x0005334c cmp r2, 0                                         |         
                                                                 |         if (r2 < 0) {
    0x0005334e blt.w 0x53648                                     |             goto label_20;
                                                                 |         }
                                                                 | label_10:
    0x00053352 ldrsb.w r3, [r4, 0x44]                            |         r3 = *((r4 + 0x44));
    0x00053356 subs r3, 1                                        |         r3--;
    0x00053358 cmp r3, sl                                        |         
                                                                 |         if (r3 > sl) {
    0x0005335a bgt.w 0x5359c                                     |             goto label_21;
                                                                 |         }
    0x0005335e ldr r3, [r4, 0x74]                                |         r3 = *((r4 + 0x74));
    0x00053360 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00053362 str r3, [sp, 0x18]                                |         var_18h = r3;
                                                                 | label_8:
    0x00053364 ldrh r3, [r7, 0x18]                               |         r3 = *((r7 + 0x18));
    0x00053366 ldr r2, [r7, 0x40]                                |         r2 = *((r7 + 0x40));
    0x00053368 ldrh r1, [r7, 0x1a]                               |         r1 = *((r7 + 0x1a));
    0x0005336a subs r3, 1                                        |         r3--;
    0x0005336c ldrh.w r3, [r2, r3, lsl 1]                        |         offset_1 = r3 << 1;
                                                                 |         r3 = *((r2 + offset_1));
    0x00053370 rev16 r3, r3                                      |         __asm ("rev16 r3, r3");
    0x00053372 ands r1, r3                                       |         r1 &= r3;
    0x00053374 ldr r3, [r7, 0x38]                                |         r3 = *((r7 + 0x38));
    0x00053376 add r1, r3                                        |         r1 += r3;
    0x00053378 adds r3, 4                                        |         r3 += 4;
    0x0005337a cmp r1, r3                                        |         
                                                                 |         if (r1 <= r3) {
    0x0005337c blo.w 0x5365a                                     |             goto label_22;
                                                                 |         }
    0x00053380 ldr r3, [r7, 0x4c]                                |         r3 = *((r7 + 0x4c));
    0x00053382 mov r0, r7                                        |         r0 = r7;
    0x00053384 str r1, [sp, 0x14]                                |         var_14h = r1;
    0x00053386 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00053388 ldr.w r3, [sb, 0x54]                              |         r3 = *((sb + 0x54));
    0x0005338c mov sb, r0                                        |         sb = r0;
    0x0005338e ldr r0, [r7, 0x48]                                |         r0 = *((r7 + 0x48));
    0x00053390 str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00053392 bl 0x4816c                                        |         fcn_0004816c (r0);
    0x00053396 ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x00053398 mov fp, r0                                        |         
    0x0005339a str r0, [sp, 0x24]                                |         var_24h = r0;
    0x0005339c cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0005339e bne 0x53428                                       |             goto label_2;
                                                                 |         }
    0x000533a0 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000533a2 subs r2, r1, 4                                    |         r2 = r1 - 4;
    0x000533a4 mov r0, r5                                        |         r0 = r5;
    0x000533a6 mov r1, r8                                        |         r1 = r8;
    0x000533a8 str r3, [sp, 4]                                   |         var_4h = r3;
    0x000533aa ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x000533ac str r3, [sp]                                      |         *(sp) = r3;
    0x000533ae ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000533b0 str r3, [sp, 8]                                   |         var_8h = r3;
    0x000533b2 add.w r3, sb, 4                                   |         r3 = sb + 4;
    0x000533b6 bl 0x4db08                                        |         fcn_0004db08 (r0, r1, r2, r3, r4, r5, r6);
    0x000533ba ldrh r1, [r7, 0x18]                               |         r1 = *((r7 + 0x18));
    0x000533bc ldr.w fp, [sp, 0x24]                              |         fp = var_24h;
    0x000533c0 subs r1, 1                                        |         r1--;
    0x000533c2 cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x000533c6 bne 0x53428                                       |             goto label_2;
                                                                 |         }
    0x000533c8 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000533ca mov r2, sb                                        |         r2 = sb;
    0x000533cc mov r0, r7                                        |         r0 = r7;
    0x000533ce bl 0x3044c                                        |         fcn_0003044c (r0, r1, r2, r3);
    0x000533d2 ldr.w fp, [sp, 0x24]                              |         fp = var_24h;
    0x000533d6 cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x000533da bne 0x53428                                       |             goto label_2;
                                                                 |         }
    0x000533dc ldr r7, [r4, 0x74]                                |         r7 = *((r4 + 0x74));
                                                                 |     }
    0x000533de ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x000533e0 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x000533e2 ldr r2, [r2, 0x28]                                |     r2 = *((r2 + 0x28));
    0x000533e4 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x000533e8 cmp.w r3, r2, lsl 1                               |     
    0x000533ec itt le                                            |     
                                                                 |     if (r3 > r2) {
    0x000533ee movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 > r2) {
    0x000533f0 strle r3, [sp, 0x24]                              |         var_24h = r3;
                                                                 |     }
                                                                 |     if (r3 > r2) {
    0x000533f2 bgt.w 0x5358a                                     |         goto label_23;
                                                                 |     }
                                                                 | label_7:
    0x000533f6 ldrsb.w r3, [r4, 0x44]                            |     r3 = *((r4 + 0x44));
    0x000533fa cmp r3, sl                                        |     
                                                                 |     if (r3 > sl) {
    0x000533fc bgt.w 0x535fa                                     |         goto label_24;
                                                                 |     }
                                                                 | label_9:
    0x00053400 cmp r6, 2                                         |     
                                                                 |     if (r6 != 2) {
    0x00053402 bne.w 0x535aa                                     |         goto label_25;
                                                                 |     }
    0x00053406 strb r6, [r4]                                     |     *(r4) = r6;
    0x00053408 ldrh r3, [r5, 0x18]                               |     r3 = *((r5 + 0x18));
    0x0005340a cmp r8, r3                                        |     
    0x0005340c ittet hs                                          |     
                                                                 |     if (r8 < r3) {
    0x0005340e ldrhs fp, [sp, 0x24]                              |         fp = var_24h;
                                                                 |     }
                                                                 |     if (r8 >= r3) {
    0x00053412 movlo r2, -1                                      |         r2 = -1;
                                                                 |     }
                                                                 |     if (r8 < r3) {
    0x00053416 ldr.w fp, [sp, 0x24]                              |         fp = var_24h;
                                                                 |     }
                                                                 |     if (r8 >= r3) {
    0x0005341a adds r3, r3, r2                                   |         r3 += r2;
                                                                 |     }
    0x0005341c iteet lo                                          |     
                                                                 |     if (r3 >= r3) {
    0x0005341e movlo r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00053420 strhs r2, [r4, 4]                                 |         *((r4 + 4)) = r2;
                                                                 |     }
                                                                 |     if (r3 >= r3) {
    0x00053422 strhhs r3, [r4, 0x46]                             |         __asm ("strhhs r3, [r4, 0x46]");
                                                                 |     }
    0x00053426 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
                                                                 |     while (1) {
                                                                 | label_2:
    0x00053428 ldr r2, [pc, 0x260]                               |         
    0x0005342a ldr r3, [pc, 0x25c]                               |         r3 = *(0x5368a);
    0x0005342c add r2, pc                                        |         r2 = 0xa6abc;
    0x0005342e ldr r3, [r2, r3]                                  |         r3 = *(0xa6abc);
    0x00053430 ldr r2, [r3]                                      |         r2 = *(0xa6abc);
    0x00053432 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x00053434 eors r2, r3                                       |         r2 ^= r3;
    0x00053436 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005343a bne.w 0x5367c                                     |             goto label_26;
                                                                 |         }
    0x0005343e mov r0, fp                                        |         r0 = fp;
    0x00053440 add sp, 0x4c                                      |         
    0x00053442 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_11:
    0x00053446 blx 0xa230                                        |         fcn_0000a230 ();
    0x0005344a ldr r2, [pc, 0x244]                               |         
    0x0005344c add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x00053450 ldr r1, [pc, 0x240]                               |         
    0x00053452 movw r3, 0x2b4a                                   |         
    0x00053456 movt r3, 1                                        |         r3 = 0x12b4a;
    0x0005345a movs r0, 0xb                                      |         r0 = 0xb;
    0x0005345c add r2, pc                                        |         r2 = 0xa6af2;
    0x0005345e str r4, [sp]                                      |         *(sp) = r4;
    0x00053460 add r1, pc                                        |         r1 = 0xa6af8;
    0x00053462 blx 0x9f00                                        |         fcn_00009f00 ();
                                                                 | label_1:
    0x00053466 mov.w fp, 0xb                                     |         
    0x0005346a b 0x53428                                         |         
                                                                 |     }
                                                                 | label_13:
    0x0005346c mov r0, r5                                        |     r0 = r5;
    0x0005346e bl 0x23e08                                        |     r0 = fcn_00023e08 (r0);
    0x00053472 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053474 beq.w 0x532a4                                     |         goto label_0;
                                                                 |     }
    0x00053478 blx 0xa230                                        |     fcn_0000a230 ();
    0x0005347c ldr r2, [pc, 0x218]                               |     
    0x0005347e add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00053482 ldr r1, [pc, 0x218]                               |     
    0x00053484 movw r3, 0x2b57                                   |     
    0x00053488 movt r3, 1                                        |     r3 = 0x12b57;
    0x0005348c movs r0, 0xb                                      |     r0 = 0xb;
    0x0005348e add r2, pc                                        |     r2 = 0xa6b2a;
    0x00053490 str r4, [sp]                                      |     *(sp) = r4;
    0x00053492 add r1, pc                                        |     r1 = 0xa6b34;
    0x00053494 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00053498 b 0x53466                                         |     goto label_1;
                                                                 | label_18:
    0x0005349a mov r2, r7                                        |     r2 = r7;
    0x0005349c ldrh.w r7, [sp, 0x3a]                             |     r7 = var_3ah;
    0x000534a0 ldr r1, [r5, 0x3c]                                |     r1 = *((r5 + 0x3c));
    0x000534a2 ldr r0, [r5, 0x34]                                |     r0 = *((r5 + 0x34));
    0x000534a4 str.w ip, [sp]                                    |     __asm ("str.w ip, [sp]");
    0x000534a8 str r7, [sp, 4]                                   |     var_4h = r7;
    0x000534aa bl 0x4d974                                        |     r0 = fcn_0004d974 (r0, r1, r2, r3);
    0x000534ae mov fp, r0                                        |     
    0x000534b0 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x000534b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000534b4 bne 0x53428                                       |         goto label_2;
                                                                 |     }
    0x000534b6 b 0x5332a                                         |     goto label_3;
                                                                 | label_14:
    0x000534b8 mov r0, r4                                        |     r0 = r4;
    0x000534ba bl 0x4fb54                                        |     r0 = fcn_0004fb54 (r0);
    0x000534be mov fp, r0                                        |     
    0x000534c0 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x000534c2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000534c4 bne 0x53428                                       |         goto label_2;
                                                                 |     }
    0x000534c6 ldrb r2, [r5, 8]                                  |     r2 = *((r5 + 8));
    0x000534c8 movs r6, 1                                        |     r6 = 1;
    0x000534ca ldrb r1, [r4, 1]                                  |     r1 = *((r4 + 1));
    0x000534cc cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000534ce bne.w 0x532ee                                     |         goto label_4;
                                                                 |     }
                                                                 | label_15:
    0x000534d2 ldrb r0, [r4]                                     |     r0 = *(r4);
    0x000534d4 and r1, r1, 0xf1                                  |     r1 &= 0xf1;
    0x000534d8 strh r2, [r4, 0x32]                               |     *((r4 + 0x32)) = r2;
    0x000534da strb r1, [r4, 1]                                  |     *((r4 + 1)) = r1;
                                                                 |     if (r0 == 0) {
    0x000534dc cbnz r0, 0x534f6                                  |         
    0x000534de ldrh.w r3, [r4, 0x46]                             |         r3 = *((r4 + 0x46));
                                                                 |         if (r3 == 0) {
    0x000534e2 cbz r3, 0x534f6                                   |             goto label_27;
                                                                 |         }
    0x000534e4 ldr r0, [r4, 0x74]                                |         r0 = *((r4 + 0x74));
    0x000534e6 ldrb r0, [r0, 8]                                  |         r0 = *((r0 + 8));
                                                                 |         if (r0 == 0) {
    0x000534e8 cbz r0, 0x534f6                                   |             goto label_27;
                                                                 |         }
    0x000534ea add.w ip, r3, -1                                  |         
    0x000534ee str r2, [sp, 0x24]                                |         var_24h = r2;
    0x000534f0 strh.w ip, [r4, 0x46]                             |         *((r4 + 0x46)) = ip;
    0x000534f4 b 0x532ee                                         |         goto label_4;
                                                                 |     }
                                                                 | label_27:
    0x000534f6 mov r0, r4                                        |     r0 = r4;
    0x000534f8 bl 0x53164                                        |     r0 = fcn_00053164 (r0);
    0x000534fc mov fp, r0                                        |     
    0x000534fe str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00053500 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053502 bne 0x53428                                       |         goto label_2;
                                                                 |     }
    0x00053504 ldrb r1, [r4, 1]                                  |     r1 = *((r4 + 1));
    0x00053506 b 0x532ee                                         |     goto label_4;
                                                                 | label_12:
    0x00053508 blx 0xa230                                        |     fcn_0000a230 ();
    0x0005350c ldr r2, [pc, 0x190]                               |     
    0x0005350e add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00053512 ldr r1, [pc, 0x190]                               |     
    0x00053514 movw r3, 0x2b53                                   |     
    0x00053518 movt r3, 1                                        |     r3 = 0x12b53;
    0x0005351c movs r0, 0xb                                      |     r0 = 0xb;
    0x0005351e add r2, pc                                        |     r2 = 0xa6bc2;
    0x00053520 str r4, [sp]                                      |     *(sp) = r4;
    0x00053522 add r1, pc                                        |     r1 = 0xa6bcc;
    0x00053524 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00053528 b 0x53466                                         |     goto label_1;
                                                                 | label_16:
    0x0005352a ldr r1, [r4, 0x40]                                |     r1 = *((r4 + 0x40));
    0x0005352c mov r2, r4                                        |     r2 = r4;
    0x0005352e ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x00053532 bl 0x4fca4                                        |     r0 = fcn_0004fca4 (r0, r1, r2);
    0x00053536 mov fp, r0                                        |     
    0x00053538 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x0005353a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005353c beq.w 0x532f4                                     |         goto label_5;
                                                                 |     }
    0x00053540 b 0x53428                                         |     goto label_2;
                                                                 | label_17:
    0x00053542 ldrb r2, [r7, 0xb]                                |     r2 = *((r7 + 0xb));
    0x00053544 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00053546 beq.w 0x532fc                                     |         goto label_6;
                                                                 |     }
    0x0005354a ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x0005354c ldr r0, [r4, 0x40]                                |     r0 = *((r4 + 0x40));
    0x0005354e ldrd r3, fp, [r4, 0x20]                           |     __asm ("ldrd r3, fp, [r4, 0x20]");
    0x00053552 strb r1, [r7, 0xb]                                |     *((r7 + 0xb)) = r1;
    0x00053554 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x00053556 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00053558 beq.w 0x532fc                                     |         goto label_6;
                                                                 |     }
    0x0005355c mov.w ip, 1                                       |     
    0x00053560 mov lr, r3                                        |     lr = r3;
                                                                 |     do {
    0x00053562 ldrb r3, [r2, 1]                                  |         r3 = *((r2 + 1));
    0x00053564 lsls r3, r3, 0x1b                                 |         r3 <<= 0x1b;
                                                                 |         if (r3 < r3) {
    0x00053566 bpl 0x53582                                       |             
    0x00053568 strb.w ip, [r7, 0xb]                              |             *((r7 + 0xb)) = ip;
    0x0005356c ldr r3, [r2, 0x40]                                |             r3 = *((r2 + 0x40));
    0x0005356e cmp r0, r3                                        |             
                                                                 |             if (r0 != r3) {
    0x00053570 bne 0x53582                                       |                 goto label_28;
                                                                 |             }
    0x00053572 ldrd r1, r3, [r2, 0x20]                           |             __asm ("ldrd r1, r3, [r2, 0x20]");
    0x00053576 cmp fp, r3                                        |             
    0x00053578 it eq                                             |             
                                                                 |             if (fp == r3) {
    0x0005357a cmpeq lr, r1                                      |                 __asm ("cmpeq lr, r1");
                                                                 |             }
    0x0005357c it eq                                             |             
                                                                 |             if (fp == r3) {
    0x0005357e strbeq ip, [r2]                                   |                 *(r2) = ip;
                                                                 |                 goto label_28;
                                                                 |             }
                                                                 |         }
                                                                 | label_28:
    0x00053582 ldr r2, [r2, 0x18]                                |         r2 = *((r2 + 0x18));
    0x00053584 cmp r2, 0                                         |         
    0x00053586 bne 0x53562                                       |         
                                                                 |     } while (r2 != 0);
    0x00053588 b 0x532fc                                         |     goto label_6;
                                                                 | label_23:
    0x0005358a mov r0, r4                                        |     r0 = r4;
    0x0005358c bl 0x4dd94                                        |     r0 = fcn_0004dd94 (r0, r1, r2, r3, r4, r5, r6);
    0x00053590 mov fp, r0                                        |     
    0x00053592 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00053594 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053596 bne.w 0x53428                                     |         goto label_2;
                                                                 |     }
    0x0005359a b 0x533f6                                         |     goto label_7;
                                                                 | label_21:
    0x0005359c add.w r3, sl, 0x1f                                |     r3 = sl + 0x1f;
    0x000535a0 ldr.w r3, [r4, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r3 = *((r4 + offset_2));
    0x000535a4 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000535a6 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000535a8 b 0x53364                                         |     goto label_8;
                                                                 | label_25:
    0x000535aa mov r0, r4                                        |     r0 = r4;
    0x000535ac bl 0x23868                                        |     r0 = fcn_00023868 (r0);
    0x000535b0 mov fp, r0                                        |     
    0x000535b2 str r0, [sp, 0x24]                                |     var_24h = r0;
                                                                 |     if (r6 == 0) {
    0x000535b4 cbz r6, 0x535ee                                   |         goto label_29;
                                                                 |     }
    0x000535b6 ldrsb.w r3, [r4, 0x44]                            |     r3 = *((r4 + 0x44));
    0x000535ba cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x000535bc blt 0x535ea                                       |         goto label_30;
                                                                 |     }
    0x000535be itt ne                                            |     
                                                                 |     if (r3 == 0) {
    0x000535c0 addne r6, r4, 0x74                                |         r6 = r4 + 0x74;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000535c4 movs r5, 0                                        |         r5 = 0;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x000535c6 beq 0x535dc                                       |         goto label_31;
                                                                 |     }
                                                                 |     do {
    0x000535c8 ldr r3, [r6, 4]!                                  |         r3 = *((r6 += 4));
    0x000535cc adds r5, 1                                        |         r5++;
    0x000535ce ldr r0, [r3, 0x48]                                |         r0 = *((r3 + 0x48));
    0x000535d0 bl 0x10f18                                        |         fcn_00010f18 (r0);
    0x000535d4 ldrsb.w r3, [r4, 0x44]                            |         r3 = *((r4 + 0x44));
    0x000535d8 cmp r5, r3                                        |         
    0x000535da blt 0x535c8                                       |         
                                                                 |     } while (r5 < r3);
                                                                 | label_31:
    0x000535dc ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x000535de ldr r0, [r3, 0x48]                                |     r0 = *((r3 + 0x48));
    0x000535e0 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x000535e4 movs r3, 0xff                                     |     r3 = 0xff;
    0x000535e6 strb.w r3, [r4, 0x44]                             |     *((r4 + 0x44)) = r3;
                                                                 | label_30:
    0x000535ea movs r3, 3                                        |     r3 = 3;
    0x000535ec strb r3, [r4]                                     |     *(r4) = r3;
                                                                 | label_29:
    0x000535ee cmp.w fp, 0x10                                    |     
    0x000535f2 it eq                                             |     
                                                                 |     if (fp != 0x10) {
    0x000535f4 moveq fp, 0                                       |         
                                                                 |     }
    0x000535f8 b 0x53428                                         |     goto label_2;
                                                                 | label_24:
    0x000535fa ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x000535fc ldr r0, [r3, 0x48]                                |     r0 = *((r3 + 0x48));
    0x000535fe bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x00053602 ldrb.w r3, [r4, 0x44]                             |     r3 = *((r4 + 0x44));
    0x00053604 adds r0, 0x44                                     |     r0 += 0x44;
    0x00053606 subs r3, 1                                        |     r3--;
    0x00053608 sxtb r3, r3                                       |     r3 = (int32_t) r3;
    0x0005360a strb.w r3, [r4, 0x44]                             |     *((r4 + 0x44)) = r3;
    0x0005360e b 0x53624                                         |     
                                                                 |     while (sl < r3) {
    0x00053610 subs r3, 1                                        |         r3--;
    0x00053612 sxtb r3, r3                                       |         r3 = (int32_t) r3;
    0x00053614 strb.w r3, [r4, 0x44]                             |         *((r4 + 0x44)) = r3;
                                                                 |         if (r1 != 0) {
    0x00053618 cbz r1, 0x5362c                                   |             
    0x0005361a ldr r0, [r1, 0x48]                                |             r0 = *((r1 + 0x48));
    0x0005361c bl 0x10f18                                        |             fcn_00010f18 (r0);
    0x00053620 ldrsb.w r3, [r4, 0x44]                            |             r3 = *((r4 + 0x44));
    0x00053624 add.w r2, r3, 0x1f                                |             r2 = r3 + 0x1f;
    0x00053628 add.w r2, r4, r2, lsl 2                           |             r2 = r4 + (r2 << 2);
                                                                 |         }
    0x0005362c cmp sl, r3                                        |         
    0x0005362e ldr r1, [r2, -0x4]!                               |         r1 = *((r2 -= 0x4));
    0x00053632 blt 0x53610                                       |         
                                                                 |     }
    0x00053634 mov r0, r4                                        |     r0 = r4;
    0x00053636 str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x00053638 bl 0x4dd94                                        |     r0 = fcn_0004dd94 (r0, r1, r2, r3, r4, r5, r6);
    0x0005363c mov fp, r0                                        |     
    0x0005363e str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00053640 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053642 beq.w 0x53400                                     |         goto label_9;
                                                                 |     }
    0x00053646 b 0x53428                                         |     goto label_2;
                                                                 | label_20:
    0x00053648 mov r0, r7                                        |     r0 = r7;
    0x0005364a bl 0x23e08                                        |     r0 = fcn_00023e08 (r0);
    0x0005364e mov fp, r0                                        |     
    0x00053650 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00053652 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053654 beq.w 0x53352                                     |         goto label_10;
                                                                 |     }
    0x00053658 b 0x53428                                         |     goto label_2;
                                                                 | label_22:
    0x0005365a blx 0xa230                                        |     fcn_0000a230 ();
    0x0005365e ldr r2, [pc, 0x48]                                |     
    0x00053660 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00053664 ldr r1, [pc, 0x44]                                |     
    0x00053666 movw r3, 0x2bb2                                   |     
    0x0005366a movt r3, 1                                        |     r3 = 0x12bb2;
    0x0005366e movs r0, 0xb                                      |     r0 = 0xb;
    0x00053670 add r2, pc                                        |     r2 = 0xa6d1e;
    0x00053672 str r4, [sp]                                      |     *(sp) = r4;
    0x00053674 add r1, pc                                        |     r1 = 0xa6d24;
    0x00053676 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0005367a b 0x53466                                         |     goto label_1;
                                                                 | label_26:
    0x0005367c blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_19:
    0x00053680 mov fp, r3                                        |     
    0x00053682 b 0x53428                                         |     goto label_2;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x53ac4 */
                                                                 | #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.00053ac4 ()                                      | void fcn_00053ac4 (int16_t arg1, arithmetic arg2, arithmetic arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     arithmetic var_18h_2;
                                                                 |     int16_t var_1ch_2;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h_2;
                                                                 |     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;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     arithmetic var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_64h_2;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ah;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_6eh;
                                                                 |     int16_t var_72h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_0h_3;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_3;
                                                                 |     int16_t var_14h_3;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
                                                                 | label_24:
    0x0004d4e4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0004d4e8 mov r6, r1                                        |     r6 = r1;
    0x0004d4ea ldr r7, [r0, 0x74]                                |     r7 = *((r0 + 0x74));
    0x0004d4ec mov r4, r0                                        |     r4 = r0;
    0x0004d4ee sub sp, 0x1c                                      |     
    0x0004d4f0 ldr r1, [r0, 0x28]                                |     r1 = *((r0 + 0x28));
    0x0004d4f2 ldrh r2, [r0, 0x30]                               |     r2 = *((r0 + 0x30));
    0x0004d4f4 ldr r0, [pc, 0x128]                               |     
    0x0004d4f6 ldr r3, [pc, 0x12c]                               |     r3 = *(0x4d626);
    0x0004d4f8 ldr.w fp, [r6, 0x1c]                              |     fp = *((r6 + 0x1c));
    0x0004d4fc add r0, pc                                        |     r0 = 0x9ab20;
    0x0004d4fe ldr r5, [r6, 0x20]                                |     r5 = *((r6 + 0x20));
    0x0004d500 ldr r3, [r0, r3]                                  |     
    0x0004d502 adds r0, r1, r2                                   |     r0 = r1 + r2;
    0x0004d504 ldr r3, [r3]                                      |     r3 = *(0x9ab20);
    0x0004d506 str r3, [sp, 0x14]                                |     var_14h_3 = r3;
    0x0004d508 mov.w r3, 0                                       |     r3 = 0;
    0x0004d50c ldr r3, [r7, 0x3c]                                |     r3 = *((r7 + 0x3c));
    0x0004d50e str r7, [sp, 0x10]                                |     var_10h_3 = r7;
    0x0004d510 cmp r3, r0                                        |     
                                                                 |     if (r3 > r0) {
    0x0004d512 blo 0x4d51e                                       |         
    0x0004d514 ldrh r0, [r7, 0x12]                               |         r0 = *((r7 + 0x12));
    0x0004d516 ldr r3, [r7, 0x38]                                |         r3 = *((r7 + 0x38));
    0x0004d518 add r3, r0                                        |         r3 += r0;
    0x0004d51a cmp r1, r3                                        |         
                                                                 |         if (r1 >= r3) {
    0x0004d51c bhs 0x4d55a                                       |             goto label_30;
                                                                 |         }
                                                                 |     }
    0x0004d51e blx 0xa230                                        |     fcn_0000a230 ();
    0x0004d522 ldr r2, [pc, 0x104]                               |     
    0x0004d524 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x0004d528 ldr r1, [pc, 0x100]                               |     
    0x0004d52a movw r3, 0x2943                                   |     
    0x0004d52e movt r3, 1                                        |     r3 = 0x12943;
    0x0004d532 movs r0, 0xb                                      |     r0 = 0xb;
    0x0004d534 add r2, pc                                        |     r2 = 0x9ab62;
    0x0004d536 str r4, [sp]                                      |     *(sp) = r4;
    0x0004d538 add r1, pc                                        |     r1 = 0x9ab68;
    0x0004d53a blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 | label_2:
    0x0004d53e movs r0, 0xb                                      |     r0 = 0xb;
                                                                 |     do {
                                                                 | label_0:
    0x0004d540 ldr r2, [pc, 0xec]                                |         
    0x0004d542 ldr r3, [pc, 0xe0]                                |         r3 = *(0x4d626);
    0x0004d544 add r2, pc                                        |         r2 = 0x9ab78;
    0x0004d546 ldr r3, [r2, r3]                                  |         r3 = *(0x9ab78);
    0x0004d548 ldr r2, [r3]                                      |         r2 = *(0x9ab78);
    0x0004d54a ldr r3, [sp, 0x14]                                |         r3 = var_14h_3;
    0x0004d54c eors r2, r3                                       |         r2 ^= r3;
    0x0004d54e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004d552 bne 0x4d61c                                       |             goto label_31;
                                                                 |         }
    0x0004d554 add sp, 0x1c                                      |         
    0x0004d556 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_30:
    0x0004d55a str r2, [sp]                                      |         *(sp) = r2;
    0x0004d55c movs r3, 0                                        |         r3 = 0;
    0x0004d55e mov r2, r6                                        |         r2 = r6;
    0x0004d560 mov r0, r7                                        |         r0 = r7;
    0x0004d562 bl 0x4d430                                        |         r0 = fcn_0004d430 (r0, r1, r2, r3);
    0x0004d566 cmp r0, 0                                         |         
    0x0004d568 bne 0x4d540                                       |         
                                                                 |     } while (r0 != 0);
    0x0004d56a add fp, r5                                        |     
    0x0004d56c ldrh r5, [r4, 0x30]                               |     r5 = *((r4 + 0x30));
    0x0004d56e cmp r5, fp                                        |     
                                                                 |     if (r5 == fp) {
    0x0004d570 beq 0x4d540                                       |         goto label_0;
                                                                 |     }
    0x0004d572 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x0004d574 add.w sb, sp, 0x10                                |     sb += var_10h_3;
    0x0004d578 ldr.w sl, [r7, 0x34]                              |     sl = *((r7 + 0x34));
    0x0004d57c str r0, [sp, 0xc]                                 |     var_ch_2 = r0;
    0x0004d57e ldr.w r8, [r3, r5]                                |     r8 = *((r3 + r5));
    0x0004d582 ldr.w r7, [sl, 0x28]                              |     r7 = *((sl + 0x28));
    0x0004d586 rev.w r8, r8                                      |     r8 = SWAP32 (r8);
    0x0004d58a subs r7, 4                                        |     r7 -= 4;
                                                                 | label_1:
    0x0004d58c movs r3, 0                                        |     r3 = 0;
    0x0004d58e mov r2, sb                                        |     r2 = sb;
    0x0004d590 mov r1, r8                                        |     r1 = r8;
    0x0004d592 mov r0, sl                                        |     r0 = sl;
    0x0004d594 bl 0xba58                                         |     r0 = fcn_0000ba58 (r0, r1, r2);
    0x0004d598 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d59a bne 0x4d540                                       |         goto label_0;
                                                                 |     }
    0x0004d59c ldr r4, [sp, 0x10]                                |     r4 = var_10h_3;
    0x0004d59e ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x0004d5a0 ldrsh.w r3, [r3, 0x1e]                            |     r3 = *((r3 + 0x1e));
    0x0004d5a4 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0004d5a6 bne 0x4d5ec                                       |         goto label_32;
                                                                 |     }
    0x0004d5a8 ldrb r3, [r4]                                     |     r3 = *(r4);
                                                                 |     if (r3 != 0) {
    0x0004d5aa cbnz r3, 0x4d5ec                                  |         goto label_32;
                                                                 |     }
    0x0004d5ac ldr r1, [r4, 0x38]                                |     r1 = *((r4 + 0x38));
    0x0004d5ae adds r3, r5, r7                                   |     r3 = r5 + r7;
    0x0004d5b0 cmp r3, fp                                        |     
    0x0004d5b2 mov r0, r4                                        |     r0 = r4;
    0x0004d5b4 it hs                                             |     
                                                                 |     if (r3 < fp) {
    0x0004d5b6 subhs r7, fp, r5                                  |         r7 = fp - r5;
                                                                 |     }
    0x0004d5ba mov r3, r5                                        |     r3 = r5;
    0x0004d5bc it lo                                             |     
                                                                 |     if (r3 >= fp) {
    0x0004d5be ldrlo r8, [r1]                                    |         r8 = *(r1);
                                                                 |     }
    0x0004d5c2 mov r2, r6                                        |     r2 = r6;
    0x0004d5c4 add.w r1, r1, 4                                   |     r1 += 4;
    0x0004d5c8 str r7, [sp]                                      |     *(sp) = r7;
    0x0004d5ca it lo                                             |     
                                                                 |     if (r3 < fp) {
    0x0004d5cc revlo r8, r8                                      |         __asm ("revlo r8, r8");
                                                                 |     }
    0x0004d5d0 bl 0x4d430                                        |     fcn_0004d430 (r0, r1, r2, r3);
    0x0004d5d4 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x0004d5d6 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r3 != 0) {
    0x0004d5d8 cbz r3, 0x4d5e0                                   |         
    0x0004d5da mov r0, r3                                        |         r0 = r3;
    0x0004d5dc bl 0x10f18                                        |         fcn_00010f18 (r0);
                                                                 |     }
                                                                 |     if (r4 != 0) {
    0x0004d5e0 cbnz r4, 0x4d618                                  |         goto label_33;
                                                                 |     }
    0x0004d5e2 add r5, r7                                        |     r5 += r7;
    0x0004d5e4 cmp fp, r5                                        |     
                                                                 |     if (fp > r5) {
    0x0004d5e6 bgt 0x4d58c                                       |         goto label_1;
                                                                 |     }
    0x0004d5e8 ldr r0, [sp, 0xc]                                 |     r0 = var_ch_2;
    0x0004d5ea b 0x4d540                                         |     goto label_0;
                                                                 | label_32:
    0x0004d5ec blx 0xa230                                        |     fcn_0000a230 ();
    0x0004d5f0 ldr r2, [pc, 0x40]                                |     
    0x0004d5f2 add.w r5, r0, 0x14                                |     r5 = r0 + 0x14;
    0x0004d5f6 ldr r1, [pc, 0x40]                                |     
    0x0004d5f8 movw r3, 0x2956                                   |     
    0x0004d5fc movs r0, 0xb                                      |     r0 = 0xb;
    0x0004d5fe movt r3, 1                                        |     r3 = 0x12956;
    0x0004d602 add r2, pc                                        |     r2 = 0x9ac3a;
    0x0004d604 str r5, [sp]                                      |     *(sp) = r5;
    0x0004d606 add r1, pc                                        |     r1 = 0x9ac44;
    0x0004d608 blx 0x9f00                                        |     fcn_00009f00 ();
    0x0004d60c ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x0004d60e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004d610 beq 0x4d53e                                       |         goto label_2;
                                                                 |     }
    0x0004d612 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0004d616 b 0x4d53e                                         |     goto label_2;
                                                                 | label_33:
    0x0004d618 mov r0, r4                                        |     r0 = r4;
    0x0004d61a b 0x4d540                                         |     goto label_0;
                                                                 | label_31:
    0x0004d61c blx 0x9b44                                        |     fcn_00009b44 ();
    0x0004d620 adds r6, 4                                        |     r6 += 4;
    0x0004d622 movs r5, r0                                       |     r5 = r0;
    0x0004d624 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0004d626 movs r0, r0                                       |     
    0x0004d628 vhadd.u32 d16, d0, d3                             |     __asm ("vhadd.u32 d16, d0, d3");
    0x0004d62c ldc2l p0, c0, [r0, -0xc]!                         |     __asm ("ldc2l p0, c0, [r0, -0xc]!");
    0x0004d630 adds r5, 0xbc                                     |     r5 += 0xbc;
    0x0004d632 movs r5, r0                                       |     r5 = r0;
    0x0004d634 cdp2 p0, 9, c0, c2, c3, 0                         |     __asm ("cdp2 p0, 9, c0, c2, c3, 0");
    0x0004d638 stc2 p0, c0, [r2], 0xc                            |     __asm ("stc2 p0, c0, [r2], 0xc");
    0x00053ac4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00053ac8 mov r5, r0                                        |     r5 = r0;
    0x00053aca ldr r6, [r0, 8]                                   |     r6 = *((r0 + 8));
    0x00053acc mov r4, r3                                        |     r4 = r3;
    0x00053ace sub sp, 0x8c                                      |     
    0x00053ad0 ldr.w r0, [pc, 0x838]                             |     
    0x00053ad4 ldr.w r3, [pc, 0x838]                             |     r3 = *(0x54310);
    0x00053ad8 add r0, pc                                        |     r0 = 0xa7de8;
    0x00053ada ldr r3, [r0, r3]                                  |     
    0x00053adc ldr r3, [r3]                                      |     r3 = *(0xa7de8);
    0x00053ade str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00053ae0 mov.w r3, 0                                       |     r3 = 0;
    0x00053ae4 ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00053ae6 str r2, [sp, 0x18]                                |     var_18h_2 = r2;
    0x00053ae8 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00053aea lsls r7, r3, 0x1a                                 |     r7 = r3 << 0x1a;
    0x00053aec str r4, [sp, 0x4c]                                |     var_4ch = r4;
    0x00053aee str r1, [sp, 0x20]                                |     x = r1;
    0x00053af0 str r2, [sp, 0x14]                                |     var_14h_2 = r2;
                                                                 |     if (r7 < r3) {
    0x00053af2 bmi.w 0x53c4a                                     |         goto label_34;
                                                                 |     }
    0x00053af6 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00053af8 cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x00053afa bhi.w 0x53c30                                     |         goto label_5;
                                                                 |     }
    0x00053afe ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
    0x00053b00 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053b02 beq.w 0x53ce4                                     |         goto label_35;
                                                                 |     }
                                                                 |     if (r4 == 0) {
                                                                 | label_3:
    0x00053b06 cbnz r4, 0x53b4a                                  |         
                                                                 | label_8:
    0x00053b08 ldr r2, [sp, 0x18]                                |         r2 = var_18h_2;
    0x00053b0a ands r2, r2, 2                                    |         r2 &= 2;
                                                                 |         if (r2 != r2) {
    0x00053b0e bne.w 0x53d30                                     |             goto label_36;
                                                                 |         }
    0x00053b12 ldr r0, [sp, 0x20]                                |         r0 = x;
    0x00053b14 ldrh r1, [r0, 0x18]                               |         r1 = *((r0 + 0x18));
    0x00053b16 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00053b18 beq.w 0x540d6                                     |             goto label_37;
                                                                 |         }
    0x00053b1c str r3, [sp, 0x58]                                |         var_58h = r3;
    0x00053b1e ldr r3, [r0, 0x14]                                |         r3 = *((r0 + 0x14));
    0x00053b20 mov r0, r5                                        |         r0 = r5;
    0x00053b22 strh.w r1, [sp, 0x6c]                             |         var_6ch = r1;
    0x00053b26 add r1, sp, 0x58                                  |         r1 += var_58h;
    0x00053b28 strb.w r2, [sp, 0x6e]                             |         var_6eh = r2;
    0x00053b2c strb.w r2, [sp, 0x72]                             |         var_72h = r2;
    0x00053b30 add r2, sp, 0x4c                                  |         r2 += var_4ch;
    0x00053b32 str r3, [sp, 0x5c]                                |         var_5ch = r3;
    0x00053b34 bl 0x52c64                                        |         r0 = fcn_00052c64 (r0, r1, r2, r3);
    0x00053b38 mov sb, r0                                        |         sb = r0;
    0x00053b3a str r0, [sp, 0x48]                                |         var_48h = r0;
                                                                 | label_19:
    0x00053b3c cmp.w sb, 0                                       |         
                                                                 |         if (sb != 0) {
    0x00053b40 bne 0x53c0e                                       |             goto label_4;
                                                                 |         }
    0x00053b42 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x00053b44 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00053b46 beq.w 0x53d30                                     |             goto label_36;
                                                                 |         }
                                                                 |     }
                                                                 | label_6:
    0x00053b4a ldr r4, [r5, 0x74]                                |     r4 = *((r5 + 0x74));
    0x00053b4c ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x00053b4e cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00053b50 blt.w 0x53c8a                                     |         goto label_38;
                                                                 |     }
                                                                 | label_7:
    0x00053b54 ldr r3, [sp, 0x14]                                |     r3 = var_14h_2;
    0x00053b56 ldr r3, [r3, 0x54]                                |     r3 = *((r3 + 0x54));
    0x00053b58 str r3, [sp, 0x28]                                |     var_28h_2 = r3;
    0x00053b5a ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x00053b5c lsls r3, r3, 0x18                                 |     r3 <<= 0x18;
                                                                 |     if (r3 >= r3) {
    0x00053b5e bpl.w 0x53d94                                     |         goto label_39;
                                                                 |     }
    0x00053b62 ldr r6, [sp, 0x14]                                |     r6 = var_14h_2;
    0x00053b64 ldr r2, [r6, 0x58]                                |     r2 = *((r6 + 0x58));
    0x00053b66 ldrb r3, [r6, 0x11]                               |     r3 = *((r6 + 0x11));
    0x00053b68 cmp r2, 4                                         |     
    0x00053b6a it lt                                             |     
                                                                 |     if (r2 >= 4) {
    0x00053b6c movlt r2, 4                                       |         r2 = 4;
                                                                 |     }
    0x00053b6e mov fp, r2                                        |     
    0x00053b70 movs r2, 0                                        |     r2 = 0;
    0x00053b72 str r2, [sp, 0x48]                                |     var_48h = r2;
                                                                 |     if (r3 != 0) {
    0x00053b74 cbz r3, 0x53b94                                   |         
    0x00053b76 ldrh r3, [r4, 0xe]                                |         r3 = *((r4 + 0xe));
    0x00053b78 cmp r3, fp                                        |         
                                                                 |         if (r3 >= fp) {
    0x00053b7a bge 0x53b94                                       |             goto label_12;
                                                                 |         }
    0x00053b7c ldr r7, [sp, 0x28]                                |         r7 = var_28h_2;
    0x00053b7e add r2, sp, 0x58                                  |         r2 += var_58h;
    0x00053b80 ldr r3, [r4, 0x50]                                |         r3 = *((r4 + 0x50));
    0x00053b82 mov r0, r4                                        |         r0 = r4;
    0x00053b84 mov r1, r7                                        |         r1 = r7;
    0x00053b86 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00053b88 ldrh.w r3, [sp, 0x68]                             |         r3 = var_68h;
    0x00053b8c ldr r2, [sp, 0x64]                                |         r2 = var_64h_2;
    0x00053b8e cmp r2, r3                                        |         
                                                                 |         if (r2 != r3) {
    0x00053b90 bne.w 0x5413a                                     |             goto label_40;
                                                                 |         }
                                                                 |     }
                                                                 | label_12:
    0x00053b94 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00053b96 ldrh.w r6, [r5, 0x46]                             |     r6 = *((r5 + 0x46));
    0x00053b9a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053b9c bne.w 0x53cba                                     |         goto label_41;
                                                                 |     }
    0x00053ba0 ldrh r3, [r4, 0x18]                               |     r3 = *((r4 + 0x18));
    0x00053ba2 cmp r3, r6                                        |     
                                                                 |     if (r3 < r6) {
    0x00053ba4 bls.w 0x540f6                                     |         goto label_42;
                                                                 |     }
    0x00053ba8 ldr r0, [r4, 0x48]                                |     r0 = *((r4 + 0x48));
    0x00053baa bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x00053bae mov sb, r0                                        |     sb = r0;
    0x00053bb0 str r0, [sp, 0x48]                                |     var_48h = r0;
                                                                 |     if (r0 != 0) {
    0x00053bb2 cbnz r0, 0x53c0e                                  |         goto label_4;
                                                                 |     }
    0x00053bb4 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x00053bb6 ldrb r1, [r4, 8]                                  |     r1 = *((r4 + 8));
    0x00053bb8 ldrh.w r2, [r3, r6, lsl 1]                        |     offset_0 = r6 << 1;
                                                                 |     r2 = *((r3 + offset_0));
    0x00053bbc ldrh r3, [r4, 0x1a]                               |     r3 = *((r4 + 0x1a));
    0x00053bbe rev16 r2, r2                                      |     __asm ("rev16 r2, r2");
    0x00053bc0 ands r3, r2                                       |     r3 &= r2;
    0x00053bc2 ldr r2, [r4, 0x38]                                |     r2 = *((r4 + 0x38));
    0x00053bc4 adds r7, r2, r3                                   |     r7 = r2 + r3;
    0x00053bc6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00053bc8 beq.w 0x5422c                                     |         goto label_43;
                                                                 |     }
                                                                 | label_27:
    0x00053bcc ldr r3, [r4, 0x50]                                |     r3 = *((r4 + 0x50));
    0x00053bce add r2, sp, 0x58                                  |     r2 += var_58h;
    0x00053bd0 mov r1, r7                                        |     r1 = r7;
    0x00053bd2 mov r0, r4                                        |     r0 = r4;
    0x00053bd4 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00053bd6 ldrh.w r2, [sp, 0x68]                             |     r2 = var_68h;
    0x00053bda ldr r3, [sp, 0x64]                                |     r3 = var_64h_2;
    0x00053bdc cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00053bde bne.w 0x54160                                     |         goto label_44;
                                                                 |     }
    0x00053be2 ldrh.w r2, [sp, 0x6a]                             |     r2 = var_6ah;
    0x00053be6 movs r0, 0                                        |     r0 = 0;
    0x00053be8 ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00053bea str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00053bec cmp fp, r2                                        |     
    0x00053bee bic r3, r3, 4                                     |     r3 = BIT_MASK (r3, 4);
    0x00053bf2 strb r3, [r5, 1]                                  |     *((r5 + 1)) = r3;
                                                                 |     if (fp == r2) {
    0x00053bf4 beq.w 0x5423e                                     |         goto label_45;
                                                                 |     }
                                                                 | label_23:
    0x00053bf8 add r7, sp, 0x48                                  |     r7 += var_48h;
    0x00053bfa mov r1, r6                                        |     r1 = r6;
    0x00053bfc mov r3, r7                                        |     r3 = r7;
    0x00053bfe mov r0, r4                                        |     r0 = r4;
    0x00053c00 bl 0x3044c                                        |     fcn_0003044c (r0, r1, r2, r3);
    0x00053c04 ldr.w sb, [sp, 0x48]                              |     sb = var_48h;
    0x00053c08 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00053c0c beq 0x53cc0                                       |         goto label_46;
                                                                 |     }
                                                                 |     do {
                                                                 | label_4:
    0x00053c0e ldr.w r2, [pc, 0x704]                             |         r2 = *(0x00054314);
    0x00053c12 ldr.w r3, [pc, 0x6fc]                             |         r3 = *(0x54312);
    0x00053c16 add r2, pc                                        |         r2 += pc;
    0x00053c18 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00053c1a ldr r2, [r3]                                      |         r2 = *(0x54312);
    0x00053c1c ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00053c1e eors r2, r3                                       |         r2 ^= r3;
    0x00053c20 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00053c24 bne.w 0x54302                                     |             goto label_47;
                                                                 |         }
    0x00053c28 mov r0, sb                                        |         r0 = sb;
    0x00053c2a add sp, 0x8c                                      |         
    0x00053c2c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_5:
    0x00053c30 mov r0, r5                                        |         r0 = r5;
    0x00053c32 bl 0x23868                                        |         r0 = fcn_00023868 (r0);
    0x00053c36 bics r3, r0, 0x10                                 |         __asm ("bics r3, r0, 0x10");
    0x00053c3a mov sb, r0                                        |         sb = r0;
    0x00053c3c str r0, [sp, 0x48]                                |         var_48h = r0;
    0x00053c3e bne 0x53c0e                                       |         
                                                                 |     } while (r2 != r3);
    0x00053c40 ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
    0x00053c42 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053c44 bne.w 0x53b06                                     |         goto label_3;
                                                                 |     }
    0x00053c48 b 0x53ce4                                         |     goto label_35;
                                                                 | label_34:
    0x00053c4a ldr r0, [r2, 8]                                   |     r0 = *((r2 + 8));
    0x00053c4c mov r2, r5                                        |     r2 = r5;
    0x00053c4e ldr r1, [r5, 0x40]                                |     r1 = *((r5 + 0x40));
    0x00053c50 bl 0x4fca4                                        |     r0 = fcn_0004fca4 (r0, r1, r2);
    0x00053c54 mov sb, r0                                        |     sb = r0;
    0x00053c56 str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00053c58 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053c5a bne 0x53c0e                                       |         goto label_4;
                                                                 |     }
    0x00053c5c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00053c5e beq.w 0x53d74                                     |         goto label_48;
                                                                 |     }
    0x00053c62 ldrsb.w r3, [r5, 0x44]                            |     r3 = *((r5 + 0x44));
    0x00053c66 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00053c68 blt.w 0x5424e                                     |         goto label_49;
                                                                 |     }
    0x00053c6c ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00053c6e cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x00053c70 bhi 0x53c30                                       |         goto label_5;
                                                                 |     }
    0x00053c72 ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
    0x00053c74 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053c76 bne.w 0x53b4a                                     |         goto label_6;
                                                                 |     }
    0x00053c7a ldrb r3, [r6, 0xb]                                |     r3 = *((r6 + 0xb));
    0x00053c7c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053c7e bne.w 0x54090                                     |         goto label_50;
                                                                 |     }
    0x00053c82 ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00053c84 lsls r0, r3, 0x1e                                 |     r0 = r3 << 0x1e;
                                                                 |     if (r0 >= r3) {
    0x00053c86 bmi 0x53cf2                                       |         
    0x00053c88 b 0x53b4a                                         |         goto label_6;
                                                                 | label_38:
    0x00053c8a ldrb r3, [r5]                                     |         r3 = *(r5);
    0x00053c8c cmp r3, 1                                         |         
                                                                 |         if (r3 < 1) {
    0x00053c8e bls 0x53d62                                       |             goto label_51;
                                                                 |         }
    0x00053c90 blx 0xa230                                        |         fcn_0000a230 ();
    0x00053c94 ldr.w r2, [pc, 0x680]                             |         r2 = *(0x00054318);
    0x00053c98 add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x00053c9c ldr.w r1, [pc, 0x67c]                             |         r1 = *(0x0005431c);
    0x00053ca0 movw r3, 0x2a28                                   |         
    0x00053ca4 movt r3, 1                                        |         r3 = 0x12a28;
    0x00053ca8 movs r0, 0xb                                      |         r0 = 0xb;
    0x00053caa add r2, pc                                        |         r2 += pc;
    0x00053cac str r4, [sp]                                      |         *(sp) = r4;
    0x00053cae add r1, pc                                        |         r1 += pc;
    0x00053cb0 blx 0x9f00                                        |         fcn_00009f00 ();
                                                                 | label_20:
    0x00053cb4 mov.w sb, 0xb                                     |         sb = 0xb;
    0x00053cb8 b 0x53c0e                                         |         goto label_4;
                                                                 |         if (r0 < 0xb) {
                                                                 | label_41:
    0x00053cba blt.w 0x54076                                     |             goto label_52;
                                                                 |         }
                                                                 | label_17:
    0x00053cbe add r7, sp, 0x48                                  |         r7 += var_48h;
                                                                 | label_46:
    0x00053cc0 mov r1, r6                                        |         r1 = r6;
    0x00053cc2 movs r6, 0                                        |         r6 = 0;
    0x00053cc4 mov r3, fp                                        |         r3 = fp;
    0x00053cc6 ldr r2, [sp, 0x28]                                |         r2 = var_28h_2;
    0x00053cc8 mov r0, r4                                        |         r0 = r4;
    0x00053cca str r7, [sp, 8]                                   |         var_8h_2 = r7;
    0x00053ccc strd r6, r6, [sp]                                 |         __asm ("strd r6, r6, [sp]");
    0x00053cd0 bl 0x4db08                                        |         fcn_0004db08 (r0, r1, r2, r3, r4, r5, r6);
    0x00053cd4 strh r6, [r5, 0x32]                               |         *((r5 + 0x32)) = r6;
    0x00053cd6 ldrb r3, [r4, 0xc]                                |         r3 = *((r4 + 0xc));
    0x00053cd8 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00053cda bne.w 0x53fea                                     |             goto label_53;
                                                                 |         }
    0x00053cde ldr.w sb, [sp, 0x48]                              |         sb = var_48h;
    0x00053ce2 b 0x53c0e                                         |         goto label_4;
                                                                 | label_35:
    0x00053ce4 ldrb r3, [r6, 0xb]                                |         r3 = *((r6 + 0xb));
    0x00053ce6 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00053ce8 bne.w 0x54090                                     |             goto label_50;
                                                                 |         }
                                                                 | label_18:
    0x00053cec ldrb r3, [r5, 1]                                  |         r3 = *((r5 + 1));
    0x00053cee lsls r1, r3, 0x1e                                 |         r1 = r3 << 0x1e;
                                                                 |         if (r1 >= r3) {
    0x00053cf0 bpl 0x53d06                                       |             goto label_54;
                                                                 |         }
                                                                 |     }
                                                                 | label_9:
    0x00053cf2 ldr r3, [sp, 0x20]                                |     r3 = x;
    0x00053cf4 ldrd r0, r2, [r3, 8]                              |     __asm ("ldrd r0, r2, [r3, 8]");
    0x00053cf8 ldrd r1, r3, [r5, 0x20]                           |     __asm ("ldrd r1, r3, [r5, 0x20]");
    0x00053cfc cmp r2, r3                                        |     
    0x00053cfe it eq                                             |     
                                                                 |     if (r2 == r3) {
    0x00053d00 cmpeq r0, r1                                      |         __asm ("cmpeq r0, r1");
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x00053d02 beq.w 0x5418e                                     |         goto label_55;
                                                                 |     }
                                                                 | label_54:
    0x00053d06 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00053d08 bne.w 0x53b4a                                     |         goto label_6;
                                                                 |     }
                                                                 | label_10:
    0x00053d0c add r3, sp, 0x4c                                  |     r3 += var_4ch;
    0x00053d0e mov r0, r5                                        |     r0 = r5;
    0x00053d10 str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x00053d12 ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x00053d14 ubfx r3, r3, 3, 1                                 |     r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x00053d18 str r3, [sp]                                      |     *(sp) = r3;
    0x00053d1a ldr r3, [sp, 0x20]                                |     r3 = x;
    0x00053d1c ldrd r2, r3, [r3, 8]                              |     __asm ("ldrd r2, r3, [r3, 8]");
    0x00053d20 bl 0x53810                                        |     r0 = fcn_00053810 (r0, r1, r2);
    0x00053d24 mov sb, r0                                        |     sb = r0;
    0x00053d26 str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00053d28 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053d2a beq.w 0x53b4a                                     |         goto label_6;
                                                                 |     }
    0x00053d2e b 0x53c0e                                         |     goto label_4;
                                                                 | label_36:
    0x00053d30 mov r0, r5                                        |     r0 = r5;
    0x00053d32 bl 0xe26c                                         |     fcn_0000e26c (r0);
    0x00053d36 ldr r2, [sp, 0x20]                                |     r2 = x;
    0x00053d38 ldrd r0, r1, [r5, 0x20]                           |     __asm ("ldrd r0, r1, [r5, 0x20]");
    0x00053d3c ldrd r3, r2, [r2, 8]                              |     __asm ("ldrd r3, r2, [r2, 8]");
    0x00053d40 cmp r1, r2                                        |     
    0x00053d42 it eq                                             |     
                                                                 |     if (r1 != r2) {
    0x00053d44 cmpeq r0, r3                                      |         __asm ("cmpeq r0, r3");
                                                                 |         goto label_56;
                                                                 |     }
                                                                 |     if (r1 != r2) {
                                                                 | label_56:
    0x00053d46 bne.w 0x53b4a                                     |         goto label_6;
                                                                 |     }
    0x00053d4a ldr r2, [sp, 0x20]                                |     r2 = x;
    0x00053d4c movs r4, 0                                        |     r4 = 0;
    0x00053d4e add r1, sp, 0x58                                  |     r1 += var_58h;
    0x00053d50 mov r0, r5                                        |     r0 = r5;
    0x00053d52 strd r3, r4, [sp, 0x74]                           |     __asm ("strd r3, r4, [sp, 0x74]");
    0x00053d56 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00053d58 str r2, [sp, 0x68]                                |     var_68h = r2;
    0x00053d5a bl 0x4d4e4                                        |     r0 = void (*0x4d4e4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00053d5e mov sb, r0                                        |     sb = r0;
    0x00053d60 b 0x53c0e                                         |     goto label_4;
                                                                 | label_51:
    0x00053d62 mov r0, r4                                        |     r0 = r4;
    0x00053d64 bl 0x23e08                                        |     r0 = fcn_00023e08 (r0);
    0x00053d68 mov sb, r0                                        |     sb = r0;
    0x00053d6a str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00053d6c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053d6e beq.w 0x53b54                                     |         goto label_7;
                                                                 |     }
    0x00053d72 b 0x53c0e                                         |     goto label_4;
                                                                 | label_48:
    0x00053d74 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00053d76 cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x00053d78 bhi.w 0x53c30                                     |         goto label_5;
                                                                 |     }
    0x00053d7c ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
    0x00053d7e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053d80 bne.w 0x53b08                                     |         goto label_8;
                                                                 |     }
    0x00053d84 ldrb r3, [r6, 0xb]                                |     r3 = *((r6 + 0xb));
    0x00053d86 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053d88 bne.w 0x54090                                     |         goto label_50;
                                                                 |     }
    0x00053d8c ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00053d8e lsls r6, r3, 0x1e                                 |     r6 = r3 << 0x1e;
                                                                 |     if (r6 < r3) {
    0x00053d90 bmi 0x53cf2                                       |         goto label_9;
                                                                 |     }
    0x00053d92 b 0x53d0c                                         |     goto label_10;
                                                                 | label_39:
    0x00053d94 ldrb r3, [r4, 1]                                  |     r3 = *((r4 + 1));
    0x00053d96 ldrb.w fp, [r4, 0xa]                              |     fp = *((r4 + 0xa));
    0x00053d9a ldr r2, [sp, 0x28]                                |     r2 = var_28h_2;
    0x00053d9c add.w r0, r2, fp                                  |     r0 = r2 + fp;
                                                                 |     if (r3 != 0) {
    0x00053da0 cbz r3, 0x53de6                                   |         
    0x00053da2 ldr r3, [sp, 0x20]                                |         r3 = x;
    0x00053da4 ldrd r7, r6, [r3, 0x1c]                           |         __asm ("ldrd r7, r6, [r3, 0x1c]");
    0x00053da8 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00053daa add r6, r7                                        |         r6 += r7;
    0x00053dac cmp r6, 0x7f                                      |         
    0x00053dae str r3, [sp, 0x2c]                                |         var_2ch = r3;
                                                                 |         if (r6 > 0x7f) {
    0x00053db0 bhi.w 0x54216                                     |             goto label_57;
                                                                 |         }
    0x00053db4 movs r3, 1                                        |         r3 = 1;
    0x00053db6 strb.w r6, [r2, fp]                               |         *((r2 + fp)) = r6;
                                                                 | label_26:
    0x00053dba add fp, r3                                        |         
    0x00053dbc ldr r3, [sp, 0x20]                                |         r3 = x;
    0x00053dbe ldr r1, [sp, 0x28]                                |         r1 = var_28h_2;
    0x00053dc0 ldrd r2, r3, [r3, 8]                              |         __asm ("ldrd r2, r3, [r3, 8]");
    0x00053dc4 add.w r0, r1, fp                                  |         r0 = r1 + fp;
    0x00053dc8 cmp r2, 0x80                                      |         
    0x00053dca sbcs r1, r3, 0                                    |         __asm ("sbcs r1, r3, 0");
                                                                 |         if (r2 <= 0x80) {
    0x00053dce blo.w 0x5420a                                     |             goto label_58;
                                                                 |         }
    0x00053dd2 cmp.w r2, 0x4000                                  |         
    0x00053dd6 sbcs r1, r3, 0                                    |         __asm ("sbcs r1, r3, 0");
                                                                 |         if (r2 <= 0x4000) {
    0x00053dda blo.w 0x541ca                                     |             goto label_59;
                                                                 |         }
    0x00053dde bl 0xae18                                         |         r0 = fcn_0000ae18 (r0, r1, r2);
    0x00053de2 add fp, r0                                        |         
    0x00053de4 b 0x53e00                                         |         
                                                                 |     } else {
    0x00053de6 ldr r3, [sp, 0x20]                                |         r3 = x;
    0x00053de8 ldr r6, [r3, 8]                                   |         r6 = *((r3 + 8));
    0x00053dea ldr r3, [r3]                                      |         r3 = *(r3);
    0x00053dec cmp r6, 0x7f                                      |         
    0x00053dee str r3, [sp, 0x2c]                                |         var_2ch = r3;
                                                                 |         if (r6 > 0x7f) {
    0x00053df0 bhi.w 0x54118                                     |             goto label_60;
                                                                 |         }
                                                                 | label_21:
    0x00053df4 ldr r3, [sp, 0x28]                                |         r3 = var_28h_2;
    0x00053df6 strb.w r6, [r3, fp]                               |         *((r3 + fp)) = r6;
    0x00053dfa movs r3, 1                                        |         r3 = 1;
                                                                 | label_22:
    0x00053dfc add fp, r3                                        |         
    0x00053dfe mov r7, r6                                        |         r7 = r6;
                                                                 |     }
                                                                 | label_25:
    0x00053e00 ldrh r2, [r4, 0xe]                                |     r2 = *((r4 + 0xe));
    0x00053e02 ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x00053e04 cmp r2, r6                                        |     
    0x00053e06 add.w sl, r3, fp                                  |     sl = r3 + fp;
                                                                 |     if (r2 >= r6) {
    0x00053e0a bge.w 0x541e2                                     |         goto label_61;
                                                                 |     }
    0x00053e0e ldr.w r8, [r4, 0x34]                              |     r8 = *((r4 + 0x34));
    0x00053e12 str r2, [sp, 0x1c]                                |     var_1ch_2 = r2;
    0x00053e14 movw r2, 0xcccd                                   |     
    0x00053e18 movt r2, 0xcccc                                   |     
    0x00053e1c ldrh r3, [r4, 0x10]                               |     r3 = *((r4 + 0x10));
    0x00053e1e str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00053e20 ldr.w r1, [r8, 0x28]                              |     r1 = *((r8 + 0x28));
    0x00053e24 ldr.w r2, [pc, 0x4f8]                             |     r2 = *(0x00054320);
    0x00053e28 subs r0, r6, r3                                   |     r0 = r6 - r3;
    0x00053e2a str r3, [sp, 0x10]                                |     var_10h_2 = r3;
    0x00053e2c subs r1, 4                                        |     r1 -= 4;
    0x00053e2e add r2, pc                                        |     r2 = 0xccd20aff;
    0x00053e30 str r2, [sp, 0x34]                                |     var_34h_2 = r2;
    0x00053e32 bl 0x8c1ec                                        |     fcn_0008c1ec (r0, r1, r2);
    0x00053e36 ldr r3, [sp, 0x10]                                |     r3 = var_10h_2;
    0x00053e38 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch_2;
    0x00053e3a str r5, [sp, 0x40]                                |     var_40h = r5;
    0x00053e3c add.w sb, r1, r3                                  |     sb = r1 + r3;
    0x00053e40 ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00053e42 cmp r2, sb                                        |     
    0x00053e44 it lt                                             |     
                                                                 |     if (r2 >= sb) {
    0x00053e46 movlt sb, r3                                      |         sb = r3;
                                                                 |     }
    0x00053e48 movs r3, 0                                        |     r3 = 0;
    0x00053e4a str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00053e4c add.w r2, fp, sb                                  |     r2 = fp + sb;
    0x00053e50 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x00053e52 ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x00053e54 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00053e56 str r4, [sp, 0x3c]                                |     var_3ch = r4;
    0x00053e58 add r3, r2                                        |     r3 += r2;
    0x00053e5a str r6, [sp, 0x10]                                |     var_10h_2 = r6;
    0x00053e5c str r3, [sp, 0x24]                                |     var_24h_2 = r3;
    0x00053e5e mov r3, sl                                        |     r3 = sl;
                                                                 | label_13:
    0x00053e60 ldr r4, [sp, 0x10]                                |     r4 = var_10h_2;
    0x00053e62 cmp r4, sb                                        |     
    0x00053e64 it ge                                             |     
                                                                 |     if (r4 < sb) {
    0x00053e66 movge r4, sb                                      |         r4 = sb;
                                                                 |     }
    0x00053e68 cmp r4, r7                                        |     
                                                                 |     if (r4 <= r7) {
    0x00053e6a ble 0x53f06                                       |         goto label_62;
                                                                 |     }
                                                                 |     do {
    0x00053e6c cmp r7, 0                                         |         
                                                                 |         if (r7 <= 0) {
    0x00053e6e ble 0x53f3a                                       |             goto label_63;
                                                                 |         }
    0x00053e70 mov r0, r3                                        |         r0 = r3;
    0x00053e72 mov r2, r7                                        |         r2 = r7;
    0x00053e74 mov r1, r5                                        |         r1 = r5;
    0x00053e76 mov r4, r7                                        |         r4 = r7;
    0x00053e78 blx 0x9e2c                                        |         r0 = fcn_00009e2c ();
    0x00053e7c mov r3, r0                                        |         r3 = r0;
                                                                 | label_14:
    0x00053e7e ldr r2, [sp, 0x10]                                |         r2 = var_10h_2;
    0x00053e80 subs r2, r2, r4                                   |         r2 -= r4;
    0x00053e82 cmp r2, 0                                         |         
    0x00053e84 str r2, [sp, 0x10]                                |         var_10h_2 = r2;
                                                                 |         if (r2 <= 0) {
    0x00053e86 ble 0x53f1c                                       |             goto label_64;
                                                                 |         }
                                                                 | label_11:
    0x00053e88 subs.w sb, sb, r4                                 |         sb -= r4;
    0x00053e8c add r5, r4                                        |         r5 += r4;
    0x00053e8e sub.w r7, r7, r4                                  |         r7 -= r4;
                                                                 |         if (sb != sb) {
    0x00053e92 bne 0x53f36                                       |             goto label_65;
                                                                 |         }
    0x00053e94 str.w sb, [sp, 0x58]                              |         __asm ("str.w sb, [var_58h]");
    0x00053e98 ldrb.w r3, [r8, 0x11]                             |         r3 = *((r8 + 0x11));
    0x00053e9c ldr r6, [sp, 0x54]                                |         r6 = var_54h;
    0x00053e9e mov r4, r6                                        |         r4 = r6;
    0x00053ea0 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00053ea2 bne 0x53f48                                       |             goto label_66;
                                                                 |         }
                                                                 | label_15:
    0x00053ea4 movs r2, 0                                        |         r2 = 0;
    0x00053ea6 mov r3, r4                                        |         r3 = r4;
    0x00053ea8 str r2, [sp]                                      |         *(sp) = r2;
    0x00053eaa add r1, sp, 0x58                                  |         r1 += var_58h;
    0x00053eac add r2, sp, 0x54                                  |         r2 += var_54h;
    0x00053eae mov r0, r8                                        |         r0 = r8;
    0x00053eb0 bl 0x4c088                                        |         fcn_0004c088 (r0, r1, r2, r3, r4);
    0x00053eb4 ldrb.w r3, [r8, 0x11]                             |         r3 = *((r8 + 0x11));
    0x00053eb8 str r0, [sp, 0x50]                                |         var_50h = r0;
    0x00053eba subs r3, 0                                        |         
    0x00053ebc it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x00053ebe movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00053ec0 cmp r0, 0                                         |         
    0x00053ec2 it ne                                             |         
                                                                 |         if (r0 == 0) {
    0x00053ec4 movne r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00053ec6 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00053ec8 bne 0x53fb0                                       |             goto label_67;
                                                                 |         }
    0x00053eca cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00053ecc bne.w 0x54306                                     |             goto label_68;
                                                                 |         }
    0x00053ed0 ldr r4, [sp, 0x54]                                |         r4 = var_54h;
                                                                 | label_16:
    0x00053ed2 ldr r3, [sp, 0x24]                                |         r3 = var_24h_2;
    0x00053ed4 rev r4, r4                                        |         r4 = SWAP32 (r4);
    0x00053ed6 str r4, [r3]                                      |         *(r3) = r4;
    0x00053ed8 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
                                                                 |         if (r3 != 0) {
    0x00053eda cbz r3, 0x53ee2                                   |             
    0x00053edc ldr r0, [r3, 0x48]                                |             r0 = *((r3 + 0x48));
    0x00053ede bl 0x10f18                                        |             fcn_00010f18 (r0);
                                                                 |         }
    0x00053ee2 ldr r2, [sp, 0x58]                                |         r2 = var_58h;
    0x00053ee4 movs r3, 0                                        |         r3 = 0;
    0x00053ee6 ldr r4, [sp, 0x10]                                |         r4 = var_10h_2;
    0x00053ee8 ldr r1, [r2, 0x38]                                |         r1 = *((r2 + 0x38));
    0x00053eea str r2, [sp, 0x1c]                                |         var_1ch_2 = r2;
    0x00053eec str r3, [r1]                                      |         *(r1) = r3;
    0x00053eee ldr r3, [r2, 0x38]                                |         r3 = *((r2 + 0x38));
    0x00053ef0 ldr.w r2, [r8, 0x28]                              |         r2 = *((r8 + 0x28));
    0x00053ef4 str r1, [sp, 0x24]                                |         var_24h_2 = r1;
    0x00053ef6 adds r3, 4                                        |         r3 += 4;
    0x00053ef8 sub.w sb, r2, 4                                   |         sb = r2 - 4;
    0x00053efc cmp r4, sb                                        |         
    0x00053efe it ge                                             |         
                                                                 |         if (r4 < sb) {
    0x00053f00 movge r4, sb                                      |             r4 = sb;
                                                                 |         }
    0x00053f02 cmp r4, r7                                        |         
    0x00053f04 bgt 0x53e6c                                       |         
                                                                 |     } while (r4 > r7);
                                                                 | label_62:
    0x00053f06 mov r2, r4                                        |     r2 = r4;
    0x00053f08 mov r0, r3                                        |     r0 = r3;
    0x00053f0a mov r1, r5                                        |     r1 = r5;
    0x00053f0c blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00053f10 ldr r2, [sp, 0x10]                                |     r2 = var_10h_2;
    0x00053f12 mov r3, r0                                        |     r3 = r0;
    0x00053f14 subs r2, r2, r4                                   |     r2 -= r4;
    0x00053f16 cmp r2, 0                                         |     
    0x00053f18 str r2, [sp, 0x10]                                |     var_10h_2 = r2;
                                                                 |     if (r2 > 0) {
    0x00053f1a bgt 0x53e88                                       |         goto label_11;
                                                                 |     }
                                                                 | label_64:
    0x00053f1c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x00053f1e ldrd r4, r5, [sp, 0x3c]                           |     __asm ("ldrd r4, r5, [var_3ch]");
                                                                 |     if (r3 != 0) {
    0x00053f22 cbz r3, 0x53f2a                                   |         
    0x00053f24 ldr r0, [r3, 0x48]                                |         r0 = *((r3 + 0x48));
    0x00053f26 bl 0x10f18                                        |         fcn_00010f18 (r0);
                                                                 |     }
    0x00053f2a ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00053f2c add.w fp, r3, 4                                   |     
    0x00053f30 movs r3, 0                                        |     r3 = 0;
    0x00053f32 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00053f34 b 0x53b94                                         |     goto label_12;
                                                                 | label_65:
    0x00053f36 add r3, r4                                        |     r3 += r4;
    0x00053f38 b 0x53e60                                         |     goto label_13;
                                                                 | label_63:
    0x00053f3a mov r0, r3                                        |     r0 = r3;
    0x00053f3c mov r2, r4                                        |     r2 = r4;
    0x00053f3e movs r1, 0                                        |     r1 = 0;
    0x00053f40 blx 0x97d4                                        |     r0 = fcn_000097d4 ();
    0x00053f44 mov r3, r0                                        |     r3 = r0;
    0x00053f46 b 0x53e7e                                         |     goto label_14;
                                                                 | label_66:
    0x00053f48 ldr r3, [sp, 0x34]                                |     r3 = var_34h_2;
    0x00053f4a ldr.w sb, [r8, 0x24]                              |     sb = *((r8 + 0x24));
    0x00053f4e ldr r4, [sp, 0x38]                                |     r4 = var_38h;
    0x00053f50 ldr.w sl, [r3, 0x118]                             |     sl = *((r3 + 0x118));
    0x00053f54 str r5, [sp, 0x2c]                                |     var_2ch = r5;
    0x00053f56 mov r5, r6                                        |     r5 = r6;
    0x00053f58 str r6, [sp, 0x30]                                |     var_30h = r6;
                                                                 |     do {
    0x00053f5a add.w fp, r5, 1                                   |         
    0x00053f5e cmp.w fp, 1                                       |         
    0x00053f62 it ls                                             |         
                                                                 |         if (fp > 1) {
    0x00053f64 movls r1, 0                                       |             r1 = 0;
                                                                 |         }
                                                                 |         if (fp >= 1) {
    0x00053f66 bls 0x53f90                                       |             
    0x00053f68 ldr.w r1, [r8, 0x28]                              |             r1 = *((r8 + 0x28));
    0x00053f6c subs r6, r5, 1                                    |             r6 = r5 - 1;
    0x00053f6e mov r0, r6                                        |             r0 = r6;
    0x00053f70 umull r2, r1, r4, r1                              |             r2:r1 = r4 * r1;
    0x00053f74 lsrs r1, r1, 2                                    |             r1 >>= 2;
    0x00053f76 adds r1, 1                                        |             r1++;
    0x00053f78 bl 0x8c1ec                                        |             fcn_0008c1ec (r0, r1, r2);
    0x00053f7c mov r0, sl                                        |             r0 = sl;
    0x00053f7e subs r6, r6, r1                                   |             r6 -= r1;
    0x00053f80 mov r1, sb                                        |             r1 = sb;
    0x00053f82 bl 0x8bf90                                        |             fcn_0008bf90 (r0, r1, r2);
    0x00053f86 adds r1, r6, 2                                    |             r1 = r6 + 2;
    0x00053f88 adds r0, 1                                        |             r0++;
    0x00053f8a cmp r1, r0                                        |             
    0x00053f8c it eq                                             |             
                                                                 |             if (r1 == r0) {
    0x00053f8e addeq r1, r6, 3                                   |                 r1 = r6 + 3;
                                                                 |                 goto label_69;
                                                                 |             }
                                                                 |         }
                                                                 | label_69:
    0x00053f90 cmp fp, r1                                        |         
                                                                 |         if (fp != r1) {
    0x00053f92 beq 0x53fa0                                       |             
    0x00053f94 mov r1, sb                                        |             r1 = sb;
    0x00053f96 mov r0, sl                                        |             r0 = sl;
    0x00053f98 bl 0x8bf90                                        |             r0 = fcn_0008bf90 (r0, r1, r2);
    0x00053f9c cmp r5, r0                                        |             
                                                                 |             if (r5 != r0) {
    0x00053f9e bne 0x53fa4                                       |                 goto label_70;
                                                                 |             }
                                                                 |         }
    0x00053fa0 mov r5, fp                                        |         r5 = fp;
    0x00053fa2 b 0x53f5a                                         |         
                                                                 |     } while (1);
                                                                 | label_70:
    0x00053fa4 ldrd r5, r6, [sp, 0x2c]                           |     __asm ("ldrd r5, r6, [var_2ch]");
    0x00053fa8 mov r4, fp                                        |     r4 = fp;
    0x00053faa str.w fp, [sp, 0x54]                              |     __asm ("str.w fp, [var_54h]");
    0x00053fae b 0x53ea4                                         |     goto label_15;
                                                                 | label_67:
    0x00053fb0 ldr r4, [sp, 0x54]                                |     r4 = var_54h;
    0x00053fb2 add r2, sp, 0x50                                  |     r2 += var_50h;
    0x00053fb4 cmp r6, 0                                         |     
    0x00053fb6 str r2, [sp]                                      |     *(sp) = r2;
    0x00053fb8 mov r0, r8                                        |     r0 = r8;
    0x00053fba mov r3, r6                                        |     r3 = r6;
    0x00053fbc ite ne                                            |     
                                                                 |     if (r6 == 0) {
    0x00053fbe movne r2, 4                                       |         r2 = 4;
                                                                 |     }
                                                                 |     if (r6 != 0) {
    0x00053fc0 moveq r2, 3                                       |         r2 = 3;
                                                                 |     }
    0x00053fc2 mov r1, r4                                        |     r1 = r4;
    0x00053fc4 bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x00053fc8 ldr r0, [sp, 0x50]                                |     r0 = var_50h;
    0x00053fca cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053fcc beq 0x53ed2                                       |         goto label_16;
                                                                 |     }
    0x00053fce ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00053fd0 mov sb, r0                                        |     sb = r0;
                                                                 |     if (r3 != 0) {
    0x00053fd2 cbz r3, 0x53fda                                   |         
    0x00053fd4 ldr r0, [r3, 0x48]                                |         r0 = *((r3 + 0x48));
    0x00053fd6 bl 0x10f18                                        |         fcn_00010f18 (r0);
                                                                 |     }
                                                                 | label_29:
    0x00053fda ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x00053fdc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053fde beq.w 0x53c0e                                     |         goto label_4;
                                                                 |     }
    0x00053fe2 ldr r0, [r3, 0x48]                                |     r0 = *((r3 + 0x48));
    0x00053fe4 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x00053fe8 b 0x53c0e                                         |     goto label_4;
                                                                 | label_53:
    0x00053fea ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00053fec mov r0, r5                                        |     r0 = r5;
    0x00053fee bic r3, r3, 2                                     |     r3 = BIT_MASK (r3, 2);
    0x00053ff2 strb r3, [r5, 1]                                  |     *((r5 + 1)) = r3;
    0x00053ff4 bl 0x4dd94                                        |     fcn_0004dd94 (r0, r1, r2, r3, r4, r5, r6);
    0x00053ff8 ldr r2, [r5, 0x74]                                |     r2 = *((r5 + 0x74));
    0x00053ffa movs r1, 1                                        |     r1 = 1;
    0x00053ffc clz r3, r0                                        |     r3 &= r0;
    0x00054000 mov sb, r0                                        |     sb = r0;
    0x00054002 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00054004 str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00054006 strb r6, [r2, 0xc]                                |     *((r2 + 0xc)) = r6;
    0x00054008 strb r1, [r5]                                     |     *(r5) = r1;
    0x0005400a ldr r1, [sp, 0x18]                                |     r1 = var_18h_2;
    0x0005400c ands.w r3, r3, r1, lsr 1                          |     r3 &= (r1 >> 1);
                                                                 |     if (r3 == r3) {
    0x00054010 beq.w 0x53c0e                                     |         goto label_4;
                                                                 |     }
    0x00054014 ldrsb.w r3, [r5, 0x44]                            |     r3 = *((r5 + 0x44));
    0x00054018 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0005401a blt 0x54044                                       |         goto label_71;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0005401c beq 0x54038                                       |         goto label_72;
                                                                 |     }
    0x0005401e add.w r4, r5, 0x74                                |     r4 = r5 + 0x74;
                                                                 |     do {
    0x00054022 ldr r3, [r4, 4]!                                  |         r3 = *((r4 += 4));
    0x00054026 adds r6, 1                                        |         r6++;
    0x00054028 ldr r0, [r3, 0x48]                                |         r0 = *((r3 + 0x48));
    0x0005402a bl 0x10f18                                        |         fcn_00010f18 (r0);
    0x0005402e ldrsb.w r3, [r5, 0x44]                            |         r3 = *((r5 + 0x44));
    0x00054032 cmp r6, r3                                        |         
    0x00054034 blt 0x54022                                       |         
                                                                 |     } while (r6 < r3);
    0x00054036 ldr r2, [r5, 0x74]                                |     r2 = *((r5 + 0x74));
                                                                 | label_72:
    0x00054038 ldr r0, [r2, 0x48]                                |     r0 = *((r2 + 0x48));
    0x0005403a bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x0005403e movs r3, 0xff                                     |     r3 = 0xff;
    0x00054040 strb.w r3, [r5, 0x44]                             |     *((r5 + 0x44)) = r3;
                                                                 | label_71:
    0x00054044 ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
                                                                 |     if (r3 != 0) {
    0x00054046 cbz r3, 0x54062                                   |         
    0x00054048 ldr r4, [sp, 0x20]                                |         r4 = x;
    0x0005404a mov.w sb, 7                                       |         sb = 7;
    0x0005404e ldrd r0, r1, [r4, 8]                              |         __asm ("ldrd r0, r1, [r4, 8]");
    0x00054052 bl 0x117c8                                        |         fcn_000117c8 (r0);
    0x00054056 str r0, [r5, 0x10]                                |         *((r5 + 0x10)) = r0;
                                                                 |         if (r0 == 0) {
    0x00054058 cbz r0, 0x54066                                   |             goto label_73;
                                                                 |         }
    0x0005405a ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x0005405c ldr r1, [r4]                                      |         r1 = *(r4);
    0x0005405e blx 0x9e2c                                        |         fcn_00009e2c ();
                                                                 |     }
    0x00054062 mov.w sb, 0                                       |     sb = 0;
                                                                 | label_73:
    0x00054066 movs r3, 3                                        |     r3 = 3;
    0x00054068 strb r3, [r5]                                     |     *(r5) = r3;
    0x0005406a ldr r3, [sp, 0x20]                                |     r3 = x;
    0x0005406c ldrd r2, r3, [r3, 8]                              |     __asm ("ldrd r2, r3, [r3, 8]");
    0x00054070 strd r2, r3, [r5, 0x38]                           |     __asm ("strd r2, r3, [r5, 0x38]");
    0x00054074 b 0x53c0e                                         |     goto label_4;
                                                                 | label_52:
    0x00054076 ldrh r3, [r4, 0x18]                               |     r3 = *((r4 + 0x18));
    0x00054078 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005407a beq.w 0x53cbe                                     |         goto label_17;
                                                                 |     }
    0x0005407e ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00054080 adds r6, 1                                        |     r6++;
    0x00054082 uxth r6, r6                                       |     r6 = (int16_t) r6;
    0x00054084 bic r3, r3, 2                                     |     r3 = BIT_MASK (r3, 2);
    0x00054088 strh.w r6, [r5, 0x46]                             |     *((r5 + 0x46)) = r6;
    0x0005408c strb r3, [r5, 1]                                  |     *((r5 + 1)) = r3;
    0x0005408e b 0x53cbe                                         |     goto label_17;
                                                                 | label_50:
    0x00054090 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00054092 movs r2, 0                                        |     r2 = 0;
    0x00054094 ldr r1, [sp, 0x20]                                |     r1 = x;
    0x00054096 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x00054098 ldrd r7, r1, [r1, 8]                              |     __asm ("ldrd r7, r1, [r1, 8]");
    0x0005409c strb r2, [r6, 0xb]                                |     *((r6 + 0xb)) = r2;
    0x0005409e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x000540a0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000540a2 beq.w 0x53cec                                     |         goto label_18;
                                                                 |     }
    0x000540a6 mov.w lr, 1                                       |     lr = 1;
    0x000540aa mov ip, r4                                        |     
                                                                 |     do {
    0x000540ac ldrb r2, [r3, 1]                                  |         r2 = *((r3 + 1));
    0x000540ae lsls r2, r2, 0x1b                                 |         r2 <<= 0x1b;
                                                                 |         if (r2 < r2) {
    0x000540b0 bpl 0x540cc                                       |             
    0x000540b2 strb.w lr, [r6, 0xb]                              |             
    0x000540b6 ldr r2, [r3, 0x40]                                |             r2 = *((r3 + 0x40));
    0x000540b8 cmp r0, r2                                        |             
                                                                 |             if (r0 != r2) {
    0x000540ba bne 0x540cc                                       |                 goto label_74;
                                                                 |             }
    0x000540bc ldrd r4, r2, [r3, 0x20]                           |             __asm ("ldrd r4, r2, [r3, 0x20]");
    0x000540c0 cmp r1, r2                                        |             
    0x000540c2 it eq                                             |             
                                                                 |             if (r1 == r2) {
    0x000540c4 cmpeq r7, r4                                      |                 __asm ("cmpeq r7, r4");
                                                                 |             }
    0x000540c6 it eq                                             |             
                                                                 |             if (r1 == r2) {
    0x000540c8 strbeq lr, [r3]                                   |                 goto label_74;
                                                                 |             }
                                                                 |         }
                                                                 | label_74:
    0x000540cc ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x000540ce cmp r3, 0                                         |         
    0x000540d0 bne 0x540ac                                       |         
                                                                 |     } while (r3 != 0);
    0x000540d2 mov r4, ip                                        |     r4 = ip;
    0x000540d4 b 0x53cec                                         |     goto label_18;
                                                                 | label_37:
    0x000540d6 add r3, sp, 0x4c                                  |     r3 += var_4ch;
    0x000540d8 ldr r1, [sp, 0x20]                                |     r1 = x;
    0x000540da str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x000540dc mov r0, r5                                        |     r0 = r5;
    0x000540de ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x000540e0 ubfx r3, r3, 3, 1                                 |     r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x000540e4 str r3, [sp]                                      |     *(sp) = r3;
    0x000540e6 ldrd r2, r3, [r1, 8]                              |     __asm ("ldrd r2, r3, [r1, 8]");
    0x000540ea ldr r1, [r1]                                      |     r1 = *(r1);
    0x000540ec bl 0x52fc0                                        |     r0 = fcn_00052fc0 (r0, r1, r2, r3, r4);
    0x000540f0 mov sb, r0                                        |     sb = r0;
    0x000540f2 str r0, [sp, 0x48]                                |     var_48h = r0;
    0x000540f4 b 0x53b3c                                         |     goto label_19;
                                                                 | label_42:
    0x000540f6 blx 0xa230                                        |     fcn_0000a230 ();
    0x000540fa ldr r2, [pc, 0x228]                               |     
    0x000540fc add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x00054100 ldr r1, [pc, 0x224]                               |     
    0x00054102 movw r3, 0x2a4c                                   |     
    0x00054106 movt r3, 1                                        |     r3 = 0x12a4c;
    0x0005410a movs r0, 0xb                                      |     r0 = 0xb;
    0x0005410c add r2, pc                                        |     r2 = 0xa8436;
    0x0005410e str r4, [sp]                                      |     *(sp) = r4;
    0x00054110 add r1, pc                                        |     r1 = 0xa843c;
    0x00054112 blx 0x9f00                                        |     fcn_00009f00 ();
    0x00054116 b 0x53cb4                                         |     goto label_20;
                                                                 | label_60:
    0x00054118 asrs r3, r6, 0x1f                                 |     r3 = r6 >> 0x1f;
    0x0005411a cmp r6, 0x80                                      |     
    0x0005411c sbcs r2, r3, 0                                    |     __asm ("sbcs r2, r3, 0");
                                                                 |     if (r6 <= 0x80) {
    0x00054120 blo.w 0x53df4                                     |         goto label_21;
                                                                 |     }
    0x00054124 cmp.w r6, 0x4000                                  |     
    0x00054128 sbcs r2, r3, 0                                    |     __asm ("sbcs r2, r3, 0");
                                                                 |     if (r6 <= 0x4000) {
    0x0005412c blo.w 0x54270                                     |         goto label_75;
                                                                 |     }
    0x00054130 mov r2, r6                                        |     r2 = r6;
    0x00054132 bl 0xae18                                         |     r0 = fcn_0000ae18 (r0, r1, r2);
    0x00054136 uxtb r3, r0                                       |     r3 = (int8_t) r0;
    0x00054138 b 0x53dfc                                         |     goto label_22;
                                                                 | label_40:
    0x0005413a mov r3, r7                                        |     r3 = r7;
    0x0005413c add r7, sp, 0x48                                  |     r7 += var_48h;
    0x0005413e add r3, fp                                        |     r3 += fp;
    0x00054140 movs r2, 3                                        |     r2 = 3;
    0x00054142 ldr r1, [r3, -0x4]                                |     r1 = *((r3 - 0x4));
    0x00054146 mov r0, r6                                        |     r0 = r6;
    0x00054148 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0005414a str r7, [sp]                                      |     *(sp) = r7;
    0x0005414c rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x0005414e bl 0x4c6ec                                        |     fcn_0004c6ec (r0, r1, r2, r3, r4);
    0x00054152 ldr.w sb, [sp, 0x48]                              |     sb = var_48h;
    0x00054156 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0005415a bne.w 0x53c0e                                     |         goto label_4;
                                                                 |     }
    0x0005415e b 0x53b94                                         |     goto label_12;
                                                                 | label_44:
    0x00054160 ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
    0x00054162 ldr r0, [r4, 0x34]                                |     r0 = *((r4 + 0x34));
    0x00054164 str r2, [sp]                                      |     *(sp) = r2;
    0x00054166 ldrh.w r2, [sp, 0x6a]                             |     r2 = var_6ah;
    0x00054168 movs r0, 0x6a                                     |     r0 = 0x6a;
    0x0005416a str r2, [sp, 4]                                   |     var_4h_2 = r2;
    0x0005416c mov r2, r7                                        |     r2 = r7;
    0x0005416e bl 0x4d974                                        |     fcn_0004d974 (r0, r1, r2, r3);
    0x00054172 ldrh.w r2, [sp, 0x6a]                             |     r2 = var_6ah;
    0x00054176 ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00054178 str r0, [sp, 0x48]                                |     var_48h = r0;
    0x0005417a cmp r2, fp                                        |     
    0x0005417c bic r3, r3, 4                                     |     r3 = BIT_MASK (r3, 4);
    0x00054180 strb r3, [r5, 1]                                  |     *((r5 + 1)) = r3;
                                                                 |     if (r2 == fp) {
    0x00054182 beq 0x54234                                       |         goto label_76;
                                                                 |     }
                                                                 | label_28:
    0x00054184 mov sb, r0                                        |     sb = r0;
    0x00054186 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00054188 bne.w 0x53c0e                                     |         goto label_4;
                                                                 |     }
    0x0005418c b 0x53bf8                                         |     goto label_23;
                                                                 | label_55:
    0x0005418e ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x00054190 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00054192 beq.w 0x53b4a                                     |         goto label_6;
                                                                 |     }
    0x00054196 ldr r2, [sp, 0x20]                                |     r2 = x;
    0x00054198 ldrd r3, r2, [r2, 0x1c]                           |     __asm ("ldrd r3, r2, [r2, 0x1c]");
    0x0005419c add r3, r2                                        |     r3 += r2;
    0x0005419e ldr r2, [r5, 0x2c]                                |     r2 = *((r5 + 0x2c));
    0x000541a0 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000541a2 bne.w 0x53b4a                                     |         goto label_6;
                                                                 |     }
    0x000541a6 ldr r2, [pc, 0x184]                               |     
    0x000541a8 ldr r3, [pc, 0x164]                               |     r3 = *(0x54310);
    0x000541aa add r2, pc                                        |     r2 = 0xa84dc;
    0x000541ac ldr r3, [r2, r3]                                  |     r3 = *(0xa84dc);
    0x000541ae ldr r2, [r3]                                      |     r2 = *(0xa84dc);
    0x000541b0 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x000541b2 eors r2, r3                                       |     r2 ^= r3;
    0x000541b4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000541b8 bne.w 0x54302                                     |         goto label_47;
                                                                 |     }
    0x000541bc ldr r1, [sp, 0x20]                                |     r1 = x;
    0x000541be mov r0, r5                                        |     r0 = r5;
    0x000541c0 add sp, 0x8c                                      |     
    0x000541c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x000541c6 b.w 0x4d4e4                                       |     goto label_24;
                                                                 | label_59:
    0x000541ca lsrs r3, r2, 7                                    |     r3 = r2 >> 7;
    0x000541cc ldr r1, [sp, 0x28]                                |     r1 = var_28h_2;
    0x000541ce and r2, r2, 0x7f                                  |     r2 &= 0x7f;
    0x000541d2 orn r3, r3, 0x7f                                  |     r3 |= 0x7f;
                                                                 |     r3 = ~r3;
    0x000541d6 strb.w r3, [r1, fp]                               |     *((r1 + fp)) = r3;
    0x000541da strb r2, [r0, 1]                                  |     *((r0 + 1)) = r2;
    0x000541dc movs r0, 2                                        |     r0 = 2;
    0x000541de add fp, r0                                        |     
    0x000541e0 b 0x53e00                                         |     goto label_25;
                                                                 | label_61:
    0x000541e2 add fp, r6                                        |     
    0x000541e4 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x000541e6 cmp.w fp, 4                                       |     
    0x000541ea mov r2, r7                                        |     r2 = r7;
    0x000541ec mov r0, sl                                        |     r0 = sl;
    0x000541ee it lt                                             |     
                                                                 |     if (fp >= 4) {
    0x000541f0 movlt fp, 4                                       |         
                                                                 |     }
    0x000541f4 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x000541f8 subs r2, r6, r7                                   |     r2 = r6 - r7;
    0x000541fa add.w r0, sl, r7                                  |     r0 = sl + r7;
    0x000541fe movs r1, 0                                        |     r1 = 0;
    0x00054200 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00054204 movs r3, 0                                        |     r3 = 0;
    0x00054206 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00054208 b 0x53b94                                         |     goto label_12;
                                                                 | label_58:
    0x0005420a ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x0005420c movs r0, 1                                        |     r0 = 1;
    0x0005420e strb.w r2, [r3, fp]                               |     *((r3 + fp)) = r2;
    0x00054212 add fp, r0                                        |     
    0x00054214 b 0x53e00                                         |     goto label_25;
                                                                 | label_57:
    0x00054216 asrs r3, r6, 0x1f                                 |     r3 = r6 >> 0x1f;
    0x00054218 cmp.w r6, 0x4000                                  |     
    0x0005421c sbcs r2, r3, 0                                    |     __asm ("sbcs r2, r3, 0");
                                                                 |     if (r6 <= 0x4000) {
    0x00054220 blo 0x54286                                       |         goto label_77;
                                                                 |     }
    0x00054222 mov r2, r6                                        |     r2 = r6;
    0x00054224 bl 0xae18                                         |     r0 = fcn_0000ae18 (r0, r1, r2);
    0x00054228 uxtb r3, r0                                       |     r3 = (int8_t) r0;
    0x0005422a b 0x53dba                                         |     goto label_26;
                                                                 | label_43:
    0x0005422c ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0005422e ldr r2, [sp, 0x28]                                |     r2 = var_28h_2;
    0x00054230 str r3, [r2]                                      |     *(r2) = r3;
    0x00054232 b 0x53bcc                                         |     goto label_27;
                                                                 | label_76:
    0x00054234 ldrh.w r1, [sp, 0x68]                             |     r1 = var_68h;
    0x00054238 ldr r3, [sp, 0x64]                                |     r3 = var_64h_2;
    0x0005423a cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x0005423c bne 0x54184                                       |         goto label_28;
                                                                 |     }
                                                                 | label_45:
    0x0005423e ldr r3, [sp, 0x14]                                |     r3 = var_14h_2;
    0x00054240 ldrb r3, [r3, 0x11]                               |     r3 = *((r3 + 0x11));
                                                                 |     if (r3 != 0) {
    0x00054242 cbz r3, 0x5429c                                   |         
    0x00054244 ldrh r3, [r4, 0x10]                               |         r3 = *((r4 + 0x10));
    0x00054246 cmp r3, fp                                        |         
                                                                 |         if (r3 > fp) {
    0x00054248 bgt 0x5429c                                       |             goto label_78;
                                                                 |         }
    0x0005424a mov r2, fp                                        |         r2 = fp;
    0x0005424c b 0x54184                                         |         goto label_28;
                                                                 | label_49:
    0x0005424e blx 0xa230                                        |         fcn_0000a230 ();
    0x00054252 ldr r2, [pc, 0xdc]                                |         
    0x00054254 add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x00054258 ldr r1, [pc, 0xd8]                                |         
    0x0005425a movw r3, 0x29ad                                   |         
    0x0005425e movt r3, 1                                        |         r3 = 0x129ad;
    0x00054262 movs r0, 0xb                                      |         r0 = 0xb;
    0x00054264 add r2, pc                                        |         r2 = 0xa859a;
    0x00054266 str r4, [sp]                                      |         *(sp) = r4;
    0x00054268 add r1, pc                                        |         r1 = 0xa85a0;
    0x0005426a blx 0x9f00                                        |         fcn_00009f00 ();
    0x0005426e b 0x53cb4                                         |         goto label_20;
                                                                 | label_75:
    0x00054270 ldr r2, [sp, 0x28]                                |         r2 = var_28h_2;
    0x00054272 lsrs r3, r6, 7                                    |         r3 = r6 >> 7;
    0x00054274 orn r3, r3, 0x7f                                  |         r3 |= 0x7f;
                                                                 |         r3 = ~r3;
    0x00054278 strb.w r3, [r2, fp]                               |         *((r2 + fp)) = r3;
    0x0005427c and r3, r6, 0x7f                                  |         r3 = r6 & 0x7f;
    0x00054280 strb r3, [r0, 1]                                  |         *((r0 + 1)) = r3;
    0x00054282 movs r3, 2                                        |         r3 = 2;
    0x00054284 b 0x53dfc                                         |         goto label_22;
                                                                 | label_77:
    0x00054286 ldr r2, [sp, 0x28]                                |         r2 = var_28h_2;
    0x00054288 lsrs r3, r6, 7                                    |         r3 = r6 >> 7;
    0x0005428a orn r3, r3, 0x7f                                  |         r3 |= 0x7f;
                                                                 |         r3 = ~r3;
    0x0005428e strb.w r3, [r2, fp]                               |         *((r2 + fp)) = r3;
    0x00054292 and r3, r6, 0x7f                                  |         r3 = r6 & 0x7f;
    0x00054296 strb r3, [r0, 1]                                  |         *((r0 + 1)) = r3;
    0x00054298 movs r3, 2                                        |         r3 = 2;
    0x0005429a b 0x53dba                                         |         goto label_26;
                                                                 |     }
                                                                 | label_78:
    0x0005429c ldrb r2, [r4, 9]                                  |     r2 = *((r4 + 9));
    0x0005429e ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x000542a0 adds r2, 0xa                                      |     r2 += 0xa;
    0x000542a2 add r3, r2                                        |     r3 += r2;
    0x000542a4 cmp r7, r3                                        |     
                                                                 |     if (r7 > r3) {
    0x000542a6 blo 0x542e0                                       |         
    0x000542a8 ldr r2, [r4, 0x3c]                                |         r2 = *((r4 + 0x3c));
    0x000542aa add.w r3, r7, fp                                  |         r3 = r7 + fp;
    0x000542ae cmp r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x000542b0 bhs 0x542d4                                       |             
    0x000542b2 blx 0xa230                                        |             fcn_0000a230 ();
    0x000542b6 ldr r2, [pc, 0x80]                                |             
    0x000542b8 add.w r4, r0, 0x14                                |             r4 = r0 + 0x14;
    0x000542bc ldr r1, [pc, 0x7c]                                |             
    0x000542be movw r3, 0x2a6a                                   |             
    0x000542c2 movt r3, 1                                        |             r3 = 0x12a6a;
    0x000542c6 movs r0, 0xb                                      |             r0 = 0xb;
    0x000542c8 add r2, pc                                        |             r2 = 0xa8606;
    0x000542ca str r4, [sp]                                      |             *(sp) = r4;
    0x000542cc add r1, pc                                        |             r1 = 0xa860c;
    0x000542ce blx 0x9f00                                        |             fcn_00009f00 ();
    0x000542d2 b 0x53cb4                                         |             goto label_20;
                                                                 |         }
    0x000542d4 ldr r1, [sp, 0x28]                                |         r1 = var_28h_2;
    0x000542d6 mov r2, fp                                        |         r2 = fp;
    0x000542d8 mov r0, r7                                        |         r0 = r7;
    0x000542da blx 0x9e2c                                        |         fcn_00009e2c ();
    0x000542de b 0x53c0e                                         |         goto label_4;
                                                                 |     }
    0x000542e0 blx 0xa230                                        |     fcn_0000a230 ();
    0x000542e4 ldr r2, [pc, 0x58]                                |     
    0x000542e6 add.w r4, r0, 0x14                                |     r4 = r0 + 0x14;
    0x000542ea ldr r1, [pc, 0x58]                                |     
    0x000542ec movw r3, 0x2a67                                   |     
    0x000542f0 movt r3, 1                                        |     r3 = 0x12a67;
    0x000542f4 movs r0, 0xb                                      |     r0 = 0xb;
    0x000542f6 add r2, pc                                        |     r2 = 0xa863a;
    0x000542f8 str r4, [sp]                                      |     *(sp) = r4;
    0x000542fa add r1, pc                                        |     r1 = 0xa8644;
    0x000542fc blx 0x9f00                                        |     fcn_00009f00 ();
    0x00054300 b 0x53cb4                                         |     goto label_20;
                                                                 | label_47:
    0x00054302 blx 0x9b44                                        |     r0 = fcn_00009b44 ();
                                                                 | label_68:
    0x00054306 mov sb, r0                                        |     sb = r0;
    0x00054308 b 0x53fda                                         |     goto label_29;
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x544d4 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.000544d4 ()                          | void fcn_000544d4 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                     |     int16_t var_34h;
                                                     |     int16_t var_0h;
                                                     |     int16_t var_8h;
                                                     |     int16_t var_ch;
                                                     |     int16_t var_10h;
                                                     |     int16_t var_18h;
                                                     |     int16_t var_1ch;
                                                     |     int16_t var_20h;
                                                     |     int16_t var_24h;
                                                     |     int16_t var_28h;
                                                     |     int16_t var_38h;
                                                     |     int32_t var_38h_2;
                                                     |     int16_t var_64h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x000544d4 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x000544d8 mov r5, r2                            |     r5 = r2;
    0x000544da ldr r2, [pc, 0x12c]                   |     
    0x000544dc sub sp, 0x68                          |     
    0x000544de mov r4, r1                            |     r4 = r1;
    0x000544e0 mov r6, r0                            |     r6 = r0;
    0x000544e2 ldr r3, [pc, 0x128]                   |     r3 = *(0x5460e);
    0x000544e4 mov r0, r1                            |     r0 = r1;
    0x000544e6 add r2, pc                            |     r2 = 0xa8af4;
    0x000544e8 ldr r3, [r2, r3]                      |     
    0x000544ea ldr r3, [r3]                          |     r3 = *(0xa8af4);
    0x000544ec str r3, [sp, 0x64]                    |     var_64h = r3;
    0x000544ee mov.w r3, 0                           |     r3 = 0;
    0x000544f2 bl 0xe26c                             |     fcn_0000e26c (r0);
    0x000544f6 ldr r3, [r4, 0x74]                    |     r3 = *((r4 + 0x74));
    0x000544f8 movs r1, 0                            |     r1 = 0;
    0x000544fa ldr r7, [r4, 0x28]                    |     r7 = *((r4 + 0x28));
    0x000544fc ldrh r0, [r4, 0x30]                   |     r0 = *((r4 + 0x30));
    0x000544fe ldr r3, [r3, 0x3c]                    |     r3 = *((r3 + 0x3c));
    0x00054500 ldr r2, [r4, 0x2c]                    |     r2 = *((r4 + 0x2c));
    0x00054502 str r6, [sp, 0x24]                    |     var_24h = r6;
    0x00054504 subs r3, r3, r7                       |     r3 -= r7;
    0x00054506 strh.w r1, [sp, 0x20]                 |     var_20h = r1;
    0x0005450a bic.w r3, r3, r3, asr 31              |     r3 = BIT_MASK (r3, r3);
    0x0005450e str r1, [sp, 0x28]                    |     var_28h = r1;
    0x00054510 str r7, [sp, 0x18]                    |     var_18h = r7;
    0x00054512 cmp r3, r0                            |     
    0x00054514 it ge                                 |     
                                                     |     if (r3 < r0) {
    0x00054516 movge r3, r0                          |         r3 = r0;
                                                     |     }
    0x00054518 cmp r2, r3                            |     
                                                     |     if (r2 > r3) {
    0x0005451a bhi 0x545d8                           |         goto label_6;
                                                     |     }
    0x0005451c mov r6, r1                            |     r6 = r1;
    0x0005451e movw r3, 0x4010                       |     r3 = 0x4010;
    0x00054522 strh.w r3, [sp, 0x20]                 |     var_20h = r3;
    0x00054526 str r2, [sp, 0x1c]                    |     var_1ch = r2;
                                                     | label_2:
    0x00054528 ldrb r4, [r7]                         |     r4 = *(r7);
    0x0005452a cmp r4, 0x7f                          |     
    0x0005452c str r4, [sp, 8]                       |     var_8h = r4;
                                                     |     if (r4 > 0x7f) {
    0x0005452e bhi 0x545c8                           |         goto label_7;
                                                     |     }
    0x00054530 cmp r4, 2                             |     
    0x00054532 bls 0x5458a                           |     
                                                     |     while (r4 > 2) {
    0x00054534 ldr.w r8, [sp, 0x1c]                  |         r8 = var_1ch;
    0x00054538 cmp r8, r4                            |         
                                                     |         if (r8 > r4) {
    0x0005453a blo 0x5458a                           |             
    0x0005453c subs r0, r4, 1                        |             r0 = r4 - 1;
    0x0005453e ldrb r1, [r7, r0]                     |             r1 = *((r7 + r0));
    0x00054540 add r0, r7                            |             r0 += r7;
    0x00054542 cmp r1, 0x7f                          |             
    0x00054544 str r1, [sp, 0xc]                     |             var_ch = r1;
                                                     |             if (r1 > 0x7f) {
    0x00054546 bhi 0x545f2                           |                 goto label_8;
                                                     |             }
                                                     | label_4:
    0x00054548 sub.w r3, r1, 7                       |             r3 = r1 - 7;
    0x0005454c subs r2, r1, 1                        |             r2 = r1 - 1;
    0x0005454e clz r3, r3                            |             r3 &= r3;
    0x00054552 lsrs r3, r3, 5                        |             r3 >>= 5;
    0x00054554 cmp r2, 8                             |             
    0x00054556 it hi                                 |             
                                                     |             if (r2 <= 8) {
    0x00054558 orrhi r3, r3, 1                       |                 r3 |= 1;
                                                     |             }
                                                     |             if (r3 == 0) {
    0x0005455c cbnz r3, 0x5458a                      |                 
    0x0005455e ldr r3, [pc, 0xb0]                    |                 
    0x00054560 add r3, pc                            |                 r3 = 0xa8b76;
    0x00054562 add r3, r1                            |                 r3 += r1;
    0x00054564 ldrb.w r3, [r3, 0xcd8]                |                 r3 = *((r3 + 0xcd8));
    0x00054568 add r4, r3                            |                 r4 += r3;
    0x0005456a cmp r8, r4                            |                 
                                                     |                 if (r8 <= r4) {
    0x0005456c blo 0x5458a                           |                     goto label_0;
                                                     |                 }
    0x0005456e sub.w r0, r8, r3                      |                 r0 = r8 - r3;
    0x00054572 add r2, sp, 0x38                      |                 r2 += var_38h;
    0x00054574 add r0, r7                            |                 r0 += r7;
    0x00054576 bl 0xd71c                             |                 fcn_0000d71c (r0, r1, r2);
    0x00054578 ldr.w lr, [r1, 0x9dd]                 |                 
    0x0005457c movs r3, 0xe                          |                 r3 = 0xe;
    0x0005457e strd r2, r3, [r5]                     |                 __asm ("strd r2, r3, [r5]");
    0x00054582 cmp r6, 0                             |                 
                                                     |                 if (r6 != 0) {
    0x00054584 bne 0x545fc                           |                     goto label_9;
                                                     |                 }
                                                     | label_5:
    0x00054586 movs r0, 0                            |                 r0 = 0;
    0x00054588 b 0x545ae                             |                 
                                                     |             }
                                                     |             if (r6 != 0) {
                                                     |             } else {
                                                     | label_0:
    0x0005458a cbnz r6, 0x545ea                      |                 goto label_10;
                                                     |             }
                                                     | label_3:
    0x0005458c blx 0xa230                            |             fcn_0000a230 ();
    0x00054590 ldr r2, [pc, 0x80]                    |             
    0x00054592 add.w r4, r0, 0x14                    |             r4 += var_24h;
    0x00054594 lsls r4, r2, 0x10                     |             r4 = r2 << 0x10;
    0x00054596 ldr r1, [pc, 0x80]                    |             
    0x00054598 movw r3, 0x5040                       |             
    0x0005459c movs r0, 0xb                          |             r0 = 0xb;
    0x0005459e movt r3, 1                            |             r3 = 0x15040;
    0x000545a2 add r2, pc                            |             r2 = 0xa8bba;
    0x000545a4 str r4, [sp]                          |             *(sp) = r4;
    0x000545a6 add r1, pc                            |             r1 = 0xa8bc4;
    0x000545a8 blx 0x9f00                            |             fcn_00009f00 ();
    0x000545ac movs r0, 0xb                          |             r0 = 0xb;
                                                     |         }
                                                     | label_1:
    0x000545ae ldr r2, [pc, 0x6c]                    |         
    0x000545b0 ldr r3, [pc, 0x58]                    |         r3 = *(0x5460c);
    0x000545b2 add r2, pc                            |         r2 = 0xa8bd4;
    0x000545b4 ldr r3, [r2, r3]                      |         r3 = *(0xa8bd4);
    0x000545b6 ldr r2, [r3]                          |         r2 = *(0xa8bd4);
    0x000545b8 ldr r3, [sp, 0x64]                    |         r3 = var_64h;
    0x000545ba eors r2, r3                           |         r2 ^= r3;
    0x000545bc mov.w r3, 0                           |         r3 = 0;
                                                     |         if (r2 != r3) {
    0x000545c0 bne 0x54604                           |             goto label_11;
                                                     |         }
    0x000545c2 add sp, 0x68                          |         
    0x000545c4 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_7:
    0x000545c8 add r1, sp, 8                         |         r1 += var_8h;
    0x000545ca mov r0, r7                            |         r0 = r7;
    0x000545cc bl 0xf2a0                             |         fcn_0000f2a0 (r0, r1);
    0x000545d0 ldr r4, [sp, 8]                       |         r4 = var_8h;
    0x000545d2 cmp r4, 2                             |         
    0x000545d4 bhi 0x54534                           |         
                                                     |     }
    0x000545d6 b 0x5458a                             |     goto label_0;
                                                     | label_6:
    0x000545d8 add r3, sp, 0x10                      |     r3 += var_10h;
    0x000545da mov r0, r4                            |     r0 = r4;
    0x000545dc bl 0x543e8                            |     r0 = fcn_000543e8 (r0, r1, r2, r3);
    0x000545e0 cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x000545e2 bne 0x545ae                           |         goto label_1;
                                                     |     }
    0x000545e4 ldr r7, [sp, 0x18]                    |     r7 = var_18h;
    0x000545e6 ldr r6, [sp, 0x28]                    |     r6 = var_28h;
    0x000545e8 b 0x54528                             |     goto label_2;
                                                     | label_10:
    0x000545ea add r0, sp, 0x10                      |     r0 += var_10h;
    0x000545ec bl 0x13c18                            |     fcn_00013c18 (r0);
    0x000545f0 b 0x5458c                             |     goto label_3;
                                                     | label_8:
    0x000545f2 add r1, sp, 0xc                       |     r1 += var_ch;
    0x000545f4 bl 0xf2a0                             |     fcn_0000f2a0 (r0, r1);
    0x000545f8 ldr r1, [sp, 0xc]                     |     r1 = var_ch;
    0x000545fa b 0x54548                             |     goto label_4;
                                                     | label_9:
    0x000545fc add r0, sp, 0x10                      |     r0 += var_10h;
    0x000545fe bl 0x13c18                            |     fcn_00013c18 (r0);
    0x00054602 b 0x54586                             |     goto label_5;
                                                     | label_11:
    0x00054604 blx 0x9b44                            |     fcn_00009b44 ();
    0x00054608 stm r6!, {r1, r3, r4}                 |     *(r6!) = r1;
                                                     |     *((r6! + 4)) = r3;
                                                     |     *((r6! + 8)) = r4;
    0x0005460a movs r4, r0                           |     r4 = r0;
    0x0005460c lsls r0, r1, 0x13                     |     r0 = r1 << 0x13;
    0x0005460e movs r0, r0                           |     
    0x00054610 movs r7, 0xb4                         |     r7 = 0xb4;
    0x00054612 movs r4, r0                           |     r4 = r0;
    0x00054614 ldrh r2, [r6, 0x36]                   |     r2 = *((r6 + 0x36));
    0x00054616 movs r3, r0                           |     r3 = r0;
    0x00054618 ldrh r2, [r0, 0x28]                   |     r2 = *((r0 + 0x28));
    0x0005461a movs r3, r0                           |     r3 = r0;
    0x0005461c stm r5!, {r1, r2, r3, r6}             |     *(r5!) = r1;
                                                     |     *((r5! + 4)) = r2;
                                                     |     *((r5! + 8)) = r3;
                                                     |     *((r5! + 12)) = r6;
    0x0005461e movs r4, r0                           |     r4 = r0;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5476c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0005476c ()                                      | void fcn_0005476c (int16_t arg_ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0005476c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00054770 sub sp, 0x5c                                      |     
    0x00054772 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00054774 mov r5, r2                                        |     r5 = r2;
    0x00054776 mov r4, r3                                        |     r4 = r3;
    0x00054778 mov r8, r0                                        |     r8 = r0;
    0x0005477a ldr r2, [pc, 0x3e8]                               |     
    0x0005477c str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0005477e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00054782 ldr r3, [pc, 0x3e4]                               |     r3 = *(0x54b6a);
    0x00054784 add r2, pc                                        |     r2 = 0xa92ee;
    0x00054786 vstr d16, [sp, 0x40]                              |     __asm ("vstr d16, [sp, 0x40]");
    0x0005478a vstr d16, [sp, 0x48]                              |     __asm ("vstr d16, [sp, 0x48]");
    0x0005478e ldr r3, [r2, r3]                                  |     
    0x00054790 ldr r3, [r3]                                      |     r3 = *(0xa92ee);
    0x00054792 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00054794 mov.w r3, 0                                       |     r3 = 0;
    0x00054798 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x0005479a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005479c beq.w 0x54ae2                                     |         goto label_18;
                                                                 |     }
    0x000547a0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000547a2 ldr r4, [r3]                                      |     r4 = *(r3);
    0x000547a4 add.w r5, r4, r4, lsl 1                           |     r5 = r4 + (r4 << 1);
    0x000547a8 lsls r5, r5, 2                                    |     r5 <<= 2;
    0x000547aa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000547ac beq.w 0x54998                                     |         goto label_19;
                                                                 |     }
    0x000547b0 mov r2, r5                                        |     r2 = r5;
    0x000547b2 movs r3, 0                                        |     r3 = 0;
    0x000547b4 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x000547b8 mov fp, r0                                        |     
                                                                 | label_3:
    0x000547ba cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x000547be beq 0x547ca                                       |         
    0x000547c0 mov r2, r5                                        |         r2 = r5;
    0x000547c2 movs r1, 0                                        |         r1 = 0;
    0x000547c4 mov r0, fp                                        |         r0 = fp;
    0x000547c6 blx 0x97d4                                        |         fcn_000097d4 ();
                                                                 |     }
    0x000547ca movw r3, 0x7fff                                   |     r3 = 0x7fff;
    0x000547ce ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000547d0 cmp r3, r4                                        |     
    0x000547d2 it ge                                             |     
                                                                 |     if (r3 < r4) {
    0x000547d4 movge r3, r4                                      |         r3 = r4;
                                                                 |     }
    0x000547d6 cmp r4, 0                                         |     
    0x000547d8 strh r3, [r2]                                     |     *(r2) = r3;
    0x000547da str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000547dc ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000547de str.w fp, [r3]                                    |     __asm ("str.w fp, [r3]");
                                                                 |     if (r4 <= 0) {
    0x000547e2 ble.w 0x54b3c                                     |         goto label_20;
                                                                 |     }
    0x000547e6 ldr r3, [pc, 0x384]                               |     
    0x000547e8 add.w sb, fp, 0xc                                 |     sb += arg_ch;
    0x000547ec ldr r7, [pc, 0x380]                               |     
    0x000547ee ldr.w sl, [pc, 0x384]                             |     
    0x000547f2 add r3, pc                                        |     r3 = 0xa9364;
    0x000547f4 ldr r6, [pc, 0x380]                               |     
    0x000547f6 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000547f8 add r7, pc                                        |     r7 = 0xa936c;
    0x000547fa ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000547fc add sl, pc                                        |     sl = 0xa9376;
    0x000547fe add r6, pc                                        |     r6 = 0xa937a;
    0x00054800 str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [var_34h]");
    0x00054804 adds r3, 8                                        |     r3 += 8;
    0x00054806 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00054808 movs r3, 1                                        |     r3 = 1;
                                                                 | label_0:
    0x0005480a ldrb.w r5, [r8, 0x57]                             |     r5 = *((r8 + 0x57));
    0x0005480e subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x00054810 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00054812 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00054814 bne.w 0x54adc                                     |         goto label_21;
                                                                 |     }
    0x00054818 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0005481a ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x0005481c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005481e beq.w 0x54a72                                     |         goto label_22;
                                                                 |     }
    0x00054822 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00054824 add.w r2, r2, r3, lsl 4                           |     r2 += (r3 << 4);
    0x00054828 ldrb r2, [r2, 1]                                  |     r2 = *((r2 + 1));
    0x0005482a lsls r4, r2, 0x1e                                 |     r4 = r2 << 0x1e;
                                                                 |     if (r4 != r2) {
    0x0005482c bne.w 0x54a72                                     |         goto label_22;
                                                                 |     }
                                                                 | label_10:
    0x00054830 ldr.w ip, [pc, 0x348]                             |     ip = *(0x00054b7c);
    0x00054834 add.w lr, r1, -1                                  |     lr = r1 + -1;
    0x00054838 mov r4, lr                                        |     r4 = lr;
    0x0005483a add ip, pc                                        |     
                                                                 |     do {
                                                                 | label_4:
    0x0005483c ldrb r2, [r4, 1]!                                 |         r2 = *((r4 += 1));
    0x00054840 ldrb r0, [ip], 1                                  |         r0 = *(ip);
                                                                 |         ip++;
    0x00054844 cmp r2, r0                                        |         
                                                                 |         if (r2 == r0) {
    0x00054846 beq.w 0x549a4                                     |             goto label_23;
                                                                 |         }
    0x0005484a add r2, r7                                        |         r2 += r7;
    0x0005484c add r0, r7                                        |         r0 += r7;
    0x0005484e ldrb.w fp, [r2, 0x140]                            |         fp = *((r2 + 0x140));
    0x00054852 ldrb.w r2, [r0, 0x140]                            |         r2 = *((r0 + 0x140));
    0x00054856 cmp fp, r2                                        |         
    0x00054858 beq 0x5483c                                       |         
                                                                 |     } while (fp == r2);
    0x0005485a ldr r4, [pc, 0x324]                               |     
    0x0005485c add r4, pc                                        |     r4 = 0xa93e2;
                                                                 |     do {
                                                                 | label_6:
    0x0005485e ldrb r2, [lr, 1]!                                 |         r2 = *((lr += 1));
    0x00054862 ldrb r0, [r4], 1                                  |         r0 = *(r4);
                                                                 |         r4++;
    0x00054866 cmp r2, r0                                        |         
                                                                 |         if (r2 == r0) {
    0x00054868 beq.w 0x549bc                                     |             goto label_24;
                                                                 |         }
    0x0005486c add r2, sl                                        |         r2 += sl;
    0x0005486e add r0, sl                                        |         r0 += sl;
    0x00054870 ldrb.w ip, [r2, 0x140]                            |         ip = *((r2 + 0x140));
    0x00054874 ldrb.w r2, [r0, 0x140]                            |         r2 = *((r0 + 0x140));
    0x00054878 cmp ip, r2                                        |         
    0x0005487a beq 0x5485e                                       |         
                                                                 |     } while (ip == r2);
    0x0005487c mov r0, r8                                        |     r0 = r8;
    0x0005487e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00054880 bl 0x1e948                                        |     fcn_0001e948 (r0, r1);
    0x00054884 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00054886 mov r4, r0                                        |     r4 = r0;
                                                                 | label_5:
    0x00054888 movs r2, 0                                        |     r2 = 0;
    0x0005488a str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x0005488c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0005488e beq 0x54900                                       |         goto label_25;
                                                                 |     }
    0x00054890 ldr r2, [pc, 0x2f0]                               |     
    0x00054892 add.w fp, sp, 0x40                                |     
    0x00054896 str r5, [sp, 0x20]                                |     var_20h = r5;
    0x00054898 str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch]");
    0x0005489c mov sl, r7                                        |     sl = r7;
    0x0005489e add r2, pc                                        |     r2 = 0xa9426;
    0x000548a0 mov r7, r3                                        |     r7 = r3;
    0x000548a2 mov r5, r2                                        |     r5 = r2;
                                                                 |     do {
                                                                 | label_1:
    0x000548a4 movs r2, 0                                        |         r2 = 0;
    0x000548a6 mov r1, r4                                        |         r1 = r4;
    0x000548a8 mov r0, fp                                        |         r0 = fp;
    0x000548aa bl 0x146e4                                        |         fcn_000146e4 (r0, r1, r2);
    0x000548ae ldr r2, [r0, 8]                                   |         r2 = var_48h;
    0x000548b0 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000548b2 beq.w 0x549f4                                     |             goto label_26;
                                                                 |         }
    0x000548b6 ldrsb.w r2, [r2, 9]                               |         r2 = *((r2 + 9));
    0x000548ba mov r0, r4                                        |         r0 = r4;
    0x000548bc cmp r2, 0                                         |         
    0x000548be ittt lt                                           |         
                                                                 |         if (r2 < 0) {
    0x000548c0 ldrhlt r2, [sb, -0x2]                             |             __asm ("ldrhlt r2, [sb, -0x2]");
                                                                 |         }
                                                                 |         if (r2 >= 0) {
    0x000548c4 orrlt r2, r2, 0x400                               |             r2 |= 0x400;
                                                                 |         }
                                                                 |         if (r2 < 0) {
    0x000548c8 strh r2, [sb, -0x2]                               |             *((sb - 0x2)) = r2;
                                                                 |         }
    0x000548cc blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x000548d0 bics r0, r0, 0xc0000000                           |         __asm ("bics r0, r0, aav.0x000000ff");
    0x000548d4 it eq                                             |         
                                                                 |         if (r2 != 0) {
    0x000548d6 moveq r2, r0                                      |             r2 = r0;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x000548d8 bne 0x549c4                                       |             goto label_27;
                                                                 |         }
                                                                 | label_8:
    0x000548da ldr r1, [sp, 0x3c]                                |         r1 = var_3ch;
    0x000548dc mov r3, r4                                        |         r3 = r4;
    0x000548de mov r0, r8                                        |         r0 = r8;
    0x000548e0 adds r1, 1                                        |         r1++;
    0x000548e2 str r1, [sp]                                      |         *(sp) = r1;
    0x000548e4 str r1, [sp, 0x3c]                                |         var_3ch = r1;
    0x000548e6 mov r1, r5                                        |         r1 = r5;
    0x000548e8 bl 0x20e84                                        |         fcn_00020e84 (r0);
    0x000548ec ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x000548ee mov r4, r0                                        |         r4 = r0;
    0x000548f0 cmp r2, 3                                         |         
                                                                 |         if (r2 > 3) {
    0x000548f2 bhi 0x5498a                                       |             goto label_28;
                                                                 |         }
    0x000548f4 cmp r4, 0                                         |         
    0x000548f6 bne 0x548a4                                       |         
                                                                 |     } while (r4 != 0);
                                                                 | label_2:
    0x000548f8 mov r3, r7                                        |     r3 = r7;
    0x000548fa mov r7, sl                                        |     r7 = sl;
    0x000548fc ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch;
                                                                 | label_25:
    0x00054900 ldrd r2, r1, [sp, 0x14]                           |     __asm ("ldrd r2, r1, [var_14h]");
    0x00054904 str r4, [sb, -0xc]                                |     *((sb - 0xc)) = r4;
    0x00054908 add.w r2, r2, r1, lsl 4                           |     r2 += (r1 << 4);
    0x0005490c movs r1, 0                                        |     r1 = 0;
    0x0005490e strb r1, [sb, -0x5]                               |     *((sb - 0x5)) = r1;
    0x00054912 ldrb r2, [r2, 0x12]                               |     r2 = *((r2 + 0x12));
    0x00054914 lsls r2, r2, 0x1f                                 |     r2 <<= 0x1f;
                                                                 |     if (r2 < r2) {
    0x00054916 bpl 0x54924                                       |         
    0x00054918 ldrh r2, [sb, -0x2]                               |         r2 = *((sb - 0x2));
    0x0005491c orr r2, r2, 0x400                                 |         r2 |= 0x400;
    0x00054920 strh r2, [sb, -0x2]                               |         *((sb - 0x2)) = r2;
                                                                 |     }
                                                                 | label_9:
    0x00054924 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00054926 add.w sb, sb, 0xc                                 |     sb += 0xc;
    0x0005492a ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0005492c adds r3, 1                                        |     r3++;
    0x0005492e adds r2, 0x10                                     |     r2 += 0x10;
    0x00054930 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00054932 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00054934 cmp r2, r1                                        |     
                                                                 |     if (r2 > r1) {
    0x00054936 bgt.w 0x5480a                                     |         goto label_0;
                                                                 |     }
    0x0005493a ldr.w fp, [sp, 0x34]                              |     fp = var_34h;
    0x0005493e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00054940 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 | label_13:
    0x00054942 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x00054944 movs r5, 0                                        |     r5 = 0;
    0x00054946 ldr r0, [sp, 0x4c]                                |     r0 = var_4ch;
    0x00054948 str r5, [sp, 0x48]                                |     var_48h = r5;
    0x0005494a blx 0x9c24                                        |     fcn_00009c24 ();
    0x0005494e str r5, [sp, 0x4c]                                |     var_4ch = r5;
    0x00054950 str r5, [sp, 0x40]                                |     var_40h = r5;
                                                                 |     if (r4 == 0) {
    0x00054952 cbz r4, 0x54960                                   |         goto label_29;
                                                                 |     }
                                                                 |     do {
    0x00054954 mov r0, r4                                        |         r0 = r4;
    0x00054956 ldr r4, [r4]                                      |         r4 = *(r4);
    0x00054958 blx 0x9c24                                        |         fcn_00009c24 ();
    0x0005495c cmp r4, 0                                         |         
    0x0005495e bne 0x54954                                       |         
                                                                 |     } while (r4 != 0);
                                                                 | label_29:
    0x00054960 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00054964 movs r5, 0                                        |     r5 = 0;
    0x00054966 str r5, [sp, 0x44]                                |     var_44h = r5;
    0x00054968 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005496a bne.w 0x54b16                                     |         goto label_30;
                                                                 |     }
                                                                 | label_14:
    0x0005496e ldr r2, [pc, 0x218]                               |     
    0x00054970 ldr r3, [pc, 0x1f4]                               |     r3 = *(0x54b68);
    0x00054972 add r2, pc                                        |     r2 = 0xa9500;
    0x00054974 ldr r3, [r2, r3]                                  |     r3 = *(0xa9500);
    0x00054976 ldr r2, [r3]                                      |     r2 = *(0xa9500);
    0x00054978 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0005497a eors r2, r3                                       |     r2 ^= r3;
    0x0005497c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00054980 bne.w 0x54b58                                     |         goto label_31;
                                                                 |     }
    0x00054984 add sp, 0x5c                                      |     
    0x00054986 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_28:
    0x0005498a add r1, sp, 0x3c                                  |     r1 += var_3ch;
    0x0005498c movs r0, 4                                        |     r0 = 4;
    0x0005498e blx 0xa0d8                                        |     fcn_0000a0d8 ();
    0x00054992 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00054994 bne 0x548a4                                       |         goto label_1;
                                                                 |     }
    0x00054996 b 0x548f8                                         |     goto label_2;
                                                                 | label_19:
    0x00054998 mov r0, r5                                        |     r0 = r5;
    0x0005499a mov r1, r8                                        |     r1 = r8;
    0x0005499c bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x000549a0 mov fp, r0                                        |     
    0x000549a2 b 0x547ba                                         |     goto label_3;
                                                                 | label_23:
    0x000549a4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000549a6 bne.w 0x5483c                                     |         goto label_4;
                                                                 |     }
                                                                 | label_7:
    0x000549aa mov r2, r3                                        |     r2 = r3;
    0x000549ac ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x000549ae mov r0, r8                                        |     r0 = r8;
    0x000549b0 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000549b2 bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x000549b6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000549b8 mov r4, r0                                        |     r4 = r0;
    0x000549ba b 0x54888                                         |     goto label_5;
                                                                 | label_24:
    0x000549bc cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000549be bne.w 0x5485e                                     |         goto label_6;
                                                                 |     }
    0x000549c2 b 0x549aa                                         |     goto label_7;
                                                                 | label_27:
    0x000549c4 subs r2, r0, 1                                    |     r2 = r0 - 1;
    0x000549c6 it ne                                             |     
                                                                 |     if (r2 == r0) {
    0x000549c8 addne ip, r4, r0                                  |         
                                                                 |     }
                                                                 |     if (r2 != r0) {
    0x000549cc bne 0x549d4                                       |         goto label_32;
                                                                 |     }
    0x000549ce b 0x549ea                                         |     goto label_33;
                                                                 |     do {
    0x000549d0 subs r2, 1                                        |         r2--;
                                                                 |         if (r2 == 1) {
    0x000549d2 beq 0x549ea                                       |             goto label_33;
                                                                 |         }
                                                                 | label_32:
    0x000549d4 ldrb r1, [ip, -0x1]!                              |         r1 = *((ip -= 0x1));
    0x000549d8 adds r3, r6, r1                                   |         r3 = r6 + r1;
    0x000549da ldrb.w r3, [r3, 0x40]                             |         r3 = *((r3 + 0x40));
    0x000549de lsls r3, r3, 0x1d                                 |         r3 <<= 0x1d;
    0x000549e0 bmi 0x549d0                                       |         
                                                                 |     } while (r3 < r3);
    0x000549e2 cmp r1, 0x3a                                      |     
    0x000549e4 it ne                                             |     
                                                                 |     if (r1 == 0x3a) {
    0x000549e6 movne r2, r0                                      |         r2 = r0;
                                                                 |     }
    0x000549e8 b 0x548da                                         |     goto label_8;
                                                                 | label_33:
    0x000549ea ldrb r1, [r4]                                     |     r1 = *(r4);
    0x000549ec cmp r1, 0x3a                                      |     
    0x000549ee it ne                                             |     
                                                                 |     if (r1 == 0x3a) {
    0x000549f0 movne r2, r0                                      |         r2 = r0;
                                                                 |     }
    0x000549f2 b 0x548da                                         |     goto label_8;
                                                                 | label_26:
    0x000549f4 str r4, [sb, -0xc]                                |     *((sb - 0xc)) = r4;
    0x000549f8 mov r3, r7                                        |     r3 = r7;
    0x000549fa ldrb r2, [r4]                                     |     r2 = *(r4);
    0x000549fc mov r7, sl                                        |     r7 = sl;
    0x000549fe ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x00054a00 ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch;
    0x00054a04 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00054a06 beq 0x54ad8                                       |         goto label_34;
                                                                 |     }
    0x00054a08 ldr r0, [pc, 0x180]                               |     
    0x00054a0a mov r1, r4                                        |     r1 = r4;
    0x00054a0c add r0, pc                                        |     r0 = 0xa959c;
                                                                 |     do {
    0x00054a0e add r2, r0                                        |         r2 += r0;
    0x00054a10 ldrb.w r2, [r2, 0x140]                            |         r2 = *((r2 + 0x140));
    0x00054a14 add r5, r2                                        |         r5 += r2;
    0x00054a16 ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x00054a1a uxtb r5, r5                                       |         r5 = (int8_t) r5;
    0x00054a1c cmp r2, 0                                         |         
    0x00054a1e bne 0x54a0e                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_12:
    0x00054a20 ldrd r2, r1, [sp, 0x14]                           |     __asm ("ldrd r2, r1, [var_14h]");
    0x00054a24 strb r5, [sb, -0x5]                               |     *((sb - 0x5)) = r5;
    0x00054a28 add.w r2, r2, r1, lsl 4                           |     r2 += (r1 << 4);
    0x00054a2c ldrb r2, [r2, 0x12]                               |     r2 = *((r2 + 0x12));
    0x00054a2e lsls r1, r2, 0x1f                                 |     r1 = r2 << 0x1f;
                                                                 |     if (r1 < r2) {
    0x00054a30 bpl 0x54a3e                                       |         
    0x00054a32 ldrh r2, [sb, -0x2]                               |         r2 = *((sb - 0x2));
    0x00054a36 orr r2, r2, 0x400                                 |         r2 |= 0x400;
    0x00054a38 str r0, [r0, 0x28]                                |         *((r0 + 0x28)) = r0;
    0x00054a3a strh r2, [sb, -0x2]                               |         *((sb - 0x2)) = r2;
                                                                 |     }
    0x00054a3e mov r1, r4                                        |     r1 = r4;
    0x00054a40 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00054a42 mov r0, fp                                        |     r0 = fp;
    0x00054a44 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00054a46 mov r2, r4                                        |     r2 = r4;
    0x00054a48 bl 0x147a8                                        |     r0 = fcn_000147a8 (r0, r1, r2, r3, r4);
    0x00054a4c cmp r4, r0                                        |     
    0x00054a4e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
                                                                 |     if (r4 != r0) {
    0x00054a50 bne.w 0x54924                                     |         goto label_9;
                                                                 |     }
    0x00054a54 ldrb.w r2, [r8, 0x57]                             |     r2 = *((r8 + 0x57));
    0x00054a58 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00054a5a bne.w 0x54924                                     |         goto label_9;
                                                                 |     }
    0x00054a5e ldrb.w r2, [r8, 0x58]                             |     r2 = *((r8 + 0x58));
    0x00054a62 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00054a64 bne.w 0x54924                                     |         goto label_9;
                                                                 |     }
    0x00054a68 mov r0, r8                                        |     r0 = r8;
    0x00054a6a bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x00054a6c stc2l p11, c9, [sb, 0x18]                         |     __asm ("stc2l p11, c9, [sb, 0x18]");
    0x00054a70 b 0x54924                                         |     goto label_9;
                                                                 | label_22:
    0x00054a72 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00054a74 ldr r2, [r2]                                      |     r2 = *(r2);
                                                                 |     if (r2 != 0) {
    0x00054a76 cbnz r2, 0x54a88                                  |         goto label_35;
                                                                 |     }
    0x00054a78 b 0x54b5c                                         |     goto label_36;
                                                                 |     do {
    0x00054a7a lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
    0x00054a7c itet mi                                           |         
                                                                 |         if (r0 >= r0) {
    0x00054a7e ldrmi r2, [r2, 0x14]                              |             r2 = *((r2 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x00054a80 ldrpl r2, [r2, 0xc]                               |             r2 = *((r2 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x00054a82 ldrmi r2, [r2, 8]                                 |             r2 = *((r2 + 8));
                                                                 |         }
    0x00054a84 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00054a86 beq 0x54b5c                                       |             goto label_36;
                                                                 |         }
                                                                 | label_35:
    0x00054a88 ldr r0, [r2, 4]                                   |         r0 = *((r2 + 4));
    0x00054a8a tst.w r0, 0x82000                                 |         
    0x00054a8c cmp r7, 2                                         |         
    0x00054a8e bne 0x54a7a                                       |         
                                                                 |     } while (r7 != 2);
    0x00054a90 b 0x54a98                                         |     
                                                                 |     while (r0 == 0x8d) {
    0x00054a92 ldr r2, [r2, 0x10]                                |         r2 = *((r2 + 0x10));
    0x00054a94 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00054a96 beq 0x54b5c                                       |             goto label_36;
                                                                 |         }
    0x00054a98 ldrb r0, [r2]                                     |         r0 = *(r2);
    0x00054a9a cmp r0, 0x8d                                      |         
    0x00054a9c beq 0x54a92                                       |         
                                                                 |     }
    0x00054a9e cmp r0, 0xa7                                      |     
                                                                 |     if (r0 == 0xa7) {
    0x00054aa0 beq 0x54ab0                                       |         goto label_37;
                                                                 |     }
    0x00054aa2 cmp r0, 0x3b                                      |     
    0x00054aa4 it eq                                             |     
                                                                 |     if (r0 != 0x3b) {
    0x00054aa6 ldreq r1, [r2, 8]                                 |         r1 = *((r2 + 8));
                                                                 |     }
                                                                 | label_11:
    0x00054aa8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00054aaa beq.w 0x549aa                                     |         goto label_7;
                                                                 |     }
    0x00054aae b 0x54830                                         |     goto label_10;
                                                                 | label_37:
    0x00054ab0 ldr r0, [r2, 4]                                   |     r0 = *((r2 + 4));
    0x00054ab2 tst.w r0, 0x3000000                               |     
    0x00054ab4 ldrb r0, [r0, 0x1d]                               |     r0 = *((r0 + 0x1d));
                                                                 |     if ((r0 & 0x3000000) != 0) {
    0x00054ab6 bne 0x54aa8                                       |         goto label_11;
                                                                 |     }
    0x00054ab8 ldr r0, [r2, 0x2c]                                |     r0 = *((r2 + 0x2c));
    0x00054aba cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00054abc beq 0x54aa8                                       |         goto label_11;
                                                                 |     }
    0x00054abe ldrsh.w r2, [r2, 0x20]                            |     r2 = *((r2 + 0x20));
    0x00054ac2 cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x00054ac4 blt 0x54b08                                       |         goto label_38;
                                                                 |     }
                                                                 | label_15:
    0x00054ac6 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x00054ac8 add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x00054acc ldr.w r1, [r1, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r1 = *((r1 + offset_0));
    0x00054ad0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00054ad2 beq.w 0x549aa                                     |         goto label_7;
                                                                 |     }
    0x00054ad6 b 0x54830                                         |     goto label_10;
                                                                 | label_34:
    0x00054ad8 mov r5, r2                                        |     r5 = r2;
    0x00054ada b 0x54a20                                         |     goto label_12;
                                                                 | label_21:
    0x00054adc ldr.w fp, [sp, 0x34]                              |     fp = var_34h;
    0x00054ae0 b 0x54942                                         |     goto label_13;
                                                                 | label_18:
    0x00054ae2 mov r3, r4                                        |     r3 = r4;
    0x00054ae4 strh r1, [r5]                                     |     *(r5) = r1;
    0x00054ae6 mov r0, r1                                        |     r0 = r1;
    0x00054ae8 str r1, [r3]                                      |     *(r3) = r1;
    0x00054aea mov r4, r1                                        |     r4 = r1;
    0x00054aec blx 0x9c24                                        |     fcn_00009c24 ();
    0x00054af0 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00054af4 str r4, [sp, 0x44]                                |     var_44h = r4;
    0x00054af6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00054af8 beq.w 0x5496e                                     |         goto label_14;
                                                                 |     }
                                                                 | label_16:
    0x00054afc ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00054afe movs r3, 0                                        |     r3 = 0;
    0x00054b00 str r3, [r2]                                      |     *(r2) = r3;
    0x00054b02 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00054b04 strh r3, [r2]                                     |     *(r2) = r3;
    0x00054b06 b 0x5496e                                         |     goto label_14;
                                                                 | label_38:
    0x00054b08 ldrsh.w r2, [r0, 0x20]                            |     r2 = *((r0 + 0x20));
    0x00054b0c cmp r2, 0                                         |     
                                                                 |     if (r2 >= 0) {
    0x00054b0e bge 0x54ac6                                       |         goto label_15;
                                                                 |     }
    0x00054b10 ldr r1, [pc, 0x7c]                                |     
    0x00054b12 add r1, pc                                        |     r1 = 0xa96a6;
    0x00054b14 b 0x54830                                         |     goto label_10;
                                                                 | label_30:
    0x00054b16 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
                                                                 |     if (r3 == 0) {
    0x00054b18 cbz r3, 0x54b50                                   |         goto label_39;
                                                                 |     }
    0x00054b1a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00054b1c add.w r4, r3, r3, lsl 1                           |     r4 = r3 + (r3 << 1);
                                                                 |     do {
    0x00054b20 ldr.w r1, [fp, r5, lsl 2]                         |         offset_1 = r5 << 2;
                                                                 |         r1 = *((fp + offset_1));
                                                                 |         if (r1 != 0) {
    0x00054b24 cbz r1, 0x54b2c                                   |             
    0x00054b26 mov r0, r8                                        |             r0 = r8;
    0x00054b28 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x00054b2c adds r5, 3                                        |         r5 += 3;
    0x00054b2e cmp r5, r4                                        |         
    0x00054b30 bne 0x54b20                                       |         
                                                                 |     } while (r5 != r4);
                                                                 | label_17:
    0x00054b32 mov r1, fp                                        |     r1 = fp;
    0x00054b34 mov r0, r8                                        |     r0 = r8;
    0x00054b36 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00054b3a b 0x54afc                                         |     goto label_16;
                                                                 | label_20:
    0x00054b3c movs r0, 0                                        |     r0 = 0;
    0x00054b3e blx 0x9c24                                        |     fcn_00009c24 ();
    0x00054b42 movs r3, 0                                        |     r3 = 0;
    0x00054b44 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00054b46 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00054b4a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00054b4c beq.w 0x5496e                                     |         goto label_14;
                                                                 |     }
                                                                 | label_39:
    0x00054b50 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00054b54 beq 0x54afc                                       |         goto label_16;
                                                                 |     }
    0x00054b56 b 0x54b32                                         |     goto label_17;
                                                                 | label_31:
    0x00054b58 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_36:
    0x00054b5c movs r3, 0                                        |     r3 = 0;
    0x00054b5e ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00054b60 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x54c38 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00054c38 ()                                      | void fcn_00054c38 (int16_t arg_0h, arithmetic arg_2h, int16_t arg_4h, int16_t arg_8h, int16_t arg_10h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, arithmetic arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_50h, int16_t arg_57h, int16_t arg_148h, int16_t arg_150h, int16_t arg_1h, arithmetic arg1, int16_t arg2, arithmetic arg3) {
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_0h;
                                                                 |     arithmetic var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int32_t var_ch_2;
                                                                 |     int16_t var_18h;
                                                                 |     arithmetic var_1ch;
                                                                 |     arithmetic var_20h;
                                                                 |     arithmetic var_24h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     arithmetic 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;
                                                                 |     int32_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_90h;
                                                                 |     int32_t var_94h;
                                                                 |     int32_t var_94h_2;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int32_t var_a4h;
                                                                 |     int32_t var_a4h_2;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b5h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_c4h;
                                                                 |     int16_t var_c8h;
                                                                 |     int16_t var_cch;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     arithmetic var_dch;
                                                                 |     int16_t var_e0h;
                                                                 |     int16_t var_e4h;
                                                                 |     int16_t var_e8h;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_f0h;
                                                                 |     int16_t var_f4h;
                                                                 |     int32_t var_f4h_2;
                                                                 |     int16_t var_fch;
                                                                 |     int16_t var_100h;
                                                                 |     int16_t var_104h;
                                                                 |     int16_t var_108h;
                                                                 |     int32_t var_10ch;
                                                                 |     int16_t var_110h;
                                                                 |     arithmetic var_114h;
                                                                 |     int16_t var_118h;
                                                                 |     int16_t var_11ch;
                                                                 |     int16_t var_124h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00054c38 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00054c3c mov sl, r0                                        |     sl = r0;
    0x00054c3e ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00054c40 adds r0, 0                                        |     r0 += 0;
    0x00054c42 mov fp, r1                                        |     
    0x00054c44 vpush {d8}                                        |     __asm ("vpush {d8}");
    0x00054c48 sub sp, 0x12c                                     |     
    0x00054c4a str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00054c4c ldr.w r2, [pc, 0xb2c]                             |     
    0x00054c50 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00054c52 ldr r0, [r0, 8]                                   |     r0 = *((r0 + 8));
    0x00054c54 ldr.w r3, [pc, 0xb28]                             |     r3 = *(0x55780);
    0x00054c58 add r2, pc                                        |     r2 = 0xaa3d8;
    0x00054c5a str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00054c5c ldr r3, [r2, r3]                                  |     
    0x00054c5e ldr r3, [r3]                                      |     r3 = *(0xaa3d8);
    0x00054c60 str r3, [sp, 0x124]                               |     var_124h = r3;
    0x00054c62 mov.w r3, 0                                       |     r3 = 0;
    0x00054c64 lsls r0, r0, 0xc                                  |     r0 <<= 0xc;
    0x00054c66 cbz r0, 0x54c9c                                   |     
                                                                 |     while (1) {
    0x00054c68 cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x00054c6c beq 0x54c74                                       |             
    0x00054c6e ldr.w r3, [sl, 0x24]                              |             r3 = *((sl + 0x24));
                                                                 |             if (r3 == 0) {
    0x00054c72 cbz r3, 0x54cb0                                   |                 goto label_128;
                                                                 |             }
                                                                 |         }
                                                                 | label_0:
    0x00054c74 movs r4, 1                                        |         r4 = 1;
                                                                 | label_1:
    0x00054c76 ldr.w r2, [pc, 0xb0c]                             |         r2 = *(0x00055784);
    0x00054c7a ldr.w r3, [pc, 0xb04]                             |         r3 = *(0x55782);
    0x00054c7e add r2, pc                                        |         r2 += pc;
    0x00054c80 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00054c82 ldr r2, [r3]                                      |         r2 = *(0x55782);
    0x00054c84 ldr r3, [sp, 0x124]                               |         r3 = var_124h;
    0x00054c86 eors r2, r3                                       |         r2 ^= r3;
    0x00054c88 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00054c8c bne.w 0x56dea                                     |             goto label_129;
                                                                 |         }
    0x00054c90 mov r0, r4                                        |         r0 = r4;
    0x00054c92 add sp, 0x12c                                     |         
    0x00054c94 vpop {d8}                                         |         __asm ("vpop {d8}");
    0x00054c98 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00054c9c ldr.w r3, [sl, 0x74]                              |         r3 = *((sl + 0x74));
    0x00054ca0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00054ca2 beq.w 0x55096                                     |             goto label_130;
                                                                 |         }
    0x00054ca4 strh r0, [r7, 0xe]                                |         *((r7 + 0xe)) = r0;
                                                                 | label_7:
    0x00054ca6 mov r0, sl                                        |         r0 = sl;
    0x00054ca8 bl 0x29b0c                                        |         fcn_00029b0c (r0);
    0x00054cac str r0, [sp, 0x24]                                |         var_24h = r0;
    0x00054cae b 0x54c68                                         |         
                                                                 |     }
                                                                 | label_128:
    0x00054cb0 mov r2, r3                                        |     r2 = r3;
    0x00054cb2 movs r1, 0x15                                     |     r1 = 0x15;
    0x00054cb4 mov r0, sl                                        |     r0 = sl;
    0x00054cb6 str r3, [sp]                                      |     *(sp) = r3;
    0x00054cb8 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00054cbc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00054cbe bne 0x54c74                                       |         goto label_0;
                                                                 |     }
    0x00054cc0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00054cc2 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00054cc4 cmp r3, 6                                         |     
                                                                 |     if (r3 <= 6) {
    0x00054cc6 bhi 0x54d10                                       |         
    0x00054cc8 ldr.w r4, [fp, 0x30]                              |         r4 = *(arg_30h);
                                                                 |         if (r4 != 0) {
    0x00054ccc cbz r4, 0x54d00                                   |             
    0x00054cce ldr.w r0, [sl]                                    |             r0 = *(sl);
    0x00054cd2 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00054cd4 beq.w 0x55116                                     |                 goto label_131;
                                                                 |             }
    0x00054cd8 movs r2, 0xc                                      |             r2 = 0xc;
    0x00054cda movs r3, 0                                        |             r3 = 0;
    0x00054cdc bl 0x1d740                                        |             r0 = fcn_0001d740 (r0, r1);
                                                                 | label_10:
    0x00054ce0 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00054ce2 beq.w 0x55a0e                                     |                 goto label_132;
                                                                 |             }
    0x00054ce6 ldr.w r3, [sl, 0x80]                              |             r3 = *((sl + 0x80));
    0x00054cea str r3, [r0]                                      |             *(r0) = r3;
    0x00054cec ldr.w r3, [pc, 0xa98]                             |             r3 = *(0x00055788);
    0x00054cf0 str.w r0, [sl, 0x80]                              |             __asm ("str.w r0, [sl, 0x80]");
    0x00054cf4 str r4, [r0, 4]                                   |             *((r0 + 4)) = r4;
    0x00054cf6 add r3, pc                                        |             r3 += pc;
    0x00054cf8 str r3, [r0, 8]                                   |             *((r0 + 8)) = r3;
                                                                 | label_26:
    0x00054cfa movs r3, 0                                        |             r3 = 0;
    0x00054cfc str.w r3, [fp, 0x30]                              |             __asm ("str.w r3, [arg_30h]");
                                                                 |         }
    0x00054d00 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
    0x00054d04 bic r3, r3, 1                                     |         r3 = BIT_MASK (r3, 1);
    0x00054d08 orr r3, r3, 0x400000                              |         r3 |= 0x400000;
    0x00054d0c str.w r3, [fp, 4]                                 |         __asm ("str.w r3, [arg_4h]");
                                                                 |     }
    0x00054d10 movs r2, 0                                        |     r2 = 0;
    0x00054d12 mov r1, fp                                        |     r1 = fp;
    0x00054d14 mov r0, sl                                        |     r0 = sl;
    0x00054d16 bl 0x2f6fc                                        |     fcn_0002f6fc (r0, r1, r2);
    0x00054d1a ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x00054d1c adds r0, 0x24                                     |     r0 += 0x24;
    0x00054d1e str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00054d20 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00054d22 bne.w 0x550e4                                     |         goto label_19;
                                                                 |     }
    0x00054d26 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00054d2a lsls r4, r3, 8                                    |     r4 = r3 << 8;
                                                                 |     if (r4 < r3) {
    0x00054d2c bmi.w 0x550b2                                     |         goto label_133;
                                                                 |     }
                                                                 | label_9:
    0x00054d30 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00054d32 ldrb r2, [r2]                                     |     r2 = *(r2);
    0x00054d34 cmp r2, 9                                         |     
                                                                 |     if (r2 == 9) {
    0x00054d36 beq.w 0x55426                                     |         goto label_134;
                                                                 |     }
                                                                 | label_17:
    0x00054d3a ldr.w r4, [fp, 0x44]                              |     r4 = *(arg_44h);
    0x00054d3e mov r8, r3                                        |     r8 = r3;
                                                                 |     if (r4 != 0) {
    0x00054d40 cbz r4, 0x54d4c                                   |         
    0x00054d42 ldr.w r2, [fp, 0x34]                              |         r2 = *(arg_34h);
    0x00054d46 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00054d48 beq.w 0x55162                                     |             goto label_135;
                                                                 |         }
                                                                 |     }
                                                                 | label_15:
    0x00054d4c and r3, r8, 8                                     |     r3 = r8 & 8;
    0x00054d50 movs r2, 0x24                                     |     r2 = 0x24;
    0x00054d52 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00054d54 movs r1, 0                                        |     r1 = 0;
    0x00054d56 ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x00054d5a add r0, sp, 0x100                                 |     r0 += var_100h;
    0x00054d5c str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00054d5e blx 0x97d4                                        |     fcn_000097d4 ();
    0x00054d62 ldr.w r3, [fp, 0x34]                              |     r3 = *(arg_34h);
    0x00054d64 adds r0, 0x34                                     |     r0 += 0x34;
    0x00054d66 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00054d68 mov r2, r3                                        |     r2 = r3;
    0x00054d6a ldr.w r8, [sp, 0x34]                              |     r8 = var_34h;
    0x00054d6c strh r4, [r6]                                     |     *(r6) = r4;
    0x00054d6e ldr.w r3, [fp, 0x30]                              |     r3 = *(arg_30h);
    0x00054d72 mov r4, r8                                        |     r4 = r8;
    0x00054d74 str r3, [sp, 0xfc]                                |     var_fch = r3;
    0x00054d76 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00054d78 bne 0x54e38                                       |         goto label_136;
                                                                 |     }
                                                                 |     do {
    0x00054d7a ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00054d7c ldr r3, [r3]                                      |         r3 = *(r3);
    0x00054d7e cmp r3, r4                                        |         
                                                                 |         if (r3 <= r4) {
    0x00054d80 ble.w 0x55434                                     |             goto label_137;
                                                                 |         }
    0x00054d84 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00054d86 lsls r3, r4, 6                                    |         r3 = r4 << 6;
    0x00054d88 str r3, [sp, 0x28]                                |         x = r3;
    0x00054d8a add.w r8, r2, r3                                  |         r8 = r2 + r3;
    0x00054d8e ldrb.w r3, [r8, 0x2c]                             |         r3 = *((r8 + 0x2c));
    0x00054d90 adds r0, 0x2c                                     |         r0 += 0x2c;
    0x00054d92 ldrd r6, r5, [r8, 0x18]                           |         __asm ("ldrd r6, r5, [r8, 0x18]");
    0x00054d94 str r6, [r0, 0x50]                                |         *((r0 + 0x50)) = r6;
    0x00054d96 and r3, r3, 0x18                                  |         r3 &= 0x18;
    0x00054d9a cmp r3, 8                                         |         
                                                                 |         if (r3 == 8) {
    0x00054d9c beq 0x54e7c                                       |             goto label_138;
                                                                 |         }
                                                                 | label_2:
    0x00054d9e cmp r5, 0                                         |         
                                                                 |         if (r5 != 0) {
    0x00054da0 beq 0x54e2e                                       |             
    0x00054da2 ldr r3, [r5, 0x1c]                                |             r3 = *((r5 + 0x1c));
    0x00054da4 ldrsh.w r2, [r6, 0x22]                            |             r2 = *((r6 + 0x22));
    0x00054da8 ldr r0, [r3]                                      |             r0 = *(r3);
    0x00054daa cmp r2, r0                                        |             
                                                                 |             if (r2 != r0) {
    0x00054dac bne.w 0x558da                                     |                 goto label_139;
                                                                 |             }
    0x00054db0 ldr r3, [r5, 4]                                   |             r3 = *((r5 + 4));
    0x00054db2 lsls r1, r3, 0x1c                                 |             r1 = r3 << 0x1c;
                                                                 |             if (r1 < r3) {
    0x00054db4 bmi 0x54e2e                                       |                 goto label_140;
                                                                 |             }
    0x00054db6 ldr r6, [r5, 0x30]                                |             r6 = *((r5 + 0x30));
                                                                 |             if (r6 != 0) {
    0x00054db8 cbz r6, 0x54dea                                   |                 
    0x00054dba ldr.w r2, [fp, 0x30]                              |                 r2 = *(arg_30h);
    0x00054dbe cmp r2, 0                                         |                 
                                                                 |                 if (r2 == 0) {
    0x00054dc0 beq.w 0x550a6                                     |                     goto label_141;
                                                                 |                 }
                                                                 | label_8:
    0x00054dc4 ldr r2, [r5, 0x3c]                                |                 r2 = *((r5 + 0x3c));
    0x00054dc6 cmp r2, 0                                         |                 
                                                                 |                 if (r2 == 0) {
    0x00054dc8 beq 0x54eb8                                       |                     goto label_142;
                                                                 |                 }
                                                                 |                 if (r4 != 0) {
                                                                 | label_3:
    0x00054dca cbnz r4, 0x54dea                                  |                     goto label_4;
                                                                 |                 }
    0x00054dcc ldr.w r3, [fp, 4]                                 |                 r3 = *(arg_4h);
    0x00054dd0 lsls r5, r3, 0xd                                  |                 r5 = r3 << 0xd;
                                                                 |                 if (r5 >= r3) {
    0x00054dd2 bpl 0x54dea                                       |                     goto label_4;
                                                                 |                 }
    0x00054dd4 ldr r2, [sp, 0x18]                                |                 r2 = var_18h;
    0x00054dd6 ldr r3, [r2]                                      |                 r3 = *(r2);
    0x00054dd8 cmp r3, 1                                         |                 
                                                                 |                 if (r3 == 1) {
    0x00054dda beq.w 0x5515e                                     |                     goto label_143;
                                                                 |                 }
    0x00054dde ldrb.w r3, [r2, 0x6c]                             |                 r3 = *((r2 + 0x6c));
    0x00054de2 tst.w r3, 0x22                                    |                 
                                                                 |                 if ((r3 & 0x22) != 0) {
    0x00054de6 bne.w 0x5515e                                     |                     goto label_143;
                                                                 |                 }
    0x00054de8 strh r2, [r7, 0xc]                                |                 *((r7 + 0xc)) = r2;
                                                                 |             }
                                                                 | label_4:
    0x00054dea ldr.w r3, [fp, 0x20]                              |             r3 = *(arg_20h);
    0x00054dee ldr.w r8, [sl]                                    |             r8 = *(sl);
    0x00054df2 ldr.w r6, [sl, 0xf8]                              |             r6 = *((sl + 0xf8));
    0x00054df6 str r3, [sp, 0x18]                                |             var_18h = r3;
    0x00054df8 ldr.w r3, [r8, 0x50]                              |             r3 = *((r8 + 0x50));
    0x00054dfc lsls r1, r3, 0x1f                                 |             r1 = r3 << 0x1f;
                                                                 |             if (r1 >= r3) {
    0x00054dfe bmi 0x54e14                                       |                 
    0x00054e00 ldr r0, [sp, 0x28]                                |                 r0 = x;
    0x00054e02 ldr r2, [sp, 0x18]                                |                 r2 = var_18h;
    0x00054e04 ldr.w r1, [fp, 0x44]                              |                 r1 = *(arg_44h);
    0x00054e08 add r2, r0                                        |                 r2 += r0;
    0x00054e0a ldr r0, [r2, 0x30]                                |                 r0 = *((r2 + 0x30));
    0x00054e0c ldr r5, [r2, 0x1c]                                |                 r5 = *((r2 + 0x1c));
    0x00054e0e str r0, [sp, 0x2c]                                |                 var_2ch = r0;
    0x00054e10 cmp r1, 0                                         |                 
                                                                 |                 if (r1 == 0) {
    0x00054e12 beq 0x54f04                                       |                     goto label_144;
                                                                 |                 }
                                                                 |             }
                                                                 | label_5:
    0x00054e14 ldr r3, [sp, 0x20]                                |             r3 = var_20h;
    0x00054e16 ldrb.w r3, [r3, 0x57]                             |             r3 = *((r3 + 0x57));
    0x00054e18 adds r0, 0x57                                     |             r0 += 0x57;
    0x00054e1a cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00054e1c bne.w 0x550e4                                     |                 goto label_19;
                                                                 |             }
    0x00054e20 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x00054e22 ldrb r3, [r3]                                     |             r3 = *(r3);
    0x00054e24 cmp r3, 8                                         |             
    0x00054e26 itt hi                                            |             
                                                                 |             if (r3 <= 8) {
    0x00054e28 ldrhi r3, [fp, 0x30]                              |                 r3 = *(arg_30h);
                                                                 |             }
                                                                 |             if (r3 <= 8) {
    0x00054e2c str r3, [sp, 0xfc]                                |                 var_fch = r3;
                                                                 |                 goto label_140;
                                                                 |             }
                                                                 |         }
                                                                 | label_140:
    0x00054e2e adds r4, 1                                        |         r4++;
                                                                 | label_14:
    0x00054e30 ldr.w r3, [fp, 0x34]                              |         r3 = *(arg_34h);
    0x00054e34 cmp r3, 0                                         |         
    0x00054e36 beq 0x54d7a                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_136:
    0x00054e38 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00054e3a mov r1, fp                                        |     r1 = fp;
    0x00054e3c mov r0, sl                                        |     r0 = sl;
    0x00054e3e bl 0x67020                                        |     fcn_00067020 (r0, r1, r2, r3, r4, r5, r6);
    0x00054e42 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00054e46 mov r4, r0                                        |     r4 = r0;
    0x00054e48 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00054e4a bne.w 0x54c76                                     |         goto label_1;
                                                                 |     }
    0x00054e4e ldr.w r3, [sl, 0xdc]                              |     r3 = *((sl + 0xdc));
    0x00054e52 ldr.w r2, [sl, 8]                                 |     r2 = *((sl + 8));
    0x00054e54 movs r0, 8                                        |     r0 = 8;
    0x00054e56 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00054e58 beq.w 0x55110                                     |         goto label_145;
                                                                 |     }
    0x00054e5c ldr r1, [r2]                                      |     r1 = *(r2);
    0x00054e5e it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x00054e60 ldrlt r3, [r2, 0x6c]                              |         r3 = *((r2 + 0x6c));
                                                                 |     }
    0x00054e62 ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
    0x00054e66 it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x00054e68 addlt r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
    0x00054e6c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00054e6e beq.w 0x55104                                     |         goto label_146;
                                                                 |     }
    0x00054e72 ldr.w r3, [pc, 0x918]                             |     r3 = *(0x0005578c);
    0x00054e76 add r3, pc                                        |     r3 += pc;
    0x00054e78 adds r3, 4                                        |     r3 += 4;
    0x00054e7a b 0x5510e                                         |     goto label_13;
                                                                 | label_138:
    0x00054e7c ldr.w r1, [r8, 0x30]                              |     r1 = *((r8 + 0x30));
    0x00054e80 ldr.w r0, [fp, 0x24]                              |     r0 = *(arg_24h);
    0x00054e84 bl 0x2cf18                                        |     r0 = fcn_0002cf18 (r0, r1);
    0x00054e88 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00054e8a beq 0x54d9e                                       |         goto label_2;
                                                                 |     }
    0x00054e8c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00054e8e ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00054e90 lsls r0, r3, 0x12                                 |     r0 = r3 << 0x12;
                                                                 |     if (r0 < r3) {
    0x00054e92 bmi 0x54d9e                                       |         goto label_2;
                                                                 |     }
    0x00054e94 ldrb.w r3, [r8, 0x2c]                             |     r3 = *((r8 + 0x2c));
    0x00054e98 ldr.w r1, [r8, 0x30]                              |     r1 = *((r8 + 0x30));
    0x00054e9c ldr.w r0, [fp, 0x24]                              |     r0 = *(arg_24h);
    0x00054ea0 bic r3, r3, 0x28                                  |     r3 = BIT_MASK (r3, 0x28);
    0x00054ea4 strb.w r3, [r8, 0x2c]                             |     *((r8 + 0x2c)) = r3;
    0x00054ea8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00054eaa ldrb.w r2, [r3, 0x2c]                             |     r2 = *((r3 + 0x2c));
    0x00054eae and r2, r2, 0x40                                  |     r2 &= 0x40;
    0x00054eb0 lsls r0, r0, 9                                    |     r0 <<= 9;
    0x00054eb2 bl 0xc480                                         |     fcn_0000c480 (r0, r1, r2);
    0x00054eb6 b 0x54d9e                                         |     goto label_2;
                                                                 | label_142:
    0x00054eb8 lsls r2, r3, 4                                    |     r2 = r3 << 4;
                                                                 |     if (r2 < r3) {
    0x00054eba bmi 0x54dca                                       |         goto label_3;
                                                                 |     }
    0x00054ebc ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00054ec0 lsls r3, r3, 4                                    |     r3 <<= 4;
                                                                 |     if (r3 < r3) {
    0x00054ec2 bmi 0x54dca                                       |         goto label_3;
                                                                 |     }
    0x00054ec4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00054ec6 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00054ec8 lsls r7, r3, 0xd                                  |     r7 = r3 << 0xd;
                                                                 |     if (r7 < r3) {
    0x00054eca bmi.w 0x54dca                                     |         goto label_3;
                                                                 |     }
    0x00054ece ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00054ed2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00054ed4 beq.w 0x5636a                                     |         goto label_147;
                                                                 |     }
    0x00054ed8 movs r2, 0xc                                      |     r2 = 0xc;
    0x00054eda movs r3, 0                                        |     r3 = 0;
    0x00054edc bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
                                                                 | label_41:
    0x00054ee0 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00054ee4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00054ee6 beq.w 0x566b6                                     |         goto label_148;
                                                                 |     }
    0x00054eea ldr.w r3, [sl, 0x80]                              |     r3 = *((sl + 0x80));
    0x00054eee str r3, [r0]                                      |     *(r0) = r3;
    0x00054ef0 ldr.w r3, [pc, 0x89c]                             |     r3 = *(0x00055790);
    0x00054ef4 str.w r0, [sl, 0x80]                              |     __asm ("str.w r0, [sl, 0x80]");
    0x00054ef8 str r6, [r0, 4]                                   |     *((r0 + 4)) = r6;
    0x00054efa add r3, pc                                        |     r3 += pc;
    0x00054efc str r3, [r0, 8]                                   |     *((r0 + 8)) = r3;
                                                                 | label_65:
    0x00054efe movs r3, 0                                        |     r3 = 0;
    0x00054f00 str r3, [r5, 0x30]                                |     *((r5 + 0x30)) = r3;
    0x00054f02 b 0x54dea                                         |     goto label_4;
                                                                 | label_144:
    0x00054f04 ldr r2, [r5, 0x44]                                |     r2 = *((r5 + 0x44));
    0x00054f06 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00054f08 bne 0x54e14                                       |         goto label_5;
                                                                 |     }
    0x00054f0a ldr r0, [r5, 0x3c]                                |     r0 = *((r5 + 0x3c));
    0x00054f0c ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x00054f0e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00054f10 beq.w 0x55120                                     |         goto label_149;
                                                                 |     }
    0x00054f14 ldr.w r1, [fp, 0x3c]                              |     r1 = *(arg_3ch);
    0x00054f18 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00054f1a bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f1e ldr r1, [r0, 0x10]                                |     r1 = *((r0 + 0x10));
    0x00054f20 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00054f22 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f26 ldr.w lr, [fp, 4]                                 |     
    0x00054f2a tst.w lr, 0x100                                   |     
                                                                 |     if ((lr & 0x100) != 0) {
    0x00054f2e bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_11:
    0x00054f32 ldr.w ip, [r2]                                    |     ip = *(r2);
    0x00054f36 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x00054f3a beq.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f3e ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x00054f40 lsls r7, r1, 0x1f                                 |     r7 = r1 << 0x1f;
                                                                 |     if (r7 < r1) {
    0x00054f42 bmi.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f46 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00054f48 beq.w 0x55140                                     |         goto label_150;
                                                                 |     }
    0x00054f4c ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00054f4e ldr r0, [r0]                                      |     r0 = *(r0);
    0x00054f50 cmp r0, 1                                         |     
                                                                 |     if (r0 > 1) {
    0x00054f52 bgt.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f56 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00054f58 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00054f5a bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f5e ldr.w r0, [fp, 0x30]                              |     r0 = *(arg_30h);
                                                                 |     if (r0 == 0) {
    0x00054f62 cbz r0, 0x54f6c                                   |         goto label_151;
                                                                 |     }
    0x00054f64 ldr r7, [r5, 0x30]                                |     r7 = *((r5 + 0x30));
    0x00054f66 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00054f68 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_151:
    0x00054f6c ldr.w r7, [fp, 0x24]                              |     r7 = *(arg_24h);
    0x00054f70 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00054f72 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f76 tst.w lr, 1                                       |     
                                                                 |     if ((lr & 1) != 0) {
    0x00054f7a bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_12:
    0x00054f7e lsls r1, r1, 0x12                                 |     r1 <<= 0x12;
                                                                 |     if (r1 < r1) {
    0x00054f80 bmi.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f84 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00054f86 ldr r7, [sp, 0x28]                                |     r7 = x;
    0x00054f88 adds r7, r1, r7                                   |     r7 = r1 + r7;
    0x00054f8a ldrb.w sb, [r7, 0x2c]                             |     sb = *((r7 + 0x2c));
    0x00054f8e ands r1, sb, 0x60                                 |     r1 = sb & 0x60;
                                                                 |     if (r1 == sb) {
    0x00054f92 beq.w 0x56e98                                     |         goto label_152;
                                                                 |     }
    0x00054f96 cmp.w ip, 1                                       |     
                                                                 |     if (ip > 1) {
    0x00054f9a bgt.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054f9e ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00054fa0 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00054fa2 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054fa6 ldr r1, [r2, 0x18]                                |     r1 = *((r2 + 0x18));
    0x00054fa8 ldrb.w r1, [r1, 0x2b]                             |     r1 = *((r1 + 0x2b));
    0x00054fac cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x00054fae beq.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054fb0 add r7, sp, 0xc4                                  |     r7 = sp + 0xc4;
    0x00054fb2 tst.w lr, 1                                       |     
                                                                 |     if ((lr & 1) != 0) {
    0x00054fb6 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054fba tst.w sb, 0x10                                    |     
                                                                 |     if ((sb & 0x10) != 0) {
    0x00054fbe bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00054fc2 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x00054fc4 ble.w 0x57034                                     |         goto label_153;
                                                                 |     }
    0x00054fc8 movs r1, 1                                        |     r1 = 1;
    0x00054fca str r1, [sp, 0x40]                                |     var_40h = r1;
                                                                 | label_92:
    0x00054fcc ldrb.w r1, [r2, 0x2c]                             |     r1 = *((r2 + 0x2c));
    0x00054fd0 lsls r7, r1, 0x19                                 |     r7 = r1 << 0x19;
                                                                 |     if (r7 < r1) {
    0x00054fd2 bmi.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_93:
    0x00054fd6 ldr r7, [sp, 0x28]                                |     r7 = x;
    0x00054fd8 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00054fda add r1, r7                                        |     r1 += r7;
    0x00054fdc ldrb.w r7, [r1, 0x2e]                             |     r7 = *((r1 + 0x2e));
    0x00054fe0 lsls r1, r7, 0x1f                                 |     r1 = r7 << 0x1f;
                                                                 |     if (r1 >= r7) {
    0x00054fe2 bpl 0x54ff4                                       |         goto label_154;
                                                                 |     }
    0x00054fe4 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00054fe6 add.w r1, r1, r4, lsl 6                           |     r1 += (r4 << 6);
    0x00054fea ldr r1, [r1, 0x44]                                |     r1 = *((r1 + 0x44));
    0x00054fec ldrb r1, [r1, 0x12]                               |     r1 = *((r1 + 0x12));
    0x00054fee cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00054ff0 beq.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_154:
    0x00054ff4 cmp.w ip, 1                                       |     
                                                                 |     if (ip <= 1) {
    0x00054ff8 ble 0x55028                                       |         goto label_155;
                                                                 |     }
    0x00054ffa add.w r2, r2, ip, lsl 6                           |     r2 += (ip << 6);
    0x00054ffe ldrb r2, [r2, -0x14]                              |     r2 = *((r2 - 0x14));
    0x00055002 lsls r1, r2, 0x1a                                 |     r1 = r2 << 0x1a;
                                                                 |     if (r1 >= r2) {
    0x00055004 bpl 0x55028                                       |         goto label_155;
                                                                 |     }
    0x00055006 tst.w sb, 4                                       |     
                                                                 |     if ((sb & 4) != 0) {
    0x0005500a bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x0005500e lsls r2, r7, 0x1d                                 |     r2 = r7 << 0x1d;
                                                                 |     if (r2 < r7) {
    0x00055010 bmi.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055014 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00055016 ldr r1, [sp, 0x28]                                |     r1 = x;
    0x00055018 add r2, r1                                        |     r2 += r1;
    0x0005501a ldr r2, [r2, 0x34]                                |     r2 = *((r2 + 0x34));
    0x0005501c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005501e bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055022 lsls r7, r7, 0x1c                                 |     r7 <<= 0x1c;
                                                                 |     if (r7 < r7) {
    0x00055024 bmi.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_155:
    0x00055028 ldr r2, [r5, 0x34]                                |     r2 = *((r5 + 0x34));
    0x0005502a str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x0005502c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005502e beq.w 0x5705a                                     |         goto label_126;
                                                                 |     }
    0x00055032 ldr r2, [r5, 0x30]                                |     r2 = *((r5 + 0x30));
    0x00055034 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00055036 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x0005503a ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0005503c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005503e bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055042 tst.w lr, 1                                       |     
                                                                 |     if ((lr & 1) != 0) {
    0x00055046 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x0005504a ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0005504c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005504e bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055052 mov r1, r5                                        |     r1 = r5;
    0x00055054 mov ip, r3                                        |     
                                                                 | label_6:
    0x00055056 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x00055058 tst.w r2, 9                                       |     
                                                                 |     if ((r2 & 9) != 0) {
    0x0005505c bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055060 ldr r2, [r1, 0x34]                                |     r2 = *((r1 + 0x34));
                                                                 |     if (r2 == 0) {
    0x00055062 cbz r2, 0x5506c                                   |         goto label_156;
                                                                 |     }
    0x00055064 ldrb r7, [r1]                                     |     r7 = *(r1);
    0x00055066 cmp r7, 0x87                                      |     
                                                                 |     if (r7 != 0x87) {
    0x00055068 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_156:
    0x0005506c ldr r7, [r1, 0x20]                                |     r7 = *((r1 + 0x20));
    0x0005506e ldr r3, [r7]                                      |     r3 = *(r7);
    0x00055070 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00055072 ble.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055076 ldr r1, [r1, 0x44]                                |     r1 = *((r1 + 0x44));
    0x00055078 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0005507a bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x0005507e cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x00055080 ble 0x5508c                                       |         goto label_157;
                                                                 |     }
    0x00055082 ldrb.w r1, [r7, 0x2c]                             |     r1 = *((r7 + 0x2c));
    0x00055086 lsls r1, r1, 0x19                                 |     r1 <<= 0x19;
                                                                 |     if (r1 < r1) {
    0x00055088 bmi.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_157:
    0x0005508c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005508e beq.w 0x57596                                     |         goto label_158;
                                                                 |     }
    0x00055092 mov r1, r2                                        |     r1 = r2;
    0x00055094 b 0x55056                                         |     goto label_6;
                                                                 | label_130:
    0x00055096 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00055098 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x0005509a lsls r5, r3, 0x1c                                 |     r5 = r3 << 0x1c;
    0x0005509c itt pl                                            |     
                                                                 |     if (r5 < r3) {
    0x0005509e movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 < r3) {
    0x000550a0 strbpl r3, [sl, 0x17]                             |         *((sl + 0x17)) = r3;
                                                                 |     }
    0x000550a4 b 0x54ca6                                         |     goto label_7;
                                                                 | label_141:
    0x000550a6 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000550a8 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000550aa cmp r2, 1                                         |     
                                                                 |     if (r2 > 1) {
    0x000550ac bgt.w 0x54dc4                                     |         goto label_8;
                                                                 |     }
    0x000550b0 b 0x54dca                                         |     goto label_3;
                                                                 | label_133:
    0x000550b2 ldr.w r4, [fp, 0x20]                              |     r4 = *(arg_20h);
    0x000550b6 mov r1, r4                                        |     r1 = r4;
    0x000550b8 add.w r0, r4, 8                                   |     r0 = r4 + 8;
    0x000550bc bl 0x17e90                                        |     r0 = fcn_00017e90 (r0, r1);
                                                                 |     if (r0 == 0) {
    0x000550c0 cbnz r0, 0x550d0                                  |         
    0x000550c2 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
    0x000550c6 bic r3, r3, 0x800000                              |         r3 = BIT_MASK (r3, 0x800000);
    0x000550ca str.w r3, [fp, 4]                                 |         __asm ("str.w r3, [arg_4h]");
    0x000550ce b 0x54d30                                         |         goto label_9;
                                                                 |     }
    0x000550d0 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x000550d2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000550d4 beq.w 0x55f3c                                     |         goto label_159;
                                                                 |     }
                                                                 | label_33:
    0x000550d8 ldr.w r1, [pc, 0x6b8]                             |     r1 = *(0x00055794);
    0x000550dc mov r0, sl                                        |     r0 = sl;
    0x000550de add r1, pc                                        |     r1 += pc;
    0x000550e0 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_19:
    0x000550e4 movs r4, 1                                        |     r4 = 1;
                                                                 | label_27:
    0x000550e6 ldr.w r3, [sl, 0xdc]                              |     r3 = *((sl + 0xdc));
    0x000550ea ldr.w r2, [sl, 8]                                 |     r2 = *((sl + 8));
    0x000550ee cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000550f0 beq 0x55110                                       |         
    0x000550f2 ldr r1, [r2]                                      |         r1 = *(r2);
    0x000550f4 it lt                                             |         
                                                                 |         if (r3 >= 0) {
    0x000550f6 ldrlt r3, [r2, 0x6c]                              |             r3 = *((r2 + 0x6c));
                                                                 |         }
    0x000550f8 ldrb.w r1, [r1, 0x57]                             |         r1 = *((r1 + 0x57));
    0x000550fc it lt                                             |         
                                                                 |         if (r3 >= 0) {
    0x000550fe addlt r3, r3, -1                                  |             r3 += -1;
                                                                 |         }
                                                                 |         if (r1 != 0) {
    0x00055102 cbnz r1, 0x55154                                  |             goto label_160;
                                                                 |         }
                                                                 | label_146:
    0x00055104 ldr r2, [r2, 0x68]                                |         r2 = *((r2 + 0x68));
    0x00055106 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x0005510a add.w r3, r2, r3, lsl 2                           |         r3 = r2 + (r3 << 2);
                                                                 | label_13:
    0x0005510e ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 | label_145:
    0x00055110 str.w r3, [sl, 0xdc]                              |     __asm ("str.w r3, [sl, 0xdc]");
    0x00055114 b 0x54c76                                         |     goto label_1;
                                                                 | label_131:
    0x00055116 movs r1, 0                                        |     r1 = 0;
    0x00055118 movs r0, 0xc                                      |     r0 = 0xc;
    0x0005511a bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x0005511e b 0x54ce0                                         |     goto label_10;
                                                                 | label_149:
    0x00055120 ldr.w lr, [fp, 4]                                 |     
    0x00055124 tst.w lr, 0x100                                   |     
                                                                 |     if ((lr & 0x100) == 0) {
    0x00055128 beq.w 0x54f32                                     |         goto label_11;
                                                                 |     }
    0x0005512c ldr.w ip, [r2]                                    |     ip = *(r2);
    0x00055130 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x00055134 beq.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055138 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0005513a lsls r0, r1, 0x1f                                 |     r0 = r1 << 0x1f;
                                                                 |     if (r0 < r1) {
    0x0005513c bmi.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_150:
    0x00055140 ldr.w r0, [fp, 0x30]                              |     r0 = *(arg_30h);
    0x00055144 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00055146 beq.w 0x56d44                                     |         goto label_161;
                                                                 |     }
    0x0005514a ldr r7, [r5, 0x30]                                |     r7 = *((r5 + 0x30));
    0x0005514c cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x0005514e bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00055152 b 0x54f7e                                         |     goto label_12;
                                                                 | label_160:
    0x00055154 ldr.w r3, [pc, 0x640]                             |     
    0x00055158 add r3, pc                                        |     r3 = 0xaa8f4;
    0x0005515a adds r3, 4                                        |     r3 += 4;
    0x0005515c b 0x5510e                                         |     goto label_13;
                                                                 | label_143:
    0x0005515e movs r4, 1                                        |     r4 = 1;
    0x00055160 b 0x54e30                                         |     goto label_14;
                                                                 | label_135:
    0x00055162 lsls r0, r3, 0xb                                  |     r0 = r3 << 0xb;
                                                                 |     if (r0 < r3) {
    0x00055164 bmi.w 0x54d4c                                     |         goto label_15;
                                                                 |     }
    0x00055168 ldrb.w r3, [sl, 0xd0]                             |     r3 = *((sl + 0xd0));
    0x0005516c cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x0005516e bhi.w 0x54d4c                                     |         goto label_15;
                                                                 |     }
    0x00055172 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x00055176 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00055178 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005517a beq.w 0x56476                                     |         goto label_162;
                                                                 |     }
                                                                 | label_45:
    0x0005517e ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x00055182 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00055186 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00055188 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x0005518c str r3, [sp, 0x28]                                |     x = r3;
    0x0005518e str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00055190 ldr.w r2, [fp, 0x28]                              |     r2 = *(arg_28h);
    0x00055194 str r2, [sp, 0x54]                                |     var_54h = r2;
    0x00055196 ldr.w r2, [fp, 0x2c]                              |     r2 = *(arg_2ch);
    0x0005519a str r2, [sp, 0x58]                                |     var_58h = r2;
    0x0005519c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005519e beq.w 0x56462                                     |         goto label_163;
                                                                 |     }
    0x000551a2 mov r0, r3                                        |     r0 = r3;
    0x000551a4 movs r2, 0x40                                     |     r2 = 0x40;
    0x000551a6 movs r3, 0                                        |     r3 = 0;
    0x000551a8 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x000551ac str r0, [sp, 0x18]                                |     var_18h = r0;
    0x000551ae cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000551b0 beq.w 0x566fe                                     |         goto label_164;
                                                                 |     }
                                                                 | label_44:
    0x000551b4 movs r2, 0x40                                     |     r2 = 0x40;
    0x000551b6 movs r1, 0                                        |     r1 = 0;
    0x000551b8 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x000551ba blx 0x97d4                                        |     fcn_000097d4 ();
    0x000551be ldr.w r3, [pc, 0x5dc]                             |     r3 = *(0x0005579c);
    0x000551c2 mov r1, fp                                        |     r1 = fp;
    0x000551c4 str.w sl, [sp, 0xdc]                              |     __asm ("str.w sl, [var_dch]");
    0x000551c8 add r3, pc                                        |     r3 += pc;
    0x000551ca str r3, [sp, 0xe0]                                |     var_e0h = r3;
    0x000551cc ldr.w r3, [pc, 0x5d0]                             |     r3 = *(0x000557a0);
    0x000551d0 add r3, pc                                        |     r3 += pc;
    0x000551d2 str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x000551d4 add r3, sp, 0xdc                                  |     r3 += var_dch;
    0x000551d6 mov r0, r3                                        |     r0 = r3;
    0x000551d8 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x000551da movs r3, 0                                        |     r3 = 0;
    0x000551dc strd r3, r3, [sp, 0xe8]                           |     __asm ("strd r3, r3, [var_e8h]");
    0x000551e0 strd r3, r3, [sp, 0xf0]                           |     __asm ("strd r3, r3, [var_f4h]");
    0x000551e4 bl 0x2d9bc                                        |     fcn_0002d9bc (r0, r1, r2, r3, r4, r5);
    0x000551e8 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x000551ec ands r2, r3, 8                                    |     r2 = r3 & 8;
                                                                 |     if (r2 == r3) {
    0x000551f0 beq.w 0x565e6                                     |         goto label_165;
                                                                 |     }
                                                                 | label_59:
    0x000551f4 vmov.i32 q8, 0                                    |     __asm ("vmov.i32 q8, 0");
    0x000551f8 add.w r2, fp, 0x20                                |     r2 += arg_20h;
    0x000551fc bic r3, r3, 8                                     |     r3 = BIT_MASK (r3, 8);
    0x00055200 movs r1, 0                                        |     r1 = 0;
    0x00055202 orr r3, r3, 0x100000                              |     r3 |= 0x100000;
    0x00055206 mov r0, sl                                        |     r0 = sl;
    0x00055208 vst1.32 {d16, d17}, [r2]                          |     __asm ("vst1.32 {d16, d17}, [r2]");
    0x0005520c str.w r3, [fp, 4]                                 |     __asm ("str.w r3, [arg_4h]");
    0x00055210 movs r3, 1                                        |     r3 = 1;
    0x00055212 ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x00055214 bl 0x2e734                                        |     fcn_0002e734 (r0, r1, r2, r3, r4);
    0x00055218 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x0005521a mov r1, r0                                        |     r1 = r0;
    0x0005521c movs r3, 1                                        |     r3 = 1;
    0x0005521e mov r0, sl                                        |     r0 = sl;
    0x00055220 bl 0x2e734                                        |     fcn_0002e734 (r0, r1, r2, r3, r4);
    0x00055224 str r0, [sp, 0x4c]                                |     var_4ch = r0;
                                                                 |     if (r0 != 0) {
    0x00055226 cbz r0, 0x55238                                   |         
    0x00055228 ldr.w r1, [fp, 0x30]                              |         r1 = *(arg_30h);
                                                                 |         if (r1 == 0) {
    0x0005522c cbz r1, 0x55238                                   |             goto label_73;
                                                                 |         }
    0x0005522e ldr r3, [r1]                                      |         r3 = *(r1);
    0x00055230 ldr r5, [r0]                                      |         r5 = *(r0);
    0x00055232 cmp r3, r5                                        |         
                                                                 |         if (r3 <= r5) {
    0x00055234 ble.w 0x56a88                                     |             goto label_166;
                                                                 |         }
                                                                 |     }
                                                                 | label_73:
    0x00055238 ldr.w r3, [sl, 0x28]                              |     r3 = *((sl + 0x28));
    0x0005523c movs r2, 0                                        |     r2 = 0;
    0x0005523e ldr.w r1, [fp, 0x1c]                              |     r1 = *(arg_1ch);
    0x00055242 add.w sb, sp, 0x108                               |     sb += var_108h;
    0x00055246 str r3, [r4, 0x30]                                |     *((r4 + 0x30)) = r3;
    0x00055248 adds r3, 4                                        |     r3 += 4;
    0x0005524a str.w r3, [sl, 0x28]                              |     __asm ("str.w r3, [sl, 0x28]");
    0x0005524e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00055250 str r4, [sp, 0xc0]                                |     var_c0h = r4;
    0x00055252 str.w sl, [sp, 0xfc]                              |     __asm ("str.w sl, [var_fch]");
    0x00055256 str r3, [sp, 0xc4]                                |     var_c4h = r3;
    0x00055258 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005525a str r2, [sp, 0x108]                               |     var_108h = r2;
    0x0005525c str r2, [sp, 0xd0]                                |     var_d0h = r2;
    0x0005525e str r3, [sp, 0xcc]                                |     var_cch = r3;
    0x00055260 ldr.w r3, [pc, 0x540]                             |     r3 = *(0x000557a4);
    0x00055264 str r2, [sp, 0xc8]                                |     var_c8h = r2;
    0x00055266 strd r2, r2, [sp, 0x10c]                          |     __asm ("strd r2, r2, [var_110h]");
    0x0005526a add r3, pc                                        |     r3 += pc;
    0x0005526c str r3, [sp, 0x100]                               |     var_100h = r3;
    0x0005526e ldr.w r3, [pc, 0x538]                             |     r3 = *(0x000557a8);
    0x00055272 add r3, pc                                        |     r3 += pc;
    0x00055274 str r3, [sp, 0x104]                               |     var_104h = r3;
    0x00055276 add r3, sp, 0xc0                                  |     r3 += var_c0h;
    0x00055278 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0005527a str r3, [sp, 0x114]                               |     var_114h = r3;
                                                                 |     if (r1 == 0) {
    0x0005527c cbz r1, 0x552a4                                   |         goto label_98;
                                                                 |     }
    0x0005527e ldr r5, [r1]                                      |     r5 = *(r1);
    0x00055280 cmp r5, r2                                        |     
                                                                 |     if (r5 <= r2) {
    0x00055282 ble.w 0x56f00                                     |         goto label_167;
                                                                 |     }
    0x00055286 add.w r6, r1, 0x18                                |     r6 = r1 + 0x18;
    0x0005528a add r7, sp, 0xfc                                  |     r7 += var_fch;
                                                                 |     do {
    0x0005528c ldr r1, [r6, -0x10]                               |         r1 = *((r6 - 0x10));
                                                                 |         if (r1 != 0) {
    0x00055290 cbz r1, 0x5529a                                   |             
    0x00055292 mov r0, r7                                        |             r0 = r7;
    0x00055294 bl 0x2cd88                                        |             r0 = fcn_0002cd88 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x00055298 cbnz r0, 0x552a2                                  |                 goto label_168;
                                                                 |             }
                                                                 |         }
    0x0005529a subs r5, 1                                        |         r5--;
    0x0005529c add.w r6, r6, 0x10                                |         r6 += 0x10;
    0x000552a0 bne 0x5528c                                       |         
                                                                 |     } while (r5 != 1);
                                                                 | label_168:
    0x000552a2 ldr r1, [sp, 0xc8]                                |     r1 = var_c8h;
                                                                 | label_98:
    0x000552a4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000552a6 str r4, [sp, 0xa0]                                |     var_a0h = r4;
    0x000552a8 str.w sl, [sp, 0xfc]                              |     __asm ("str.w sl, [var_fch]");
    0x000552ac strd r3, r1, [sp, 0xa4]                           |     __asm ("strd r3, r1, [var_a4h]");
    0x000552b0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000552b2 str r4, [sp, 0x34]                                |     var_34h = r4;
    0x000552b4 str r3, [sp, 0xac]                                |     var_ach = r3;
    0x000552b6 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000552b8 ldr.w r6, [fp, 0x30]                              |     r6 = *(arg_30h);
    0x000552bc vldr d16, [sp, 0xa0]                              |     __asm ("vldr d16, [sp, 0xa0]");
    0x000552c0 vldr d17, [sp, 0xa8]                              |     __asm ("vldr d17, [sp, 0xa8]");
    0x000552c4 str r3, [sp, 0x114]                               |     var_114h = r3;
    0x000552c6 ldr.w r3, [pc, 0x4e4]                             |     r3 = *(0x000557ac);
    0x000552ca vstr d16, [sp, 0xc0]                              |     __asm ("vstr d16, [sp, 0xc0]");
    0x000552ce vstr d17, [sp, 0xc8]                              |     __asm ("vstr d17, [sp, 0xc8]");
    0x000552d2 add r3, pc                                        |     r3 += pc;
    0x000552d4 str r3, [sp, 0x100]                               |     var_100h = r3;
    0x000552d6 ldr.w r3, [pc, 0x4d8]                             |     r3 = *(0x000557b0);
    0x000552da add r3, pc                                        |     r3 += pc;
    0x000552dc str r3, [sp, 0x104]                               |     var_104h = r3;
    0x000552de movs r3, 0                                        |     r3 = 0;
    0x000552e0 str r3, [sp, 0x108]                               |     var_108h = r3;
    0x000552e2 str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x000552e4 strd r3, r3, [sb, 4]                              |     __asm ("strd r3, r3, [var_110h]");
                                                                 |     if (r6 == 0) {
    0x000552e8 cbz r6, 0x5530c                                   |         goto label_169;
                                                                 |     }
    0x000552ea ldr r5, [r6]                                      |     r5 = *(r6);
    0x000552ec cmp r5, r3                                        |     
                                                                 |     if (r5 <= r3) {
    0x000552ee ble 0x5530c                                       |         goto label_169;
                                                                 |     }
    0x000552f0 adds r6, 0x18                                     |     r6 += 0x18;
    0x000552f2 add r7, sp, 0xfc                                  |     r7 += var_fch;
                                                                 |     do {
    0x000552f4 ldr r1, [r6, -0x10]                               |         r1 = *((r6 - 0x10));
                                                                 |         if (r1 != 0) {
    0x000552f8 cbz r1, 0x55302                                   |             
    0x000552fa mov r0, r7                                        |             r0 = r7;
    0x000552fc bl 0x2cd88                                        |             r0 = fcn_0002cd88 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x00055300 cbnz r0, 0x5530a                                  |                 goto label_170;
                                                                 |             }
                                                                 |         }
    0x00055302 subs r5, 1                                        |         r5--;
    0x00055304 add.w r6, r6, 0x10                                |         r6 += 0x10;
    0x00055308 bne 0x552f4                                       |         
                                                                 |     } while (r5 != 1);
                                                                 | label_170:
    0x0005530a ldr r1, [sp, 0xc8]                                |     r1 = var_c8h;
                                                                 | label_169:
    0x0005530c mov r3, r1                                        |     r3 = r1;
                                                                 |     if (r1 != 0) {
    0x0005530e cbz r1, 0x55312                                   |         
    0x00055310 ldr r3, [r1]                                      |         r3 = *(r1);
                                                                 |     }
    0x00055312 ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x00055314 mov r0, sl                                        |     r0 = sl;
    0x00055316 str r3, [r4, 0x4c]                                |     *((r4 + 0x4c)) = r3;
    0x00055318 movs r3, 0                                        |     r3 = 0;
    0x0005531a bl 0x2e734                                        |     fcn_0002e734 (r0, r1, r2, r3, r4);
    0x0005531e movs r3, 0                                        |     r3 = 0;
    0x00055320 mov r1, r0                                        |     r1 = r0;
    0x00055322 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x00055324 mov r0, sl                                        |     r0 = sl;
    0x00055326 bl 0x2e734                                        |     fcn_0002e734 (r0, r1, r2, r3, r4);
    0x0005532a ldr.w r3, [pc, 0x488]                             |     r3 = *(0x000557b4);
    0x0005532e mov r7, sl                                        |     r7 = sl;
    0x00055330 mov r5, r0                                        |     r5 = r0;
    0x00055332 ldr.w sl, [sp, 0x44]                              |     sl = var_44h;
    0x00055336 movs r6, 0                                        |     r6 = 0;
    0x00055338 str.w r8, [sp, 0x5c]                              |     __asm ("str.w r8, [var_5ch]");
    0x0005533c add r3, pc                                        |     r3 += pc;
    0x0005533e str.w fp, [sp, 0x44]                              |     __asm ("str.w fp, [var_44h]");
    0x00055342 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00055344 ldr.w r3, [pc, 0x470]                             |     r3 = *(0x000557b8);
    0x00055348 add r3, pc                                        |     r3 += pc;
    0x0005534a str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0005534c b 0x553a8                                         |     
                                                                 |     while (r2 >= r2) {
    0x0005534e mov r2, r5                                        |         r2 = r5;
                                                                 |         if (r5 != 0) {
    0x00055350 cbz r5, 0x55354                                   |             
    0x00055352 ldr r2, [r5]                                      |             r2 = *(r5);
                                                                 |         }
    0x00055354 mov r1, r5                                        |         r1 = r5;
    0x00055356 str r2, [r4, 0x50]                                |         *((r4 + 0x50)) = r2;
    0x00055358 mov r0, r7                                        |         r0 = r7;
    0x0005535a mov r2, r3                                        |         r2 = r3;
    0x0005535c movs r3, 0                                        |         r3 = 0;
    0x0005535e bl 0x2e734                                        |         r0 = fcn_0002e734 (r0, r1, r2, r3, r4);
    0x00055362 mov r5, r0                                        |         r5 = r0;
                                                                 | label_16:
    0x00055364 ldr r1, [r4, 0x28]                                |         r1 = *((r4 + 0x28));
                                                                 |         if (r1 != 0) {
    0x00055366 cbz r1, 0x5537e                                   |             
    0x00055368 movs r3, 0                                        |             r3 = 0;
    0x0005536a ldr r0, [sp, 0x28]                                |             r0 = x;
    0x0005536c mov r2, r3                                        |             r2 = r3;
    0x0005536e bl 0x2dd00                                        |             fcn_0002dd00 (r0, r1, r2, r3);
    0x00055372 mov r1, r5                                        |             r1 = r5;
    0x00055374 mov r2, r0                                        |             r2 = r0;
    0x00055376 mov r0, r7                                        |             r0 = r7;
    0x00055378 bl 0x2bffc                                        |             r0 = fcn_0002bffc (r0, r1, r2);
    0x0005537c mov r5, r0                                        |             r5 = r0;
                                                                 |         }
    0x0005537e ldr.w ip, [r7, 0x2c]                              |         ip = *((r7 + 0x2c));
    0x00055382 movs r2, 0                                        |         r2 = 0;
    0x00055384 movs r1, 0x4b                                     |         r1 = 0x4b;
    0x00055386 mov r0, sl                                        |         r0 = sl;
    0x00055388 add.w r3, ip, 1                                   |         r3 = ip + 1;
    0x0005538c add.w ip, ip, 2                                   |         
    0x00055390 str r3, [r4, 0x34]                                |         *((r4 + 0x34)) = r3;
    0x00055392 str.w ip, [r7, 0x2c]                              |         __asm ("str.w ip, [r7, 0x2c]");
    0x00055396 str.w ip, [r4, 0x38]                              |         __asm ("str.w ip, [r4, 0x38]");
    0x0005539a str r6, [sp]                                      |         *(sp) = r6;
    0x0005539c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000553a0 ldr r4, [r4, 0x24]                                |         r4 = *((r4 + 0x24));
    0x000553a2 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x000553a4 beq.w 0x55f9e                                     |             goto label_171;
                                                                 |         }
    0x000553a8 ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x000553aa ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x000553ac ldr r3, [r4, 0x48]                                |         r3 = *((r4 + 0x48));
    0x000553ae lsls r2, r2, 0xb                                  |         r2 <<= 0xb;
    0x000553b0 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x000553b2 bpl 0x5534e                                       |         
                                                                 |     }
    0x000553b4 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x000553b6 str r6, [sp, 0xd0]                                |     var_d0h = r6;
    0x000553b8 str r2, [sp, 0x90]                                |     var_90h = r2;
    0x000553ba ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000553bc strd r2, r5, [sp, 0x94]                           |     __asm ("strd r2, r5, [var_94h]");
    0x000553c0 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000553c2 str r2, [sp, 0x9c]                                |     var_9ch = r2;
    0x000553c4 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x000553c6 vldr d16, [sp, 0x90]                              |     __asm ("vldr d16, [sp, 0x90]");
    0x000553ca vldr d17, [sp, 0x98]                              |     __asm ("vldr d17, [sp, 0x98]");
    0x000553cc subs r6, r4, r4                                   |     r6 = r4 - r4;
    0x000553ce strd r6, r6, [sb]                                 |     __asm ("strd r6, r6, [sb]");
    0x000553d2 str.w r6, [sb, 8]                                 |     __asm ("str.w r6, [var_110h]");
    0x000553d6 str r2, [sp, 0x100]                               |     var_100h = r2;
    0x000553d8 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000553da str r7, [sp, 0xfc]                                |     var_fch = r7;
    0x000553dc vstr d16, [sp, 0xc0]                              |     __asm ("vstr d16, [sp, 0xc0]");
    0x000553e0 vstr d17, [sp, 0xc8]                              |     __asm ("vstr d17, [sp, 0xc8]");
    0x000553e4 str r2, [sp, 0x104]                               |     var_104h = r2;
    0x000553e6 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000553e8 str r2, [sp, 0x114]                               |     var_114h = r2;
                                                                 |     if (r3 == 0) {
    0x000553ea cbz r3, 0x55416                                   |         goto label_172;
                                                                 |     }
    0x000553ec ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x000553f0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x000553f4 ble 0x55416                                       |         goto label_172;
                                                                 |     }
    0x000553f6 add.w fp, r3, 0x18                                |     
    0x000553fa add r5, sp, 0xfc                                  |     r5 += var_fch;
                                                                 |     do {
    0x000553fc ldr r1, [fp, -0x10]                               |         r1 = var_10h;
                                                                 |         if (r1 != 0) {
    0x00055400 cbz r1, 0x5540a                                   |             
    0x00055402 mov r0, r5                                        |             r0 = r5;
    0x00055404 bl 0x2cd88                                        |             r0 = fcn_0002cd88 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x00055408 cbnz r0, 0x55414                                  |                 goto label_173;
                                                                 |             }
                                                                 |         }
    0x0005540a subs.w r8, r8, 1                                  |         r8--;
    0x0005540e add.w fp, fp, 0x10                                |         
    0x00055412 bne 0x553fc                                       |         
                                                                 |     } while (r8 != r8);
                                                                 | label_173:
    0x00055414 ldr r5, [sp, 0xc8]                                |     r5 = var_c8h;
                                                                 | label_172:
    0x00055416 mov r3, r5                                        |     r3 = r5;
                                                                 |     if (r5 != 0) {
    0x00055418 cbz r5, 0x5541c                                   |         
    0x0005541a ldr r3, [r5]                                      |         r3 = *(r5);
                                                                 |     }
    0x0005541c str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x0005541e movs r3, 1                                        |     r3 = 1;
    0x00055420 strb.w r3, [r4, 0x60]                             |     *((r4 + 0x60)) = r3;
    0x00055424 b 0x55364                                         |     goto label_16;
                                                                 | label_134:
    0x00055426 mov r1, fp                                        |     r1 = fp;
    0x00055428 mov r0, sl                                        |     r0 = sl;
    0x0005542a bl 0x287bc                                        |     fcn_000287bc (r0, r1, r2);
    0x0005542e ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00055432 b 0x54d3a                                         |     goto label_17;
                                                                 | label_137:
    0x00055434 ldr.w r1, [fp, 0x24]                              |     r1 = *(arg_24h);
                                                                 |     if (r1 != 0) {
    0x00055438 cbz r1, 0x55442                                   |         
    0x0005543a ldrb r2, [r1]                                     |         r2 = *(r1);
    0x0005543c cmp r2, 0x2c                                      |         
                                                                 |         if (r2 == 0x2c) {
    0x0005543e beq.w 0x55ea2                                     |             goto label_174;
                                                                 |         }
    0x00055440 strh r0, [r6, 0x28]                               |         *((r6 + 0x28)) = r0;
                                                                 |     }
                                                                 | label_30:
    0x00055442 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00055444 ble.w 0x555da                                     |         goto label_175;
                                                                 |     }
    0x00055448 ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x0005544a movs r6, 0                                        |     r6 = 0;
    0x0005544c ldr r3, [pc, 0x36c]                               |     
    0x0005544e str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [x]");
    0x00055452 ldr.w fp, [sp, 0x20]                              |     fp = var_20h;
    0x00055456 add.w ip, r5, 8                                   |     
    0x0005545a mov r4, ip                                        |     r4 = ip;
    0x0005545c add r3, pc                                        |     r3 = 0xaac1c;
    0x0005545e str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00055460 str.w ip, [sp, 0x3c]                              |     __asm ("str.w ip, [var_3ch]");
                                                                 | label_20:
    0x00055464 ldrd r3, r2, [r4, 0x30]                           |     __asm ("ldrd r3, r2, [r4, 0x30]");
    0x00055468 orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0005546a bne 0x5547e                                       |         
    0x0005546c ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
                                                                 |         if (r2 == 0) {
    0x0005546e cbz r2, 0x5547e                                   |             goto label_176;
                                                                 |         }
    0x00055470 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00055472 movs r1, 0x14                                     |         r1 = 0x14;
    0x00055474 mov r0, sl                                        |         r0 = sl;
    0x00055476 str r3, [sp]                                      |         *(sp) = r3;
    0x00055478 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0005547a bl 0x200fc                                        |         fcn_000200fc (r0, r1);
                                                                 |     }
                                                                 | label_176:
    0x0005547e ldr r7, [r4, 0x14]                                |     r7 = *((r4 + 0x14));
    0x00055480 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00055482 beq.w 0x555ca                                     |         goto label_177;
                                                                 |     }
    0x00055486 add.w r8, sp, 0xdc                                |     r8 += var_dch;
    0x0005548a movs r3, 0                                        |     r3 = 0;
    0x0005548c ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0005548e mov r1, r8                                        |     r1 = r8;
    0x00055490 str r3, [sp, 0xdc]                                |     var_dch = r3;
    0x00055492 bl 0x12628                                        |     fcn_00012628 (r0, r1);
    0x00055496 ldr.w r3, [sl, 0xd8]                              |     r3 = *((sl + 0xd8));
    0x0005549a ldr r2, [sp, 0xdc]                                |     r2 = var_dch;
    0x0005549c add r3, r2                                        |     r3 += r2;
    0x0005549e str.w r3, [sl, 0xd8]                              |     __asm ("str.w r3, [sl, 0xd8]");
    0x000554a2 ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x000554a6 lsls r2, r3, 0x13                                 |     r2 = r3 << 0x13;
                                                                 |     if (r2 >= r3) {
    0x000554a8 bmi 0x554c6                                       |         
    0x000554aa add.w r3, r5, r6, lsl 6                           |         r3 = r5 + (r6 << 6);
    0x000554ae ldrb.w r3, [r3, 0x2e]                             |         r3 = *((r3 + 0x2e));
    0x000554b2 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
                                                                 |         if (r3 >= r3) {
    0x000554b4 bpl.w 0x558ca                                     |             goto label_178;
                                                                 |         }
    0x000554b8 ldr r3, [r4, 0x3c]                                |         r3 = *((r4 + 0x3c));
    0x000554ba ldrb r2, [r3, 0x12]                               |         r2 = *((r3 + 0x12));
                                                                 |         if (r2 == 0) {
    0x000554bc cbz r2, 0x554c6                                   |             goto label_23;
                                                                 |         }
    0x000554be ldr r3, [r3]                                      |         r3 = *(r3);
    0x000554c0 cmp r3, 1                                         |         
                                                                 |         if (r3 <= 1) {
    0x000554c2 ble.w 0x558ca                                     |             goto label_178;
                                                                 |         }
                                                                 |     }
                                                                 | label_23:
    0x000554c6 ldr.w r2, [sl, 0xf8]                              |     r2 = *((sl + 0xf8));
    0x000554ca ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000554cc str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x000554ce str.w r3, [sl, 0xf8]                              |     __asm ("str.w r3, [sl, 0xf8]");
                                                                 |     if (r6 == 0) {
    0x000554d2 cbnz r6, 0x554fe                                  |         
    0x000554d4 ldr r3, [r5]                                      |         r3 = *(r5);
    0x000554d6 cmp r3, 1                                         |         
                                                                 |         if (r3 != 1) {
    0x000554d8 beq 0x554e4                                       |             
    0x000554da ldrb.w r3, [r5, 0x6c]                             |             r3 = *((r5 + 0x6c));
    0x000554de tst.w r3, 0x22                                    |             
                                                                 |             if ((r3 & 0x22) == 0) {
    0x000554e2 beq 0x554fe                                       |                 goto label_179;
                                                                 |             }
                                                                 |         }
    0x000554e4 ldrb.w r3, [r5, 0x2e]                             |         r3 = *((r5 + 0x2e));
    0x000554e8 lsls r0, r3, 0x1f                                 |         r0 = r3 << 0x1f;
                                                                 |         if (r0 < r3) {
    0x000554ea bpl 0x554f2                                       |             
    0x000554ec ldr r3, [r5, 0x44]                                |             r3 = *((r5 + 0x44));
    0x000554ee ldrb r3, [r3, 0x12]                               |             r3 = *((r3 + 0x12));
                                                                 |             if (r3 == 0) {
    0x000554f0 cbz r3, 0x5550a                                   |                 goto label_180;
                                                                 |             }
                                                                 |         }
    0x000554f2 ldrb.w r3, [r5, 0x2c]                             |         r3 = *((r5 + 0x2c));
    0x000554f6 ands r3, r3, 0x40                                 |         r3 &= 0x40;
                                                                 |         if (r3 == r3) {
    0x000554fa beq.w 0x55dfa                                     |             goto label_181;
                                                                 |         }
                                                                 |     }
                                                                 | label_179:
    0x000554fe add.w r3, r5, r6, lsl 6                           |     r3 = r5 + (r6 << 6);
    0x00055502 ldrb.w r3, [r3, 0x2e]                             |     r3 = *((r3 + 0x2e));
    0x00055506 lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
                                                                 |     if (r1 < r3) {
    0x00055508 bpl 0x55518                                       |         
                                                                 | label_180:
    0x0005550a ldr.w sb, [r4, 0x3c]                              |         sb = *((r4 + 0x3c));
    0x0005550e ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x00055512 cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x00055514 bgt.w 0x55898                                     |             goto label_182;
                                                                 |         }
                                                                 |     }
    0x00055518 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0005551a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005551c lsls r2, r3, 7                                    |     r2 = r3 << 7;
                                                                 |     if (r2 < r3) {
    0x0005551e bmi.w 0x558fe                                     |         goto label_183;
                                                                 |     }
    0x00055522 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00055524 cmp r3, r4                                        |     
    0x00055526 mov sb, r3                                        |     sb = r3;
                                                                 |     if (r3 <= r4) {
    0x00055528 blo 0x55536                                       |         goto label_184;
                                                                 |     }
    0x0005552a b 0x558fe                                         |     goto label_183;
                                                                 |     do {
                                                                 | label_18:
    0x0005552c add.w sb, sb, 0x40                                |         sb += 0x40;
    0x00055530 cmp sb, r4                                        |         
                                                                 |         if (sb >= r4) {
    0x00055532 bhs.w 0x558fe                                     |             goto label_183;
                                                                 |         }
                                                                 | label_184:
    0x00055536 ldr.w r3, [sb, 0x14]                              |         r3 = *((sb + 0x14));
    0x0005553a cmp r3, 0                                         |         
    0x0005553c beq 0x5552c                                       |         
                                                                 |     } while (r3 == 0);
    0x0005553e ldrb.w r3, [sb, 0x25]                             |     r3 = *((sb + 0x25));
    0x00055542 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
                                                                 |     if (r3 < r3) {
    0x00055544 bmi 0x5552c                                       |         goto label_18;
                                                                 |     }
    0x00055546 ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x0005554a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005554c beq 0x5552c                                       |         goto label_18;
                                                                 |     }
    0x0005554e ldr.w r3, [sb, 0x10]                              |     r3 = *((sb + 0x10));
    0x00055552 ldr r2, [r3, 0x3c]                                |     r2 = *((r3 + 0x3c));
    0x00055554 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00055556 ldr r3, [r3, 0x3c]                                |     r3 = *((r3 + 0x3c));
    0x00055558 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0005555a bne 0x5552c                                       |         goto label_18;
                                                                 |     }
    0x0005555c ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x0005555e blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x00055562 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00055564 bne 0x5552c                                       |         goto label_18;
                                                                 |     }
    0x00055566 ldr.w r3, [sb, 0x10]                              |     r3 = *((sb + 0x10));
    0x0005556a ldr r2, [r3, 0x3c]                                |     r2 = *((r3 + 0x3c));
    0x0005556c ldr.w r3, [sb, 0x14]                              |     r3 = *((sb + 0x14));
    0x00055570 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00055572 beq.w 0x55a00                                     |         goto label_185;
                                                                 |     }
                                                                 | label_25:
    0x00055576 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00055578 ands r1, r1, 0x1000000                            |     r1 &= 0x1000000;
                                                                 |     if (r1 != r1) {
    0x0005557c bne 0x5552c                                       |         goto label_18;
                                                                 |     }
    0x0005557e ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x00055582 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00055584 bne.w 0x558ee                                     |         goto label_186;
                                                                 |     }
                                                                 | label_24:
    0x00055588 movs r1, 0                                        |     r1 = 0;
    0x0005558a ldr.w r3, [sb, 0x28]                              |     r3 = *((sb + 0x28));
    0x0005558e ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x00055590 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00055592 str r1, [sp]                                      |     *(sp) = r1;
    0x00055594 movs r1, 0x73                                     |     r1 = 0x73;
    0x00055596 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005559a ldr.w r3, [sb, 0x14]                              |     r3 = *((sb + 0x14));
    0x0005559e ldrsh.w r3, [r3, 2]                               |     r3 = *((r3 + 2));
    0x000555a2 strh r3, [r7, 2]                                  |     *((r7 + 2)) = r3;
                                                                 | label_22:
    0x000555a4 ldrb.w r3, [fp, 0x57]                             |     r3 = *(arg_57h);
    0x000555a8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000555aa bne.w 0x550e4                                     |         goto label_19;
                                                                 |     }
    0x000555ae ldr r0, [sp, 0x28]                                |     r0 = x;
    0x000555b0 add r1, sp, 0xc0                                  |     r1 += var_c0h;
    0x000555b2 str r3, [sp, 0xc0]                                |     var_c0h = r3;
    0x000555b4 bl 0x12628                                        |     fcn_00012628 (r0, r1);
    0x000555b8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000555ba ldr r2, [sp, 0xc0]                                |     r2 = var_c0h;
    0x000555bc str.w r3, [sl, 0xf8]                              |     __asm ("str.w r3, [sl, 0xf8]");
    0x000555c0 ldr.w r3, [sl, 0xd8]                              |     r3 = *((sl + 0xd8));
    0x000555c4 subs r3, r3, r2                                   |     r3 -= r2;
    0x000555c6 str.w r3, [sl, 0xd8]                              |     __asm ("str.w r3, [sl, 0xd8]");
                                                                 | label_177:
    0x000555ca ldr r3, [r5]                                      |     r3 = *(r5);
    0x000555cc adds r6, 1                                        |     r6++;
    0x000555ce adds r4, 0x40                                     |     r4 += 0x40;
    0x000555d0 cmp r3, r6                                        |     
                                                                 |     if (r3 > r6) {
    0x000555d2 bgt.w 0x55464                                     |         goto label_20;
                                                                 |     }
    0x000555d6 ldr.w fp, [sp, 0x28]                              |     fp = x;
                                                                 | label_175:
    0x000555da ldr.w r2, [fp, 0x1c]                              |     r2 = *(arg_1ch);
    0x000555de ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x000555e2 ldr r5, [sp, 0xfc]                                |     r5 = var_fch;
    0x000555e4 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x000555e6 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x000555ea str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x000555ec ldr.w r2, [fp, 0x28]                              |     r2 = *(arg_28h);
    0x000555f0 str r2, [sp, 0x28]                                |     x = r2;
    0x000555f2 ldr.w r2, [fp, 0x2c]                              |     r2 = *(arg_2ch);
    0x000555f6 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x000555f8 and r2, r3, 1                                     |     r2 = r3 & 1;
    0x000555fc and r3, r3, 9                                     |     r3 &= 9;
    0x00055600 strb.w r2, [sp, 0xb4]                             |     var_b4h = r2;
    0x00055604 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00055606 beq.w 0x56416                                     |         goto label_187;
                                                                 |     }
                                                                 | label_43:
    0x0005560a mov.w r7, -1                                      |     r7 = -1;
                                                                 |     if (r5 != 0) {
    0x0005560e cbz r5, 0x55648                                   |         
    0x00055610 ldr r4, [sp, 0x2c]                                |         r4 = var_2ch;
    0x00055612 movs r2, 0                                        |         r2 = 0;
    0x00055614 mov r1, r5                                        |         r1 = r5;
    0x00055616 mov r0, sl                                        |         r0 = sl;
    0x00055618 ldr r3, [r4]                                      |         r3 = *(r4);
    0x0005561a bl 0x28128                                        |         fcn_00028128 (r0, r1, r2, r3);
    0x0005561e ldr r3, [r5]                                      |         r3 = *(r5);
    0x00055620 ldr.w r2, [sl, 0x28]                              |         r2 = *((sl + 0x28));
    0x00055624 ldr r1, [r4]                                      |         r1 = *(r4);
    0x00055626 adds r3, 1                                        |         r3++;
    0x00055628 str r0, [sp, 4]                                   |         var_4h = r0;
    0x0005562a ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x0005562c add r3, r1                                        |         r3 += r1;
    0x0005562e adds r1, r2, 1                                    |         r1 = r2 + 1;
    0x00055630 str.w r1, [sl, 0x28]                              |         __asm ("str.w r1, [sl, 0x28]");
    0x00055634 mvn r1, 7                                         |         r1 = ~7;
    0x00055638 str r1, [sp, 8]                                   |         var_8h = r1;
    0x0005563a movs r1, 0                                        |         r1 = 0;
    0x0005563c str r1, [sp]                                      |         *(sp) = r1;
    0x0005563e movs r1, 0x76                                     |         r1 = 0x76;
    0x00055640 str r2, [sp, 0x104]                               |         var_104h = r2;
    0x00055642 bl 0x2a324                                        |         r0 = fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00055646 mov r7, r0                                        |         r7 = r0;
                                                                 |     }
    0x00055648 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005564a str r7, [sp, 0x110]                               |     var_110h = r7;
    0x0005564c ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0005564e cmp r3, 0xc                                       |     
                                                                 |     if (r3 == 0xc) {
    0x00055650 beq.w 0x56376                                     |         goto label_188;
                                                                 |     }
    0x00055654 ldr.w r1, [fp, 4]                                 |     r1 = *(arg_4h);
                                                                 | label_42:
    0x00055658 ldr.w r3, [sl, 0x38]                              |     r3 = *((sl + 0x38));
    0x0005565c lsls r0, r1, 0x11                                 |     r0 = r1 << 0x11;
    0x0005565e mov r1, fp                                        |     r1 = fp;
    0x00055660 mov r0, sl                                        |     r0 = sl;
    0x00055662 add.w r2, r3, -1                                  |     r2 = r3 + -1;
    0x00055666 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00055668 it pl                                             |     
                                                                 |     if (r0 < r1) {
    0x0005566a movpl r3, 0x140                                   |         r3 = 0x140;
                                                                 |     }
    0x0005566e str.w r2, [sl, 0x38]                              |     __asm ("str.w r2, [sl, 0x38]");
    0x00055672 it pl                                             |     
                                                                 |     if (r0 >= r1) {
    0x00055674 strhpl r3, [fp, 2]                                |         __asm ("strhpl r3, [arg_2h]");
                                                                 |     }
    0x00055678 bl 0x5b760                                        |     fcn_0005b760 (r0, r1, r2, r3);
    0x0005567c ldr.w r3, [fp, 8]                                 |     r3 = *(arg_8h);
                                                                 |     if (r3 == 0) {
    0x00055680 cbnz r3, 0x55688                                  |         
    0x00055682 cmp r7, 0                                         |         
                                                                 |         if (r7 >= 0) {
    0x00055684 bge.w 0x56344                                     |             goto label_189;
                                                                 |         }
                                                                 |     }
                                                                 | label_40:
    0x00055688 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0005568c ands r3, r3, 1                                    |     r3 &= 1;
                                                                 |     if (r3 != r3) {
    0x00055690 bne.w 0x55f44                                     |         goto label_190;
                                                                 |     }
                                                                 | label_34:
    0x00055694 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00055696 strb.w r3, [sp, 0xb5]                             |     var_b5h = r3;
    0x0005569a ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0005569c orrs r3, r2                                       |     r3 |= r2;
    0x0005569e str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     if (r3 != r2) {
    0x000556a0 bne.w 0x55c06                                     |         goto label_191;
                                                                 |     }
    0x000556a4 ldrb.w r2, [sp, 0xb4]                             |     r2 = var_b4h;
    0x000556a8 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x000556ac ldr.w r6, [fp, 0x44]                              |     r6 = *(arg_44h);
    0x000556b0 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x000556b2 subs r2, 0                                        |     
    0x000556b4 and r3, r3, 0x4000                                |     r3 &= 0x4000;
    0x000556b8 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x000556ba movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x000556bc orr.w r3, r3, r2, lsl 8                           |     r3 |= (r2 << 8);
    0x000556c0 str r3, [sp, 0x28]                                |     x = r3;
    0x000556c2 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000556c4 beq.w 0x55a48                                     |         goto label_74;
                                                                 |     }
    0x000556c8 ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x000556cc ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x000556ce ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x000556d0 ldr r4, [r3]                                      |     r4 = *(r3);
    0x000556d2 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x000556d6 mov r7, r3                                        |     r7 = r3;
    0x000556d8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000556da beq.w 0x5659a                                     |         goto label_192;
                                                                 |     }
                                                                 | label_55:
    0x000556de mov r3, r4                                        |     r3 = r4;
    0x000556e0 movs r4, 0                                        |     r4 = 0;
    0x000556e2 ldr r2, [r6, 0x30]                                |     r2 = *((r6 + 0x30));
    0x000556e4 movs r1, 0x76                                     |     r1 = 0x76;
    0x000556e6 mov r0, r7                                        |     r0 = r7;
    0x000556e8 str r4, [sp]                                      |     *(sp) = r4;
    0x000556ea bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000556ee ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x000556f0 movs r1, 0x73                                     |     r1 = 0x73;
    0x000556f2 mov r0, r7                                        |     r0 = r7;
    0x000556f4 str r4, [sp]                                      |     *(sp) = r4;
    0x000556f6 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000556f8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000556fc ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x000556fe movs r1, 0x73                                     |     r1 = 0x73;
    0x00055700 mov r0, r7                                        |     r0 = r7;
    0x00055702 str r4, [sp]                                      |     *(sp) = r4;
    0x00055704 adds r2, r3, 2                                    |     r2 = r3 + 2;
    0x00055706 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005570a ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x0005570c movs r1, 0x73                                     |     r1 = 0x73;
    0x0005570e mov r0, r7                                        |     r0 = r7;
    0x00055710 str r4, [sp]                                      |     *(sp) = r4;
    0x00055712 adds r2, r3, 3                                    |     r2 = r3 + 3;
    0x00055714 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00055718 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
                                                                 |     if (r3 != 0) {
    0x0005571a cbz r3, 0x55740                                   |         
    0x0005571c mov r2, r4                                        |         r2 = r4;
    0x0005571e ldr.w r4, [sl, 0x2c]                              |         r4 = *((sl + 0x2c));
    0x00055722 ldr.w ip, [r3]                                    |         ip = *(r3);
    0x00055726 movs r1, 0x4b                                     |         r1 = 0x4b;
    0x00055728 mov r0, r7                                        |         r0 = r7;
    0x0005572a adds r3, r4, 1                                    |         r3 = r4 + 1;
    0x0005572c add r4, ip                                        |         r4 += ip;
    0x0005572e add ip, r3                                        |         
    0x00055730 str r3, [r6, 0x44]                                |         *((r6 + 0x44)) = r3;
    0x00055732 str.w r4, [sl, 0x2c]                              |         __asm ("str.w r4, [sl, 0x2c]");
    0x00055736 add.w r4, ip, -1                                  |         r4 = ip + -1;
    0x0005573a str r4, [sp]                                      |         *(sp) = r4;
    0x0005573c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
    0x00055740 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00055744 movs r4, 0                                        |     r4 = 0;
    0x00055746 movs r2, 1                                        |     r2 = 1;
    0x00055748 movs r1, 0x47                                     |     r1 = 0x47;
    0x0005574a mov r0, r7                                        |     r0 = r7;
    0x0005574c adds r3, 1                                        |     r3++;
    0x0005574e str.w r3, [sl, 0x2c]                              |     __asm ("str.w r3, [sl, 0x2c]");
    0x00055752 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00055754 str r4, [sp]                                      |     *(sp) = r4;
    0x00055756 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005575a ldrb r3, [r6, 0x14]                               |     r3 = *((r6 + 0x14));
    0x0005575c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005575e bne.w 0x56aae                                     |         goto label_193;
                                                                 |     }
    0x00055762 ldr r1, [pc, 0x5c]                                |     
    0x00055764 mov r4, r6                                        |     r4 = r6;
    0x00055766 str r5, [sp, 0x34]                                |     var_34h = r5;
    0x00055768 mov r5, r7                                        |     r5 = r7;
    0x0005576a str.w fp, [sp, 0x44]                              |     __asm ("str.w fp, [var_44h]");
    0x0005576e add r1, pc                                        |     r1 = 0xaaf34;
    0x00055770 add.w sb, r1, 0x130                               |     sb = r1 + 0x130;
    0x00055774 add.w r8, r1, 0x13c                               |     r8 = r1 + 0x13c;
    0x00055778 mov fp, r1                                        |     
    0x0005577a b 0x55854                                         |     
                                                                 |     while (r2 < r2) {
    0x000557c4 ldrb r2, [r4, 0x11]                               |         r2 = *((r4 + 0x11));
    0x000557c6 cmp r2, 0x5a                                      |         
                                                                 |         if (r2 == 0x5a) {
    0x000557c8 beq 0x5585c                                       |             goto label_194;
                                                                 |         }
    0x000557ca ldr r3, [r4, 0x48]                                |         r3 = *((r4 + 0x48));
    0x000557cc mov r0, sl                                        |         r0 = sl;
    0x000557ce ldr r1, [r3, 0x14]                                |         r1 = *((r3 + 0x14));
    0x000557d0 movs r3, 0                                        |         r3 = 0;
    0x000557d2 mov r2, r3                                        |         r2 = r3;
    0x000557d4 bl 0x28128                                        |         fcn_00028128 (r0, r1, r2, r3);
    0x000557d8 ldrd r2, r3, [sl, 0x28]                           |         __asm ("ldrd r2, r3, [sl, 0x28]");
    0x000557dc mov r7, r0                                        |         r7 = r0;
    0x000557de adds r1, r2, 1                                    |         r1 = r2 + 1;
    0x000557e0 str.w r1, [sl, 0x28]                              |         __asm ("str.w r1, [sl, 0x28]");
    0x000557e4 adds r1, r3, 1                                    |         r1 = r3 + 1;
    0x000557e6 adds r3, 3                                        |         r3 += 3;
    0x000557e8 str r2, [r4, 0x3c]                                |         *((r4 + 0x3c)) = r2;
    0x000557ea str r1, [r4, 0x40]                                |         *((r4 + 0x40)) = r1;
    0x000557ec str.w r3, [sl, 0x2c]                              |         __asm ("str.w r3, [sl, 0x2c]");
    0x000557f0 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000557f2 beq.w 0x56574                                     |             goto label_195;
                                                                 |         }
    0x000557f6 ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x000557f8 movs r1, 0x76                                     |         r1 = 0x76;
    0x000557fa ldr r3, [r3, 0x20]                                |         r3 = *((r3 + 0x20));
    0x000557fc ldrb r3, [r3, 1]                                  |         r3 = *((r3 + 1));
    0x000557fe cmp r3, 0x69                                      |         
    0x00055800 itt eq                                            |         
                                                                 |         if (r3 != 0x69) {
    0x00055802 ldreq r3, [r0, 0x10]                              |             r3 = *((r0 + 0x10));
                                                                 |         }
                                                                 |         if (r3 != 0x69) {
    0x00055804 moveq r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x00055806 mov r0, r5                                        |         r0 = r5;
    0x00055808 it eq                                             |         
                                                                 |         if (r3 != 0x69) {
    0x0005580a strbeq r2, [r3]                                   |             *(r3) = r2;
                                                                 |         }
    0x0005580c mov.w r3, 0                                       |         r3 = 0;
    0x00055810 it eq                                             |         
                                                                 |         if (r3 != 0x69) {
    0x00055812 ldreq r2, [r4, 0x3c]                              |             r2 = *((r4 + 0x3c));
                                                                 |         }
    0x00055814 str r3, [sp]                                      |         *(sp) = r3;
    0x00055816 movs r3, 2                                        |         r3 = 2;
    0x00055818 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005581c ldr r3, [r5]                                      |         r3 = *(r5);
    0x0005581e ldrb.w r2, [r3, 0x57]                             |         r2 = *((r3 + 0x57));
    0x00055822 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00055824 bne.w 0x56646                                     |             goto label_196;
                                                                 |         }
                                                                 | label_53:
    0x00055828 ldr r3, [r5, 0x6c]                                |         r3 = *((r5 + 0x6c));
    0x0005582a ldr r2, [r5, 0x68]                                |         r2 = *((r5 + 0x68));
    0x0005582c add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00055830 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00055832 subs r3, 0x14                                     |         r3 -= 0x14;
    0x00055834 add r3, r2                                        |         r3 += r2;
    0x00055836 movs r2, 0xf8                                     |         r2 = 0xf8;
    0x00055838 str r7, [r3, 0x10]                                |         *((r3 + 0x10)) = r7;
    0x0005583a strb r2, [r3, 1]                                  |         *((r3 + 1)) = r2;
                                                                 | label_54:
    0x0005583c ldr r3, [r4, 0x40]                                |         r3 = *((r4 + 0x40));
    0x0005583e movs r2, 0                                        |         r2 = 0;
    0x00055840 movs r1, 0x47                                     |         r1 = 0x47;
    0x00055842 mov r0, r5                                        |         r0 = r5;
    0x00055844 str r2, [sp]                                      |         *(sp) = r2;
    0x00055846 adds r3, 1                                        |         r3++;
    0x00055848 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_21:
    0x0005584c ldr r4, [r4, 0x24]                                |         r4 = *((r4 + 0x24));
    0x0005584e cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00055850 beq.w 0x55a42                                     |             goto label_197;
                                                                 |         }
    0x00055854 ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x00055856 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x00055858 lsls r2, r2, 0x13                                 |         r2 <<= 0x13;
    0x0005585a bmi 0x557c4                                       |         
                                                                 |     }
                                                                 | label_194:
    0x0005585c ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0005585e cmp r3, r8                                        |     
    0x00055860 it ne                                             |     
                                                                 |     if (r3 != r8) {
    0x00055862 cmpne r3, sb                                      |         __asm ("cmpne r3, sb");
                                                                 |     }
    0x00055864 ite eq                                            |     
                                                                 |     if (r3 != r8) {
    0x00055866 moveq r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r3 == r8) {
    0x00055868 movne r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r3 == r8) {
    0x0005586a beq.w 0x55a1c                                     |         goto label_198;
                                                                 |     }
    0x0005586e add.w r2, fp, 0x148                               |     r2 += arg_148h;
    0x00055872 add.w r0, fp, 0x150                               |     r0 += arg_150h;
    0x00055876 cmp r3, r0                                        |     
    0x00055878 it ne                                             |     
                                                                 |     if (r3 == r0) {
    0x0005587a cmpne r3, r2                                      |         __asm ("cmpne r3, r2");
                                                                 |         goto label_199;
                                                                 |     }
                                                                 |     if (r3 != r0) {
                                                                 | label_199:
    0x0005587c bne 0x5584c                                       |         goto label_21;
                                                                 |     }
    0x0005587e ldr.w r2, [sl, 0x28]                              |     r2 = *((sl + 0x28));
    0x00055882 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00055884 adds r0, r2, 1                                    |     r0 = r2 + 1;
    0x00055886 str.w r0, [sl, 0x28]                              |     __asm ("str.w r0, [sl, 0x28]");
    0x0005588a mov r0, r5                                        |     r0 = r5;
    0x0005588c str r2, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r2;
    0x0005588e str r1, [sp]                                      |     *(sp) = r1;
    0x00055890 movs r1, 0x73                                     |     r1 = 0x73;
    0x00055892 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00055896 b 0x5584c                                         |     goto label_21;
                                                                 | label_182:
    0x00055898 mov.w r8, 0                                       |     r8 = 0;
    0x0005589c ldr.w r2, [sb, 8]                                 |     r2 = *((sb + 8));
    0x000558a0 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000558a2 movs r1, 9                                        |     r1 = 9;
    0x000558a4 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000558a8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000558ac ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x000558ae ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
    0x000558b2 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000558b4 beq 0x558c2                                       |         
    0x000558b6 ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x000558b8 movs r1, 0x73                                     |         r1 = 0x73;
    0x000558ba str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x000558be bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
    0x000558c2 ldrh.w r3, [sb, 0x10]                             |     r3 = *((sb + 0x10));
    0x000558c6 strh r3, [r7, 2]                                  |     *((r7 + 2)) = r3;
    0x000558c8 b 0x555a4                                         |     goto label_22;
                                                                 | label_178:
    0x000558ca ldr r3, [sp, 0x28]                                |     r3 = x;
    0x000558cc mov r1, r7                                        |     r1 = r7;
    0x000558ce mov r0, sl                                        |     r0 = sl;
    0x000558d0 ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x000558d2 mov r3, r4                                        |     r3 = r4;
    0x000558d4 bl 0x2fdc4                                        |     fcn_0002fdc4 (r0, r1, r2, r3);
    0x000558d8 b 0x554c6                                         |     goto label_23;
                                                                 | label_139:
    0x000558da ldr.w r1, [pc, 0xbf4]                             |     
    0x000558de ldr r3, [r6]                                      |     r3 = *(r6);
    0x000558e0 str r0, [sp]                                      |     *(sp) = r0;
    0x000558e2 mov r0, sl                                        |     r0 = sl;
    0x000558e4 add r1, pc                                        |     r1 = 0xabdba;
    0x000558e6 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x000558ea b.w 0x550e4                                       |     goto label_19;
                                                                 | label_186:
    0x000558ee ldr.w r2, [sb, 0x1c]                              |     r2 = *((sb + 0x1c));
    0x000558f2 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000558f4 str r1, [sp]                                      |     *(sp) = r1;
    0x000558f6 movs r1, 9                                        |     r1 = 9;
    0x000558f8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000558fc b 0x55588                                         |     goto label_24;
                                                                 | label_183:
    0x000558fe ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00055902 adds r3, 1                                        |     r3++;
    0x00055904 str.w r3, [sl, 0x2c]                              |     __asm ("str.w r3, [sl, 0x2c]");
    0x00055908 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x0005590a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0005590c ldrd sb, r3, [r3, 0x6c]                           |     __asm ("ldrd sb, r3, [r3, 0x6c]");
    0x00055910 cmp sb, r3                                        |     
                                                                 |     if (sb >= r3) {
    0x00055912 bge.w 0x56534                                     |         goto label_200;
                                                                 |     }
    0x00055916 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00055918 add.w r2, sb, 1                                   |     r2 = sb + 1;
    0x0005591c add.w ip, sb, sb, lsl 2                           |     
    0x00055920 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00055924 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00055926 movs r1, 0                                        |     r1 = 0;
    0x00055928 ldr r3, [r0, 0x68]                                |     r3 = *((r0 + 0x68));
    0x0005592a str r2, [r0, 0x6c]                                |     *((r0 + 0x6c)) = r2;
    0x0005592c movs r0, 8                                        |     r0 = 8;
    0x0005592e str.w r0, [r3, ip, lsl 2]                         |     __asm ("str.w r0, [r3, ip, lsl 2]");
    0x00055932 add.w r3, r3, ip, lsl 2                           |     r3 += (ip << 2);
    0x00055936 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00055938 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x0005593c strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_51:
    0x00055940 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00055942 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x00055944 lsls r3, r6, 6                                    |     r3 = r6 << 6;
    0x00055946 adds r2, r5, r3                                   |     r2 = r5 + r3;
    0x00055948 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0005594a ldrb.w r3, [r2, 0x2d]                             |     r3 = *((r2 + 0x2d));
    0x0005594e orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x00055952 strb.w r3, [r2, 0x2d]                             |     *((r2 + 0x2d)) = r3;
    0x00055956 ands r3, r3, 8                                    |     r3 &= 8;
                                                                 |     if (r3 == r3) {
    0x0005595a beq.w 0x562a8                                     |         goto label_201;
                                                                 |     }
    0x0005595e ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00055960 movs r1, 0xc                                      |     r1 = 0xc;
    0x00055962 ldr.w r2, [pc, 0xb70]                             |     r2 = *(0x000564d4);
    0x00055966 mov r0, sl                                        |     r0 = sl;
    0x00055968 strb.w r1, [sp, 0xdc]                             |     var_dch = r1;
    0x0005596c movs r1, 1                                        |     r1 = 1;
    0x0005596e str r3, [sp, 0xe0]                                |     var_e0h = r3;
    0x00055970 movs r3, 0                                        |     r3 = 0;
    0x00055972 add r2, pc                                        |     r2 += pc;
    0x00055974 str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x00055976 str r3, [sp, 0xf0]                                |     var_f0h = r3;
    0x00055978 strd r3, r3, [sp, 0xe8]                           |     __asm ("strd r3, r3, [var_e8h]");
    0x0005597c mov r3, r4                                        |     r3 = r4;
    0x0005597e bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00055982 mov r2, r8                                        |     r2 = r8;
    0x00055984 mov r1, r7                                        |     r1 = r7;
    0x00055986 mov r0, sl                                        |     r0 = sl;
    0x00055988 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x0005598c ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0005598e ldrh r2, [r7, 2]                                  |     r2 = *((r7 + 2));
    0x00055990 strh r2, [r3, 0x26]                               |     *((r3 + 0x26)) = r2;
                                                                 | label_39:
    0x00055992 ldr.w r8, [sp, 0x24]                              |     r8 = var_24h;
    0x00055996 movs r1, 0                                        |     r1 = 0;
    0x00055998 ldr r2, [r4, 0x1c]                                |     r2 = *((r4 + 0x1c));
    0x0005599a ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005599c str r1, [sp]                                      |     *(sp) = r1;
    0x0005599e mov r0, r8                                        |     r0 = r8;
    0x000559a0 movs r1, 0x43                                     |     r1 = 0x43;
    0x000559a2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000559a6 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000559a8 cmp.w sb, 0                                       |     
    0x000559ac ldr.w r2, [r8, 0x6c]                              |     r2 = *((r8 + 0x6c));
    0x000559b0 ldr r3, [r0]                                      |     r3 = *(r0);
    0x000559b2 it lt                                             |     
                                                                 |     if (sb >= 0) {
    0x000559b4 addlt sb, r2, -1                                  |         sb = r2 + -1;
                                                                 |     }
    0x000559b8 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x000559bc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000559be bne.w 0x55f94                                     |         goto label_202;
                                                                 |     }
    0x000559c2 ldr r3, [r0, 0x68]                                |     r3 = *((r0 + 0x68));
    0x000559c4 add.w r1, sb, sb, lsl 2                           |     r1 = sb + (sb << 2);
    0x000559c8 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 | label_35:
    0x000559cc str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x000559ce movs r3, 0                                        |     r3 = 0;
    0x000559d0 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000559d2 strb.w r3, [sl, 0x13]                             |     *((sl + 0x13)) = r3;
    0x000559d6 str.w r3, [sl, 0x1c]                              |     __asm ("str.w r3, [sl, 0x1c]");
    0x000559da add r2, r5                                        |     r2 += r5;
    0x000559dc ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x000559de and r3, r3, 0x10800                               |     r3 &= 0x10800;
    0x000559e2 cmp.w r3, 0x10000                                 |     
                                                                 |     if (r3 != 0x10000) {
    0x000559e6 bne.w 0x555a4                                     |         goto label_22;
                                                                 |     }
    0x000559ea ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x000559ec vldr d16, [r4, 0x18]                              |     __asm ("vldr d16, [r4, 0x18]");
    0x000559f0 ldrh r1, [r7, 2]                                  |     r1 = *((r7 + 2));
    0x000559f2 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x000559f4 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x000559f8 ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x000559fa strh r1, [r3, 0x10]                               |     *((r3 + 0x10)) = r1;
    0x000559fc str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x000559fe b 0x555a4                                         |     goto label_22;
                                                                 | label_185:
    0x00055a00 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x00055a02 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x00055a04 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x00055a06 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00055a08 beq.w 0x55576                                     |         goto label_25;
                                                                 |     }
    0x00055a0c b 0x5552c                                         |     goto label_18;
                                                                 | label_132:
    0x00055a0e ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00055a12 mov r1, r4                                        |     r1 = r4;
    0x00055a14 bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
    0x00055a18 b.w 0x54cfa                                       |     goto label_26;
                                                                 | label_198:
    0x00055a1c ldrd r2, r1, [sl, 0x28]                           |     __asm ("ldrd r2, r1, [sl, 0x28]");
    0x00055a20 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00055a22 adds r0, r1, 1                                    |     r0 = r1 + 1;
    0x00055a24 adds r1, 2                                        |     r1 += 2;
    0x00055a26 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x00055a28 adds r0, r2, 1                                    |     r0 = r2 + 1;
    0x00055a2a str.w r0, [sl, 0x28]                              |     __asm ("str.w r0, [sl, 0x28]");
    0x00055a2e mov r0, r5                                        |     r0 = r5;
    0x00055a30 str r2, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r2;
    0x00055a32 str.w r1, [sl, 0x2c]                              |     __asm ("str.w r1, [sl, 0x2c]");
    0x00055a36 movs r1, 0                                        |     r1 = 0;
    0x00055a38 str r1, [sp]                                      |     *(sp) = r1;
    0x00055a3a movs r1, 0x73                                     |     r1 = 0x73;
    0x00055a3c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00055a40 b 0x5584c                                         |     goto label_21;
                                                                 | label_197:
    0x00055a42 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
    0x00055a44 ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
                                                                 | label_74:
    0x00055a48 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00055a4a mov r0, sl                                        |     r0 = sl;
    0x00055a4c str.w fp, [sp, 4]                                 |     __asm ("str.w fp, [var_4h]");
    0x00055a50 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00055a52 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00055a54 ldrsh.w r3, [fp, 2]                               |     r3 = *(arg_2h);
    0x00055a58 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00055a5a str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00055a5c ldr.w r3, [fp, 0x1c]                              |     r3 = *(arg_1ch);
    0x00055a60 str r3, [sp]                                      |     *(sp) = r3;
    0x00055a62 mov r3, r5                                        |     r3 = r5;
    0x00055a64 bl 0x61f10                                        |     r0 = fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x00055a68 mov r4, r0                                        |     r4 = r0;
    0x00055a6a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00055a6c beq.w 0x550e4                                     |         goto label_19;
                                                                 |     }
    0x00055a70 ldrsh.w r3, [r0, 0x36]                            |     r3 = *((r0 + 0x36));
    0x00055a74 ldrsh.w r2, [fp, 2]                               |     r2 = *(arg_2h);
    0x00055a78 cmp r2, r3                                        |     
    0x00055a7a it gt                                             |     
                                                                 |     if (r2 > r3) {
    0x00055a7c strhgt r3, [fp, 2]                                |         __asm ("strhgt r3, [arg_2h]");
                                                                 |     }
    0x00055a80 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
                                                                 |     if (r3 != 0) {
    0x00055a82 cbz r3, 0x55a8e                                   |         
    0x00055a84 ldrb.w r3, [r0, 0x33]                             |         r3 = *((r0 + 0x33));
                                                                 |         if (r3 == 0) {
    0x00055a88 cbz r3, 0x55a8e                                   |             goto label_203;
                                                                 |         }
    0x00055a8a strb.w r3, [sp, 0xb5]                             |         var_b5h = r3;
                                                                 |     }
                                                                 | label_203:
    0x00055a8e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00055a90 beq.w 0x55bf6                                     |         goto label_204;
                                                                 |     }
    0x00055a94 ldrb.w r3, [r4, 0x34]                             |     r3 = *((r4 + 0x34));
    0x00055a98 ldrsb.w r1, [r4, 0x31]                            |     r1 = *((r4 + 0x31));
    0x00055a9c lsls r7, r3, 0x1d                                 |     r7 = r3 << 0x1d;
    0x00055a9e str r1, [sp, 0x100]                               |     var_100h = r1;
                                                                 |     if (r7 < r3) {
    0x00055aa0 bpl 0x55aba                                       |         
    0x00055aa2 ldrb.w r3, [r4, 0x30]                             |         r3 = *((r4 + 0x30));
    0x00055aa6 subs r3, 1                                        |         r3--;
    0x00055aa8 add.w r2, r3, r3, lsl 1                           |         r2 = r3 + (r3 << 1);
    0x00055aac add.w r2, r4, r2, lsl 5                           |         r2 = r4 + (r2 << 5);
    0x00055ab0 ldr.w r2, [r2, 0x338]                             |         r2 = *((r2 + 0x338));
    0x00055ab4 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00055ab6 beq.w 0x56a68                                     |             goto label_205;
                                                                 |         }
                                                                 |     }
    0x00055aba ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
                                                                 | label_71:
    0x00055abc str r3, [sp, 0x118]                               |     var_118h = r3;
    0x00055abe ldr r3, [r5]                                      |     r3 = *(r5);
    0x00055ac0 cmp r3, r1                                        |     
    0x00055ac2 itt eq                                            |     
                                                                 |     if (r3 != r1) {
    0x00055ac4 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != r1) {
    0x00055ac6 streq r3, [sp, 0xfc]                              |         var_fch = r3;
                                                                 |     }
                                                                 |     if (r3 == r1) {
    0x00055ac8 beq.w 0x55bf6                                     |         goto label_204;
                                                                 |     }
                                                                 | label_28:
    0x00055acc cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00055ace beq.w 0x5654c                                     |         goto label_206;
                                                                 |     }
    0x00055ad2 ldr.w r6, [sl, 0x2c]                              |     r6 = *((sl + 0x2c));
    0x00055ad6 mov r2, r4                                        |     r2 = r4;
    0x00055ad8 ldr.w r4, [sl, 0x38]                              |     r4 = *((sl + 0x38));
    0x00055adc mov r1, fp                                        |     r1 = fp;
    0x00055ade mov r0, sl                                        |     r0 = sl;
    0x00055ae0 adds r6, 1                                        |     r6++;
    0x00055ae2 subs r5, r4, 3                                    |     r5 = r4 - 3;
    0x00055ae4 subs r3, r4, 1                                    |     r3 = r4 - 1;
    0x00055ae6 str.w r6, [sl, 0x2c]                              |     __asm ("str.w r6, [sl, 0x2c]");
    0x00055aea str.w r5, [sl, 0x38]                              |     __asm ("str.w r5, [sl, 0x38]");
    0x00055aee str r3, [sp]                                      |     *(sp) = r3;
    0x00055af0 mov r3, r6                                        |     r3 = r6;
    0x00055af2 bl 0x65e68                                        |     fcn_00065e68 (r0, r1, r2, r3, r4);
    0x00055af6 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00055af8 movs r2, 0                                        |     r2 = 0;
    0x00055afa mov r3, r5                                        |     r3 = r5;
    0x00055afc str r2, [sp]                                      |     *(sp) = r2;
    0x00055afe movs r1, 8                                        |     r1 = 8;
    0x00055b00 mov r0, r7                                        |     r0 = r7;
    0x00055b02 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00055b06 ldr r0, [r7, 0xc]                                 |     r0 = *((r7 + 0xc));
    0x00055b08 subs r7, r4, 2                                    |     r7 = r4 - 2;
    0x00055b0a ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00055b0e cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00055b10 bmi.w 0x566aa                                     |         goto label_207;
                                                                 |     }
    0x00055b14 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00055b16 lsls r3, r4, 2                                    |     r3 = r4 << 2;
    0x00055b18 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00055b1a rsbs r3, r3, 0                                    |     r3 -= ;
    0x00055b1c ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x00055b1e str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_64:
    0x00055b20 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00055b22 mov.w r2, -1                                      |     r2 = -1;
    0x00055b26 mov r1, fp                                        |     r1 = fp;
    0x00055b28 mov r0, sl                                        |     r0 = sl;
    0x00055b2a strd r7, r5, [sp, 8]                              |     __asm ("strd r7, r5, [var_8h]");
    0x00055b2e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00055b30 add r3, sp, 0xb4                                  |     r3 += var_b4h;
    0x00055b32 str r3, [sp]                                      |     *(sp) = r3;
    0x00055b34 movs r3, 0                                        |     r3 = 0;
    0x00055b36 str r3, [sp, 0x118]                               |     var_118h = r3;
    0x00055b38 add r3, sp, 0xfc                                  |     r3 += var_fch;
    0x00055b3a bl 0x5fbc0                                        |     fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x00055b3e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00055b40 mvns r2, r7                                       |     r2 = ~r7;
    0x00055b42 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00055b44 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00055b48 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00055b4a bmi.w 0x566a0                                     |         goto label_208;
                                                                 |     }
    0x00055b4e ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00055b50 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00055b52 ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x00055b54 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_63:
    0x00055b58 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00055b5a movs r3, 0                                        |     r3 = 0;
    0x00055b5c mov r2, r6                                        |     r2 = r6;
    0x00055b5e movs r1, 0x43                                     |     r1 = 0x43;
    0x00055b60 str r3, [sp]                                      |     *(sp) = r3;
    0x00055b62 mov r0, r4                                        |     r0 = r4;
    0x00055b64 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00055b68 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00055b6a mvns r2, r5                                       |     r2 = ~r5;
    0x00055b6c ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00055b70 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00055b72 bmi.w 0x565c0                                     |         goto label_209;
                                                                 |     }
    0x00055b76 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00055b78 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00055b7a ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x00055b7c str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_52:
    0x00055b80 ldrb.w r3, [sp, 0xb5]                             |     r3 = var_b5h;
    0x00055b84 cmp r3, 3                                         |     
                                                                 |     if (r3 == 3) {
    0x00055b86 beq.w 0x56624                                     |         goto label_210;
                                                                 |     }
                                                                 | label_60:
    0x00055b8a ldr r3, [sp, 0xfc]                                |     r3 = var_fch;
                                                                 |     if (r3 != 0) {
    0x00055b8c cbz r3, 0x55bbc                                   |         
    0x00055b8e ldr r3, [sp, 0x100]                               |         r3 = var_100h;
    0x00055b90 cmp r3, 0                                         |         
                                                                 |         if (r3 <= 0) {
    0x00055b92 ble.w 0x56494                                     |             goto label_211;
                                                                 |         }
    0x00055b96 ldr.w r3, [pc, 0x940]                             |         r3 = *(0x000564d8);
    0x00055b9a add r3, pc                                        |         r3 += pc;
                                                                 | label_46:
    0x00055b9c ldr.w r2, [pc, 0x93c]                             |         
    0x00055ba0 movs r1, 0                                        |         r1 = 0;
    0x00055ba2 mov r0, sl                                        |         r0 = sl;
    0x00055ba4 add r2, pc                                        |         r2 = 0xac084;
    0x00055ba6 bl 0x2b770                                        |         fcn_0002b770 (r0, r1);
    0x00055baa ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00055bac mov r1, fp                                        |         r1 = fp;
    0x00055bae ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00055bb0 mov r0, sl                                        |         r0 = sl;
    0x00055bb2 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00055bb4 str r2, [sp]                                      |         *(sp) = r2;
    0x00055bb6 add r2, sp, 0xfc                                  |         r2 += var_fch;
    0x00055bb8 bl 0x31410                                        |         fcn_00031410 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     }
    0x00055bbc ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00055bbe ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00055bc0 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00055bc4 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00055bc6 bmi.w 0x564c0                                     |         goto label_212;
                                                                 |     }
    0x00055bca ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00055bcc ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00055bce ldr r1, [r3, 0x6c]                                |     r1 = *((r3 + 0x6c));
    0x00055bd0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00055bd2 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00055bd4 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00055bd6 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_50:
    0x00055bd8 ldr.w r4, [sl, 0x24]                              |     r4 = *((sl + 0x24));
    0x00055bdc cmp r4, 0                                         |     
    0x00055bde ite le                                            |     
                                                                 |     if (r4 > 0) {
    0x00055be0 movle r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r4 <= 0) {
    0x00055be2 movgt r4, 1                                       |         r4 = 1;
                                                                 |     }
                                                                 | label_58:
    0x00055be4 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00055be6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00055be8 beq.w 0x550e6                                     |         goto label_27;
                                                                 |     }
    0x00055bec ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00055bee bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
    0x00055bf2 b.w 0x550e6                                       |     goto label_27;
                                                                 | label_204:
    0x00055bf6 ldr r1, [sp, 0x110]                               |     r1 = var_110h;
    0x00055bf8 cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x00055bfa blt.w 0x55acc                                     |         goto label_28;
                                                                 |     }
    0x00055bfe ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00055c00 bl 0x189e0                                        |     fcn_000189e0 (r0, r1);
    0x00055c04 b 0x55acc                                         |     goto label_28;
                                                                 | label_191:
    0x00055c06 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00055c08 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00055c0a beq.w 0x564ac                                     |         goto label_213;
                                                                 |     }
    0x00055c0e ldr.w r3, [fp, 0x1c]                              |     r3 = *(arg_1ch);
    0x00055c12 ldr r2, [r3], 8                                   |     r2 = *(r3);
                                                                 |     r3 += 8;
    0x00055c16 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00055c18 ble 0x55c26                                       |         goto label_214;
                                                                 |     }
    0x00055c1a movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x00055c1c subs r2, 1                                        |         r2--;
    0x00055c1e strh r1, [r3, 0xe]                                |         *((r3 + 0xe)) = r1;
    0x00055c20 add.w r3, r3, 0x10                                |         r3 += 0x10;
    0x00055c24 bne 0x55c1c                                       |         
                                                                 |     } while (r2 != 1);
                                                                 | label_214:
    0x00055c26 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00055c28 ldr r0, [r3], 8                                   |     r0 = *(r3);
                                                                 |     r3 += 8;
    0x00055c2c cmp r0, 0                                         |     
    0x00055c2e itt gt                                            |     
                                                                 |     if (r0 <= 0) {
    0x00055c30 movgt r2, r0                                      |         r2 = r0;
                                                                 |     }
                                                                 |     if (r0 <= 0) {
    0x00055c32 movgt r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r0 <= 0) {
    0x00055c34 ble 0x55c40                                       |         goto label_215;
                                                                 |     }
                                                                 |     do {
    0x00055c36 subs r2, 1                                        |         r2--;
    0x00055c38 strh r1, [r3, 0xe]                                |         *((r3 + 0xe)) = r1;
    0x00055c3a add.w r3, r3, 0x10                                |         r3 += 0x10;
    0x00055c3e bne 0x55c36                                       |         
                                                                 |     } while (r2 != 1);
                                                                 | label_215:
    0x00055c40 ldrsh.w r3, [fp, 2]                               |     r3 = *(arg_2h);
    0x00055c44 cmp r3, 0x42                                      |     
    0x00055c46 itt gt                                            |     
                                                                 |     if (r3 <= 0x42) {
    0x00055c48 movgt r3, 0x42                                    |         r3 = 0x42;
                                                                 |     }
                                                                 |     if (r3 > 0x42) {
    0x00055c4a strhgt r3, [fp, 2]                                |         __asm ("strhgt r3, [arg_2h]");
                                                                 |     }
                                                                 |     if (r5 != 0) {
    0x00055c4e cbz r5, 0x55c58                                   |         
    0x00055c50 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00055c52 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00055c54 beq.w 0x56668                                     |             goto label_216;
                                                                 |         }
                                                                 |     }
                                                                 | label_48:
    0x00055c58 movs r3, 0                                        |     r3 = 0;
    0x00055c5a str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 | label_62:
    0x00055c5c ldr.w r3, [sl, 0x38]                              |     r3 = *((sl + 0x38));
    0x00055c60 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00055c62 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00055c64 subs r3, 1                                        |     r3--;
    0x00055c66 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00055c68 str.w r3, [sl, 0x38]                              |     __asm ("str.w r3, [sl, 0x38]");
    0x00055c6c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00055c6e beq.w 0x560d8                                     |         goto label_217;
                                                                 |     }
    0x00055c72 movs r2, 0x34                                     |     r2 = 0x34;
    0x00055c74 movs r3, 0                                        |     r3 = 0;
    0x00055c76 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00055c7a mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r6 != 0) {
                                                                 | label_37:
    0x00055c7c cbz r6, 0x55cb4                                   |         
    0x00055c7e movs r2, 0x34                                     |         r2 = 0x34;
    0x00055c80 movs r1, 0                                        |         r1 = 0;
    0x00055c82 mov r0, r6                                        |         r0 = r6;
    0x00055c84 blx 0x97d4                                        |         fcn_000097d4 ();
    0x00055c88 ldr.w r0, [sl]                                    |         r0 = *(sl);
    0x00055c8c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00055c8e beq.w 0x565b0                                     |             goto label_218;
                                                                 |         }
    0x00055c92 movs r2, 0xc                                      |         r2 = 0xc;
    0x00055c94 movs r3, 0                                        |         r3 = 0;
    0x00055c96 bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
                                                                 | label_56:
    0x00055c9a cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00055c9c beq.w 0x56d36                                     |             goto label_219;
                                                                 |         }
    0x00055ca0 ldr.w r3, [sl, 0x80]                              |         r3 = *((sl + 0x80));
    0x00055ca4 str r3, [r0]                                      |         *(r0) = r3;
    0x00055ca6 ldr.w r3, [pc, 0x838]                             |         r3 = *(0x000564e0);
    0x00055caa str.w r0, [sl, 0x80]                              |         __asm ("str.w r0, [sl, 0x80]");
    0x00055cae str r6, [r0, 4]                                   |         *((r0 + 4)) = r6;
    0x00055cb0 add r3, pc                                        |         r3 += pc;
    0x00055cb2 str r3, [r0, 8]                                   |         *((r0 + 8)) = r3;
                                                                 |     }
                                                                 | label_83:
    0x00055cb4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00055cb6 ldrb.w r4, [r3, 0x57]                             |     r4 = *((r3 + 0x57));
    0x00055cba str r4, [sp, 0x54]                                |     var_54h = r4;
    0x00055cbc cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00055cbe bne.w 0x550e4                                     |         goto label_19;
                                                                 |     }
    0x00055cc2 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x00055cc6 add r0, sp, 0xdc                                  |     r0 += var_dch;
    0x00055cc8 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00055ccc mov r7, r0                                        |     r7 = r0;
    0x00055cce str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00055cd0 str r2, [r6, 0x30]                                |     *((r6 + 0x30)) = r2;
    0x00055cd2 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00055cd4 adds r3, 1                                        |     r3++;
    0x00055cd6 str r4, [sp, 0xe8]                                |     var_e8h = r4;
    0x00055cd8 str.w sl, [sp, 0xdc]                              |     __asm ("str.w sl, [var_dch]");
    0x00055cdc strd r2, r6, [sp, 0xe0]                           |     __asm ("strd r2, r6, [var_e0h]");
    0x00055ce0 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00055ce2 strd r4, r4, [sp, 0xec]                           |     __asm ("strd r4, r4, [var_f0h]");
    0x00055ce6 strd r4, r4, [sp, 0xf4]                           |     __asm ("strd r4, r4, [var_f4h]");
    0x00055cea str r3, [r6, 0x10]                                |     *((r6 + 0x10)) = r3;
    0x00055cec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00055cee beq.w 0x566d6                                     |         goto label_220;
                                                                 |     }
    0x00055cf2 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00055cf4 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00055cf6 str r2, [r6, 0x18]                                |     *((r6 + 0x18)) = r2;
    0x00055cf8 str r3, [r6, 0xc]                                 |     *((r6 + 0xc)) = r3;
    0x00055cfa bl 0x2d3b8                                        |     fcn_0002d3b8 (r0, r1);
    0x00055cfe mov r1, r5                                        |     r1 = r5;
    0x00055d00 mov r0, r7                                        |     r0 = r7;
    0x00055d02 bl 0x2d3b8                                        |     fcn_0002d3b8 (r0, r1);
    0x00055d06 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 != 0) {
    0x00055d08 cbz r3, 0x55d62                                   |         
    0x00055d0a ldr.w r3, [pc, 0x7d8]                             |         r3 = *(0x000564e4);
    0x00055d0e ldr.w r1, [fp, 0x2c]                              |         r1 = *(arg_2ch);
    0x00055d12 str r4, [sp, 0xc8]                                |         var_c8h = r4;
    0x00055d14 add r3, pc                                        |         r3 += pc;
    0x00055d16 str.w sl, [sp, 0xc0]                              |         __asm ("str.w sl, [var_c0h]");
    0x00055d1a str r3, [sp, 0xc4]                                |         var_c4h = r3;
    0x00055d1c add r3, sp, 0xc0                                  |         r3 += var_c0h;
    0x00055d1e str.w fp, [sp, 0xd8]                              |         __asm ("str.w fp, [var_d8h]");
    0x00055d22 strd r4, r4, [sp, 0xcc]                           |         __asm ("strd r4, r4, [var_cch]");
    0x00055d26 str r4, [sp, 0xd4]                                |         var_d4h = r4;
    0x00055d28 str r3, [sp, 0x38]                                |         var_38h = r3;
                                                                 |         if (r1 != 0) {
    0x00055d2a cbz r1, 0x55d32                                   |             
    0x00055d2c mov r0, r3                                        |             r0 = r3;
    0x00055d2e bl 0x2cd88                                        |             fcn_0002cd88 (r0, r1);
                                                                 |         }
    0x00055d32 ldr.w r3, [fp, 0x24]                              |         r3 = *(arg_24h);
    0x00055d36 str r3, [sp, 0x3c]                                |         var_3ch = r3;
                                                                 | label_68:
    0x00055d38 ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x00055d3a ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x00055d3c ldr r1, [sp, 0x44]                                |         r1 = var_44h;
    0x00055d3e str r3, [sp, 0xd8]                                |         var_d8h = r3;
    0x00055d40 ldr.w r3, [pc, 0x7a4]                             |         r3 = *(0x000564e8);
    0x00055d44 add r3, pc                                        |         r3 += pc;
    0x00055d46 str r3, [sp, 0xc4]                                |         var_c4h = r3;
    0x00055d48 ldr.w r3, [pc, 0x7a0]                             |         r3 = *(0x000564ec);
    0x00055d4c add r3, pc                                        |         r3 += pc;
    0x00055d4e str r3, [sp, 0xc8]                                |         var_c8h = r3;
    0x00055d50 ldr.w r3, [pc, 0x79c]                             |         r3 = *(0x000564f0);
    0x00055d54 add r3, pc                                        |         r3 += pc;
    0x00055d56 str r3, [sp, 0xcc]                                |         var_cch = r3;
    0x00055d58 movs r3, 0                                        |         r3 = 0;
    0x00055d5a str r3, [sp, 0xd0]                                |         var_d0h = r3;
    0x00055d5c str r3, [sp, 0xc0]                                |         var_c0h = r3;
    0x00055d5e bl 0x2cd88                                        |         fcn_0002cd88 (r0, r1);
                                                                 |     }
                                                                 | label_67:
    0x00055d62 ldr.w r3, [fp, 0x28]                              |     r3 = *(arg_28h);
    0x00055d66 ldr r2, [r6, 0x20]                                |     r2 = *((r6 + 0x20));
    0x00055d68 str r2, [r6, 0x24]                                |     *((r6 + 0x24)) = r2;
    0x00055d6a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00055d6c beq.w 0x566c2                                     |         goto label_221;
                                                                 |     }
    0x00055d70 ldr r0, [r6, 0x2c]                                |     r0 = *((r6 + 0x2c));
    0x00055d72 movs r3, 0                                        |     r3 = 0;
    0x00055d74 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 | label_66:
    0x00055d76 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00055d78 ble.w 0x56b30                                     |         goto label_222;
                                                                 |     }
    0x00055d7c ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
                                                                 | label_88:
    0x00055d7e ldr.w sb, [pc, 0x774]                             |     sb = *(0x000564f4);
    0x00055d82 movs r4, 0                                        |     r4 = 0;
    0x00055d84 ldr.w r5, [pc, 0x770]                             |     r5 = *(0x000564f8);
    0x00055d88 ldr.w r8, [pc, 0x770]                             |     r8 = *(0x000564fc);
    0x00055d8c add sb, pc                                        |     sb += pc;
    0x00055d8e ldr r1, [sp, 0xf4]                                |     r1 = var_f4h;
    0x00055d90 mov r3, sb                                        |     r3 = sb;
    0x00055d92 ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x00055d94 mov sb, r4                                        |     sb = r4;
    0x00055d96 add r5, pc                                        |     r5 += pc;
    0x00055d98 add r8, pc                                        |     r8 += pc;
    0x00055d9a mov r4, r3                                        |     r4 = r3;
    0x00055d9c str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
    0x00055da0 b 0x55db8                                         |     
                                                                 |     while (r3 >= r2) {
                                                                 | label_29:
    0x00055da2 ldr r0, [r6, 0x2c]                                |         r0 = *((r6 + 0x2c));
    0x00055da4 add.w sb, sb, 1                                   |         sb++;
    0x00055da8 ldr r1, [sp, 0xf4]                                |         r1 = var_f4h;
    0x00055daa cmp r0, sb                                        |         
    0x00055dac bic r1, r1, 0x20000                               |         r1 = BIT_MASK (r1, 0x20000);
    0x00055db0 str r1, [sp, 0xf4]                                |         var_f4h = r1;
                                                                 |         if (r0 <= sb) {
    0x00055db2 ble.w 0x560e4                                     |             goto label_223;
                                                                 |         }
    0x00055db6 ldr r2, [r6, 0x28]                                |         r2 = *((r6 + 0x28));
    0x00055db8 add.w r3, sb, sb, lsl 2                           |         r3 = sb + (sb << 2);
    0x00055dbc orr r1, r1, 0x20000                               |         r1 |= 0x20000;
    0x00055dc0 mov r0, r7                                        |         r0 = r7;
    0x00055dc2 ldr.w sl, [r2, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         sl = *((r2 + offset_0));
    0x00055dc6 str r1, [sp, 0xf4]                                |         var_f4h = r1;
    0x00055dc8 ldr.w r1, [sl, 0x14]                              |         r1 = *((sl + 0x14));
    0x00055dcc bl 0x2d3b8                                        |         fcn_0002d3b8 (r0, r1);
    0x00055dd0 ldr.w r2, [sl, 4]                                 |         r2 = *((sl + 4));
    0x00055dd4 lsls r3, r2, 7                                    |         r3 = r2 << 7;
    0x00055dd6 bpl 0x55da2                                       |         
                                                                 |     }
    0x00055dd8 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00055ddc ldr r1, [r3, 0x28]                                |     r1 = *((r3 + 0x28));
    0x00055dde movs r3, 0                                        |     r3 = 0;
    0x00055de0 strd r4, r5, [sp, 0xc4]                           |     __asm ("strd r4, r5, [var_c4h]");
    0x00055de4 str.w r8, [sp, 0xcc]                              |     __asm ("str.w r8, [var_cch]");
    0x00055de8 str r7, [sp, 0xd8]                                |     var_d8h = r7;
    0x00055dea str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x00055dec str r3, [sp, 0xc0]                                |     var_c0h = r3;
    0x00055dee cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00055df0 beq 0x55da2                                       |         goto label_29;
                                                                 |     }
    0x00055df2 add r0, sp, 0xc0                                  |     r0 += var_c0h;
    0x00055df4 bl 0x2cd88                                        |     fcn_0002cd88 (r0, r1);
    0x00055df8 b 0x55da2                                         |     goto label_29;
                                                                 | label_181:
    0x00055dfa ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00055dfc ldr.w r2, [sl, 0x2c]                              |     r2 = *((sl + 0x2c));
    0x00055e00 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00055e02 ldr.w sb, [r0, 0x6c]                              |     sb = *((r0 + 0x6c));
    0x00055e06 adds r2, 1                                        |     r2++;
    0x00055e08 str.w r2, [sl, 0x2c]                              |     __asm ("str.w r2, [sl, 0x2c]");
    0x00055e0c add.w r1, sb, 1                                   |     r1 = sb + 1;
    0x00055e10 str r2, [r5, 0x24]                                |     *((r5 + 0x24)) = r2;
    0x00055e12 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x00055e14 str r1, [sp]                                      |     *(sp) = r1;
    0x00055e16 movs r1, 0xa                                      |     r1 = 0xa;
    0x00055e18 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00055e1c ldr r2, [r5, 0x24]                                |     r2 = *((r5 + 0x24));
    0x00055e1e mov r0, sl                                        |     r0 = sl;
    0x00055e20 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x00055e22 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00055e24 str r1, [r5, 0x20]                                |     *((r5 + 0x20)) = r1;
    0x00055e26 movs r1, 0xd                                      |     r1 = 0xd;
    0x00055e28 str r2, [sp, 0xe0]                                |     var_e0h = r2;
    0x00055e2a ldr.w r2, [pc, 0x6d4]                             |     r2 = *(0x00056500);
    0x00055e2e str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x00055e30 str r3, [sp, 0xf0]                                |     var_f0h = r3;
    0x00055e32 add r2, pc                                        |     r2 += pc;
    0x00055e34 strd r3, r3, [sp, 0xe8]                           |     __asm ("strd r3, r3, [var_e8h]");
    0x00055e38 strb.w r1, [sp, 0xdc]                             |     var_dch = r1;
    0x00055e3c mov r3, r4                                        |     r3 = r4;
    0x00055e3e movs r1, 1                                        |     r1 = 1;
    0x00055e40 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00055e44 mov r1, r7                                        |     r1 = r7;
    0x00055e46 mov r2, r8                                        |     r2 = r8;
    0x00055e48 mov r0, sl                                        |     r0 = sl;
    0x00055e4a bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00055e4e ldrb.w r3, [r5, 0x2d]                             |     r3 = *((r5 + 0x2d));
    0x00055e52 ldrh r1, [r7, 2]                                  |     r1 = *((r7 + 2));
    0x00055e54 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x00055e56 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x00055e5a ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00055e5c strh r1, [r2, 0x26]                               |     *((r2 + 0x26)) = r1;
    0x00055e5e strb.w r3, [r5, 0x2d]                             |     *((r5 + 0x2d)) = r3;
    0x00055e62 mov r0, r7                                        |     r0 = r7;
    0x00055e64 ldr r3, [sp, 0xe8]                                |     r3 = var_e8h;
    0x00055e66 ldr r1, [r5, 0x24]                                |     r1 = *((r5 + 0x24));
    0x00055e68 str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x00055e6a bl 0x2a700                                        |     fcn_0002a700 (r0, r1, r2);
    0x00055e6e ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00055e70 cmp.w sb, 0                                       |     
    0x00055e74 ldr r2, [r7, 0x6c]                                |     r2 = *((r7 + 0x6c));
    0x00055e76 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00055e78 it lt                                             |     
                                                                 |     if (sb >= 0) {
    0x00055e7a addlt sb, r2, -1                                  |         sb = r2 + -1;
                                                                 |     }
    0x00055e7e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00055e82 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00055e84 bne.w 0x560ce                                     |         goto label_224;
                                                                 |     }
    0x00055e88 ldr r3, [r1, 0x68]                                |     r3 = *((r1 + 0x68));
    0x00055e8a add.w sb, sb, sb, lsl 2                           |     sb += (sb << 2);
    0x00055e8e add.w r3, r3, sb, lsl 2                           |     r3 += (sb << 2);
                                                                 | label_36:
    0x00055e92 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00055e94 movs r3, 0                                        |     r3 = 0;
    0x00055e96 strb.w r3, [sl, 0x13]                             |     *((sl + 0x13)) = r3;
    0x00055e9a str.w r3, [sl, 0x1c]                              |     __asm ("str.w r3, [sl, 0x1c]");
    0x00055e9e b.w 0x555a4                                       |     goto label_22;
                                                                 | label_174:
    0x00055ea2 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00055ea4 ldr r2, [r2, 0x50]                                |     r2 = *((r2 + 0x50));
    0x00055ea6 lsls r0, r2, 0x10                                 |     r0 = r2 << 0x10;
                                                                 |     if (r0 < r2) {
    0x00055ea8 bmi.w 0x55442                                     |         goto label_30;
                                                                 |     }
    0x00055eac ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00055eb0 add r6, sp, 0xc0                                  |     r6 += var_c0h;
    0x00055eb2 ldr.w r5, [pc, 0x650]                             |     r5 = *(0x00056504);
    0x00055eb6 mov r7, sl                                        |     r7 = sl;
    0x00055eb8 ldr.w r4, [pc, 0x64c]                             |     r4 = *(0x00056508);
    0x00055ebc adds r3, 0x57                                     |     r3 += 0x57;
    0x00055ebe vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x00055ec2 add r5, pc                                        |     r5 += pc;
    0x00055ec4 str.w sl, [sp, 0xc0]                              |     __asm ("str.w sl, [var_c0h]");
    0x00055ec8 add r4, pc                                        |     r4 += pc;
    0x00055eca str r3, [sp, 0xc4]                                |     var_c4h = r3;
    0x00055ecc b 0x55eda                                         |     
                                                                 |     while (r3 == 0) {
                                                                 | label_31:
    0x00055ece ldr r3, [sp, 0xcc]                                |         r3 = var_cch;
    0x00055ed0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00055ed2 beq.w 0x56590                                     |             goto label_225;
                                                                 |         }
    0x00055ed6 ldr.w r1, [fp, 0x24]                              |         r1 = *(arg_24h);
    0x00055eda ldr.w r3, [fp, 0x20]                              |         r3 = *(arg_20h);
    0x00055ede movs r2, 0                                        |         r2 = 0;
    0x00055ee0 vstr d8, [sp, 0xc8]                               |         __asm ("vstr d8, [sp, 0xc8]");
    0x00055ee4 str r2, [sp, 0xd8]                                |         var_d8h = r2;
    0x00055ee6 str r2, [sp, 0xd0]                                |         var_d0h = r2;
                                                                 |         if (r3 == 0) {
    0x00055ee8 cbz r3, 0x55f38                                   |             goto label_226;
                                                                 |         }
    0x00055eea ldr r2, [r3]                                      |         r2 = *(r3);
    0x00055eec cmp r2, 0                                         |         
                                                                 |         if (r2 <= 0) {
    0x00055eee ble 0x55f38                                       |             goto label_226;
                                                                 |         }
    0x00055ef0 ldrb.w r3, [r3, 0x2c]                             |         r3 = *((r3 + 0x2c));
    0x00055ef4 tst.w r3, 0x40                                    |         
    0x00055ef8 ite eq                                            |         
                                                                 |         if ((r3 & 0x40) != 0) {
    0x00055efa moveq r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if ((r3 & 0x40) == 0) {
    0x00055efc movne r3, 3                                       |             r3 = 3;
                                                                 |         }
                                                                 | label_32:
    0x00055efe mov r0, r6                                        |         r0 = r6;
    0x00055f00 str r3, [sp, 0xd4]                                |         var_d4h = r3;
    0x00055f02 bl 0x2d758                                        |         fcn_0002d758 (r0, r1);
    0x00055f06 ldr r3, [sp, 0xc8]                                |         r3 = var_c8h;
    0x00055f08 cmp r3, 0                                         |         
    0x00055f0a beq 0x55ece                                       |         
                                                                 |     }
    0x00055f0c ldr.w r1, [fp, 0x24]                              |     r1 = *(arg_24h);
    0x00055f10 movs r3, 0                                        |     r3 = 0;
    0x00055f12 add r0, sp, 0xdc                                  |     r0 += var_dch;
    0x00055f14 strd r7, r5, [sp, 0xdc]                           |     __asm ("strd r7, r5, [var_dch]");
    0x00055f18 str r4, [sp, 0xe4]                                |     var_e4h = r4;
    0x00055f1a str r6, [sp, 0xf4]                                |     var_f4h = r6;
    0x00055f1c strd r3, r3, [sp, 0xe8]                           |     __asm ("strd r3, r3, [var_e8h]");
    0x00055f20 str r3, [sp, 0xf0]                                |     var_f0h = r3;
                                                                 |     if (r1 != 0) {
    0x00055f22 cbz r1, 0x55f28                                   |         
    0x00055f24 bl 0x2cd88                                        |         fcn_0002cd88 (r0, r1);
                                                                 |     }
    0x00055f28 ldr r1, [sp, 0xd8]                                |     r1 = var_d8h;
    0x00055f2a ldr r3, [sp, 0xc0]                                |     r3 = var_c0h;
    0x00055f2c ldr r0, [r3]                                      |     r0 = *(r3);
    0x00055f2e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00055f30 beq 0x55ece                                       |         goto label_31;
                                                                 |     }
    0x00055f32 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00055f36 b 0x55ece                                         |     goto label_31;
                                                                 | label_226:
    0x00055f38 movs r3, 1                                        |     r3 = 1;
    0x00055f3a b 0x55efe                                         |     goto label_32;
                                                                 | label_159:
    0x00055f3c ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00055f3e ldr r2, [r3]                                      |     r2 = *(r3);
    0x00055f40 b.w 0x550d8                                       |     goto label_33;
                                                                 | label_190:
    0x00055f44 ldr.w r4, [sl, 0x28]                              |     r4 = *((sl + 0x28));
    0x00055f48 movs r3, 0                                        |     r3 = 0;
    0x00055f4a ldr.w r1, [fp, 0x1c]                              |     r1 = *(arg_1ch);
    0x00055f4e mov r0, sl                                        |     r0 = sl;
    0x00055f50 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00055f52 str r4, [sp, 0xb8]                                |     var_b8h = r4;
    0x00055f54 str.w r2, [sl, 0x28]                              |     __asm ("str.w r2, [sl, 0x28]");
    0x00055f58 mov r2, r3                                        |     r2 = r3;
    0x00055f5a bl 0x28128                                        |     fcn_00028128 (r0, r1, r2, r3);
    0x00055f5e mov r2, r4                                        |     r2 = r4;
    0x00055f60 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00055f62 movs r3, 0                                        |     r3 = 0;
    0x00055f64 mvn r1, 7                                         |     r1 = ~7;
    0x00055f68 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00055f6a str r3, [sp]                                      |     *(sp) = r3;
    0x00055f6c mov r0, r4                                        |     r0 = r4;
    0x00055f6e str r1, [sp, 8]                                   |     var_8h = r1;
    0x00055f70 movs r1, 0x76                                     |     r1 = 0x76;
    0x00055f72 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00055f76 ldr r3, [r4, 0x6c]                                |     r3 = *((r4 + 0x6c));
    0x00055f78 str r0, [sp, 0xbc]                                |     var_bch = r0;
    0x00055f7a cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00055f7c ble 0x55f8e                                       |         
    0x00055f7e ldr r2, [r4, 0x68]                                |         r2 = *((r4 + 0x68));
    0x00055f80 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00055f84 add.w r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
    0x00055f88 movs r3, 8                                        |         r3 = 8;
    0x00055f8a strh r3, [r2, -0x12]                              |         *((r2 - 0x12)) = r3;
                                                                 |     }
    0x00055f8e movs r3, 3                                        |     r3 = 3;
    0x00055f90 b.w 0x55694                                       |     goto label_34;
                                                                 | label_202:
    0x00055f94 ldr.w r3, [pc, 0x574]                             |     
    0x00055f98 add r3, pc                                        |     r3 = 0xac4a8;
    0x00055f9a adds r3, 4                                        |     r3 += 4;
    0x00055f9c b 0x559cc                                         |     goto label_35;
                                                                 | label_171:
    0x00055f9e ldr.w r8, [sp, 0x5c]                              |     r8 = var_5ch;
    0x00055fa2 mov sl, r7                                        |     sl = r7;
    0x00055fa4 ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
    0x00055fa8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00055faa beq.w 0x56afc                                     |         goto label_227;
                                                                 |     }
                                                                 | label_75:
    0x00055fae ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00055fb0 mov r1, r5                                        |     r1 = r5;
    0x00055fb2 movs r5, 0                                        |     r5 = 0;
    0x00055fb4 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00055fb6 mov r0, sl                                        |     r0 = sl;
    0x00055fb8 strd r5, r5, [sp, 0xc]                            |     __asm ("strd r5, r5, [var_ch]");
    0x00055fbc str r3, [sp, 8]                                   |     var_8h = r3;
    0x00055fbe ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00055fc0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00055fc2 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00055fc4 str r3, [sp]                                      |     *(sp) = r3;
    0x00055fc6 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00055fc8 bl 0x1fb50                                        |     fcn_0001fb50 (r0, r1, r2, r3, r4, r5, r6);
    0x00055fcc mov r3, r5                                        |     r3 = r5;
    0x00055fce mov r4, r0                                        |     r4 = r0;
    0x00055fd0 mov r2, r5                                        |     r2 = r5;
    0x00055fd2 mov r1, r5                                        |     r1 = r5;
    0x00055fd4 mov r0, sl                                        |     r0 = sl;
    0x00055fd6 bl 0x29448                                        |     fcn_00029448 (r0, r1, r2, r3);
    0x00055fda str.w r0, [fp, 0x20]                              |     __asm ("str.w r0, [arg_20h]");
    0x00055fde cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00055fe0 beq.w 0x5649c                                     |         goto label_228;
                                                                 |     }
    0x00055fe4 mov r1, r0                                        |     r1 = r0;
    0x00055fe6 str r4, [r0, 0x1c]                                |     *((r0 + 0x1c)) = r4;
    0x00055fe8 mov r0, sl                                        |     r0 = sl;
    0x00055fea bl 0xc32c                                         |     fcn_0000c32c (r0, r1);
    0x00055fee ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00055ff0 movs r2, 0x40                                     |     r2 = 0x40;
    0x00055ff2 mov r1, r4                                        |     r1 = r4;
    0x00055ff4 mov r0, sl                                        |     r0 = sl;
    0x00055ff6 orr r3, r3, 0x8000000                             |     r3 |= 0x8000000;
    0x00055ffa orr r3, r3, 0x40                                  |     r3 |= 0x40;
    0x00055ffe str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00056000 bl 0x54b94                                        |     fcn_00054b94 (r0, r1, r2);
    0x00056004 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00056006 and r2, r8, 8                                     |     r2 = r8 & 8;
    0x0005600a orrs r3, r2                                       |     r3 |= r2;
    0x0005600c str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x0005600e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00056010 beq.w 0x5669c                                     |         goto label_229;
                                                                 |     }
    0x00056014 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00056016 mov r3, r0                                        |     r3 = r0;
    0x00056018 add.w ip, r0, 0x40                                |     
                                                                 |     do {
    0x0005601c ldr r7, [r3]                                      |         r7 = *(r3);
    0x0005601e adds r3, 0x10                                     |         r3 += 0x10;
    0x00056020 ldr r6, [r3, -0xc]                                |         r6 = *((r3 - 0xc));
    0x00056024 adds r2, 0x10                                     |         r2 += 0x10;
    0x00056026 ldr r5, [r3, -0x8]                                |         r5 = *((r3 - 0x8));
    0x0005602a ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0005602e cmp r3, ip                                        |         
    0x00056030 str r7, [r2, -0x10]                               |         *((r2 - 0x10)) = r7;
    0x00056034 str r6, [r2, -0xc]                                |         *((r2 - 0xc)) = r6;
    0x00056038 str r5, [r2, -0x8]                                |         *((r2 - 0x8)) = r5;
    0x0005603c str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x00056040 bne 0x5601c                                       |         
                                                                 |     } while (r3 != ip);
    0x00056042 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00056044 mov r1, r4                                        |     r1 = r4;
    0x00056046 str r0, [sp, 0x18]                                |     var_18h = r0;
    0x00056048 movs r4, 0                                        |     r4 = 0;
    0x0005604a ldr.w r0, [pc, 0x4c4]                             |     r0 = *(0x00056510);
    0x0005604e ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x00056050 ldr r5, [sp, 0x48]                                |     r5 = var_48h;
    0x00056052 add r0, pc                                        |     r0 += pc;
    0x00056054 orr r3, r3, 0x4000                                |     r3 |= 0x4000;
    0x00056058 str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x0005605a ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x0005605e str r2, [r3, 0x18]                                |     *((r3 + 0x18)) = r2;
    0x00056060 ldr.w r2, [pc, 0x4b0]                             |     r2 = *(0x00056514);
    0x00056064 ldr.w r3, [pc, 0x4b0]                             |     r3 = *(0x00056518);
    0x00056068 str r4, [sp, 0xdc]                                |     var_dch = r4;
    0x0005606a add r2, pc                                        |     r2 += pc;
    0x0005606c strd r4, r4, [r5, 4]                              |     __asm ("strd r4, r4, [r5, 4]");
    0x00056070 strd r4, r4, [r5, 0xc]                            |     __asm ("strd r4, r4, [r5, 0xc]");
    0x00056074 add r3, pc                                        |     r3 += pc;
    0x00056076 strd r4, r4, [r5, 0x14]                           |     __asm ("strd r4, r4, [r5, 0x14]");
    0x0005607a strd r0, r2, [sp, 0xe0]                           |     __asm ("strd r0, r2, [var_e0h]");
    0x0005607e mov r0, r5                                        |     r0 = r5;
    0x00056080 str r3, [sp, 0xe8]                                |     var_e8h = r3;
    0x00056082 bl 0x2d9bc                                        |     fcn_0002d9bc (r0, r1, r2, r3, r4, r5);
                                                                 | label_47:
    0x00056086 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00056088 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x0005608c ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00056090 cmp r3, 0                                         |     
    0x00056092 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00056094 movne r4, 7                                       |         r4 = 7;
                                                                 |     }
    0x00056096 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00056098 beq.w 0x564b6                                     |         goto label_230;
                                                                 |     }
    0x0005609c movs r2, 0xc                                      |     r2 = 0xc;
    0x0005609e movs r3, 0                                        |     r3 = 0;
    0x000560a0 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
                                                                 | label_49:
    0x000560a4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000560a6 beq.w 0x56b22                                     |         goto label_231;
                                                                 |     }
    0x000560aa ldr.w r3, [sl, 0x80]                              |     r3 = *((sl + 0x80));
    0x000560ae str r3, [r0]                                      |     *(r0) = r3;
    0x000560b0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000560b2 str.w r0, [sl, 0x80]                              |     __asm ("str.w r0, [sl, 0x80]");
    0x000560b6 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x000560b8 ldr.w r3, [pc, 0x460]                             |     r3 = *(0x0005651c);
    0x000560bc add r3, pc                                        |     r3 += pc;
    0x000560be str r3, [r0, 8]                                   |     *((r0 + 8)) = r3;
                                                                 | label_76:
    0x000560c0 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x000560c2 bne.w 0x550e4                                     |         goto label_19;
                                                                 |     }
    0x000560c6 ldr.w r8, [fp, 4]                                 |     r8 = *(arg_4h);
    0x000560ca b.w 0x54d4c                                       |     goto label_15;
                                                                 | label_224:
    0x000560ce ldr.w r3, [pc, 0x450]                             |     r3 = *(0x00056520);
    0x000560d2 add r3, pc                                        |     r3 += pc;
    0x000560d4 adds r3, 4                                        |     r3 += 4;
    0x000560d6 b 0x55e92                                         |     goto label_36;
                                                                 | label_217:
    0x000560d8 movs r0, 0x34                                     |     r0 = 0x34;
    0x000560da movs r1, 0                                        |     r1 = 0;
    0x000560dc bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x000560e0 mov r6, r0                                        |     r6 = r0;
    0x000560e2 b 0x55c7c                                         |     goto label_37;
                                                                 | label_223:
    0x000560e4 ldr.w sl, [sp, 0x5c]                              |     sl = var_5ch;
    0x000560e8 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000560ea ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x000560ee str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x000560f0 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x000560f4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000560f6 bne.w 0x565e0                                     |         goto label_77;
                                                                 |     }
    0x000560fa ldr r2, [sp, 0x28]                                |     r2 = x;
    0x000560fc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000560fe beq.w 0x56b4a                                     |         goto label_232;
                                                                 |     }
    0x00056102 cmp r0, 1                                         |     
                                                                 |     if (r0 == 1) {
    0x00056104 beq.w 0x56d6a                                     |         goto label_233;
                                                                 |     }
                                                                 | label_78:
    0x00056108 movs r3, 0                                        |     r3 = 0;
    0x0005610a str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 | label_85:
    0x0005610c ldr.w r5, [sl, 0x28]                              |     r5 = *((sl + 0x28));
    0x00056110 movs r2, 0                                        |     r2 = 0;
    0x00056112 ldr.w sb, [sp, 0x28]                              |     sb = x;
    0x00056116 mov r0, sl                                        |     r0 = sl;
    0x00056118 ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0005611a mov r4, r2                                        |     r4 = r2;
    0x0005611c adds r7, r5, 1                                    |     r7 = r5 + 1;
    0x0005611e str.w r7, [sl, 0x28]                              |     __asm ("str.w r7, [sl, 0x28]");
    0x00056122 mov r1, sb                                        |     r1 = sb;
    0x00056124 str r5, [r6, 4]                                   |     *((r6 + 4)) = r5;
    0x00056126 bl 0x28128                                        |     fcn_00028128 (r0, r1, r2, r3);
    0x0005612a ldr.w r8, [sp, 0x24]                              |     r8 = var_24h;
    0x0005612e mvn r1, 7                                         |     r1 = ~7;
    0x00056132 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00056134 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00056136 str r0, [sp, 0x78]                                |     var_78h = r0;
    0x00056138 strd r4, r0, [sp]                                 |     __asm ("strd r4, r0, [sp]");
    0x0005613c mov r0, r8                                        |     r0 = r8;
    0x0005613e str r1, [sp, 8]                                   |     var_8h = r1;
    0x00056140 movs r1, 0x77                                     |     r1 = 0x77;
    0x00056142 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00056146 ldr.w r5, [sl, 0x2c]                              |     r5 = *((sl + 0x2c));
    0x0005614a ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0005614e str r4, [sp]                                      |     *(sp) = r4;
    0x00056150 adds r1, r5, 4                                    |     r1 = r5 + 4;
    0x00056152 ldr.w r2, [sl, 0x38]                              |     r2 = *((sl + 0x38));
    0x00056156 str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x00056158 add r1, r3                                        |     r1 += r3;
    0x0005615a add r3, r1                                        |     r3 += r1;
    0x0005615c str r0, [sp, 0x80]                                |     var_80h = r0;
    0x0005615e str.w r3, [sl, 0x2c]                              |     __asm ("str.w r3, [sl, 0x2c]");
    0x00056162 mov r0, r2                                        |     r0 = r2;
    0x00056164 adds r3, r1, 1                                    |     r3 = r1 + 1;
    0x00056166 adds r7, r5, 2                                    |     r7 = r5 + 2;
    0x00056168 strd r0, r3, [sp, 0x6c]                           |     __asm ("strd r0, r3, [var_6ch]");
    0x0005616c subs r3, r0, 2                                    |     r3 = r0 - 2;
    0x0005616e str r7, [sp, 0x74]                                |     var_74h = r7;
    0x00056170 mov r2, r4                                        |     r2 = r4;
    0x00056172 str r3, [sp, 0x68]                                |     var_68h = r3;
    0x00056174 movs r1, 0x47                                     |     r1 = 0x47;
    0x00056176 str.w r3, [sl, 0x38]                              |     __asm ("str.w r3, [sl, 0x38]");
    0x0005617a mov r3, r7                                        |     r3 = r7;
    0x0005617c adds r7, r5, 5                                    |     r7 = r5 + 5;
    0x0005617e mov r0, r8                                        |     r0 = r8;
    0x00056180 str r7, [sp, 0x64]                                |     var_64h = r7;
    0x00056182 adds r7, r5, 1                                    |     r7 = r5 + 1;
    0x00056184 adds r5, 3                                        |     r5 += 3;
    0x00056186 str r7, [sp, 0x54]                                |     var_54h = r7;
    0x00056188 str r5, [sp, 0x48]                                |     var_48h = r5;
    0x0005618a str.w sb, [sp, 0x28]                              |     __asm ("str.w sb, [x]");
    0x0005618e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056192 ldr r7, [sp, 0x28]                                |     r7 = x;
    0x00056194 mov r2, r4                                        |     r2 = r4;
    0x00056196 ldr r5, [sp, 0x64]                                |     r5 = var_64h;
    0x00056198 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0005619a mov r0, r8                                        |     r0 = r8;
    0x0005619c ldr r3, [r7]                                      |     r3 = *(r7);
    0x0005619e add r3, r5                                        |     r3 += r5;
    0x000561a0 subs r3, 1                                        |     r3--;
    0x000561a2 str r3, [sp]                                      |     *(sp) = r3;
    0x000561a4 mov r3, r5                                        |     r3 = r5;
    0x000561a6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000561aa ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000561ac movs r1, 9                                        |     r1 = 9;
    0x000561ae ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x000561b0 mov r0, r8                                        |     r0 = r8;
    0x000561b2 str r4, [sp]                                      |     *(sp) = r4;
    0x000561b4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000561b8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000561ba ldrb.w r5, [sp, 0xb4]                             |     r5 = var_b4h;
    0x000561be ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x000561c0 str r3, [sp]                                      |     *(sp) = r3;
    0x000561c2 mov r3, r7                                        |     r3 = r7;
    0x000561c4 ldr r7, [sp, 0x4c]                                |     r7 = var_4ch;
    0x000561c6 cmp r5, 2                                         |     
    0x000561c8 ite eq                                            |     
                                                                 |     if (r5 != 2) {
    0x000561ca moveq r0, 0x80                                    |         r0 = 0x80;
                                                                 |     }
                                                                 |     if (r5 == 2) {
    0x000561cc movne r0, 0x40                                    |         r0 = 0x40;
                                                                 |     }
    0x000561ce ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x000561d0 str r4, [sp, 0xc]                                 |     var_ch = r4;
    0x000561d2 orr.w r0, r0, r7, lsl 9                           |     r0 |= (r7 << 9);
    0x000561d6 ldr r7, [sp, 0x60]                                |     r7 = var_60h;
    0x000561d8 str r4, [sp, 4]                                   |     var_4h = r4;
    0x000561da orrs r0, r7                                       |     r0 |= r7;
    0x000561dc str r0, [sp, 8]                                   |     var_8h = r0;
    0x000561de mov r0, sl                                        |     r0 = sl;
    0x000561e0 bl 0x61f10                                        |     fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x000561e4 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x000561e6 mov r7, r0                                        |     r7 = r0;
    0x000561e8 subs r3, r1, 1                                    |     r3 = r1 - 1;
    0x000561ea str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x000561ec cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000561ee beq.w 0x565d4                                     |         goto label_234;
                                                                 |     }
    0x000561f2 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x000561f4 ldrsb.w r2, [r0, 0x31]                            |     r2 = *((r0 + 0x31));
    0x000561f8 ldrb.w r8, [r0, 0x33]                             |     r8 = *((r0 + 0x33));
    0x000561fc ldr r3, [r3]                                      |     r3 = *(r3);
    0x000561fe cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00056200 beq.w 0x56ddc                                     |         goto label_235;
                                                                 |     }
    0x00056204 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00056206 beq.w 0x56dd4                                     |         goto label_236;
                                                                 |     }
    0x0005620a ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0005620e lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x00056210 bmi.w 0x56e6e                                     |         goto label_237;
                                                                 |     }
    0x00056214 ldr r3, [pc, 0x30c]                               |     
    0x00056216 add r3, pc                                        |     r3 = 0xac73e;
                                                                 | label_86:
    0x00056218 ldr r2, [pc, 0x30c]                               |     
    0x0005621a movs r1, 0                                        |     r1 = 0;
    0x0005621c mov r0, sl                                        |     r0 = sl;
    0x0005621e add r2, pc                                        |     r2 = 0xac74a;
    0x00056220 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00056224 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00056226 ldr r1, [r6, 0x20]                                |     r1 = *((r6 + 0x20));
    0x00056228 ldr r0, [r3]                                      |     r0 = *(r3);
    0x0005622a cmp r1, 0                                         |     
    0x0005622c str r0, [sp, 0x3c]                                |     var_3ch = r0;
                                                                 |     if (r1 <= 0) {
    0x0005622e ble.w 0x574a8                                     |         goto label_238;
                                                                 |     }
    0x00056232 ldr r3, [r6, 0x1c]                                |     r3 = *((r6 + 0x1c));
    0x00056234 movs r2, 0x14                                     |     r2 = 0x14;
    0x00056236 mov sb, r0                                        |     sb = r0;
    0x00056238 mla r1, r2, r1, r3                                |     __asm ("mla r1, r2, r1, r3");
                                                                 |     do {
    0x0005623c ldrsh.w r2, [r3, 0x12]                            |         r2 = *((r3 + 0x12));
    0x00056240 adds r3, 0x14                                     |         r3 += 0x14;
    0x00056242 cmp r2, sb                                        |         
    0x00056244 it ge                                             |         
                                                                 |         if (r2 < sb) {
    0x00056246 addge sb, sb, 1                                   |             sb++;
                                                                 |         }
    0x0005624a cmp r1, r3                                        |         
    0x0005624c bne 0x5623c                                       |         
                                                                 |     } while (r1 != r3);
                                                                 | label_114:
    0x0005624e movs r4, 0                                        |     r4 = 0;
    0x00056250 mov r1, sb                                        |     r1 = sb;
    0x00056252 mov r0, sl                                        |     r0 = sl;
    0x00056254 bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x00056258 ldr r1, [sp, 0x28]                                |     r1 = x;
    0x0005625a mov r2, r0                                        |     r2 = r0;
    0x0005625c str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0005625e mov r3, r4                                        |     r3 = r4;
    0x00056260 mov r0, sl                                        |     r0 = sl;
    0x00056262 str r4, [sp]                                      |     *(sp) = r4;
    0x00056264 bl 0x5e63c                                        |     fcn_0005e63c (r0, r1, r2, r3, r4);
    0x00056268 ldr r0, [r6, 0x20]                                |     r0 = *((r6 + 0x20));
    0x0005626a cmp r0, r4                                        |     
    0x0005626c ittt gt                                           |     
                                                                 |     if (r0 <= r4) {
    0x0005626e strgt r7, [sp, 0x84]                              |         var_84h = r7;
                                                                 |     }
                                                                 |     if (r0 <= r4) {
    0x00056270 movgt r5, r4                                      |         r5 = r4;
                                                                 |     }
                                                                 |     if (r0 <= r4) {
    0x00056272 ldrgt r7, [sp, 0x3c]                              |         r7 = var_3ch;
                                                                 |     }
                                                                 |     if (r0 > r4) {
    0x00056274 bgt 0x56282                                       |         goto label_239;
                                                                 |     }
    0x00056276 b 0x5671a                                         |     goto label_240;
                                                                 |     do {
                                                                 | label_38:
    0x00056278 adds r4, 1                                        |         r4++;
    0x0005627a adds r5, 0x14                                     |         r5 += 0x14;
    0x0005627c cmp r0, r4                                        |         
                                                                 |         if (r0 <= r4) {
    0x0005627e ble.w 0x56718                                     |             goto label_241;
                                                                 |         }
                                                                 | label_239:
    0x00056282 ldr r3, [r6, 0x1c]                                |         r3 = *((r6 + 0x1c));
    0x00056284 adds r2, r3, r5                                   |         r2 = r3 + r5;
    0x00056286 ldrsh.w r1, [r2, 0x12]                            |         r1 = *((r2 + 0x12));
    0x0005628a cmp r1, r7                                        |         
    0x0005628c blt 0x56278                                       |         
                                                                 |     } while (r1 < r7);
    0x0005628e ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00056290 ldr r1, [r3, r5]                                  |     r1 = *((r3 + r5));
    0x00056292 ldrsh.w r3, [r2, 0x10]                            |     r3 = *((r2 + 0x10));
    0x00056296 add r0, r7                                        |     r0 += r7;
    0x00056298 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0005629a str r0, [sp]                                      |     *(sp) = r0;
    0x0005629c adds r7, 1                                        |     r7++;
    0x0005629e ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000562a0 bl 0x5b0d4                                        |     fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x000562a4 ldr r0, [r6, 0x20]                                |     r0 = *((r6 + 0x20));
    0x000562a6 b 0x56278                                         |     goto label_38;
                                                                 | label_201:
    0x000562a8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000562aa ldr r1, [r2, 0x6c]                                |     r1 = *((r2 + 0x6c));
    0x000562ac ldr r2, [r2, 0x70]                                |     r2 = *((r2 + 0x70));
    0x000562ae str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x000562b0 cmp r1, r2                                        |     
                                                                 |     if (r1 >= r2) {
    0x000562b2 bge.w 0x56d24                                     |         goto label_242;
                                                                 |     }
    0x000562b6 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000562b8 ldr r0, [sp, 0x4c]                                |     r0 = var_4ch;
    0x000562ba vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000562be ldr.w ip, [r2, 0x68]                              |     ip = *((r2 + 0x68));
    0x000562c2 add.w r1, r0, r0, lsl 2                           |     r1 = r0 + (r0 << 2);
    0x000562c6 adds r0, 1                                        |     r0++;
    0x000562c8 str r0, [r2, 0x6c]                                |     *((r2 + 0x6c)) = r0;
    0x000562ca movs r0, 0xe                                      |     r0 = 0xe;
    0x000562cc add.w r2, ip, r1, lsl 2                           |     r2 = ip + (r1 << 2);
    0x000562d0 str.w r0, [ip, r1, lsl 2]                         |     __asm ("str.w r0, [ip, r1, lsl 2]");
    0x000562d4 adds r1, r2, 4                                    |     r1 = r2 + 4;
    0x000562d6 vst1.32 {d16}, [r1]                               |     __asm ("vst1.32 {d16}, [r1]");
    0x000562da strd r3, r3, [r2, 0xc]                            |     __asm ("strd r3, r3, [r2, 0xc]");
                                                                 | label_82:
    0x000562de ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x000562e0 movs r1, 0xc                                      |     r1 = 0xc;
    0x000562e2 ldr r2, [pc, 0x248]                               |     
    0x000562e4 mov r0, sl                                        |     r0 = sl;
    0x000562e6 strb.w r1, [sp, 0xdc]                             |     var_dch = r1;
    0x000562ea movs r1, 1                                        |     r1 = 1;
    0x000562ec str r3, [sp, 0xe0]                                |     var_e0h = r3;
    0x000562ee movs r3, 0                                        |     r3 = 0;
    0x000562f0 add r2, pc                                        |     r2 = 0xac822;
    0x000562f2 str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x000562f4 str r3, [sp, 0xf0]                                |     var_f0h = r3;
    0x000562f6 strd r3, r3, [sp, 0xe8]                           |     __asm ("strd r3, r3, [var_e8h]");
    0x000562fa mov r3, r4                                        |     r3 = r4;
    0x000562fc bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00056300 mov r2, r8                                        |     r2 = r8;
    0x00056302 mov r1, r7                                        |     r1 = r7;
    0x00056304 mov r0, sl                                        |     r0 = sl;
    0x00056306 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x0005630a ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0005630c ldrh r2, [r7, 2]                                  |     r2 = *((r7 + 2));
    0x0005630e strh r2, [r3, 0x26]                               |     *((r3 + 0x26)) = r2;
    0x00056310 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00056312 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056314 beq.w 0x55992                                     |         goto label_39;
                                                                 |     }
    0x00056318 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0005631a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0005631c ldr r1, [r3, 0x6c]                                |     r1 = *((r3 + 0x6c));
    0x0005631e itt lt                                            |     
                                                                 |     if (r3 >= 0) {
    0x00056320 addlt r3, r1, -1                                  |         r3 = r1 + -1;
                                                                 |     }
                                                                 |     if (r3 < 0) {
    0x00056324 str r3, [sp, 0x4c]                                |         var_4ch = r3;
                                                                 |     }
    0x00056326 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00056328 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005632c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005632e bne.w 0x565ca                                     |         goto label_243;
                                                                 |     }
    0x00056332 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00056334 ldr r2, [r2, 0x68]                                |     r2 = *((r2 + 0x68));
    0x00056336 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0005633a add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
                                                                 | label_57:
    0x0005633e str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
    0x00056340 b.w 0x55992                                       |     goto label_39;
                                                                 | label_189:
    0x00056344 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00056346 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00056348 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005634c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005634e bne.w 0x5663c                                     |         goto label_244;
                                                                 |     }
    0x00056352 ldr r3, [r2, 0x68]                                |     r3 = *((r2 + 0x68));
    0x00056354 add.w r4, r7, r7, lsl 2                           |     r4 = r7 + (r7 << 2);
    0x00056358 add.w r3, r3, r4, lsl 2                           |     r3 += (r4 << 2);
                                                                 | label_61:
    0x0005635c movs r2, 0x77                                     |     r2 = 0x77;
    0x0005635e strb r2, [r3]                                     |     *(r3) = r2;
    0x00056360 movs r3, 1                                        |     r3 = 1;
    0x00056362 strb.w r3, [sp, 0x11c]                            |     var_11ch = r3;
    0x00056366 b.w 0x55688                                       |     goto label_40;
                                                                 | label_147:
    0x0005636a movs r1, 0                                        |     r1 = 0;
    0x0005636c movs r0, 0xc                                      |     r0 = 0xc;
    0x0005636e bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x00056372 b.w 0x54ee0                                       |     goto label_41;
    0x00056374 pop {r0, r2, r4, r5, r7, pc}                      |     
                                                                 | label_188:
    0x00056376 ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x00056378 movs r2, 0                                        |     r2 = 0;
    0x0005637a movs r1, 0x76                                     |     r1 = 0x76;
    0x0005637c ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0005637e ldr r3, [r4]                                      |     r3 = *(r4);
    0x00056380 str r2, [sp]                                      |     *(sp) = r2;
    0x00056382 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00056384 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00056386 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00056388 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005638c ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00056390 lsls r2, r3, 0x14                                 |     r2 = r3 << 0x14;
    0x00056392 mov r1, r3                                        |     r1 = r3;
                                                                 |     if (r2 >= r3) {
    0x00056394 bpl.w 0x55658                                     |         goto label_42;
                                                                 |     }
    0x00056398 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0005639a subs r6, r2, 1                                    |     r6 = r2 - 1;
    0x0005639c cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x0005639e ble 0x563e8                                       |         goto label_245;
                                                                 |     }
    0x000563a0 mov r3, r4                                        |     r3 = r4;
    0x000563a2 ldr.w r8, [sp, 0x20]                              |     r8 = var_20h;
    0x000563a6 add.w r4, r4, r2, lsl 4                           |     r4 += (r2 << 4);
    0x000563aa mov sb, r3                                        |     sb = r3;
    0x000563ac b 0x563da                                         |     
                                                                 |     while (r3 >= r3) {
    0x000563ae ldr r1, [r4, -0x8]                                |         r1 = *((r4 - 0x8));
                                                                 |         if (r1 != 0) {
    0x000563b2 cbz r1, 0x563ba                                   |             
    0x000563b4 mov r0, r8                                        |             r0 = r8;
    0x000563b6 bl 0x16c0c                                        |             fcn_00016c0c (r0, r1);
                                                                 |         }
    0x000563ba ldr r1, [r4, -0x4]                                |         r1 = *((r4 - 0x4));
                                                                 |         if (r1 != 0) {
    0x000563be cbz r1, 0x563c6                                   |             
    0x000563c0 mov r0, r8                                        |             r0 = r8;
    0x000563c2 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x000563c6 ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x000563ca subs r6, 1                                        |         r6--;
    0x000563cc sub.w r4, r4, 0x10                                |         r4 -= 0x10;
    0x000563d0 add.w r2, r2, -1                                  |         r2 += -1;
    0x000563d4 str.w r2, [sb]                                    |         __asm ("str.w r2, [sb]");
                                                                 |         if (r6 == 1) {
    0x000563d8 beq 0x563e4                                       |             goto label_246;
                                                                 |         }
    0x000563da add.w r3, sb, r6, lsl 4                           |         r3 = sb + (r6 << 4);
    0x000563de ldrb r3, [r3, 0x11]                               |         r3 = *((r3 + 0x11));
    0x000563e0 lsls r3, r3, 0x19                                 |         r3 <<= 0x19;
    0x000563e2 bpl 0x563ae                                       |         
                                                                 |     }
                                                                 | label_246:
    0x000563e4 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
                                                                 | label_245:
    0x000563e8 cmp r2, 0                                         |     
    0x000563ea mov r1, r3                                        |     r1 = r3;
                                                                 |     if (r2 <= 0) {
    0x000563ec ble.w 0x55658                                     |         goto label_42;
                                                                 |     }
    0x000563f0 ldr.w ip, [sp, 0x2c]                              |     ip = var_2ch;
    0x000563f4 movs r3, 0                                        |     r3 = 0;
    0x000563f6 movs r4, 0x79                                     |     r4 = 0x79;
    0x000563f8 mov r0, ip                                        |     r0 = ip;
                                                                 |     do {
    0x000563fa adds r3, 1                                        |         r3++;
    0x000563fc adds r0, 0x10                                     |         r0 += 0x10;
    0x000563fe add.w r6, ip, r3, lsl 4                           |         r6 = ip + (r3 << 4);
    0x00056400 asrs r3, r0, 0x18                                 |         r3 = r0 >> 0x18;
    0x00056402 ldrb r6, [r6, 1]                                  |         r6 = *((r6 + 1));
    0x00056404 lsls r6, r6, 0x19                                 |         r6 <<= 0x19;
    0x00056406 itt pl                                            |         
                                                                 |         if (r6 < r6) {
    0x00056408 ldrpl r6, [r0, -0x8]                              |             r6 = *((r0 - 0x8));
                                                                 |         }
                                                                 |         if (r6 >= r6) {
    0x0005640c strb r4, [r6]                                     |             *(r6) = r4;
                                                                 |         }
    0x0005640e cmp r3, r2                                        |         
    0x00056410 bne 0x563fa                                       |         
                                                                 |     } while (r3 != r2);
    0x00056412 b.w 0x55658                                       |     goto label_42;
                                                                 | label_187:
    0x00056416 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00056418 mov.w r2, -1                                      |     r2 = -1;
    0x0005641c mov r0, r5                                        |     r0 = r5;
    0x0005641e bl 0x35844                                        |     r0 = fcn_00035844 (r0, r1, r2);
    0x00056422 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00056424 bne.w 0x5560a                                     |         goto label_43;
                                                                 |     }
    0x00056428 ldr.w r2, [fp, 0x44]                              |     r2 = *(arg_44h);
    0x0005642c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005642e bne.w 0x5560a                                     |         goto label_43;
                                                                 |     }
    0x00056432 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00056436 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00056438 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0005643a bic r3, r3, 1                                     |     r3 = BIT_MASK (r3, 1);
    0x0005643e str.w r3, [fp, 4]                                 |     __asm ("str.w r3, [arg_4h]");
    0x00056442 bl 0x2dffc                                        |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x00056446 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0005644a str r0, [sp, 0x28]                                |     x = r0;
    0x0005644c str.w r0, [fp, 0x28]                              |     __asm ("str.w r0, [arg_28h]");
    0x00056450 orr r3, r3, 8                                     |     r3 |= 8;
    0x00056454 str.w r3, [fp, 4]                                 |     __asm ("str.w r3, [arg_4h]");
    0x00056458 movs r3, 2                                        |     r3 = 2;
    0x0005645a strb.w r3, [sp, 0xb4]                             |     var_b4h = r3;
    0x0005645e b.w 0x5560a                                       |     goto label_43;
                                                                 | label_163:
    0x00056462 movs r0, 0x40                                     |     r0 = 0x40;
    0x00056464 movs r1, 0                                        |     r1 = 0;
    0x00056466 bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x0005646a str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0005646c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005646e bne.w 0x551b4                                     |         goto label_44;
                                                                 |     }
    0x00056472 b.w 0x550e4                                       |     goto label_19;
                                                                 | label_162:
    0x00056476 ldr.w r3, [sl, 0x74]                              |     r3 = *((sl + 0x74));
    0x0005647a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005647c beq.w 0x56a76                                     |         goto label_247;
                                                                 |     }
                                                                 | label_72:
    0x00056480 mov r0, sl                                        |     r0 = sl;
    0x00056482 bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x00056486 ldr.w r4, [fp, 0x44]                              |     r4 = *(arg_44h);
    0x0005648a ldr.w r8, [fp, 4]                                 |     r8 = *(arg_4h);
    0x0005648e str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00056490 b.w 0x5517e                                       |     goto label_45;
                                                                 | label_211:
    0x00056494 ldr r3, [pc, 0x98]                                |     
    0x00056496 add r3, pc                                        |     r3 = 0xac9ca;
    0x00056498 b.w 0x55b9c                                       |     goto label_46;
                                                                 |     if (r4 != 0) {
                                                                 | label_228:
    0x0005649c cbz r4, 0x564a8                                   |         
    0x0005649e ldr r0, [sp, 0x28]                                |         r0 = x;
    0x000564a0 mov r1, r4                                        |         r1 = r4;
    0x000564a2 movs r2, 1                                        |         r2 = 1;
    0x000564a4 bl 0x16b48                                        |         fcn_00016b48 (r0, r1, r2);
                                                                 |     }
    0x000564a8 movs r4, 0                                        |     r4 = 0;
    0x000564aa b 0x56086                                         |     goto label_47;
                                                                 | label_213:
    0x000564ac ldr r3, [sp, 0x28]                                |     r3 = x;
    0x000564ae strh.w r3, [fp, 2]                                |     *(arg_2h) = r3;
    0x000564b2 b.w 0x55c58                                       |     goto label_48;
                                                                 | label_230:
    0x000564b6 movs r1, 0                                        |     r1 = 0;
    0x000564b8 movs r0, 0xc                                      |     r0 = 0xc;
    0x000564ba bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x000564be b 0x560a4                                         |     goto label_49;
                                                                 | label_212:
    0x000564c0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000564c2 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000564c4 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x000564c6 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000564ca b.w 0x55bd8                                       |     goto label_50;
                                                                 | label_200:
    0x00056534 movs r3, 0                                        |     r3 = 0;
    0x00056536 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00056538 mov r2, r3                                        |     r2 = r3;
    0x0005653a str r3, [sp]                                      |     *(sp) = r3;
    0x0005653c movs r1, 8                                        |     r1 = 8;
    0x0005653e bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00056542 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00056544 mov sb, r0                                        |     sb = r0;
    0x00056546 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00056548 b.w 0x55940                                       |     goto label_51;
                                                                 | label_206:
    0x0005654c ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x0005654e mov r0, sl                                        |     r0 = sl;
    0x00056550 mov.w r2, -1                                      |     r2 = -1;
    0x00056554 mov r1, fp                                        |     r1 = fp;
    0x00056556 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00056558 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x0005655a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0005655c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005655e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00056560 add r3, sp, 0xb4                                  |     r3 += var_b4h;
    0x00056562 str r3, [sp]                                      |     *(sp) = r3;
    0x00056564 add r3, sp, 0xfc                                  |     r3 += var_fch;
    0x00056566 bl 0x5fbc0                                        |     fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x0005656a mov r0, r4                                        |     r0 = r4;
    0x0005656c bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00056570 b.w 0x55b80                                       |     goto label_52;
                                                                 | label_195:
    0x00056574 movs r3, 2                                        |     r3 = 2;
    0x00056576 str r0, [sp]                                      |     *(sp) = r0;
    0x00056578 movs r1, 0x76                                     |     r1 = 0x76;
    0x0005657a mov r0, r5                                        |     r0 = r5;
    0x0005657c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056580 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00056582 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00056586 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056588 beq.w 0x55828                                     |         goto label_53;
                                                                 |     }
    0x0005658c b.w 0x5583c                                       |     goto label_54;
                                                                 | label_225:
    0x00056590 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00056592 mov sl, r7                                        |     sl = r7;
    0x00056594 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00056596 b.w 0x55442                                       |     goto label_30;
                                                                 | label_192:
    0x0005659a ldr.w r3, [sl, 0x74]                              |     r3 = *((sl + 0x74));
    0x0005659e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000565a0 beq.w 0x56d58                                     |         goto label_248;
                                                                 |     }
                                                                 | label_84:
    0x000565a4 mov r0, sl                                        |     r0 = sl;
    0x000565a6 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x000565aa mov r7, r0                                        |     r7 = r0;
    0x000565ac b.w 0x556de                                       |     goto label_55;
                                                                 | label_218:
    0x000565b0 movs r1, 0                                        |     r1 = 0;
    0x000565b2 movs r0, 0xc                                      |     r0 = 0xc;
    0x000565b4 bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x000565b8 b.w 0x55c9a                                       |     goto label_56;
                                                                 | label_70:
    0x000565bc ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000565be rsbs r2, r3, 0                                    |     r2 = r3 - ;
                                                                 | label_209:
    0x000565c0 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000565c2 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000565c6 b.w 0x55b80                                       |     goto label_52;
                                                                 | label_243:
    0x000565ca ldr.w r3, [pc, 0xb08]                             |     r3 = *(0x000570d4);
    0x000565ce add r3, pc                                        |     r3 += pc;
    0x000565d0 adds r3, 4                                        |     r3 += 4;
    0x000565d2 b 0x5633e                                         |     goto label_57;
                                                                 | label_234:
    0x000565d4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
                                                                 |     if (r3 != 0) {
    0x000565d6 cbz r3, 0x565e0                                   |         
    0x000565d8 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x000565da mov r1, r3                                        |         r1 = r3;
    0x000565dc bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 |     }
                                                                 | label_77:
    0x000565e0 movs r4, 1                                        |     r4 = 1;
    0x000565e2 b.w 0x55be4                                       |     goto label_58;
                                                                 | label_165:
    0x000565e6 str r2, [sp, 0xe4]                                |     var_e4h = r2;
    0x000565e8 ldr.w r5, [fp, 0x30]                              |     r5 = *(arg_30h);
    0x000565ec ldr.w r2, [pc, 0xae8]                             |     r2 = *(0x000570d8);
    0x000565f0 add r2, pc                                        |     r2 += pc;
    0x000565f2 str r2, [sp, 0xe0]                                |     var_e0h = r2;
    0x000565f4 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000565f6 beq.w 0x551f4                                     |         goto label_59;
                                                                 |     }
    0x000565fa ldr r6, [r5]                                      |     r6 = *(r5);
    0x000565fc cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x000565fe ble.w 0x551f4                                     |         goto label_59;
                                                                 |     }
    0x00056602 ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x00056604 adds r5, 0x18                                     |     r5 += 0x18;
                                                                 |     do {
    0x00056606 ldr r1, [r5, -0x10]                               |         r1 = *((r5 - 0x10));
                                                                 |         if (r1 != 0) {
    0x0005660a cbz r1, 0x56614                                   |             
    0x0005660c mov r0, r7                                        |             r0 = r7;
    0x0005660e bl 0x2cd88                                        |             r0 = fcn_0002cd88 (r0, r1);
                                                                 |             if (r0 != 0) {
    0x00056612 cbnz r0, 0x5661c                                  |                 goto label_249;
                                                                 |             }
                                                                 |         }
    0x00056614 subs r6, 1                                        |         r6--;
    0x00056616 add.w r5, r5, 0x10                                |         r5 += 0x10;
    0x0005661a bne 0x56606                                       |         
                                                                 |     } while (r6 != 1);
                                                                 | label_249:
    0x0005661c ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00056620 b.w 0x551f4                                       |     goto label_59;
                                                                 | label_210:
    0x00056624 ldr.w r3, [pc, 0xab4]                             |     
    0x00056628 movs r1, 0                                        |     r1 = 0;
    0x0005662a ldr.w r2, [pc, 0xab4]                             |     r2 = *(0x000570e0);
    0x0005662e mov r0, sl                                        |     r0 = sl;
    0x00056630 add r3, pc                                        |     r3 = 0xad710;
    0x00056632 add r2, pc                                        |     r2 += pc;
    0x00056634 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00056638 b.w 0x55b8a                                       |     goto label_60;
                                                                 | label_244:
    0x0005663c ldr.w r3, [pc, 0xaa4]                             |     
    0x00056640 add r3, pc                                        |     r3 = 0xad728;
    0x00056642 adds r3, 4                                        |     r3 += 4;
    0x00056644 b 0x5635c                                         |     goto label_61;
                                                                 | label_196:
    0x00056646 ldr.w r3, [r3, 0x210]                             |     r3 = *((r3 + 0x210));
    0x0005664a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005664c bne.w 0x5583c                                     |         goto label_54;
                                                                 |     }
    0x00056650 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00056652 subs r3, 1                                        |     r3--;
    0x00056654 str r3, [r7]                                      |     *(r7) = r3;
    0x00056656 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00056658 bne.w 0x5583c                                     |         goto label_54;
                                                                 |     }
    0x0005665c ldr r0, [r7, 0xc]                                 |     r0 = *((r7 + 0xc));
    0x0005665e mov r1, r7                                        |     r1 = r7;
    0x00056660 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00056664 b.w 0x5583c                                       |     goto label_54;
                                                                 | label_216:
    0x00056668 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0005666a ble 0x56684                                       |         goto label_250;
                                                                 |     }
    0x0005666c ldr r4, [sp, 0x28]                                |     r4 = x;
    0x0005666e movs r1, 0                                        |     r1 = 0;
    0x00056670 movs r3, 0x10                                     |     r3 = 0x10;
                                                                 |     do {
    0x00056672 ldrb r2, [r5, r3]                                 |         r2 = *((r5 + r3));
    0x00056674 adds r1, 1                                        |         r1++;
    0x00056676 cmp r0, r1                                        |         
    0x00056678 and r2, r2, 1                                     |         r2 &= 1;
    0x0005667c strb r2, [r4, r3]                                 |         *((r4 + r3)) = r2;
    0x0005667e add.w r3, r3, 0x10                                |         r3 += 0x10;
    0x00056682 bne 0x56672                                       |         
                                                                 |     } while (r0 != r1);
                                                                 | label_250:
    0x00056684 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00056686 mov.w r2, -1                                      |     r2 = -1;
    0x00056688 adds r2, 0xff                                     |     r2 += 0xff;
    0x0005668a mov r1, r5                                        |     r1 = r5;
    0x0005668c bl 0x35844                                        |     r0 = fcn_00035844 (r0, r1, r2);
    0x00056690 clz r3, r0                                        |     r3 &= r0;
    0x00056694 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00056696 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00056698 b.w 0x55c5c                                       |     goto label_62;
                                                                 | label_229:
    0x0005669c movs r4, 7                                        |     r4 = 7;
    0x0005669e b 0x56086                                         |     goto label_47;
                                                                 | label_208:
    0x000566a0 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000566a2 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000566a6 b.w 0x55b58                                       |     goto label_63;
                                                                 | label_207:
    0x000566aa ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000566ac rsbs r2, r4, 0                                    |     r2 = r4 - ;
    0x000566ae bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000566b2 b.w 0x55b20                                       |     goto label_64;
                                                                 | label_148:
    0x000566b6 mov r1, r6                                        |     r1 = r6;
    0x000566b8 mov r0, r3                                        |     r0 = r3;
    0x000566ba bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
    0x000566be b.w 0x54efe                                       |     goto label_65;
                                                                 | label_221:
    0x000566c2 ldr.w r2, [fp, 0x2c]                              |     r2 = *(arg_2ch);
    0x000566c6 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x000566c8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000566ca beq.w 0x56dee                                     |         goto label_251;
                                                                 |     }
    0x000566ce ldr r0, [r6, 0x2c]                                |     r0 = *((r6 + 0x2c));
    0x000566d0 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x000566d2 b.w 0x55d76                                       |     goto label_66;
                                                                 | label_220:
    0x000566d6 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x000566d8 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x000566da ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x000566dc str r3, [r6, 0xc]                                 |     *((r6 + 0xc)) = r3;
    0x000566de str r3, [r6, 0x18]                                |     *((r6 + 0x18)) = r3;
    0x000566e0 mov r0, r4                                        |     r0 = r4;
    0x000566e2 bl 0x2d3b8                                        |     fcn_0002d3b8 (r0, r1);
    0x000566e6 mov r1, r5                                        |     r1 = r5;
    0x000566e8 mov r0, r4                                        |     r0 = r4;
    0x000566ea bl 0x2d3b8                                        |     fcn_0002d3b8 (r0, r1);
    0x000566ee ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000566f0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000566f2 beq.w 0x55d62                                     |         goto label_67;
                                                                 |     }
    0x000566f6 add r3, sp, 0xc0                                  |     r3 += var_c0h;
    0x000566f8 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x000566fa b.w 0x55d38                                       |     goto label_68;
                                                                 | label_164:
    0x000566fe ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00056700 ldr.w r3, [r3, 0x108]                             |     r3 = *((r3 + 0x108));
    0x00056704 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056706 beq.w 0x550e4                                     |         goto label_19;
                                                                 |     }
    0x0005670a ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x0005670c movs r1, 7                                        |     r1 = 7;
    0x0005670e str r1, [r3, 0xc]                                 |     *((r3 + 0xc)) = r1;
    0x00056710 adds r2, 1                                        |     r2++;
    0x00056712 str r2, [r3, 0x24]                                |     *((r3 + 0x24)) = r2;
    0x00056714 b.w 0x550e4                                       |     goto label_19;
                                                                 | label_241:
    0x00056718 ldr r7, [sp, 0x84]                                |     r7 = var_84h;
                                                                 | label_240:
    0x0005671a ldrb.w r3, [sl, 0x13]                             |     r3 = *((sl + 0x13));
    0x0005671e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056720 beq.w 0x56ed2                                     |         goto label_252;
                                                                 |     }
    0x00056724 subs r3, 1                                        |     r3--;
    0x00056726 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00056728 strb.w r3, [sl, 0x13]                             |     *((sl + 0x13)) = r3;
    0x0005672c adds r3, 0x26                                     |     r3 += 0x26;
    0x0005672e ldr.w r4, [sl, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r4 = *((sl + offset_1));
                                                                 | label_96:
    0x00056732 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00056734 mov r3, sb                                        |     r3 = sb;
    0x00056736 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00056738 movs r1, 0x61                                     |     r1 = 0x61;
    0x0005673a str r4, [sp]                                      |     *(sp) = r4;
    0x0005673c mov r0, r5                                        |     r0 = r5;
    0x0005673e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056742 movs r3, 0                                        |     r3 = 0;
    0x00056744 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00056746 movs r1, 0x8b                                     |     r1 = 0x8b;
    0x00056748 str r3, [sp]                                      |     *(sp) = r3;
    0x0005674a mov r0, r5                                        |     r0 = r5;
    0x0005674c mov r3, r4                                        |     r3 = r4;
    0x0005674e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     if (r4 != 0) {
    0x00056752 cbz r4, 0x5675c                                   |         
    0x00056754 mov r1, r4                                        |         r1 = r4;
    0x00056756 mov r0, sl                                        |         r0 = sl;
    0x00056758 bl 0xf624                                         |         fcn_0000f624 (r0, r1);
                                                                 |     }
    0x0005675c cmp.w sb, 1                                       |     
                                                                 |     if (sb == 1) {
    0x00056760 beq.w 0x56f06                                     |         goto label_253;
                                                                 |     }
    0x00056764 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00056768 cmp r3, sb                                        |     
    0x0005676a itt lt                                            |     
                                                                 |     if (r3 >= sb) {
    0x0005676c ldrlt r3, [sp, 0x18]                              |         r3 = var_18h;
                                                                 |     }
                                                                 |     if (r3 < sb) {
    0x0005676e strdlt sb, r3, [sl, 0x1c]                         |         __asm ("strdlt sb, r3, [sl, 0x1c]");
                                                                 |     }
                                                                 | label_99:
    0x00056772 mov r0, r7                                        |     r0 = r7;
    0x00056774 bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00056778 ldr.w r5, [sl, 0x28]                              |     r5 = *((sl + 0x28));
    0x0005677c adds r3, r5, 1                                    |     r3 = r5 + 1;
    0x0005677e str.w r3, [sl, 0x28]                              |     __asm ("str.w r3, [sl, 0x28]");
    0x00056782 str r5, [r6, 8]                                   |     *((r6 + 8)) = r5;
    0x00056784 ldrb.w r3, [sl, 0x13]                             |     r3 = *((sl + 0x13));
    0x00056788 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005678a beq.w 0x56e76                                     |         goto label_254;
                                                                 |     }
    0x0005678e subs r3, 1                                        |     r3--;
    0x00056790 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00056792 strb.w r3, [sl, 0x13]                             |     *((sl + 0x13)) = r3;
    0x00056796 adds r3, 0x26                                     |     r3 += 0x26;
    0x00056798 ldr.w r4, [sl, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r4 = *((sl + offset_2));
                                                                 | label_91:
    0x0005679c str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000567a0 mov r3, r4                                        |     r3 = r4;
    0x000567a2 ldr.w sb, [sp, 0x24]                              |     sb = var_24h;
    0x000567a6 mov r2, r5                                        |     r2 = r5;
    0x000567a8 movs r1, 0x79                                     |     r1 = 0x79;
    0x000567aa mov r0, sb                                        |     r0 = sb;
    0x000567ac bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000567b0 movs r3, 0                                        |     r3 = 0;
    0x000567b2 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x000567b4 movs r1, 0x21                                     |     r1 = 0x21;
    0x000567b6 str r3, [sp]                                      |     *(sp) = r3;
    0x000567b8 mov r0, sb                                        |     r0 = sb;
    0x000567ba ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000567bc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000567c0 movs r3, 1                                        |     r3 = 1;
    0x000567c2 strb r3, [r6, 1]                                  |     *((r6 + 1)) = r3;
    0x000567c4 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
                                                                 |     if (r3 != 0) {
    0x000567c6 cbz r3, 0x567e2                                   |         
    0x000567c8 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x000567ca ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x000567cc ands r3, r3, 4                                    |         r3 &= 4;
                                                                 |         if (r3 != r3) {
    0x000567d0 bne.w 0x56ede                                     |             goto label_255;
                                                                 |         }
    0x000567d4 ldr.w sb, [sp, 0x24]                              |         sb = var_24h;
    0x000567d8 ldr r1, [sp, 0x110]                               |         r1 = var_110h;
    0x000567da str r3, [sp, 0xfc]                                |         var_fch = r3;
    0x000567dc mov r0, sb                                        |         r0 = sb;
    0x000567de bl 0x189e0                                        |         fcn_000189e0 (r0, r1);
                                                                 |     }
    0x000567e2 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x000567e6 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 | label_97:
    0x000567e8 mov r3, r4                                        |     r3 = r4;
    0x000567ea str r5, [sp]                                      |     *(sp) = r5;
    0x000567ec ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000567ee movs r1, 0x85                                     |     r1 = 0x85;
    0x000567f0 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x000567f2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000567f6 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x000567f8 movs r2, 1                                        |     r2 = 1;
    0x000567fa str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x000567fc ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 | label_87:
    0x000567fe cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00056800 ble 0x56862                                       |         goto label_256;
                                                                 |     }
    0x00056802 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00056804 mov.w sb, 1                                       |     sb = 1;
    0x00056808 strd r8, fp, [sp, 0x88]                           |     __asm ("strd r8, fp, [var_0hx88]");
    0x0005680c str r5, [sp, 0x3c]                                |     var_3ch = r5;
    0x0005680e str r7, [sp, 0x84]                                |     var_84h = r7;
    0x00056810 mov r4, r3                                        |     r4 = r3;
    0x00056812 ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00056814 mov r7, r3                                        |     r7 = r3;
    0x00056816 ldr.w fp, [sp, 0x30]                              |     fp = var_30h;
    0x0005681a ldr.w r8, [sp, 0x70]                              |     r8 = var_70h;
    0x0005681e b 0x5683a                                         |     
                                                                 |     while (r5 != 0) {
    0x00056820 str r2, [sp]                                      |         *(sp) = r2;
    0x00056822 mov r3, fp                                        |         r3 = fp;
    0x00056824 ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x00056826 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x00056828 ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x0005682a bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_69:
    0x0005682e ldr r2, [r7]                                      |         r2 = *(r7);
    0x00056830 add.w fp, fp, 1                                   |         
    0x00056834 adds r4, 0x10                                     |         r4 += 0x10;
    0x00056836 cmp r2, fp                                        |         
                                                                 |         if (r2 <= fp) {
    0x00056838 ble 0x56858                                       |             goto label_257;
                                                                 |         }
    0x0005683a add.w r2, r8, fp                                  |         r2 = r8 + fp;
    0x0005683e cmp r5, 0                                         |         
    0x00056840 bne 0x56820                                       |         
                                                                 |     }
    0x00056842 strb.w sb, [r6]                                   |     *(r6) = sb;
    0x00056846 ldr.w r1, [sl, 8]                                 |     r1 = *((sl + 8));
    0x0005684a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005684c beq 0x5682e                                       |         goto label_69;
                                                                 |     }
    0x0005684e ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00056850 mov r0, sl                                        |     r0 = sl;
    0x00056852 bl 0x5aa10                                        |     fcn_0005aa10 (r0, r1, r2);
    0x00056856 b 0x5682e                                         |     goto label_69;
                                                                 | label_257:
    0x00056858 ldrd r7, r8, [sp, 0x84]                           |     __asm ("ldrd r7, r8, [var_84h]");
    0x0005685c mov r3, r2                                        |     r3 = r2;
    0x0005685e ldr.w fp, [sp, 0x8c]                              |     fp = var_8ch;
                                                                 | label_256:
    0x00056862 ldr r1, [sp, 0x78]                                |     r1 = var_78h;
                                                                 |     if (r1 != 0) {
    0x00056864 cbz r1, 0x5686c                                   |         
    0x00056866 ldr r2, [r1]                                      |         r2 = *(r1);
    0x00056868 adds r2, 1                                        |         r2++;
    0x0005686a str r2, [r1]                                      |         *(r1) = r2;
                                                                 |     }
    0x0005686c ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x0005686e movs r1, 0x5a                                     |     r1 = 0x5a;
    0x00056870 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00056872 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x00056876 mvn r3, 7                                         |     r3 = ~7;
    0x0005687a ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x0005687c mov r0, r4                                        |     r0 = r4;
    0x0005687e str r3, [sp, 8]                                   |     var_8h = r3;
    0x00056880 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00056882 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00056886 mov r0, r4                                        |     r0 = r4;
    0x00056888 ldr r4, [r4, 0x6c]                                |     r4 = *((r4 + 0x6c));
    0x0005688a movs r3, 0                                        |     r3 = 0;
    0x0005688c movs r1, 0xd                                      |     r1 = 0xd;
    0x0005688e mov r5, r3                                        |     r5 = r3;
    0x00056890 mov sb, r0                                        |     sb = r0;
    0x00056892 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00056894 str r2, [sp]                                      |     *(sp) = r2;
    0x00056896 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056898 ldrsb sb, [r5], -0xa                              |     sb = *(r5);
                                                                 |     r5 += -0xa;
    0x0005689c ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x0005689e ldr r3, [r1]                                      |     r3 = *(r1);
    0x000568a0 movs r1, 0x4f                                     |     r1 = 0x4f;
    0x000568a2 str r3, [sp]                                      |     *(sp) = r3;
    0x000568a4 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x000568a6 ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x000568aa bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000568ae ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x000568b0 movs r1, 9                                        |     r1 = 9;
    0x000568b2 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000568b4 mov r0, sb                                        |     r0 = sb;
    0x000568b6 str r5, [sp]                                      |     *(sp) = r5;
    0x000568b8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000568bc ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000568be movs r1, 0x31                                     |     r1 = 0x31;
    0x000568c0 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x000568c2 mov r0, sb                                        |     r0 = sb;
    0x000568c4 str r5, [sp]                                      |     *(sp) = r5;
    0x000568c6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000568ca ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000568cc movs r1, 9                                        |     r1 = 9;
    0x000568ce ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x000568d0 mov r0, sb                                        |     r0 = sb;
    0x000568d2 str r5, [sp]                                      |     *(sp) = r5;
    0x000568d4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000568d8 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000568da cmp r4, r5                                        |     
    0x000568dc ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
    0x000568e0 ldr r3, [r1]                                      |     r3 = *(r1);
    0x000568e2 it lt                                             |     
                                                                 |     if (r4 >= r5) {
    0x000568e4 addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x000568e8 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x000568ec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000568ee bne.w 0x56d1c                                     |         goto label_258;
                                                                 |     }
    0x000568f2 ldr r3, [r1, 0x68]                                |     r3 = *((r1 + 0x68));
    0x000568f4 movs r1, 0x14                                     |     r1 = 0x14;
    0x000568f6 mla r3, r1, r4, r3                                |     __asm ("mla r3, r1, r4, r3");
                                                                 | label_81:
    0x000568fa ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x000568fc str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x000568fe mov r0, sl                                        |     r0 = sl;
    0x00056900 mov r3, r8                                        |     r3 = r8;
    0x00056902 mov r2, r6                                        |     r2 = r6;
    0x00056904 mov r1, r5                                        |     r1 = r5;
    0x00056906 movs r4, 0                                        |     r4 = 0;
    0x00056908 bl 0x60c28                                        |     fcn_00060c28 (r0, r1, r2, r3);
    0x0005690c mov r3, r5                                        |     r3 = r5;
    0x0005690e ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00056910 movs r2, 1                                        |     r2 = 1;
    0x00056912 movs r1, 0x47                                     |     r1 = 0x47;
    0x00056914 str r4, [sp]                                      |     *(sp) = r4;
    0x00056916 mov r0, r5                                        |     r0 = r5;
    0x00056918 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005691c ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0005691e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056920 beq.w 0x56d0c                                     |         goto label_259;
                                                                 |     }
    0x00056924 str r4, [sp]                                      |     *(sp) = r4;
    0x00056926 movs r1, 0x24                                     |     r1 = 0x24;
    0x00056928 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005692a mov r0, r5                                        |     r0 = r5;
    0x0005692c ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0005692e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_80:
    0x00056932 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
                                                                 |     if (r3 != 0) {
    0x00056934 cbz r3, 0x5693e                                   |         
    0x00056936 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00056938 mov r1, r3                                        |         r1 = r3;
    0x0005693a bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 |     }
    0x0005693e ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00056940 movs r4, 0                                        |     r4 = 0;
    0x00056942 ldr.w sb, [sp, 0x48]                              |     sb = var_48h;
    0x00056946 movs r1, 9                                        |     r1 = 9;
    0x00056948 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x0005694a mov r0, r5                                        |     r0 = r5;
    0x0005694c str r4, [sp]                                      |     *(sp) = r4;
    0x0005694e mov r2, sb                                        |     r2 = sb;
    0x00056950 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056954 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x00056956 mov r0, r5                                        |     r0 = r5;
    0x00056958 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x0005695c ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0005695e movs r2, 1                                        |     r2 = 1;
    0x00056960 ldr r7, [r5, 0x6c]                                |     r7 = *((r5 + 0x6c));
    0x00056962 movs r1, 0x47                                     |     r1 = 0x47;
    0x00056964 mov r0, r5                                        |     r0 = r5;
    0x00056966 str r4, [sp]                                      |     *(sp) = r4;
    0x00056968 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005696c mov r3, r4                                        |     r3 = r4;
    0x0005696e mov r2, sb                                        |     r2 = sb;
    0x00056970 movs r1, 0x43                                     |     r1 = 0x43;
    0x00056972 mov r0, r5                                        |     r0 = r5;
    0x00056974 str r4, [sp]                                      |     *(sp) = r4;
    0x00056976 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005697a ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x0005697c ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00056980 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00056982 bmi.w 0x56e62                                     |         goto label_260;
                                                                 |     }
    0x00056986 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00056988 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0005698a ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x0005698c ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x0005698e lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00056990 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00056992 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_90:
    0x00056994 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00056996 movs r5, 0                                        |     r5 = 0;
    0x00056998 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x0005699a movs r1, 0x31                                     |     r1 = 0x31;
    0x0005699c ldr r4, [r3, 0x6c]                                |     r4 = *((r3 + 0x6c));
    0x0005699e mov sb, r3                                        |     sb = r3;
    0x000569a0 mov r0, r3                                        |     r0 = r3;
    0x000569a2 str r5, [sp]                                      |     *(sp) = r5;
    0x000569a4 adds r3, r4, 2                                    |     r3 = r4 + 2;
    0x000569a6 adds r4, 1                                        |     r4++;
    0x000569a8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000569ac ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000569ae mov r3, r5                                        |     r3 = r5;
    0x000569b0 movs r1, 0x43                                     |     r1 = 0x43;
    0x000569b2 mov r0, sb                                        |     r0 = sb;
    0x000569b4 str r5, [sp]                                      |     *(sp) = r5;
    0x000569b6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000569ba ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x000569be mov r1, r6                                        |     r1 = r6;
    0x000569c0 bl 0x29da4                                        |     fcn_00029da4 (r0, r1, r2);
    0x000569c4 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x000569c6 movs r3, 0x10                                     |     r3 = 0x10;
    0x000569c8 mov r2, r4                                        |     r2 = r4;
    0x000569ca mov r0, sl                                        |     r0 = sl;
    0x000569cc bl 0x59230                                        |     fcn_00059230 (r0, r1, r2, r3);
    0x000569d0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000569d2 add r3, sp, 0xb4                                  |     r3 += var_b4h;
    0x000569d4 mov.w r2, -1                                      |     r2 = -1;
    0x000569d8 mov r0, sl                                        |     r0 = sl;
    0x000569da str r3, [sp]                                      |     *(sp) = r3;
    0x000569dc add r3, sp, 0xfc                                  |     r3 += var_fch;
    0x000569de str r1, [sp, 4]                                   |     var_4h = r1;
    0x000569e0 mov r1, fp                                        |     r1 = fp;
    0x000569e2 strd r4, r7, [sp, 8]                              |     __asm ("strd r4, r7, [var_8h]");
    0x000569e6 bl 0x5fbc0                                        |     fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x000569ea ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000569ec mov r3, r5                                        |     r3 = r5;
    0x000569ee movs r1, 0x43                                     |     r1 = 0x43;
    0x000569f0 mov r0, sb                                        |     r0 = sb;
    0x000569f2 str r5, [sp]                                      |     *(sp) = r5;
    0x000569f4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000569f8 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x000569fc ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x000569fe ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00056a02 mvns r2, r2                                       |     r2 = ~r2;
    0x00056a04 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00056a06 bmi.w 0x56e5a                                     |         goto label_261;
                                                                 |     }
    0x00056a0a ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00056a0c ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00056a0e ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x00056a10 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_89:
    0x00056a14 mov r1, r6                                        |     r1 = r6;
    0x00056a16 mov r0, sl                                        |     r0 = sl;
    0x00056a18 bl 0x2c4bc                                        |     fcn_0002c4bc (r0, r1);
    0x00056a1c ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00056a1e movs r4, 0                                        |     r4 = 0;
    0x00056a20 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00056a22 mov r2, r4                                        |     r2 = r4;
    0x00056a24 movs r1, 0x47                                     |     r1 = 0x47;
    0x00056a26 str r4, [sp]                                      |     *(sp) = r4;
    0x00056a28 mov r0, r5                                        |     r0 = r5;
    0x00056a2a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056a2e mov r3, r4                                        |     r3 = r4;
    0x00056a30 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x00056a32 movs r1, 0x43                                     |     r1 = 0x43;
    0x00056a34 mov r0, r5                                        |     r0 = r5;
    0x00056a36 str r4, [sp]                                      |     *(sp) = r4;
    0x00056a38 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056a3c ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00056a3e cmp r3, r4                                        |     
    0x00056a40 it ne                                             |     
                                                                 |     if (r3 != r4) {
    0x00056a42 cmpne r8, r4                                      |         __asm ("cmpne r8, r4");
                                                                 |     }
                                                                 |     if (r3 != r4) {
    0x00056a44 bne.w 0x56dc4                                     |         goto label_262;
                                                                 |     }
                                                                 | label_79:
    0x00056a48 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00056a4a ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00056a4c ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00056a50 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00056a52 bmi.w 0x565bc                                     |         goto label_70;
                                                                 |     }
    0x00056a56 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00056a58 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00056a5a ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00056a5c ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x00056a5e lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00056a60 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00056a62 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
    0x00056a64 b.w 0x55b80                                       |     goto label_52;
                                                                 | label_205:
    0x00056a68 movs r2, 0x60                                     |     r2 = 0x60;
    0x00056a6a mla r3, r2, r3, r4                                |     __asm ("mla r3, r2, r3, r4");
    0x00056a6e ldr.w r3, [r3, 0x310]                             |     r3 = *((r3 + 0x310));
    0x00056a72 b.w 0x55abc                                       |     goto label_71;
                                                                 | label_247:
    0x00056a76 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00056a7a ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00056a7c lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x00056a7e itt pl                                            |     
                                                                 |     if (r1 < r3) {
    0x00056a80 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x00056a82 strbpl r3, [sl, 0x17]                             |         *((sl + 0x17)) = r3;
                                                                 |     }
    0x00056a86 b 0x56480                                         |     goto label_72;
                                                                 | label_166:
    0x00056a88 mov.w r2, -1                                      |     r2 = -1;
    0x00056a8c str r3, [r0]                                      |     *(r0) = r3;
    0x00056a8e bl 0x35844                                        |     r0 = fcn_00035844 (r0, r1, r2);
                                                                 |     if (r0 == 0) {
    0x00056a92 cbnz r0, 0x56aa6                                  |         
    0x00056a94 ldr.w r1, [fp, 0x30]                              |         r1 = *(arg_30h);
                                                                 |         if (r1 != 0) {
    0x00056a98 cbz r1, 0x56aa0                                   |             
    0x00056a9a ldr r0, [sp, 0x28]                                |             r0 = x;
    0x00056a9c bl 0x16c98                                        |             fcn_00016c98 (r0, r1);
                                                                 |         }
    0x00056aa0 movs r3, 0                                        |         r3 = 0;
    0x00056aa2 str.w r3, [fp, 0x30]                              |         __asm ("str.w r3, [arg_30h]");
                                                                 |     }
    0x00056aa6 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00056aa8 str r5, [r3]                                      |     *(r3) = r5;
    0x00056aaa b.w 0x55238                                       |     goto label_73;
                                                                 | label_193:
    0x00056aae ldrd lr, ip, [sl, 0x28]                           |     __asm ("ldrd lr, ip, [sl, 0x28]");
    0x00056ab2 movs r2, 1                                        |     r2 = 1;
    0x00056ab4 movs r1, 0x47                                     |     r1 = 0x47;
    0x00056ab6 mov r0, r7                                        |     r0 = r7;
    0x00056ab8 add.w r3, ip, r2                                  |     r3 = ip + r2;
    0x00056abc add.w ip, ip, 2                                   |     
    0x00056ac0 str r3, [r6, 0x58]                                |     *((r6 + 0x58)) = r3;
    0x00056ac2 str.w ip, [sl, 0x2c]                              |     __asm ("str.w ip, [sl, 0x2c]");
    0x00056ac6 str.w ip, [r6, 0x5c]                              |     __asm ("str.w ip, [r6, 0x5c]");
    0x00056aca add.w ip, lr, r2                                  |     
    0x00056ace str.w ip, [sl, 0x28]                              |     __asm ("str.w ip, [sl, 0x28]");
    0x00056ad2 str.w lr, [r6, 0x3c]                              |     __asm ("str.w lr, [r6, 0x3c]");
    0x00056ad6 str r4, [sp]                                      |     *(sp) = r4;
    0x00056ad8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056adc mov r2, r4                                        |     r2 = r4;
    0x00056ade str r4, [sp]                                      |     *(sp) = r4;
    0x00056ae0 movs r1, 0x47                                     |     r1 = 0x47;
    0x00056ae2 ldr r3, [r6, 0x5c]                                |     r3 = *((r6 + 0x5c));
    0x00056ae4 mov r0, r7                                        |     r0 = r7;
    0x00056ae6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056aea str r4, [sp]                                      |     *(sp) = r4;
    0x00056aec mov r0, r7                                        |     r0 = r7;
    0x00056aee ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00056af0 movs r1, 0x73                                     |     r1 = 0x73;
    0x00056af2 ldr r2, [r6, 0x3c]                                |     r2 = *((r6 + 0x3c));
    0x00056af4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056af8 b.w 0x55a48                                       |     goto label_74;
                                                                 | label_227:
    0x00056afc ldr.w r2, [pc, 0x5e8]                             |     r2 = *(0x000570e8);
    0x00056b00 movs r1, 1                                        |     r1 = 1;
    0x00056b02 mov r3, r5                                        |     r3 = r5;
    0x00056b04 str r1, [sp, 0x100]                               |     var_100h = r1;
    0x00056b06 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00056b08 movs r1, 0x9b                                     |     r1 = 0x9b;
    0x00056b0a add r2, pc                                        |     r2 += pc;
    0x00056b0c str r2, [sp, 0xfc]                                |     var_fch = r2;
    0x00056b0e add r2, sp, 0xfc                                  |     r2 += var_fch;
    0x00056b10 bl 0x1db90                                        |     r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00056b14 mov r1, r0                                        |     r1 = r0;
    0x00056b16 ldr r0, [r7]                                      |     r0 = *(r7);
    0x00056b18 bl 0x1db50                                        |     r0 = fcn_0001db50 (r0);
    0x00056b1c mov r5, r0                                        |     r5 = r0;
    0x00056b1e b.w 0x55fae                                       |     goto label_75;
                                                                 | label_231:
    0x00056b22 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00056b24 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00056b28 bl 0x18fa8                                        |     fcn_00018fa8 (r0, r1);
    0x00056b2c b.w 0x560c0                                       |     goto label_76;
                                                                 | label_222:
    0x00056b30 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00056b34 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00056b36 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00056b38 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00056b3c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00056b3e bne.w 0x565e0                                     |         goto label_77;
                                                                 |     }
    0x00056b42 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00056b44 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00056b46 bne.w 0x56108                                     |         goto label_78;
                                                                 |     }
                                                                 | label_232:
    0x00056b4a ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x00056b4e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00056b50 bne.w 0x56f26                                     |         goto label_263;
                                                                 |     }
    0x00056b54 ldr.w r4, [fp, 0x1c]                              |     r4 = *(arg_1ch);
    0x00056b58 ldr r2, [r4]                                      |     r2 = *(r4);
    0x00056b5a cmp r2, 1                                         |     
                                                                 |     if (r2 != 1) {
    0x00056b5c bne.w 0x56f26                                     |         goto label_263;
                                                                 |     }
    0x00056b60 ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x00056b64 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00056b66 cmp r1, 1                                         |     
                                                                 |     if (r1 != 1) {
    0x00056b68 bne.w 0x56f26                                     |         goto label_263;
                                                                 |     }
    0x00056b6c ldr r1, [r2, 0x1c]                                |     r1 = *((r2 + 0x1c));
    0x00056b6e cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00056b70 bne.w 0x56f26                                     |         goto label_263;
                                                                 |     }
    0x00056b74 cmp r0, 1                                         |     
                                                                 |     if (r0 != 1) {
    0x00056b76 bne.w 0x57628                                     |         goto label_264;
                                                                 |     }
    0x00056b7a ldr.w r5, [fp, 0x2c]                              |     r5 = *(arg_2ch);
    0x00056b7e cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00056b80 bne.w 0x574dc                                     |         goto label_265;
                                                                 |     }
    0x00056b84 ldr.w sb, [r2, 0x18]                              |     sb = *((r2 + 0x18));
    0x00056b88 ldrb.w r2, [sb, 0x2b]                             |     r2 = *((sb + 0x2b));
    0x00056b8c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00056b8e bne.w 0x574dc                                     |         goto label_265;
                                                                 |     }
    0x00056b92 ldr r4, [r4, 8]                                   |     r4 = *((r4 + 8));
    0x00056b94 ldrb r2, [r4]                                     |     r2 = *(r4);
    0x00056b96 cmp r2, 0xa8                                      |     
                                                                 |     if (r2 != 0xa8) {
    0x00056b98 bne.w 0x574dc                                     |         goto label_265;
                                                                 |     }
    0x00056b9c ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x00056b9e cmp r6, r2                                        |     
                                                                 |     if (r6 != r2) {
    0x00056ba0 bne.w 0x574dc                                     |         goto label_265;
                                                                 |     }
    0x00056ba4 ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
    0x00056ba6 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00056ba8 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x00056baa lsls r7, r1, 0x17                                 |     r7 = r1 << 0x17;
                                                                 |     if (r7 >= r1) {
    0x00056bac bpl.w 0x57552                                     |         goto label_266;
                                                                 |     }
    0x00056bb0 ldr r4, [r4, 4]                                   |     r4 = *((r4 + 4));
    0x00056bb2 movs r1, 4                                        |     
    0x00056bb4 movt r1, 0x100                                    |     r1 = 0x1000004;
    0x00056bb8 tst r1, r4                                        |     
                                                                 |     if ((r1 & r4) != 0) {
    0x00056bba bne.w 0x57552                                     |         goto label_266;
                                                                 |     }
    0x00056bbe ldr.w r1, [sb, 0x3c]                              |     r1 = *((sb + 0x3c));
    0x00056bc2 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00056bc6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00056bc8 beq.w 0x57546                                     |         goto label_267;
                                                                 |     }
    0x00056bcc bl 0xf708                                         |     r0 = fcn_0000f708 (r0, r1);
    0x00056bd0 mov r4, r0                                        |     r4 = r0;
                                                                 | label_120:
    0x00056bd2 ldr.w r8, [sl, 0x28]                              |     r8 = *((sl + 0x28));
    0x00056bd6 mov r1, r4                                        |     r1 = r4;
    0x00056bd8 ldr.w r0, [sl, 0x74]                              |     r0 = *((sl + 0x74));
    0x00056bdc ldr.w r7, [sb, 0x14]                              |     r7 = *((sb + 0x14));
    0x00056be0 add.w r3, r8, 1                                   |     r3 = r8 + 1;
    0x00056be4 cmp r0, 0                                         |     
    0x00056be6 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00056be8 moveq r0, sl                                      |         r0 = sl;
                                                                 |     }
    0x00056bea str.w r3, [sl, 0x28]                              |     __asm ("str.w r3, [sl, 0x28]");
    0x00056bee bl 0x4a504                                        |     fcn_0004a504 (r0, r1);
    0x00056bf2 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00056bf6 mov r1, r4                                        |     r1 = r4;
    0x00056bf8 mov r0, sl                                        |     r0 = sl;
    0x00056bfa str r3, [sp]                                      |     *(sp) = r3;
    0x00056bfc movs r3, 0                                        |     r3 = 0;
    0x00056bfe ldr.w r2, [sb, 0x14]                              |     r2 = *((sb + 0x14));
    0x00056c02 bl 0x2bab8                                        |     fcn_0002bab8 (r0, r1, r2, r3);
    0x00056c06 ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x00056c0a tst.w r3, 0x80                                    |     
    0x00056c0e ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
                                                                 |     if ((r3 & 0x80) != 0) {
    0x00056c12 bne.w 0x56ea4                                     |         goto label_268;
                                                                 |     }
    0x00056c16 ldrb.w r3, [r3, 0x2d]                             |     r3 = *((r3 + 0x2d));
    0x00056c1a lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
                                                                 |     if (r1 < r3) {
    0x00056c1c bmi.w 0x56fde                                     |         goto label_269;
                                                                 |     }
    0x00056c20 ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x00056c24 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056c26 beq.w 0x56fde                                     |         goto label_269;
                                                                 |     }
                                                                 |     do {
                                                                 | label_95:
    0x00056c2a ldrb.w r2, [r3, 0x37]                             |         r2 = *((r3 + 0x37));
    0x00056c2e lsls r2, r2, 0x1d                                 |         r2 <<= 0x1d;
                                                                 |         if (r2 >= r2) {
    0x00056c30 bmi 0x56c46                                       |             
    0x00056c32 ldrsh.w r2, [r3, 0x30]                            |             r2 = *((r3 + 0x30));
    0x00056c36 ldrsh.w r1, [sb, 0x28]                            |             r1 = *((sb + 0x28));
    0x00056c3a cmp r1, r2                                        |             
                                                                 |             if (r1 <= r2) {
    0x00056c3c ble 0x56c46                                       |                 goto label_101;
                                                                 |             }
    0x00056c3e ldr r1, [r3, 0x24]                                |             r1 = *((r3 + 0x24));
    0x00056c40 cmp r1, 0                                         |             
                                                                 |             if (r1 == 0) {
    0x00056c42 beq.w 0x56fc6                                     |                 goto label_270;
                                                                 |             }
                                                                 |         }
                                                                 | label_101:
    0x00056c46 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x00056c48 cmp r3, 0                                         |         
    0x00056c4a bne 0x56c2a                                       |         
                                                                 |     } while (r3 != 0);
    0x00056c4c cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00056c4e beq.w 0x56fde                                     |         goto label_269;
                                                                 |     }
                                                                 | label_94:
    0x00056c52 ldr r7, [r5, 0x2c]                                |     r7 = *((r5 + 0x2c));
    0x00056c54 mov r1, r5                                        |     r1 = r5;
    0x00056c56 mov r0, sl                                        |     r0 = sl;
    0x00056c58 bl 0x27d1c                                        |     fcn_00027d1c (r0, r1);
    0x00056c5c movs r2, 1                                        |     r2 = 1;
    0x00056c5e str r4, [sp]                                      |     *(sp) = r4;
    0x00056c60 mov r4, r0                                        |     r4 = r0;
    0x00056c62 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00056c64 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00056c66 mov r3, r7                                        |     r3 = r7;
    0x00056c68 mov r2, r8                                        |     r2 = r8;
    0x00056c6a movs r1, 0x70                                     |     r1 = 0x70;
    0x00056c6c bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                 |     if (r4 != 0) {
    0x00056c70 cbz r4, 0x56c82                                   |         
    0x00056c72 ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x00056c74 mov r2, r4                                        |         r2 = r4;
    0x00056c76 mvn r3, 7                                         |         r3 = ~7;
    0x00056c7a mov.w r1, -1                                      |         r1 = -1;
    0x00056c7e bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
                                                                 |     }
    0x00056c82 ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x00056c84 movs r4, 0                                        |     r4 = 0;
    0x00056c86 ldr r6, [sp, 0x24]                                |     r6 = var_24h;
    0x00056c88 mov r2, r8                                        |     r2 = r8;
    0x00056c8a movs r1, 0x62                                     |     r1 = 0x62;
    0x00056c8c str r4, [sp]                                      |     *(sp) = r4;
    0x00056c8e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00056c90 mov r0, r6                                        |     r0 = r6;
    0x00056c92 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056c96 mov r3, r4                                        |     r3 = r4;
    0x00056c98 mov r2, r8                                        |     r2 = r8;
    0x00056c9a movs r1, 0x7a                                     |     r1 = 0x7a;
    0x00056c9c mov r0, r6                                        |     r0 = r6;
    0x00056c9e str r4, [sp]                                      |     *(sp) = r4;
    0x00056ca0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00056ca4 ldrb.w r3, [sl, 0xcf]                             |     r3 = *((sl + 0xcf));
    0x00056ca8 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00056caa bne 0x56ce0                                       |         
    0x00056cac ldr.w r2, [sb, 0x1c]                              |         r2 = *((sb + 0x1c));
    0x00056cb0 ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x00056cb4 lsls r2, r2, 0x18                                 |         r2 <<= 0x18;
                                                                 |         if (r2 < r2) {
    0x00056cb6 bpl 0x56cc6                                       |             
    0x00056cb8 ldrb.w r2, [r5, 0x37]                             |             r2 = *((r5 + 0x37));
    0x00056cbc and r2, r2, 3                                     |             r2 &= 3;
    0x00056cc0 cmp r2, 2                                         |             
                                                                 |             if (r2 == 2) {
    0x00056cc2 beq.w 0x5758c                                     |                 goto label_271;
                                                                 |             }
                                                                 |         }
    0x00056cc6 ldr.w r2, [pc, 0x424]                             |         
    0x00056cca ldr r1, [r5]                                      |         r1 = *(r5);
    0x00056ccc add r2, pc                                        |         r2 = 0xaddbe;
                                                                 | label_102:
    0x00056cce strd r2, r1, [sp]                                 |         __asm ("strd r2, r1, [sp]");
    0x00056cd2 mov r0, sl                                        |         r0 = sl;
    0x00056cd4 ldr.w r2, [pc, 0x418]                             |         r2 = *(0x000570f0);
    0x00056cd8 movs r1, 0                                        |         r1 = 0;
    0x00056cda add r2, pc                                        |         r2 += pc;
    0x00056cdc bl 0x2b770                                        |         fcn_0002b770 (r0, r1);
                                                                 |     }
                                                                 | label_100:
    0x00056ce0 ldr r5, [sp, 0x50]                                |     r5 = var_50h;
    0x00056ce2 movs r4, 0                                        |     r4 = 0;
    0x00056ce4 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x00056ce6 mov r0, sl                                        |     r0 = sl;
    0x00056ce8 movs r3, 0x10                                     |     r3 = 0x10;
    0x00056cea str r4, [sp, 0xfc]                                |     var_fch = r4;
    0x00056cec mov r2, r5                                        |     r2 = r5;
    0x00056cee bl 0x59230                                        |     fcn_00059230 (r0, r1, r2, r3);
    0x00056cf2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00056cf4 mov.w r2, -1                                      |     r2 = -1;
    0x00056cf8 mov r1, fp                                        |     r1 = fp;
    0x00056cfa mov r0, sl                                        |     r0 = sl;
    0x00056cfc strd r5, r5, [sp, 8]                              |     __asm ("strd r5, r5, [var_8h]");
    0x00056d00 strd r4, r3, [sp]                                 |     __asm ("strd r4, r3, [sp]");
    0x00056d04 mov r3, r4                                        |     r3 = r4;
    0x00056d06 bl 0x5fbc0                                        |     fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x00056d0a b 0x56a48                                         |     goto label_79;
                                                                 | label_259:
    0x00056d0c mov r0, r7                                        |     r0 = r7;
    0x00056d0e bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00056d12 ldr r1, [sp, 0x80]                                |     r1 = var_80h;
    0x00056d14 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00056d16 bl 0x189e0                                        |     fcn_000189e0 (r0, r1);
    0x00056d1a b 0x56932                                         |     goto label_80;
                                                                 | label_258:
    0x00056d1c ldr r3, [pc, 0x3d4]                               |     
    0x00056d1e add r3, pc                                        |     r3 = 0xade16;
    0x00056d20 adds r3, 4                                        |     r3 += 4;
    0x00056d22 b 0x568fa                                         |     goto label_81;
                                                                 | label_242:
    0x00056d24 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00056d26 mov r2, r3                                        |     r2 = r3;
    0x00056d28 movs r1, 0xe                                      |     r1 = 0xe;
    0x00056d2a str r3, [sp]                                      |     *(sp) = r3;
    0x00056d2c bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00056d30 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x00056d32 b.w 0x562de                                       |     goto label_82;
                                                                 | label_219:
    0x00056d36 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00056d3a mov r1, r6                                        |     r1 = r6;
    0x00056d3c bl 0x13f74                                        |     fcn_00013f74 (r0, r1);
    0x00056d40 b.w 0x55cb4                                       |     goto label_83;
                                                                 | label_161:
    0x00056d44 ldr r7, [sp, 0x38]                                |     r7 = var_38h;
    0x00056d46 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00056d48 beq.w 0x54f7e                                     |         goto label_12;
                                                                 |     }
    0x00056d4c ldr r0, [r5, 0x30]                                |     r0 = *((r5 + 0x30));
    0x00056d4e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00056d50 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00056d54 b.w 0x54f7e                                       |     goto label_12;
                                                                 | label_248:
    0x00056d58 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00056d5c ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00056d5e lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x00056d60 itt pl                                            |     
                                                                 |     if (r1 < r3) {
    0x00056d62 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x00056d64 strbpl r3, [sl, 0x17]                             |         *((sl + 0x17)) = r3;
                                                                 |     }
    0x00056d68 b 0x565a4                                         |     goto label_84;
                                                                 | label_233:
    0x00056d6a ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x00056d6c ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00056d6e cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x00056d70 blt.w 0x56108                                     |         goto label_78;
                                                                 |     }
    0x00056d74 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00056d76 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00056d78 beq.w 0x56108                                     |         goto label_78;
                                                                 |     }
    0x00056d7c ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00056d7e ands r3, r3, 0x1000                               |     r3 &= 0x1000;
                                                                 |     if (r3 != r3) {
    0x00056d82 bne.w 0x56108                                     |         goto label_78;
                                                                 |     }
    0x00056d86 ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x00056d88 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00056d8a beq.w 0x56108                                     |         goto label_78;
                                                                 |     }
    0x00056d8e ldr r4, [r2, 8]                                   |     r4 = *((r2 + 8));
                                                                 |     if (r4 != 0) {
    0x00056d90 cbz r4, 0x56d9e                                   |         
    0x00056d92 mov r1, r4                                        |         r1 = r4;
    0x00056d94 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00056d96 mov r2, r3                                        |         r2 = r3;
    0x00056d98 bl 0x2dd00                                        |         r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x00056d9c mov r4, r0                                        |         r4 = r0;
                                                                 |     }
    0x00056d9e ldr r1, [sp, 0x28]                                |     r1 = x;
    0x00056da0 movs r2, 0                                        |     r2 = 0;
    0x00056da2 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00056da4 bl 0x2dffc                                        |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x00056da8 mov r2, r4                                        |     r2 = r4;
    0x00056daa mov r1, r0                                        |     r1 = r0;
    0x00056dac mov r0, sl                                        |     r0 = sl;
    0x00056dae bl 0x2bffc                                        |     r0 = fcn_0002bffc (r0, r1, r2);
    0x00056db2 subs r3, r0, 0                                    |     r3 = r0 - 0;
    0x00056db4 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00056db6 ite ne                                            |     
                                                                 |     if (r3 == r0) {
    0x00056db8 movne r3, 0x500                                   |         r3 = 0x500;
                                                                 |     }
                                                                 |     if (r3 == r0) {
    0x00056dbc movs r3, 0                                        |         r3 = 0;
                                                                 |     }
    0x00056dbe str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00056dc0 b.w 0x5610c                                       |     goto label_85;
                                                                 | label_262:
    0x00056dc4 ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
    0x00056dc6 mov r1, r8                                        |     r1 = r8;
    0x00056dc8 mov r0, sl                                        |     r0 = sl;
    0x00056dca ldrd r2, r3, [r2, 0xc]                            |     __asm ("ldrd r2, r3, [r2, 0xc]");
    0x00056dce bl 0x1ab3c                                        |     fcn_0001ab3c (r0, r1, r2, r3, r4);
    0x00056dd2 b 0x56a48                                         |     goto label_79;
                                                                 | label_236:
    0x00056dd4 ldr r3, [pc, 0x320]                               |     
    0x00056dd6 add r3, pc                                        |     r3 = 0xaded2;
    0x00056dd8 b.w 0x56218                                       |     goto label_86;
                                                                 | label_235:
    0x00056ddc ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00056dde cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00056de0 bne 0x56e82                                       |         goto label_272;
                                                                 |     }
    0x00056de2 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00056de4 ldr r2, [r2, 0x6c]                                |     r2 = *((r2 + 0x6c));
    0x00056de6 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00056de8 b 0x567fe                                         |     goto label_87;
                                                                 | label_129:
    0x00056dea blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_251:
    0x00056dee ldr r0, [r6, 0x2c]                                |     r0 = *((r6 + 0x2c));
    0x00056df0 cmp r0, 1                                         |     
                                                                 |     if (r0 != 1) {
    0x00056df2 bne.w 0x55d76                                     |         goto label_66;
                                                                 |     }
    0x00056df6 ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
    0x00056df8 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00056dfa ldr r4, [r3, 0x14]                                |     r4 = *((r3 + 0x14));
    0x00056dfc cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00056dfe beq.w 0x55d7e                                     |         goto label_88;
                                                                 |     }
    0x00056e02 ldr r5, [r4]                                      |     r5 = *(r4);
    0x00056e04 cmp r5, 1                                         |     
                                                                 |     if (r5 != 1) {
    0x00056e06 bne.w 0x55d7e                                     |         goto label_88;
                                                                 |     }
    0x00056e0a ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00056e0c lsls r0, r1, 7                                    |     r0 = r1 << 7;
                                                                 |     if (r0 < r1) {
    0x00056e0e bmi.w 0x55d7e                                     |         goto label_88;
                                                                 |     }
    0x00056e12 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00056e14 ldr r1, [r1, 0x50]                                |     r1 = *((r1 + 0x50));
    0x00056e16 lsls r1, r1, 0xf                                  |     r1 <<= 0xf;
                                                                 |     if (r1 < r1) {
    0x00056e18 bmi.w 0x55d7e                                     |         goto label_88;
                                                                 |     }
    0x00056e1c ldr r7, [r3, 8]                                   |     r7 = *((r3 + 8));
    0x00056e1e ldr r1, [pc, 0x2dc]                               |     
    0x00056e20 str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x00056e22 mov r0, r7                                        |     r0 = r7;
    0x00056e24 add r1, pc                                        |     r1 = 0xadf26;
    0x00056e26 bl 0xa580                                         |     fcn_0000a580 (r0);
    0x00056e2a ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x00056e2c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00056e2e bne.w 0x57500                                     |         goto label_273;
                                                                 |     }
    0x00056e32 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00056e34 bl 0xc0c4                                         |     r0 = fcn_0000c0c4 (r0);
    0x00056e38 subs r3, r0, 0                                    |     r3 = r0 - 0;
    0x00056e3a it ne                                             |     
                                                                 |     if (r3 == r0) {
    0x00056e3c movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00056e3e lsls r7, r3, 1                                    |     r7 = r3 << 1;
                                                                 | label_118:
    0x00056e40 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00056e42 mov r1, r4                                        |     r1 = r4;
    0x00056e44 movs r2, 0                                        |     r2 = 0;
    0x00056e46 bl 0x2dffc                                        |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x00056e4a str r0, [sp, 0x38]                                |     var_38h = r0;
                                                                 |     if (r0 != 0) {
    0x00056e4c cbz r0, 0x56e50                                   |         
    0x00056e4e strb r7, [r0, 0x10]                               |         *((r0 + 0x10)) = r7;
                                                                 |     }
    0x00056e50 uxtb r3, r5                                       |     r3 = (int8_t) r5;
    0x00056e52 ldr r0, [r6, 0x2c]                                |     r0 = *((r6 + 0x2c));
    0x00056e54 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00056e56 b.w 0x55d76                                       |     goto label_66;
                                                                 | label_261:
    0x00056e5a ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00056e5c bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00056e60 b 0x56a14                                         |     goto label_89;
                                                                 | label_260:
    0x00056e62 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00056e64 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00056e66 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00056e68 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00056e6c b 0x56994                                         |     goto label_90;
                                                                 | label_237:
    0x00056e6e ldr r3, [pc, 0x290]                               |     
    0x00056e70 add r3, pc                                        |     r3 = 0xadf76;
    0x00056e72 b.w 0x56218                                       |     goto label_86;
                                                                 | label_254:
    0x00056e76 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00056e7a adds r4, r3, 1                                    |     r4 = r3 + 1;
    0x00056e7c str.w r4, [sl, 0x2c]                              |     __asm ("str.w r4, [sl, 0x2c]");
    0x00056e80 b 0x5679c                                         |     goto label_91;
                                                                 | label_272:
    0x00056e82 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00056e84 ldr r2, [r2, 0x50]                                |     r2 = *((r2 + 0x50));
    0x00056e86 ands r2, r2, 4                                    |     r2 &= 4;
                                                                 |     if (r2 == r2) {
    0x00056e8a beq 0x56ee6                                       |         goto label_274;
                                                                 |     }
    0x00056e8c ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00056e8e mov r5, r4                                        |     r5 = r4;
    0x00056e90 str r4, [sp, 0x4c]                                |     var_4ch = r4;
    0x00056e92 ldr r2, [r2, 0x6c]                                |     r2 = *((r2 + 0x6c));
    0x00056e94 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00056e96 b 0x567fe                                         |     goto label_87;
                                                                 | label_152:
    0x00056e98 cmp r4, 0                                         |     
    0x00056e9a str r1, [sp, 0x40]                                |     var_40h = r1;
                                                                 |     if (r4 > 0) {
    0x00056e9c bgt.w 0x54fcc                                     |         goto label_92;
                                                                 |     }
    0x00056ea0 b.w 0x54fd6                                       |     goto label_93;
                                                                 | label_268:
    0x00056ea4 ldrb.w r1, [r3, 0x2d]                             |     r1 = *((r3 + 0x2d));
    0x00056ea8 ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x00056eac and r1, r1, 1                                     |     r1 &= 1;
    0x00056eb0 mov r5, r3                                        |     r5 = r3;
                                                                 |     if (r3 != 0) {
    0x00056eb2 cbnz r3, 0x56ebe                                  |         goto label_275;
                                                                 |     }
    0x00056eb4 b 0x56fde                                         |     goto label_269;
                                                                 |     do {
    0x00056eb6 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x00056eb8 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00056eba beq.w 0x56fd8                                     |             goto label_276;
                                                                 |         }
                                                                 | label_275:
    0x00056ebe ldrb.w r2, [r5, 0x37]                             |         r2 = *((r5 + 0x37));
    0x00056ec2 and r2, r2, 3                                     |         r2 &= 3;
    0x00056ec6 cmp r2, 2                                         |         
    0x00056ec8 bne 0x56eb6                                       |         
                                                                 |     } while (r2 != 2);
    0x00056eca cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00056ecc bne.w 0x56c52                                     |         goto label_94;
                                                                 |     }
    0x00056ed0 b 0x56c2a                                         |     goto label_95;
                                                                 | label_252:
    0x00056ed2 ldr.w r4, [sl, 0x2c]                              |     r4 = *((sl + 0x2c));
    0x00056ed6 adds r4, 1                                        |     r4++;
    0x00056ed8 str.w r4, [sl, 0x2c]                              |     __asm ("str.w r4, [sl, 0x2c]");
    0x00056edc b 0x56732                                         |     goto label_96;
                                                                 | label_255:
    0x00056ede ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00056ee0 ldr r3, [r3, 0x6c]                                |     r3 = *((r3 + 0x6c));
    0x00056ee2 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00056ee4 b 0x567e8                                         |     goto label_97;
                                                                 | label_274:
    0x00056ee6 ldrb.w r1, [r0, 0x34]                             |     r1 = *((r0 + 0x34));
    0x00056eea ubfx r0, r1, 3, 1                                 |     r0 = (r1 >> 3) & ((1 << 1) - 1);
    0x00056eee lsls r1, r1, 0x1c                                 |     r1 <<= 0x1c;
                                                                 |     if (r1 < r1) {
    0x00056ef0 bmi.w 0x574b6                                     |         goto label_277;
                                                                 |     }
    0x00056ef4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00056ef6 mov r5, r0                                        |     r5 = r0;
    0x00056ef8 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x00056efa ldr r2, [r2, 0x6c]                                |     r2 = *((r2 + 0x6c));
    0x00056efc str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00056efe b 0x567fe                                         |     goto label_87;
                                                                 | label_167:
    0x00056f00 mov r1, r2                                        |     r1 = r2;
    0x00056f02 b.w 0x552a4                                       |     goto label_98;
                                                                 | label_253:
    0x00056f06 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00056f08 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00056f0a beq.w 0x56772                                     |         goto label_99;
                                                                 |     }
    0x00056f0e ldrb.w r3, [sl, 0x13]                             |     r3 = *((sl + 0x13));
    0x00056f12 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00056f14 bhi.w 0x56772                                     |         goto label_99;
                                                                 |     }
    0x00056f18 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00056f1a adds r3, 0x26                                     |     r3 += 0x26;
    0x00056f1c strb.w r2, [sl, 0x13]                             |     *((sl + 0x13)) = r2;
    0x00056f20 str.w r1, [sl, r3, lsl 2]                         |     __asm ("str.w r1, [sl, r3, lsl 2]");
    0x00056f24 b 0x56772                                         |     goto label_99;
                                                                 | label_263:
    0x00056f26 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x00056f28 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00056f2a beq 0x57028                                       |         goto label_278;
                                                                 |     }
                                                                 | label_127:
    0x00056f2c cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00056f2e ble.w 0x57588                                     |         goto label_279;
                                                                 |     }
                                                                 | label_116:
    0x00056f32 ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
                                                                 | label_121:
    0x00056f34 movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x00056f36 ldr r4, [r2]                                      |         r4 = *(r2);
    0x00056f38 ldr r4, [r4, 4]                                   |         r4 = *((r4 + 4));
    0x00056f3a lsls r5, r4, 7                                    |         r5 = r4 << 7;
                                                                 |         if (r5 >= r4) {
    0x00056f3c bmi 0x56f46                                       |             
    0x00056f3e ldr r4, [r2, 4]                                   |             r4 = *((r2 + 4));
    0x00056f40 ldr r4, [r4, 4]                                   |             r4 = *((r4 + 4));
    0x00056f42 lsls r4, r4, 0x1a                                 |             r4 <<= 0x1a;
                                                                 |             if (r4 < r4) {
    0x00056f44 bmi 0x56f4e                                       |                 goto label_124;
                                                                 |             }
                                                                 |         }
    0x00056f46 adds r1, 1                                        |         r1++;
    0x00056f48 adds r2, 0x14                                     |         r2 += 0x14;
    0x00056f4a cmp r0, r1                                        |         
    0x00056f4c bgt 0x56f36                                       |         
                                                                 |     } while (r0 > r1);
                                                                 | label_124:
    0x00056f4e cmp r0, r1                                        |     
                                                                 |     if (r0 == r1) {
    0x00056f50 beq.w 0x57570                                     |         goto label_280;
                                                                 |     }
                                                                 | label_117:
    0x00056f54 movs r4, 0                                        |     r4 = 0;
                                                                 | label_103:
    0x00056f56 mov r1, r6                                        |     r1 = r6;
    0x00056f58 mov r0, sl                                        |     r0 = sl;
    0x00056f5a bl 0x2c4bc                                        |     fcn_0002c4bc (r0, r1);
    0x00056f5e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00056f60 mov r0, sl                                        |     r0 = sl;
    0x00056f62 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00056f64 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00056f66 str r3, [sp]                                      |     *(sp) = r3;
    0x00056f68 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00056f6a orrs r4, r3                                       |     r4 |= r3;
    0x00056f6c movs r3, 0                                        |     r3 = 0;
    0x00056f6e str r4, [sp, 8]                                   |     var_8h = r4;
    0x00056f70 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00056f72 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00056f74 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00056f76 bl 0x61f10                                        |     r0 = fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x00056f7a mov r4, r0                                        |     r4 = r0;
    0x00056f7c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00056f7e beq.w 0x565e0                                     |         goto label_77;
                                                                 |     }
    0x00056f82 ldrb.w r5, [r0, 0x33]                             |     r5 = *((r0 + 0x33));
    0x00056f86 mov r2, r6                                        |     r2 = r6;
    0x00056f88 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00056f8a mov r0, sl                                        |     r0 = sl;
    0x00056f8c mov r3, r5                                        |     r3 = r5;
    0x00056f8e bl 0x60c28                                        |     fcn_00060c28 (r0, r1, r2, r3);
                                                                 |     if (r5 != 0) {
    0x00056f92 cbz r5, 0x56fa4                                   |         
    0x00056f94 ldr r2, [r6, 0x28]                                |         r2 = *((r6 + 0x28));
                                                                 |         if (r2 == 0) {
    0x00056f96 cbz r2, 0x56fa4                                   |             goto label_281;
                                                                 |         }
    0x00056f98 ldrd r2, r3, [r2, 0xc]                            |         __asm ("ldrd r2, r3, [r2, 0xc]");
    0x00056f9c mov r1, r5                                        |         r1 = r5;
    0x00056f9e mov r0, sl                                        |         r0 = sl;
    0x00056fa0 bl 0x1ab3c                                        |         fcn_0001ab3c (r0, r1, r2, r3, r4);
                                                                 |     }
                                                                 | label_281:
    0x00056fa4 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00056fa6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00056fa8 bne.w 0x57498                                     |         goto label_282;
                                                                 |     }
                                                                 | label_113:
    0x00056fac ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00056fae cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00056fb0 bne.w 0x57452                                     |         goto label_283;
                                                                 |     }
                                                                 | label_112:
    0x00056fb4 mov r0, r4                                        |     r0 = r4;
    0x00056fb6 bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00056fba ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x00056fbe mov r1, r6                                        |     r1 = r6;
    0x00056fc0 bl 0x29da4                                        |     fcn_00029da4 (r0, r1, r2);
    0x00056fc4 b 0x56ce0                                         |     goto label_100;
                                                                 | label_270:
    0x00056fc6 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00056fc8 beq.w 0x574b0                                     |         goto label_284;
                                                                 |     }
    0x00056fcc ldrsh.w r1, [r5, 0x30]                            |     r1 = *((r5 + 0x30));
    0x00056fd0 cmp r1, r2                                        |     
    0x00056fd2 it gt                                             |     
                                                                 |     if (r1 <= r2) {
    0x00056fd4 movgt r5, r3                                      |         r5 = r3;
                                                                 |     }
    0x00056fd6 b 0x56c46                                         |     goto label_101;
                                                                 | label_276:
    0x00056fd8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00056fda beq.w 0x56c2a                                     |         goto label_95;
                                                                 |     }
                                                                 | label_269:
    0x00056fde ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00056fe0 movs r2, 1                                        |     r2 = 1;
    0x00056fe2 mov r3, r7                                        |     r3 = r7;
    0x00056fe4 movs r1, 0x70                                     |     r1 = 0x70;
    0x00056fe6 str r4, [sp]                                      |     *(sp) = r4;
    0x00056fe8 movs r4, 0                                        |     r4 = 0;
    0x00056fea str r2, [sp, 4]                                   |     var_4h = r2;
    0x00056fec mov r0, r5                                        |     r0 = r5;
    0x00056fee mov r2, r8                                        |     r2 = r8;
    0x00056ff0 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00056ff4 ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x00056ff6 mov r2, r8                                        |     r2 = r8;
    0x00056ff8 movs r1, 0x62                                     |     r1 = 0x62;
    0x00056ffa str r4, [sp]                                      |     *(sp) = r4;
    0x00056ffc mov r0, r5                                        |     r0 = r5;
    0x00056ffe ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00057000 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057004 mov r3, r4                                        |     r3 = r4;
    0x00057006 mov r2, r8                                        |     r2 = r8;
    0x00057008 movs r1, 0x7a                                     |     r1 = 0x7a;
    0x0005700a mov r0, r5                                        |     r0 = r5;
    0x0005700c str r4, [sp]                                      |     *(sp) = r4;
    0x0005700e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057012 ldrb.w r3, [sl, 0xcf]                             |     r3 = *((sl + 0xcf));
    0x00057016 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x00057018 bne.w 0x56ce0                                     |         goto label_100;
                                                                 |     }
    0x0005701c ldr r2, [pc, 0xe4]                                |     
    0x0005701e ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00057022 add r2, pc                                        |     r2 = 0xae12a;
    0x00057024 mov r1, r2                                        |     r1 = r2;
    0x00057026 b 0x56cce                                         |     goto label_102;
                                                                 | label_278:
    0x00057028 cmp r0, 1                                         |     
                                                                 |     if (r0 == 1) {
    0x0005702a beq.w 0x574e4                                     |         goto label_285;
                                                                 |     }
    0x0005702e mov r4, r2                                        |     r4 = r2;
    0x00057030 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00057032 b 0x56f56                                         |     goto label_103;
                                                                 | label_153:
    0x00057034 ldrb.w r3, [r7, 0x2e]                             |     r3 = *((r7 + 0x2e));
    0x00057038 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 >= r3) {
    0x0005703a bpl 0x5704c                                       |         goto label_286;
                                                                 |     }
    0x0005703c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005703e add.w r3, r3, r4, lsl 6                           |     r3 += (r4 << 6);
    0x00057042 ldr r3, [r3, 0x44]                                |     r3 = *((r3 + 0x44));
    0x00057044 ldrb r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x00057046 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057048 beq.w 0x54e14                                     |         goto label_5;
                                                                 |     }
                                                                 | label_286:
    0x0005704c ldr r3, [r5, 0x34]                                |     r3 = *((r5 + 0x34));
    0x0005704e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00057050 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00057052 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x00057056 movs r3, 1                                        |     r3 = 1;
    0x00057058 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_126:
    0x0005705a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005705c movs r1, 0x15                                     |     r1 = 0x15;
    0x0005705e ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00057060 mov r0, sl                                        |     r0 = sl;
    0x00057062 adds r7, r3, r2                                   |     r7 = r3 + r2;
    0x00057064 movs r3, 0                                        |     r3 = 0;
    0x00057066 ldr r2, [r7, 0x10]                                |     r2 = *((r7 + 0x10));
    0x00057068 str.w r2, [sl, 0xf8]                              |     __asm ("str.w r2, [sl, 0xf8]");
    0x0005706c mov r2, r3                                        |     r2 = r3;
    0x0005706e str r3, [sp]                                      |     *(sp) = r3;
    0x00057070 bl 0x200fc                                        |     fcn_000200fc (r0, r1);
    0x00057074 ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x00057076 str.w r6, [sl, 0xf8]                              |     __asm ("str.w r6, [sl, 0xf8]");
    0x0005707a ldr r7, [r7, 0x1c]                                |     r7 = *((r7 + 0x1c));
                                                                 |     if (r1 != 0) {
    0x0005707c cbz r1, 0x57084                                   |         
    0x0005707e mov r0, r8                                        |         r0 = r8;
    0x00057080 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x00057084 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00057086 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00057088 add r3, r2                                        |     r3 += r2;
    0x0005708a ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
                                                                 |     if (r1 != 0) {
    0x0005708c cbz r1, 0x57094                                   |         
    0x0005708e mov r0, r8                                        |         r0 = r8;
    0x00057090 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x00057094 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00057096 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00057098 add r3, r2                                        |     r3 += r2;
    0x0005709a ldr r1, [r3, 0x14]                                |     r1 = *((r3 + 0x14));
                                                                 |     if (r1 != 0) {
    0x0005709c cbz r1, 0x570a4                                   |         
    0x0005709e mov r0, r8                                        |         r0 = r8;
    0x000570a0 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x000570a4 ldr r3, [r5, 0x34]                                |     r3 = *((r5 + 0x34));
    0x000570a6 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000570a8 ldr r1, [sp, 0x28]                                |     r1 = x;
    0x000570aa vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000570ae str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000570b0 adds r3, r2, r1                                   |     r3 = r2 + r1;
    0x000570b2 adds r3, 0xc                                      |     r3 += 0xc;
    0x000570b4 vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
    0x000570b8 adds r3, r2, r1                                   |     r3 = r2 + r1;
    0x000570ba mov r2, r3                                        |     r2 = r3;
    0x000570bc str r3, [sp, 0x48]                                |     var_48h = r3;
    0x000570be movs r3, 0                                        |     r3 = 0;
    0x000570c0 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x000570c2 str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x000570c4 ldr r3, [pc, 0x40]                                |     
    0x000570c6 add r3, pc                                        |     r3 = 0xae1d2;
    0x000570c8 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x000570ca ldr r3, [pc, 0x40]                                |     
    0x000570cc add r3, pc                                        |     r3 = 0xae1de;
    0x000570ce strd r3, r7, [sp, 0x50]                           |     __asm ("strd r3, r7, [var_54h]");
    0x000570d2 b 0x57126                                         |     goto label_287;
                                                                 | label_104:
    0x00057110 str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
                                                                 |     if (r6 != 0) {
    0x00057112 cbz r6, 0x57116                                   |         
    0x00057114 str r5, [r6, 0x38]                                |         *((r6 + 0x38)) = r5;
                                                                 |     }
    0x00057116 mov r6, r5                                        |     r6 = r5;
    0x00057118 str.w fp, [r5, 0x38]                              |     __asm ("str.w fp, [r5, 0x38]");
                                                                 |     do {
    0x0005711c ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x0005711e str.w r6, [fp, 0x34]                              |         __asm ("str.w r6, [arg_34h]");
    0x00057122 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x00057124 str r3, [sp, 0x44]                                |         var_44h = r3;
                                                                 | label_287:
    0x00057126 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x00057128 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005712a beq 0x571b4                                       |             goto label_288;
                                                                 |         }
    0x0005712c ldr r1, [sp, 0x48]                                |         r1 = var_48h;
    0x0005712e add.w r3, fp, 0x30                                |         r3 += arg_30h;
    0x00057132 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x00057136 movs r2, 0                                        |         r2 = 0;
    0x00057138 ldr.w sb, [fp, 0x3c]                              |         sb = *(arg_3ch);
    0x0005713c mov r0, r8                                        |         r0 = r8;
    0x0005713e ldr r7, [r1, 0x18]                                |         r7 = *((r1 + 0x18));
    0x00057140 ldrd r5, r6, [fp, 0x30]                           |         __asm ("ldrd r5, r6, [arg_30h]");
    0x00057144 str r2, [r1, 0x18]                                |         *((r1 + 0x18)) = r2;
    0x00057146 mov r1, fp                                        |         r1 = fp;
    0x00057148 vst1.32 {d16}, [r3]                               |         __asm ("vst1.32 {d16}, [r3]");
    0x0005714c str.w r2, [fp, 0x3c]                              |         __asm ("str.w r2, [arg_3ch]");
    0x00057150 bl 0x2db4c                                        |         fcn_0002db4c (r0, r1, r2, r3);
    0x00057154 ldr r1, [sp, 0x48]                                |         r1 = var_48h;
    0x00057156 movs r3, 0x87                                     |         r3 = 0x87;
    0x00057158 str.w r5, [fp, 0x30]                              |         __asm ("str.w r5, [arg_30h]");
    0x0005715c mov r5, r0                                        |         r5 = r0;
    0x0005715e str.w sb, [fp, 0x3c]                              |         __asm ("str.w sb, [arg_3ch]");
    0x00057162 strb.w r3, [fp]                                   |         *(fp) = r3;
    0x00057166 str r7, [r1, 0x18]                                |         *((r1 + 0x18)) = r7;
    0x00057168 cmp r0, 0                                         |         
    0x0005716a beq 0x5711c                                       |         
                                                                 |     } while (r0 == 0);
    0x0005716c ldr.w r3, [sl, 0x64]                              |     r3 = *((sl + 0x64));
    0x00057170 adds r3, 1                                        |     r3++;
    0x00057172 str.w r3, [sl, 0x64]                              |     __asm ("str.w r3, [sl, 0x64]");
    0x00057176 str r3, [r0, 0x10]                                |     *((r0 + 0x10)) = r3;
    0x00057178 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0005717a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005717c beq 0x57110                                       |         goto label_104;
                                                                 |     }
    0x0005717e ldrb.w r7, [r8, 0x57]                             |     r7 = *((r8 + 0x57));
    0x00057182 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00057184 bne 0x57110                                       |         goto label_104;
                                                                 |     }
    0x00057186 mov r1, r3                                        |     r1 = r3;
    0x00057188 mov r0, sl                                        |     r0 = sl;
    0x0005718a mov r3, r4                                        |     r3 = r4;
    0x0005718c ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x0005718e bl 0xc510                                         |     fcn_0000c510 (r0, r1, r2, r3);
    0x00057192 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00057194 add.w sb, sp, 0xdc                                |     sb += var_dch;
    0x00057198 mov r0, sb                                        |     r0 = sb;
    0x0005719a mov r1, r5                                        |     r1 = r5;
    0x0005719c str r7, [sp, 0xdc]                                |     var_dch = r7;
    0x0005719e str r3, [sp, 0xf4]                                |     var_f4h = r3;
    0x000571a0 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000571a2 strd r7, r7, [sp, 0xe8]                           |     __asm ("strd r7, r7, [var_e8h]");
    0x000571a6 str r7, [sp, 0xf0]                                |     var_f0h = r7;
    0x000571a8 str r3, [sp, 0xe0]                                |     var_e0h = r3;
    0x000571aa ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000571ac str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x000571ae bl 0x2d9bc                                        |     fcn_0002d9bc (r0, r1, r2, r3, r4, r5);
    0x000571b2 b 0x57110                                         |     goto label_104;
                                                                 | label_288:
    0x000571b4 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000571b6 ldr r7, [sp, 0x54]                                |     r7 = var_54h;
                                                                 |     if (r3 != 0) {
    0x000571b8 cbz r3, 0x571c2                                   |         
    0x000571ba mov r1, r3                                        |         r1 = r3;
    0x000571bc mov r0, r8                                        |         r0 = r8;
    0x000571be bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x000571c2 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x000571c6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000571c8 bne.w 0x574d2                                     |         goto label_289;
                                                                 |     }
    0x000571cc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000571ce ldr r2, [sp, 0x28]                                |     r2 = x;
    0x000571d0 add r3, r2                                        |     r3 += r2;
    0x000571d2 ldr r6, [r3, 0x18]                                |     r6 = *((r3 + 0x18));
                                                                 |     if (r6 != 0) {
    0x000571d4 cbz r6, 0x571ec                                   |         
    0x000571d6 ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
    0x000571d8 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x000571da beq.w 0x5751a                                     |             goto label_290;
                                                                 |         }
    0x000571de subs r3, 1                                        |         r3--;
    0x000571e0 str r3, [r6, 0x18]                                |         *((r6 + 0x18)) = r3;
                                                                 | label_119:
    0x000571e2 ldr r2, [sp, 0x28]                                |         r2 = x;
    0x000571e4 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000571e6 add r3, r2                                        |         r3 += r2;
    0x000571e8 movs r2, 0                                        |         r2 = 0;
    0x000571ea str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
                                                                 |     }
    0x000571ec ldr.w r3, [pc, 0x448]                             |     r3 = *(0x00057638);
    0x000571f0 mov r1, r7                                        |     r1 = r7;
    0x000571f2 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000571f4 mov r5, fp                                        |     r5 = fp;
    0x000571f6 vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x000571fa add r3, pc                                        |     r3 += pc;
    0x000571fc str.w r8, [sp, 0x4c]                              |     __asm ("str.w r8, [var_4ch]");
    0x00057200 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00057202 ldr.w r3, [pc, 0x438]                             |     r3 = *(0x0005763c);
    0x00057206 str r7, [sp, 0x68]                                |     var_68h = r7;
    0x00057208 mov r7, r2                                        |     r7 = r2;
    0x0005720a str.w sl, [sp, 0x44]                              |     __asm ("str.w sl, [var_44h]");
    0x0005720e mov sl, r1                                        |     sl = r1;
    0x00057210 add r3, pc                                        |     r3 += pc;
    0x00057212 str r4, [sp, 0x64]                                |     var_64h = r4;
    0x00057214 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00057216 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00057218 str.w fp, [sp, 0x54]                              |     __asm ("str.w fp, [var_54h]");
    0x0005721c adds r3, 8                                        |     r3 += 8;
    0x0005721e str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x00057220 mov.w r3, -1                                      |     r3 = -1;
    0x00057224 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00057226 add r3, sp, 0xdc                                  |     r3 += var_dch;
    0x00057228 mov r8, r3                                        |     r8 = r3;
    0x0005722a str r3, [sp, 0x70]                                |     var_70h = r3;
                                                                 | label_105:
    0x0005722c ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0005722e ldr.w r4, [sl, 0x20]                              |     r4 = *((sl + 0x20));
    0x00057232 add r7, r3                                        |     r7 += r3;
    0x00057234 ldrb.w r3, [r7, 0x2c]                             |     r3 = *((r7 + 0x2c));
    0x00057238 ldr.w fp, [r4]                                    |     fp = *(r4);
    0x0005723c ldr r7, [r5, 0x20]                                |     r7 = *((r5 + 0x20));
    0x0005723e and r3, r3, 0x40                                  |     r3 &= 0x40;
    0x00057242 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00057244 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00057246 cmp r3, r5                                        |     
    0x00057248 itett eq                                          |     
                                                                 |     if (r3 != r5) {
    0x0005724a ldreq r3, [sp, 0x18]                              |         r3 = var_18h;
                                                                 |     }
                                                                 |     if (r3 == r5) {
    0x0005724c movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != r5) {
    0x0005724e ldreq r2, [sp, 0x28]                              |         r2 = x;
                                                                 |     }
                                                                 |     if (r3 != r5) {
    0x00057250 addeq r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
    0x00057252 it eq                                             |     
                                                                 |     if (r3 != r5) {
    0x00057254 ldrbeq r3, [r3, 0x2c]                             |         r3 = *((r3 + 0x2c));
                                                                 |     }
    0x00057258 cmp.w fp, 1                                       |     
    0x0005725c str r3, [sp, 0x58]                                |     var_58h = r3;
                                                                 |     if (fp > 1) {
    0x0005725e bgt.w 0x573f4                                     |         goto label_291;
                                                                 |     }
                                                                 |     if (fp != 1) {
    0x00057262 bne 0x572da                                       |         goto label_292;
                                                                 |     }
                                                                 | label_108:
    0x00057264 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00057266 adds r4, 8                                        |     r4 += 8;
    0x00057268 adds r6, r7, r3                                   |     r6 = r7 + r3;
    0x0005726a ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0005726c mov sb, r3                                        |     sb = r3;
    0x0005726e add.w r2, fp, r3                                  |     r2 = fp + r3;
    0x00057272 str r2, [sp, 0x50]                                |     var_50h = r2;
                                                                 |     do {
    0x00057274 add.w r3, r7, sb, lsl 6                           |         r3 = r7 + (sb << 6);
    0x00057278 ldrb.w r3, [r3, 0x2e]                             |         r3 = *((r3 + 0x2e));
    0x0005727c lsls r3, r3, 0x1d                                 |         r3 <<= 0x1d;
                                                                 |         if (r3 < r3) {
    0x0005727e bpl 0x5728a                                       |             
    0x00057280 ldr r1, [r6, 0x34]                                |             r1 = *((r6 + 0x34));
                                                                 |             if (r1 == 0) {
    0x00057282 cbz r1, 0x5728a                                   |                 goto label_293;
                                                                 |             }
    0x00057284 ldr r0, [sp, 0x4c]                                |             r0 = var_4ch;
    0x00057286 bl 0x15350                                        |             fcn_00015350 (r0, r1);
                                                                 |         }
                                                                 | label_293:
    0x0005728a mov lr, r4                                        |         lr = r4;
    0x0005728c add.w ip, r6, 8                                   |         
    0x00057290 ldm.w lr!, {r0, r1, r2, r3}                       |         r0 = *(lr!);
                                                                 |         r1 = *((lr! + 4));
                                                                 |         r2 = *((lr! + 8));
                                                                 |         r3 = *((lr! + 12));
    0x00057294 adds r6, 0x40                                     |         r6 += 0x40;
    0x00057296 add.w sb, sb, 1                                   |         sb++;
    0x0005729a stm.w ip!, {r0, r1, r2, r3}                       |         *(ip!) = r0;
                                                                 |         *((ip! + 4)) = r1;
                                                                 |         *((ip! + 8)) = r2;
                                                                 |         *((ip! + 12)) = r3;
    0x0005729e ldm.w lr!, {r0, r1, r2, r3}                       |         r0 = *(lr!);
                                                                 |         r1 = *((lr! + 4));
                                                                 |         r2 = *((lr! + 8));
                                                                 |         r3 = *((lr! + 12));
    0x000572a2 stm.w ip!, {r0, r1, r2, r3}                       |         *(ip!) = r0;
                                                                 |         *((ip! + 4)) = r1;
                                                                 |         *((ip! + 8)) = r2;
                                                                 |         *((ip! + 12)) = r3;
    0x000572a6 ldm.w lr!, {r0, r1, r2, r3}                       |         r0 = *(lr!);
                                                                 |         r1 = *((lr! + 4));
                                                                 |         r2 = *((lr! + 8));
                                                                 |         r3 = *((lr! + 12));
    0x000572aa stm.w ip!, {r0, r1, r2, r3}                       |         *(ip!) = r0;
                                                                 |         *((ip! + 4)) = r1;
                                                                 |         *((ip! + 8)) = r2;
                                                                 |         *((ip! + 12)) = r3;
    0x000572ae ldm.w lr, {r0, r1, r2, r3}                        |         r0 = *(lr);
                                                                 |         r1 = *((lr + 4));
                                                                 |         r2 = *((lr + 8));
                                                                 |         r3 = *((lr + 12));
    0x000572b2 stm.w ip, {r0, r1, r2, r3}                        |         *(ip) = r0;
                                                                 |         *((ip + 4)) = r1;
                                                                 |         *((ip + 8)) = r2;
                                                                 |         *((ip + 12)) = r3;
    0x000572b6 mov r0, r4                                        |         r0 = r4;
    0x000572b8 ldrb r3, [r6, -0x14]                              |         r3 = *((r6 - 0x14));
    0x000572bc movs r1, 0                                        |         r1 = 0;
    0x000572be adds r4, 0x40                                     |         r4 += 0x40;
    0x000572c0 ldr r2, [sp, 0x48]                                |         r2 = var_48h;
    0x000572c2 orrs r3, r2                                       |         r3 |= r2;
    0x000572c4 movs r2, 0x40                                     |         r2 = 0x40;
    0x000572c6 strb r3, [r6, -0x14]                              |         *((r6 - 0x14)) = r3;
    0x000572ca ldr r3, [r4, -0x18]                               |         r3 = *((r4 - 0x18));
    0x000572ce str r3, [sp, 0x3c]                                |         var_3ch = r3;
    0x000572d0 blx 0x97d4                                        |         fcn_000097d4 ();
    0x000572d4 ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x000572d6 cmp r3, sb                                        |         
    0x000572d8 bne 0x57274                                       |         
                                                                 |     } while (r3 != sb);
                                                                 | label_292:
    0x000572da ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x000572dc ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x000572de orrs r3, r2                                       |     r3 |= r2;
    0x000572e0 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x000572e2 adds r1, r7, r2                                   |     r1 = r7 + r2;
    0x000572e4 ldrb.w r2, [r1, 0x2c]                             |     r2 = *((r1 + 0x2c));
    0x000572e8 and r2, r2, 0x40                                  |     r2 &= 0x40;
    0x000572ec orrs r3, r2                                       |     r3 |= r2;
    0x000572ee strb.w r3, [r1, 0x2c]                             |     *((r1 + 0x2c)) = r3;
    0x000572f2 ldr.w r2, [sl, 0x30]                              |     r2 = *((sl + 0x30));
                                                                 |     if (r2 != 0) {
    0x000572f6 cbz r2, 0x57302                                   |         
    0x000572f8 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x000572fa ands r3, r3, 0x400000                             |         r3 &= 0x400000;
                                                                 |         if (r3 == r3) {
    0x000572fe beq.w 0x57432                                     |             goto label_294;
                                                                 |         }
                                                                 |     }
                                                                 | label_111:
    0x00057302 movs r3, 0                                        |     r3 = 0;
    0x00057304 ldr.w r4, [sl, 0x24]                              |     r4 = *((sl + 0x24));
    0x00057308 str.w r3, [sl, 0x24]                              |     __asm ("str.w r3, [sl, 0x24]");
    0x0005730c ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005730e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00057310 bne 0x573e8                                       |         goto label_295;
                                                                 |     }
                                                                 |     if (r4 != 0) {
                                                                 | label_106:
    0x00057312 cbz r4, 0x57328                                   |         
    0x00057314 ldr r3, [r5, 0x24]                                |         r3 = *((r5 + 0x24));
    0x00057316 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00057318 beq.w 0x5742e                                     |             goto label_296;
                                                                 |         }
    0x0005731c ldr r0, [sp, 0x44]                                |         r0 = var_44h;
    0x0005731e mov r2, r4                                        |         r2 = r4;
    0x00057320 movs r1, 0x2c                                     |         r1 = 0x2c;
    0x00057322 bl 0x20c10                                        |         fcn_00020c10 (r0, r1, r2, r3);
    0x00057326 str r0, [r5, 0x24]                                |         *((r5 + 0x24)) = r0;
                                                                 |     }
                                                                 | label_110:
    0x00057328 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0005732a ldrb.w r2, [r3, 0x57]                             |     r2 = *((r3 + 0x57));
    0x0005732e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00057330 beq 0x5740e                                       |         goto label_297;
                                                                 |     }
                                                                 | label_109:
    0x00057332 ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x00057336 and r2, r3, 0x100                                 |     r2 = r3 & 0x100;
    0x0005733a ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0005733c orrs r3, r2                                       |     r3 |= r2;
    0x0005733e str r3, [r5, 4]                                   |     *((r5 + 4)) = r3;
    0x00057340 ldr.w r3, [sl, 0x3c]                              |     r3 = *((sl + 0x3c));
                                                                 |     if (r3 != 0) {
    0x00057344 cbz r3, 0x5734e                                   |         
    0x00057346 str r3, [r5, 0x3c]                                |         *((r5 + 0x3c)) = r3;
    0x00057348 movs r3, 0                                        |         r3 = 0;
    0x0005734a str.w r3, [sl, 0x3c]                              |         __asm ("str.w r3, [sl, 0x3c]");
                                                                 |     }
    0x0005734e cmp.w fp, 0                                       |     
                                                                 |     if (fp <= 0) {
    0x00057352 ble 0x5738a                                       |         goto label_298;
                                                                 |     }
    0x00057354 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00057356 movs r6, 0                                        |     r6 = 0;
    0x00057358 adds r4, r7, r3                                   |     r4 = r7 + r3;
                                                                 |     do {
    0x0005735a ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
                                                                 |         if (r3 != 0) {
    0x0005735c cbz r3, 0x57382                                   |             
    0x0005735e movs r3, 0                                        |             r3 = 0;
    0x00057360 mov r1, r5                                        |             r1 = r5;
    0x00057362 strd r3, r3, [r8]                                 |             __asm ("strd r3, r3, [r8]");
    0x00057366 mov r0, r8                                        |             r0 = r8;
    0x00057368 strd r3, r3, [r8, 8]                              |             __asm ("strd r3, r3, [var_e8h]");
    0x0005736c strd r3, r3, [r8, 0x10]                           |             __asm ("strd r3, r3, [var_f0h]");
    0x00057370 ldr r3, [sp, 0x5c]                                |             r3 = var_5ch;
    0x00057372 str r4, [sp, 0xf4]                                |             var_f4h = r4;
    0x00057374 str r3, [sp, 0xe0]                                |             var_e0h = r3;
    0x00057376 ldr r3, [sp, 0x60]                                |             r3 = var_60h;
    0x00057378 str r3, [sp, 0xe4]                                |             var_e4h = r3;
    0x0005737a vstr d8, [r4, 0x30]                               |             __asm ("vstr d8, [r4, 0x30]");
    0x0005737e bl 0x2d9bc                                        |             fcn_0002d9bc (r0, r1, r2, r3, r4, r5);
                                                                 |         }
    0x00057382 adds r6, 1                                        |         r6++;
    0x00057384 adds r4, 0x40                                     |         r4 += 0x40;
    0x00057386 cmp fp, r6                                        |         
    0x00057388 bne 0x5735a                                       |         
                                                                 |     } while (fp != r6);
                                                                 | label_298:
    0x0005738a ldr r5, [r5, 0x34]                                |     r5 = *((r5 + 0x34));
    0x0005738c ldr.w sl, [sl, 0x34]                              |     sl = *((sl + 0x34));
    0x00057390 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00057392 bne.w 0x5722c                                     |         goto label_105;
                                                                 |     }
                                                                 | label_107:
    0x00057396 ldr r3, [pc, 0x2a8]                               |     
    0x00057398 ldr r7, [sp, 0x68]                                |     r7 = var_68h;
    0x0005739a ldr.w sl, [sp, 0x44]                              |     sl = var_44h;
    0x0005739e add r3, pc                                        |     r3 = 0xae9e4;
    0x000573a0 ldr r0, [sp, 0x70]                                |     r0 = var_70h;
    0x000573a2 str r3, [sp, 0xe0]                                |     var_e0h = r3;
    0x000573a4 mov r1, r7                                        |     r1 = r7;
    0x000573a6 ldr r3, [pc, 0x29c]                               |     
    0x000573a8 ldr.w r8, [sp, 0x4c]                              |     r8 = var_4ch;
    0x000573ac ldr.w fp, [sp, 0x54]                              |     fp = var_54h;
    0x000573b0 add r3, pc                                        |     r3 = 0xae9fa;
    0x000573b2 str.w sl, [sp, 0xdc]                              |     __asm ("str.w sl, [var_dch]");
    0x000573b6 str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x000573b8 movs r3, 0                                        |     r3 = 0;
    0x000573ba strd r3, r3, [sp, 0xe8]                           |     __asm ("strd r3, r3, [var_e8h]");
    0x000573be strd r3, r3, [sp, 0xf0]                           |     __asm ("strd r3, r3, [var_f4h]");
    0x000573c2 bl 0x2d9bc                                        |     fcn_0002d9bc (r0, r1, r2, r3, r4, r5);
                                                                 |     if (r7 != 0) {
    0x000573c6 cbz r7, 0x573d0                                   |         
    0x000573c8 mov r1, r7                                        |         r1 = r7;
    0x000573ca mov r0, r8                                        |         r0 = r8;
    0x000573cc bl 0x16c00                                        |         fcn_00016c00 (r0, r1);
                                                                 |     }
                                                                 | label_115:
    0x000573d0 ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x000573d4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000573d6 bne.w 0x550e4                                     |         goto label_19;
                                                                 |     }
    0x000573da ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x000573de mov.w r4, -1                                      |     r4 = -1;
    0x000573e2 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000573e4 b.w 0x54e14                                       |     goto label_5;
                                                                 | label_295:
    0x000573e8 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x000573ea mov r2, r3                                        |     r2 = r3;
    0x000573ec mov r0, r4                                        |     r0 = r4;
    0x000573ee bl 0xc420                                         |     fcn_0000c420 (r0, r1, r2);
    0x000573f2 b 0x57312                                         |     goto label_106;
                                                                 | label_291:
    0x000573f4 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x000573f6 mov r1, r7                                        |     r1 = r7;
    0x000573f8 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x000573fa add.w r2, fp, -1                                  |     r2 = fp + -1;
    0x000573fe adds r3, 1                                        |     r3++;
    0x00057400 bl 0x292fc                                        |     r0 = fcn_000292fc (r0, r1, r2, r3);
    0x00057404 mov r7, r0                                        |     r7 = r0;
    0x00057406 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00057408 beq 0x57396                                       |         goto label_107;
                                                                 |     }
    0x0005740a str r0, [r5, 0x20]                                |     *((r5 + 0x20)) = r0;
    0x0005740c b 0x57264                                         |     goto label_108;
                                                                 | label_297:
    0x0005740e ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00057410 mov r1, r5                                        |     r1 = r5;
    0x00057412 mov r0, r8                                        |     r0 = r8;
    0x00057414 str r3, [sp, 0xdc]                                |     var_dch = r3;
    0x00057416 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00057418 str r3, [sp, 0xe0]                                |     var_e0h = r3;
    0x0005741a ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0005741c str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x0005741e ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00057420 str r3, [sp, 0xe8]                                |     var_e8h = r3;
    0x00057422 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00057424 adds r0, 0x1c                                     |     r0 += 0x1c;
    0x00057426 str r3, [sp, 0xec]                                |     var_ech = r3;
    0x00057428 bl 0x2ff20                                        |     fcn_0002ff20 (r0, r1, r2);
    0x0005742c b 0x57332                                         |     goto label_109;
                                                                 | label_296:
    0x0005742e str r4, [r5, 0x24]                                |     *((r5 + 0x24)) = r4;
    0x00057430 b 0x57328                                         |     goto label_110;
                                                                 | label_294:
    0x00057432 mov r1, r2                                        |     r1 = r2;
    0x00057434 ldr r0, [r1], 0x14                                |     r0 = *(r1);
                                                                 |     r1 += 0x14;
    0x00057438 b 0x57444                                         |     
                                                                 |     while (r3 < r0) {
    0x0005743a lsls r4, r3, 4                                    |         r4 = r3 << 4;
    0x0005743c adds r3, 1                                        |         r3++;
    0x0005743e mov.w r6, 0                                       |         r6 = 0;
    0x00057442 strh r6, [r1, r4]                                 |         *((r1 + r4)) = r6;
    0x00057444 cmp r3, r0                                        |         
    0x00057446 blt 0x5743a                                       |         
                                                                 |     }
    0x00057448 movs r3, 0                                        |     r3 = 0;
    0x0005744a str r2, [r5, 0x30]                                |     *((r5 + 0x30)) = r2;
    0x0005744c str.w r3, [sl, 0x30]                              |     __asm ("str.w r3, [sl, 0x30]");
    0x00057450 b 0x57302                                         |     goto label_111;
                                                                 | label_283:
    0x00057452 ldrb.w r3, [r4, 0x34]                             |     r3 = *((r4 + 0x34));
    0x00057456 lsls r3, r3, 0x1d                                 |     r3 <<= 0x1d;
                                                                 |     if (r3 >= r3) {
    0x00057458 bpl.w 0x56fb4                                     |         goto label_112;
                                                                 |     }
    0x0005745c ldrsb.w r3, [r4, 0x31]                            |     r3 = *((r4 + 0x31));
    0x00057460 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057462 beq.w 0x56fb4                                     |         goto label_112;
                                                                 |     }
    0x00057466 ldrb.w r3, [r4, 0x30]                             |     r3 = *((r4 + 0x30));
    0x0005746a add.w r5, r4, 0x350                               |     r5 = r4 + 0x350;
    0x0005746e movs r1, 0x60                                     |     r1 = 0x60;
    0x00057470 subs r3, 1                                        |     r3--;
    0x00057472 b 0x57484                                         |     
                                                                 |     while (r0 != r3) {
    0x00057474 mul r2, r1, r3                                    |         r2 = r1 * r3;
    0x00057478 ldr r0, [r5, r2]                                  |         r0 = *((r5 + r2));
    0x0005747a ldr r0, [r0, 0x28]                                |         r0 = *((r0 + 0x28));
    0x0005747c lsls r7, r0, 0x1d                                 |         r7 = r0 << 0x1d;
                                                                 |         if (r7 < r0) {
    0x0005747e bmi.w 0x57614                                     |             goto label_299;
                                                                 |         }
    0x00057482 subs r3, 1                                        |         r3--;
    0x00057484 adds r0, r3, 1                                    |         r0 = r3 + 1;
    0x00057486 bne 0x57474                                       |         
                                                                 |     }
    0x00057488 movs r2, 0                                        |     r2 = 0;
    0x0005748a ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0005748c str r2, [sp]                                      |     *(sp) = r2;
    0x0005748e movs r1, 8                                        |     r1 = 8;
    0x00057490 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00057492 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057496 b 0x56fb4                                         |     goto label_112;
                                                                 | label_282:
    0x00057498 movs r2, 0                                        |     r2 = 0;
    0x0005749a ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0005749c str r2, [sp]                                      |     *(sp) = r2;
    0x0005749e movs r1, 0x47                                     |     r1 = 0x47;
    0x000574a0 movs r2, 1                                        |     r2 = 1;
    0x000574a2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000574a6 b 0x56fac                                         |     goto label_113;
                                                                 | label_238:
    0x000574a8 ldr.w sb, [sp, 0x3c]                              |     sb = var_3ch;
    0x000574ac b.w 0x5624e                                       |     goto label_114;
                                                                 | label_284:
    0x000574b0 mov r5, r3                                        |     r5 = r3;
    0x000574b2 b.w 0x56c46                                       |     goto label_101;
                                                                 | label_277:
    0x000574b6 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x000574b8 mov r5, r2                                        |     r5 = r2;
    0x000574ba ldr r1, [sp, 0x110]                               |     r1 = var_110h;
    0x000574bc str r2, [sp, 0xfc]                                |     var_fch = r2;
    0x000574be mov r0, r4                                        |     r0 = r4;
    0x000574c0 str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x000574c2 bl 0x189e0                                        |     fcn_000189e0 (r0, r1);
    0x000574c6 ldr r3, [r4, 0x6c]                                |     r3 = *((r4 + 0x6c));
    0x000574c8 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000574ca ldr r3, [sp, 0x28]                                |     r3 = x;
    0x000574cc ldr r3, [r3]                                      |     r3 = *(r3);
    0x000574ce b.w 0x567fe                                       |     goto label_87;
                                                                 | label_289:
    0x000574d2 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000574d4 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x000574d6 add r3, r2                                        |     r3 += r2;
    0x000574d8 str r7, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r7;
    0x000574da b 0x573d0                                         |     goto label_115;
                                                                 | label_265:
    0x000574dc ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x000574de cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000574e0 bne.w 0x56f32                                     |         goto label_116;
                                                                 |     }
                                                                 | label_285:
    0x000574e4 ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
                                                                 | label_122:
    0x000574e6 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000574e8 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x000574ea blt.w 0x56f54                                     |         goto label_117;
                                                                 |     }
    0x000574ee ldr r3, [r2]                                      |     r3 = *(r2);
    0x000574f0 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x000574f2 cmp r3, 0                                         |     
    0x000574f4 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000574f6 ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x000574f8 moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x000574fa movne r4, 0x500                                   |         r4 = 0x500;
                                                                 |     }
    0x000574fe b 0x56f56                                         |     goto label_103;
                                                                 | label_273:
    0x00057500 ldr r1, [pc, 0x144]                               |     
    0x00057502 mov r0, r7                                        |     r0 = r7;
    0x00057504 str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x00057506 add r1, pc                                        |     r1 = 0xaeb52;
    0x00057508 bl 0xa580                                         |     fcn_0000a580 (r0);
    0x0005750c ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0005750e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00057510 bne.w 0x55d7e                                     |         goto label_88;
                                                                 |     }
    0x00057514 mov r7, r5                                        |     r7 = r5;
    0x00057516 movs r5, 2                                        |     r5 = 2;
    0x00057518 b 0x56e40                                         |     goto label_118;
                                                                 | label_290:
    0x0005751a ldr.w r5, [sl, 0x74]                              |     r5 = *((sl + 0x74));
    0x0005751e cmp r5, 0                                         |     
    0x00057520 it eq                                             |     
                                                                 |     if (r5 != 0) {
    0x00057522 moveq r5, sl                                      |         r5 = sl;
                                                                 |     }
    0x00057524 ldr r0, [r5]                                      |     r0 = *(r5);
                                                                 |     if (r0 == 0) {
    0x00057526 cbz r0, 0x5755c                                   |         goto label_300;
                                                                 |     }
    0x00057528 movs r2, 0xc                                      |     r2 = 0xc;
    0x0005752a movs r3, 0                                        |     r3 = 0;
    0x0005752c bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
                                                                 |     if (r0 == 0) {
                                                                 | label_123:
    0x00057530 cbz r0, 0x57566                                   |         goto label_301;
                                                                 |     }
    0x00057532 ldr.w r2, [r5, 0x80]                              |     r2 = *((r5 + 0x80));
    0x00057536 str r2, [r0]                                      |     *(r0) = r2;
    0x00057538 ldr r2, [pc, 0x110]                               |     
    0x0005753a str.w r0, [r5, 0x80]                              |     __asm ("str.w r0, [r5, 0x80]");
    0x0005753e str r6, [r0, 4]                                   |     *((r0 + 4)) = r6;
    0x00057540 add r2, pc                                        |     r2 = 0xaeb90;
    0x00057542 str r2, [r0, 8]                                   |     *((r0 + 8)) = r2;
    0x00057544 b 0x571e2                                         |     goto label_119;
                                                                 | label_267:
    0x00057546 mov.w r4, 0x8000                                  |     
    0x0005754a movt r4, 0xffff                                   |     r4 = 0x-8000;
    0x0005754e b.w 0x56bd2                                       |     goto label_120;
                                                                 | label_266:
    0x00057552 ldr r1, [r6, 0x24]                                |     r1 = *((r6 + 0x24));
    0x00057554 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00057556 bne.w 0x56f34                                     |         goto label_121;
                                                                 |     }
    0x0005755a b 0x574e6                                         |     goto label_122;
                                                                 | label_300:
    0x0005755c movs r1, 0                                        |     r1 = 0;
    0x0005755e movs r0, 0xc                                      |     r0 = 0xc;
    0x00057560 bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x00057564 b 0x57530                                         |     goto label_123;
                                                                 | label_301:
    0x00057566 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00057568 mov r1, r6                                        |     r1 = r6;
    0x0005756a bl 0x17204                                        |     fcn_00017204 (r0, r1);
    0x0005756e b 0x571e2                                         |     goto label_119;
                                                                 | label_280:
    0x00057570 adds r3, 1                                        |     r3++;
    0x00057572 movs r2, 0                                        |     r2 = 0;
    0x00057574 str.w r3, [sl, 0x2c]                              |     __asm ("str.w r3, [sl, 0x2c]");
    0x00057578 movs r1, 0x47                                     |     r1 = 0x47;
    0x0005757a ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0005757c mov r4, r2                                        |     r4 = r2;
    0x0005757e str r2, [sp]                                      |     *(sp) = r2;
    0x00057580 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00057582 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057586 b 0x56f56                                         |     goto label_103;
                                                                 | label_279:
    0x00057588 movs r1, 0                                        |     r1 = 0;
    0x0005758a b 0x56f4e                                         |     goto label_124;
                                                                 | label_271:
    0x0005758c ldr r2, [pc, 0xc0]                                |     
    0x0005758e add r2, pc                                        |     r2 = 0xaebe2;
    0x00057590 mov r1, r2                                        |     r1 = r2;
    0x00057592 b.w 0x56cce                                       |     goto label_102;
                                                                 | label_158:
    0x00057596 mov r3, ip                                        |     r3 = ip;
    0x00057598 str r2, [sp, 0x3c]                                |     var_3ch = r2;
                                                                 |     if (r0 == 0) {
    0x0005759a cbz r0, 0x575b6                                   |         goto label_302;
                                                                 |     }
    0x0005759c mov r1, r0                                        |     r1 = r0;
    0x0005759e ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000575a0 ldr r0, [r1], 0x14                                |     r0 = *(r1);
                                                                 |     r1 += 0x14;
    0x000575a4 b 0x575b2                                         |     goto label_303;
                                                                 | label_125:
    0x000575a6 lsls r7, r2, 4                                    |     r7 = r2 << 4;
    0x000575a8 ldrh r7, [r1, r7]                                 |     r7 = *((r1 + r7));
    0x000575aa cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000575ac beq.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x000575b0 adds r2, 1                                        |     r2++;
                                                                 | label_303:
    0x000575b2 cmp r2, r0                                        |     
                                                                 |     if (r2 < r0) {
    0x000575b4 blt 0x575a6                                       |         goto label_125;
                                                                 |     }
                                                                 | label_302:
    0x000575b6 tst.w lr, 0x2000                                  |     
                                                                 |     if ((lr & 0x2000) != 0) {
    0x000575ba bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x000575be ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000575c0 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000575c2 cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x000575c4 ble.w 0x5705a                                     |         goto label_126;
                                                                 |     }
    0x000575c8 ldr.w r2, [sl, 0x64]                              |     r2 = *((sl + 0x64));
    0x000575cc cmp.w r2, 0x1f4                                   |     
                                                                 |     if (r2 > 0x1f4) {
    0x000575d0 bgt.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x000575d4 ands r7, r3, 0x800000                             |     r7 = r3 & 0x800000;
                                                                 |     if (r7 != r3) {
    0x000575d8 bne.w 0x54e14                                     |         goto label_5;
                                                                 |     }
    0x000575dc ldr.w r3, [sl, 0x28]                              |     r3 = *((sl + 0x28));
    0x000575e0 mov r0, r8                                        |     r0 = r8;
    0x000575e2 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000575e4 asr.w r3, r3, 0x1f                                |     r3 >>= 0x1f;
    0x000575e8 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x000575ec lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000575ee orr.w r3, r3, r2, lsr 30                          |     r3 |= (r2 >> 30);
    0x000575f2 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x000575f4 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x000575f6 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x000575fa str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x000575fc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000575fe beq.w 0x5705a                                     |         goto label_126;
                                                                 |     }
    0x00057602 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00057604 mov r1, r7                                        |     r1 = r7;
    0x00057606 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0005760a ldr.w r3, [sl, 0x28]                              |     r3 = *((sl + 0x28));
    0x0005760e ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00057610 str r3, [r2]                                      |     *(r2) = r3;
    0x00057612 b 0x5705a                                         |     goto label_126;
                                                                 | label_299:
    0x00057614 adds r3, r4, r2                                   |     r3 = r4 + r2;
    0x00057616 movs r2, 0                                        |     r2 = 0;
    0x00057618 str r2, [sp]                                      |     *(sp) = r2;
    0x0005761a movs r1, 8                                        |     r1 = 8;
    0x0005761c ldr.w r3, [r3, 0x310]                             |     r3 = *((r3 + 0x310));
    0x00057620 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00057622 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057626 b 0x56fb4                                         |     goto label_112;
                                                                 | label_264:
    0x00057628 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x0005762a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005762c bne.w 0x56f2c                                     |         goto label_127;
                                                                 |     }
    0x00057630 mov r4, r2                                        |     r4 = r2;
    0x00057632 strd r2, r2, [sp, 0x30]                           |     __asm ("strd r2, r2, [var_34h]");
    0x00057636 b 0x56f56                                         |     goto label_103;
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x57654 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00057654 ()                                  | void fcn_00057654 (int16_t arg_288h, int16_t arg1, int16_t arg2) {
                                                             |     int16_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_2;
                                                             |     int16_t var_24h;
                                                             |     int16_t var_28h;
                                                             |     int16_t var_2ch;
                                                             |     int16_t var_0h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00057654 ldr r2, [pc, 0x27c]                           |     
    0x00057656 ldr r3, [pc, 0x280]                           |     r3 = *(0x578da);
    0x00057658 push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x0005765c mov r5, r1                                    |     r5 = r1;
    0x0005765e add r2, pc                                    |     r2 = 0xaef36;
    0x00057660 ldr r1, [r0, 0x24]                            |     r1 = *((r0 + 0x24));
    0x00057662 sub sp, 0x38                                  |     
    0x00057664 ldr r3, [r2, r3]                              |     
    0x00057666 ldr r3, [r3]                                  |     r3 = *(0xaef36);
    0x00057668 str r3, [sp, 0x34]                            |     var_0h = r3;
    0x0005766a mov.w r3, 0                                   |     r3 = 0;
    0x0005766e cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x00057670 bne.w 0x57808                                 |         goto label_8;
                                                             |     }
    0x00057674 ldr r3, [r5, 4]                               |     r3 = *((r5 + 4));
    0x00057676 mov r4, r0                                    |     r4 = r0;
    0x00057678 ldr r6, [r0, 8]                               |     r6 = *((r0 + 8));
    0x0005767a ldr r7, [r5, 0x14]                            |     r7 = *((r5 + 0x14));
    0x0005767c ands r2, r3, 0x2000000                        |     r2 = r3 & 0x2000000;
                                                             |     if (r2 != r3) {
    0x00057680 bne.w 0x577a6                                 |         goto label_9;
                                                             |     }
    0x00057684 orr sl, r3, 0x2000000                         |     sl = r3 | 0x2000000;
    0x00057688 ldr r3, [r0, 0x2c]                            |     r3 = *((r0 + 0x2c));
    0x0005768a str.w sl, [r5, 4]                             |     __asm ("str.w sl, [r5, 4]");
    0x0005768e adds r3, 1                                    |     r3++;
    0x00057690 str r3, [r0, 0x2c]                            |     *((r0 + 0x2c)) = r3;
    0x00057692 ldrd r0, r1, [r6, 0x6c]                       |     __asm ("ldrd r0, r1, [r6, 0x6c]");
    0x00057696 str r3, [r5, 0x30]                            |     *((r5 + 0x30)) = r3;
    0x00057698 cmp r0, r1                                    |     
                                                             |     if (r0 >= r1) {
    0x0005769a bge.w 0x578a6                                 |         goto label_10;
                                                             |     }
    0x0005769e add.w lr, r0, r0, lsl 2                       |     lr = r0 + (r0 << 2);
    0x000576a2 ldr.w r8, [r6, 0x68]                          |     r8 = *((r6 + 0x68));
    0x000576a6 adds r0, 1                                    |     r0++;
    0x000576a8 lsl.w lr, lr, 2                               |     lr <<= 2;
    0x000576ac mov.w sb, 0x4a                                |     sb = 0x4a;
    0x000576b0 str r0, [r6, 0x6c]                            |     *((r6 + 0x6c)) = r0;
    0x000576b2 add.w ip, r8, lr                              |     
    0x000576b6 strd r3, r2, [ip, 8]                          |     __asm ("strd r3, r2, [ip, 8]");
    0x000576ba str.w r2, [ip, 0x10]                          |     __asm ("str.w r2, [ip, 0x10]");
    0x000576be str.w sb, [r8, lr]                            |     __asm ("str.w sb, [r8, lr]");
    0x000576c2 str.w r2, [ip, 4]                             |     __asm ("str.w r2, [ip, 4]");
                                                             | label_5:
    0x000576c6 ands r3, sl, 0x40                             |     r3 = sl & 0x40;
    0x000576ca str r0, [r5, 0x2c]                            |     *((r5 + 0x2c)) = r0;
                                                             |     if (r3 == sl) {
    0x000576cc beq.w 0x5786e                                 |         goto label_11;
                                                             |     }
                                                             | label_3:
    0x000576d0 ldr r3, [pc, 0x208]                           |     
    0x000576d2 mov.w sb, 0                                   |     sb = 0;
    0x000576d6 add r3, pc                                    |     r3 = 0xaefb6;
                                                             | label_4:
    0x000576d8 ldr r2, [r7, 0x10]                            |     r2 = *((r7 + 0x10));
    0x000576da movs r1, 1                                    |     r1 = 1;
    0x000576dc mov r0, r4                                    |     r0 = r4;
    0x000576de str r2, [sp]                                  |     *(sp) = r2;
    0x000576e0 ldr r2, [pc, 0x1fc]                           |     
    0x000576e2 add r2, pc                                    |     r2 = 0xaefc6;
    0x000576e4 bl 0x2b770                                    |     fcn_0002b770 (r0, r1);
    0x000576e8 ldrb r3, [r5]                                 |     r3 = *(r5);
    0x000576ea cmp r3, 0x8a                                  |     
                                                             |     if (r3 == 0x8a) {
    0x000576ec beq.w 0x5780c                                 |         goto label_12;
                                                             |     }
    0x000576f0 ldr r3, [r4, 0x2c]                            |     r3 = *((r4 + 0x2c));
    0x000576f2 movs r2, 0                                    |     r2 = 0;
    0x000576f4 movs r1, 3                                    |     r1 = 3;
    0x000576f6 mov r0, r6                                    |     r0 = r6;
    0x000576f8 strb.w r1, [sp, 0x18]                         |     var_18h = r1;
    0x000576fc movs r1, 0x47                                 |     r1 = 0x47;
    0x000576fe adds r3, 1                                    |     r3++;
    0x00057700 str r2, [sp, 0x20]                            |     var_20h_2 = r2;
    0x00057702 str r3, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r3;
    0x00057704 str r2, [sp]                                  |     *(sp) = r2;
    0x00057706 str r3, [sp, 0x1c]                            |     var_1ch = r3;
    0x00057708 str r2, [sp, 0x2c]                            |     var_2ch = r2;
    0x0005770a strd r2, r2, [sp, 0x24]                       |     __asm ("strd r2, r2, [var_28h]");
    0x0005770e bl 0x29ac4                                    |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057712 ldr.w r8, [r7, 0x3c]                          |     r8 = *((r7 + 0x3c));
    0x00057716 ldr.w sl, [r4]                                |     sl = *(r4);
    0x0005771a cmp.w r8, 0                                   |     
                                                             |     if (r8 == 0) {
    0x0005771e beq.w 0x57848                                 |         goto label_13;
                                                             |     }
                                                             | label_1:
    0x00057722 ldr r3, [pc, 0x1c0]                           |     
    0x00057724 add r2, sp, 0x10                              |     r2 += var_10h;
    0x00057726 movs r1, 0x9b                                 |     r1 = 0x9b;
    0x00057728 mov r0, sl                                    |     r0 = sl;
    0x0005772a add r3, pc                                    |     r3 = 0xaf014;
    0x0005772c str r3, [sp, 0x10]                            |     var_10h = r3;
    0x0005772e movs r3, 1                                    |     r3 = 1;
    0x00057730 str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00057732 movs r3, 0                                    |     r3 = 0;
    0x00057734 bl 0x1db90                                    |     r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00057738 mov r8, r0                                    |     r8 = r0;
                                                             |     if (r0 != 0) {
    0x0005773a cbz r0, 0x57760                               |         
    0x0005773c movs r3, 0x43                                 |         r3 = 0x43;
    0x0005773e strb r3, [r0, 1]                              |         *((r0 + 1)) = r3;
    0x00057740 ldr r3, [r7, 0x3c]                            |         r3 = *((r7 + 0x3c));
    0x00057742 ldr r2, [r3, 0xc]                             |         r2 = *((r3 + 0xc));
                                                             |         if (r2 != 0) {
    0x00057744 cbz r2, 0x57754                               |             
    0x00057746 movs r3, 0                                    |             r3 = 0;
    0x00057748 mov r1, r2                                    |             r1 = r2;
    0x0005774a mov r0, sl                                    |             r0 = sl;
    0x0005774c mov r2, r3                                    |             r2 = r3;
    0x0005774e bl 0x2dd00                                    |             r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x00057752 mov r2, r0                                    |             r2 = r0;
                                                             |         }
    0x00057754 mov r3, r8                                    |         r3 = r8;
    0x00057756 movs r1, 0x34                                 |         r1 = 0x34;
    0x00057758 mov r0, r4                                    |         r0 = r4;
    0x0005775a bl 0x20c10                                    |         r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005775e mov r8, r0                                    |         r8 = r0;
                                                             |     }
    0x00057760 ldr r3, [r7, 0x3c]                            |     r3 = *((r7 + 0x3c));
    0x00057762 ldr r1, [r3, 0xc]                             |     r1 = *((r3 + 0xc));
                                                             |     if (r1 != 0) {
    0x00057764 cbz r1, 0x5776e                               |         
    0x00057766 mov r0, sl                                    |         r0 = sl;
    0x00057768 bl 0x16c0c                                    |         fcn_00016c0c (r0, r1);
    0x0005776c ldr r3, [r7, 0x3c]                            |         r3 = *((r7 + 0x3c));
                                                             |     }
    0x0005776e str.w r8, [r3, 0xc]                           |     __asm ("str.w r8, [r3, 0xc]");
                                                             | label_2:
    0x00057772 movs r3, 0                                    |     r3 = 0;
    0x00057774 mov r1, r7                                    |     r1 = r7;
    0x00057776 add r2, sp, 0x18                              |     r2 += var_18h;
    0x00057778 mov r0, r4                                    |     r0 = r4;
    0x0005777a str r3, [r7, 8]                               |     *((r7 + 8)) = r3;
    0x0005777c bl 0x54c38                                    |     r0 = fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00057780 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x00057782 bne 0x57800                                   |         goto label_14;
                                                             |     }
    0x00057784 ldr r7, [sp, 0x1c]                            |     r7 = var_1ch;
    0x00057786 cmp.w sb, 0                                   |     
    0x0005778a str r7, [r5, 0x1c]                            |     *((r5 + 0x1c)) = r7;
    0x0005778c bne 0x577e0                                   |     
                                                             |     while (1) {
    0x0005778e movs r3, 1                                    |         r3 = 1;
    0x00057790 mov r0, r6                                    |         r0 = r6;
    0x00057792 str r3, [sp]                                  |         *(sp) = r3;
    0x00057794 movs r1, 0x43                                 |         r1 = 0x43;
    0x00057796 ldrd r3, r2, [r5, 0x2c]                       |         __asm ("ldrd r3, r2, [r5, 0x2c]");
    0x0005779a bl 0x29ac4                                    |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005779e movs r3, 0                                    |         r3 = 0;
    0x000577a0 strb r3, [r4, 0x13]                           |         *((r4 + 0x13)) = r3;
    0x000577a2 str r3, [r4, 0x1c]                            |         *((r4 + 0x1c)) = r3;
    0x000577a4 b 0x577c4                                     |         goto label_0;
                                                             | label_9:
    0x000577a6 ldr r2, [pc, 0x140]                           |         
    0x000577a8 ldr r3, [r7, 0x10]                            |         r3 = *((r7 + 0x10));
    0x000577aa str r1, [sp, 0xc]                             |         var_ch = r1;
    0x000577ac add r2, pc                                    |         r2 = 0xaf09a;
    0x000577ae bl 0x2b770                                    |         fcn_0002b770 (r0, r1);
    0x000577b2 ldr r1, [sp, 0xc]                             |         r1 = var_ch;
    0x000577b4 mov r0, r6                                    |         r0 = r6;
    0x000577b6 ldrd r3, r2, [r5, 0x2c]                       |         __asm ("ldrd r3, r2, [r5, 0x2c]");
    0x000577ba str r1, [sp]                                  |         *(sp) = r1;
    0x000577bc movs r1, 9                                    |         r1 = 9;
    0x000577be bl 0x29ac4                                    |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000577c2 ldr r7, [r5, 0x1c]                            |         r7 = *((r5 + 0x1c));
                                                             | label_0:
    0x000577c4 ldr r2, [pc, 0x124]                           |         
    0x000577c6 ldr r3, [pc, 0x110]                           |         r3 = *(0x578da);
    0x000577c8 add r2, pc                                    |         r2 = 0xaf0b8;
    0x000577ca ldr r3, [r2, r3]                              |         r3 = *(0xaf0b8);
    0x000577cc ldr r2, [r3]                                  |         r2 = *(0xaf0b8);
    0x000577ce ldr r3, [sp, 0x34]                            |         r3 = var_0h;
    0x000577d0 eors r2, r3                                   |         r2 ^= r3;
    0x000577d2 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x000577d6 bne 0x578d0                                   |             goto label_15;
                                                             |         }
    0x000577d8 mov r0, r7                                    |         r0 = r7;
    0x000577da add sp, 0x38                                  |         
    0x000577dc pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
    0x000577e0 ldr r3, [r6]                                  |         r3 = *(r6);
    0x000577e2 ldr r2, [r6, 0x6c]                            |         r2 = *((r6 + 0x6c));
    0x000577e4 ldrb.w r3, [r3, 0x57]                         |         r3 = *((r3 + 0x57));
    0x000577e8 it lt                                         |         
                                                             |         if (r2 >= r3) {
    0x000577ea addlt sb, r2, -1                              |             sb = r2 + -1;
                                                             |         }
    0x000577ee cmp r3, 0                                     |         
                                                             |         if (r3 != 0) {
    0x000577f0 bne 0x578b8                                   |             goto label_16;
                                                             |         }
    0x000577f2 ldr r3, [r6, 0x68]                            |         r3 = *((r6 + 0x68));
    0x000577f4 add.w sb, sb, sb, lsl 2                       |         sb += (sb << 2);
    0x000577f8 add.w r3, r3, sb, lsl 2                       |         r3 += (sb << 2);
                                                             | label_6:
    0x000577fc str r2, [r3, 8]                               |         *((r3 + 8)) = r2;
    0x000577fe b 0x5778e                                     |         
                                                             |     }
                                                             | label_14:
    0x00057800 ldrb r3, [r5]                                 |     r3 = *(r5);
    0x00057802 movs r2, 0xb6                                 |     r2 = 0xb6;
    0x00057804 strb r2, [r5]                                 |     *(r5) = r2;
    0x00057806 strb r3, [r5, 2]                              |     *((r5 + 2)) = r3;
                                                             | label_8:
    0x00057808 movs r7, 0                                    |     r7 = 0;
    0x0005780a b 0x577c4                                     |     goto label_0;
                                                             | label_12:
    0x0005780c ldr r3, [r7, 0x1c]                            |     r3 = *((r7 + 0x1c));
    0x0005780e movs r2, 0                                    |     r2 = 0;
    0x00057810 ldr r0, [r4, 0x2c]                            |     r0 = *((r4 + 0x2c));
    0x00057812 str r2, [sp, 0x20]                            |     var_20h_2 = r2;
    0x00057814 ldr r1, [r3]                                  |     r1 = *(r3);
    0x00057816 adds r3, r0, 1                                |     r3 = r0 + 1;
    0x00057818 str r2, [sp, 0x2c]                            |     var_2ch = r2;
    0x0005781a str r3, [sp, 0x1c]                            |     var_1ch = r3;
    0x0005781c add r0, r1                                    |     r0 += r1;
    0x0005781e str r1, [sp, 0x28]                            |     var_28h = r1;
    0x00057820 add r1, r3                                    |     r1 += r3;
    0x00057822 str r0, [r4, 0x2c]                            |     *((r4 + 0x2c)) = r0;
    0x00057824 subs r1, 1                                    |     r1--;
    0x00057826 mov r0, r6                                    |     r0 = r6;
    0x00057828 str r1, [sp]                                  |     *(sp) = r1;
    0x0005782a movs r1, 0xa                                  |     r1 = 0xa;
    0x0005782c strb.w r1, [sp, 0x18]                         |     var_18h = r1;
    0x00057830 movs r1, 0x4b                                 |     r1 = 0x4b;
    0x00057832 str r3, [sp, 0x24]                            |     var_24h = r3;
    0x00057834 bl 0x29ac4                                    |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057838 ldr.w r8, [r7, 0x3c]                          |     r8 = *((r7 + 0x3c));
    0x0005783c ldr.w sl, [r4]                                |     sl = *(r4);
    0x00057840 cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x00057844 bne.w 0x57722                                 |         goto label_1;
                                                             |     }
                                                             | label_13:
    0x00057848 ldr r3, [pc, 0xa4]                            |     
    0x0005784a movs r1, 0x9b                                 |     r1 = 0x9b;
    0x0005784c add r2, sp, 0x10                              |     r2 += var_10h;
    0x0005784e mov r0, sl                                    |     r0 = sl;
    0x00057850 add r3, pc                                    |     r3 = 0xaf144;
    0x00057852 str r3, [sp, 0x10]                            |     var_10h = r3;
    0x00057854 movs r3, 1                                    |     r3 = 1;
    0x00057856 str r3, [sp, 0x14]                            |     var_14h = r3;
    0x00057858 mov r3, r8                                    |     r3 = r8;
    0x0005785a bl 0x1db90                                    |     fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0005785e mov r3, r8                                    |     r3 = r8;
    0x00057860 mov r2, r0                                    |     r2 = r0;
    0x00057862 movs r1, 0x94                                 |     r1 = 0x94;
    0x00057864 mov r0, r4                                    |     r0 = r4;
    0x00057866 bl 0x20c10                                    |     fcn_00020c10 (r0, r1, r2, r3);
    0x0005786a str r0, [r7, 0x3c]                            |     *((r7 + 0x3c)) = r0;
    0x0005786c b 0x57772                                     |     goto label_2;
                                                             | label_11:
    0x0005786e ldrd sb, r2, [r6, 0x6c]                       |     __asm ("ldrd sb, r2, [r6, 0x6c]");
    0x00057872 cmp sb, r2                                    |     
                                                             |     if (sb >= r2) {
    0x00057874 bge 0x578c0                                   |         goto label_17;
                                                             |     }
    0x00057876 add.w r1, sb, sb, lsl 2                       |     r1 = sb + (sb << 2);
    0x0005787a ldr r2, [r6, 0x68]                            |     r2 = *((r6 + 0x68));
    0x0005787c add.w r0, sb, 1                               |     r0 = sb + 1;
    0x00057880 vmov.i32 d16, 0                               |     __asm ("vmov.i32 d16, 0");
    0x00057884 lsls r1, r1, 2                                |     r1 <<= 2;
    0x00057886 str r0, [r6, 0x6c]                            |     *((r6 + 0x6c)) = r0;
    0x00057888 movs r0, 0xe                                  |     r0 = 0xe;
    0x0005788a str r0, [r2, r1]                              |     *((r2 + r1)) = r0;
    0x0005788c add r2, r1                                    |     r2 += r1;
    0x0005788e adds r1, r2, 4                                |     r1 = r2 + 4;
    0x00057890 vst1.32 {d16}, [r1]                           |     __asm ("vst1.32 {d16}, [r1]");
    0x00057894 strd r3, r3, [r2, 0xc]                        |     __asm ("strd r3, r3, [r2, 0xc]");
                                                             | label_7:
    0x00057898 cmp.w sb, 0                                   |     
                                                             |     if (sb == 0) {
    0x0005789c beq.w 0x576d0                                 |         goto label_3;
                                                             |     }
    0x000578a0 ldr r3, [pc, 0x50]                            |     
    0x000578a2 add r3, pc                                    |     r3 = 0xaf19a;
    0x000578a4 b 0x576d8                                     |     goto label_4;
                                                             | label_10:
    0x000578a6 movs r1, 0x4a                                 |     r1 = 0x4a;
    0x000578a8 mov r0, r6                                    |     r0 = r6;
    0x000578aa str r2, [sp]                                  |     *(sp) = r2;
    0x000578ac bl 0x29a7c                                    |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000578b0 ldr.w sl, [r5, 4]                             |     sl = *((r5 + 4));
    0x000578b4 adds r0, 1                                    |     r0++;
    0x000578b6 b 0x576c6                                     |     goto label_5;
                                                             | label_16:
    0x000578b8 ldr r3, [pc, 0x3c]                            |     
    0x000578ba add r3, pc                                    |     r3 = 0xaf1b6;
    0x000578bc adds r3, 4                                    |     r3 += 4;
    0x000578be b 0x577fc                                     |     goto label_6;
                                                             | label_17:
    0x000578c0 mov r2, r3                                    |     r2 = r3;
    0x000578c2 movs r1, 0xe                                  |     r1 = 0xe;
    0x000578c4 mov r0, r6                                    |     r0 = r6;
    0x000578c6 str r3, [sp]                                  |     *(sp) = r3;
    0x000578c8 bl 0x29a7c                                    |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000578cc mov sb, r0                                    |     sb = r0;
    0x000578ce b 0x57898                                     |     goto label_7;
                                                             | label_15:
    0x000578d0 blx 0x9b44                                    |     fcn_00009b44 ();
    0x000578d4 str r4, [sp, 0x288]                           |     *(arg_288h) = r4;
    0x000578d6 movs r4, r0                                   |     r4 = r0;
    0x000578d8 lsls r0, r1, 0x13                             |     r0 = r1 << 0x13;
    0x000578da movs r0, r0                                   |     
    0x000578dc adr r3, 0x88                                  |     r3 = 0x88;
    0x000578de movs r3, r0                                   |     r3 = r0;
    0x000578e0 adr r3, 0xd8                                  |     r3 = 0xd8;
    0x000578e2 movs r3, r0                                   |     r3 = r0;
    0x000578e4 invalid                                       |     
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x578fc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000578fc ()                                      | void fcn_000578fc (int16_t arg_4h, int16_t arg_ch, int16_t arg_14h, int16_t arg_1ch, int16_t arg_2ch, int16_t arg_30h, arithmetic arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_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_3fh;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int32_t var_48h_2;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000578fc svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00057900 mov r5, r0                                        |     r5 = r0;
    0x00057902 ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x00057904 mov fp, r1                                        |     
    0x00057906 sub sp, 0x64                                      |     
    0x00057908 ldr.w r0, [pc, 0x64c]                             |     r0 = *(0x00057f58);
    0x0005790c ldr.w r3, [pc, 0x64c]                             |     
    0x00057910 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x00057912 add r0, pc                                        |     r0 += pc;
    0x00057914 ldr r3, [r0, r3]                                  |     r3 = *((r0 + r3));
    0x00057916 ands r6, r1, 0x40                                 |     r6 = r1 & 0x40;
    0x0005791a ldrd sb, r0, [r4, 0x6c]                           |     __asm ("ldrd sb, r0, [r4, 0x6c]");
    0x0005791e ldr r3, [r3]                                      |     r3 = *(0x57f5c);
    0x00057920 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00057922 mov.w r3, 0                                       |     r3 = 0;
    0x00057924 lsls r0, r0, 0xc                                  |     r0 <<= 0xc;
    0x00057926 str r2, [sp, 0xc]                                 |     var_ch = r2;
                                                                 |     if (r0 != r0) {
    0x00057928 bne.w 0x57c6e                                     |         goto label_23;
                                                                 |     }
    0x0005792c ldr r3, [r5, 0x34]                                |     r3 = *((r5 + 0x34));
    0x0005792e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057930 beq.w 0x57bf2                                     |         goto label_24;
                                                                 |     }
                                                                 | label_2:
    0x00057934 ldr.w r7, [fp, 0xc]                               |     r7 = *(arg_ch);
    0x00057938 ldrb r3, [r7]                                     |     r3 = *(r7);
    0x0005793a cmp r3, 0xb0                                      |     
    0x0005793c it eq                                             |     
                                                                 |     if (r3 != 0xb0) {
    0x0005793e ldrbeq r3, [r7, 2]                                |         r3 = *((r7 + 2));
                                                                 |     }
    0x00057940 cmp r3, 0xb1                                      |     
                                                                 |     if (r3 == 0xb1) {
    0x00057942 beq.w 0x57d38                                     |         goto label_25;
                                                                 |     }
    0x00057946 cmp r3, 0x8a                                      |     
    0x00057948 itett eq                                          |     
                                                                 |     if (r3 != 0x8a) {
    0x0005794a ldreq r3, [r7, 0x14]                              |         r3 = *((r7 + 0x14));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x0005794c movne r8, 1                                       |         r8 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0x8a) {
    0x00057950 ldreq r3, [r3, 0x1c]                              |         r3 = *((r3 + 0x1c));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00057952 ldr.w r8, [r3]                                    |         r8 = *(r3);
                                                                 |     }
    0x00057956 cmp r0, sb                                        |     
    0x00057958 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0005795a str.w r3, [fp, 0x1c]                              |     __asm ("str.w r3, [arg_1ch]");
                                                                 |     if (r0 <= sb) {
    0x0005795e ble.w 0x57d4a                                     |         goto label_26;
                                                                 |     }
    0x00057960 strh r4, [r6, 0xe]                                |     *((r6 + 0xe)) = r4;
                                                                 | label_11:
    0x00057962 add.w r3, sb, sb, lsl 2                           |     r3 = sb + (sb << 2);
    0x00057966 ldr r1, [r4, 0x68]                                |     r1 = *((r4 + 0x68));
    0x00057968 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0005796a add.w r2, sb, 1                                   |     r2 = sb + 1;
    0x0005796e lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00057970 str r2, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r2;
    0x00057972 mov.w lr, 0                                       |     lr = 0;
    0x00057976 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00057978 mov.w ip, 0x76                                    |     
    0x0005797c strd r0, r8, [r2, 4]                              |     __asm ("strd r0, r8, [r2, 4]");
    0x00057980 strd lr, lr, [r2, 0xc]                            |     __asm ("strd lr, lr, [r2, 0xc]");
    0x00057984 str.w ip, [r1, r3]                                |     __asm ("str.w ip, [r1, r3]");
                                                                 | label_12:
    0x00057988 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0005798a movs r2, 1                                        |     r2 = 1;
    0x0005798c mov r1, r8                                        |     r1 = r8;
    0x0005798e bl 0x1e178                                        |     fcn_0001e178 (r0, r1, r2);
    0x00057992 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00057996 ldr.w sl, [fp, 0x14]                              |     sl = *(arg_14h);
    0x0005799a str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0005799c lsls r3, r3, 0x13                                 |     r3 <<= 0x13;
                                                                 |     if (r3 >= r3) {
    0x0005799e bpl 0x57a08                                       |         goto label_27;
                                                                 |     }
    0x000579a0 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x000579a4 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000579a6 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000579a8 bne.w 0x57ca2                                     |         goto label_28;
                                                                 |     }
    0x000579ac ldr.w r3, [pc, 0x5b0]                             |     
    0x000579b0 add r3, pc                                        |     r3 = 0xaf914;
                                                                 | label_4:
    0x000579b2 ldr.w r2, [sl, 0x10]                              |     r2 = *((sl + 0x10));
    0x000579b6 movs r1, 1                                        |     r1 = 1;
    0x000579b8 mov r0, r5                                        |     r0 = r5;
    0x000579ba str r2, [sp]                                      |     *(sp) = r2;
    0x000579bc ldr.w r2, [pc, 0x5a4]                             |     
    0x000579c0 add r2, pc                                        |     r2 = 0xaf928;
    0x000579c2 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x000579c6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000579c8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000579ca cmp r3, r8                                        |     
                                                                 |     if (r3 == r8) {
    0x000579cc beq.w 0x57dce                                     |         goto label_29;
                                                                 |     }
                                                                 |     do {
                                                                 | label_10:
    0x000579d0 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
                                                                 |         if (r3 != 0) {
    0x000579d2 cbz r3, 0x579e2                                   |             
    0x000579d4 mov r2, r3                                        |             r2 = r3;
    0x000579d6 mov r1, sb                                        |             r1 = sb;
    0x000579d8 mvn r3, 7                                         |             r3 = ~7;
    0x000579dc mov r0, r4                                        |             r0 = r4;
    0x000579de bl 0x1ec70                                        |             fcn_0001ec70 (r0, r1, r2);
                                                                 |         }
    0x000579e2 cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x000579e4 bne.w 0x57c72                                     |             goto label_30;
                                                                 |         }
                                                                 | label_3:
    0x000579e8 ldr.w r2, [pc, 0x57c]                             |         
    0x000579ec ldr.w r3, [pc, 0x56c]                             |         r3 = *(0x57f5c);
    0x000579f0 add r2, pc                                        |         r2 = 0xaf95c;
    0x000579f2 ldr r3, [r2, r3]                                  |         r3 = *(0xaf95c);
    0x000579f4 ldr r2, [r3]                                      |         r2 = *(0xaf95c);
    0x000579f6 ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x000579f8 eors r2, r3                                       |         r2 ^= r3;
    0x000579fa mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000579fe bne.w 0x57f50                                     |             goto label_31;
                                                                 |         }
    0x00057a02 add sp, 0x64                                      |         
    0x00057a04 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_27:
    0x00057a08 cmp.w sl, 0                                       |         
    0x00057a0c beq 0x579d0                                       |         
                                                                 |     } while (sl == 0);
    0x00057a0e mov r0, r7                                        |     r0 = r7;
    0x00057a10 bl 0xd480                                         |     r0 = fcn_0000d480 (r0);
    0x00057a14 cmp r0, 0x40                                      |     
    0x00057a16 it ls                                             |     
                                                                 |     if (r0 > 0x40) {
    0x00057a18 movls r0, 0x41                                    |         r0 = 0x41;
                                                                 |     }
                                                                 |     if (r0 > 0x40) {
    0x00057a1a bhi.w 0x57cb4                                     |         goto label_32;
                                                                 |     }
    0x00057a1e ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x00057a20 strb.w r0, [sp, 0x3f]                             |     var_3fh = r0;
                                                                 |     if (r7 != 0) {
    0x00057a24 cbz r7, 0x57a32                                   |         
                                                                 | label_5:
    0x00057a26 ldr.w r1, [fp, 0xc]                               |         r1 = *(arg_ch);
    0x00057a2a mov r0, r5                                        |         r0 = r5;
    0x00057a2c bl 0x27e14                                        |         fcn_00027e14 (r0, r1);
    0x00057a30 str r0, [r7, 0x14]                                |         *((r7 + 0x14)) = r0;
                                                                 |     }
                                                                 | label_6:
    0x00057a32 ldrb r3, [r5, 0x13]                               |     r3 = *((r5 + 0x13));
    0x00057a34 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057a36 beq.w 0x57cc8                                     |         goto label_33;
                                                                 |     }
    0x00057a3a subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x00057a3c uxtb r1, r1                                       |     r1 = (int8_t) r1;
    0x00057a3e add.w r2, r1, 0x26                                |     r2 = r1 + 0x26;
    0x00057a42 strb r1, [r5, 0x13]                               |     *((r5 + 0x13)) = r1;
    0x00057a44 ldr.w r8, [r5, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r8 = *((r5 + offset_0));
    0x00057a48 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00057a4a beq.w 0x57f54                                     |         goto label_34;
                                                                 |     }
    0x00057a4e subs r3, 2                                        |     r3 -= 2;
    0x00057a50 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00057a52 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x00057a54 adds r3, 0x26                                     |     r3 += 0x26;
    0x00057a56 ldr.w r3, [r5, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r3 = *((r5 + offset_1));
    0x00057a5a str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 | label_7:
    0x00057a5c ldr.w ip, [sl]                                    |     ip = *(sl);
    0x00057a60 cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x00057a64 ble.w 0x57d06                                     |         goto label_35;
                                                                 |     }
    0x00057a68 ldr.w r3, [pc, 0x500]                             |     r3 = *(0x00057f6c);
    0x00057a6c mov r7, r8                                        |     r7 = r8;
    0x00057a6e str.w sb, [sp, 0x24]                              |     __asm ("str.w sb, [var_24h]");
    0x00057a72 add.w sl, sl, 0x18                                |     sl += 0x18;
    0x00057a76 str.w fp, [sp, 0x1c]                              |     __asm ("str.w fp, [var_1ch]");
    0x00057a7a mov r8, r5                                        |     r8 = r5;
    0x00057a7c add r3, pc                                        |     r3 += pc;
    0x00057a7e ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x00057a82 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00057a84 mov fp, ip                                        |     
    0x00057a86 ldr.w r3, [pc, 0x4e8]                             |     r3 = *(0x00057f70);
    0x00057a8a add r3, pc                                        |     r3 += pc;
    0x00057a8c str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00057a8e b 0x57b50                                         |     
                                                                 |     while (r6 == 0) {
                                                                 | label_1:
    0x00057a90 movs r6, 0                                        |         r6 = 0;
                                                                 | label_0:
    0x00057a92 ldr.w r3, [r8, 8]                                 |         r3 = *((r8 + 8));
                                                                 |         if (r3 != 0) {
    0x00057a96 cbz r3, 0x57aa2                                   |             
    0x00057a98 mov r1, r5                                        |             r1 = r5;
    0x00057a9a mov r2, r7                                        |             r2 = r7;
    0x00057a9c mov r0, r8                                        |             r0 = r8;
    0x00057a9e bl 0x5aa10                                        |             fcn_0005aa10 (r0, r1, r2);
                                                                 |         }
    0x00057aa2 ldrd r0, r3, [r4, 0x6c]                           |         __asm ("ldrd r0, r3, [r4, 0x6c]");
    0x00057aa6 cmp r0, r3                                        |         
                                                                 |         if (r0 >= r3) {
    0x00057aa8 bge.w 0x57cd8                                     |             goto label_36;
                                                                 |         }
    0x00057aac ldr r2, [r4, 0x68]                                |         r2 = *((r4 + 0x68));
    0x00057aae add.w r3, r0, r0, lsl 2                           |         r3 = r0 + (r0 << 2);
    0x00057ab2 adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x00057ab4 movs r5, 0                                        |         r5 = 0;
    0x00057ab6 str r1, [r4, 0x6c]                                |         *((r4 + 0x6c)) = r1;
    0x00057ab8 movs r1, 0x61                                     |         r1 = 0x61;
    0x00057aba add.w ip, r2, r3, lsl 2                           |         
    0x00057abe str.w r5, [ip, 0x10]                              |         __asm ("str.w r5, [ip, 0x10]");
    0x00057ac2 movs r5, 1                                        |         r5 = 1;
    0x00057ac4 str.w r7, [ip, 4]                                 |         __asm ("str.w r7, [ip, 4]");
    0x00057ac8 strd r5, sb, [ip, 8]                              |         __asm ("strd r5, sb, [ip, 8]");
    0x00057acc str.w r1, [r2, r3, lsl 2]                         |         __asm ("str.w r1, [r2, r3, lsl 2]");
                                                                 | label_8:
    0x00057ad0 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00057ad2 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 == 0) {
    0x00057ad6 cbnz r3, 0x57afc                                  |             
    0x00057ad8 cmp r0, 0                                         |             
    0x00057ada ldr r1, [r4, 0x68]                                |             r1 = *((r4 + 0x68));
    0x00057adc it lt                                             |             
                                                                 |             if (r0 >= 0) {
    0x00057ade ldrlt r0, [r4, 0x6c]                              |                 r0 = *((r4 + 0x6c));
                                                                 |             }
    0x00057ae0 mov.w r3, 1                                       |             r3 = 1;
    0x00057ae4 add.w r2, sp, 0x3f                                |             r2 += var_3fh;
    0x00057ae8 it lt                                             |             
                                                                 |             if (r0 >= 0) {
    0x00057aea addlt r0, r0, -1                                  |                 r0 += -1;
                                                                 |             }
    0x00057aee add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x00057af2 add.w r1, r1, r0, lsl 2                           |             r1 += (r0 << 2);
    0x00057af6 mov r0, r4                                        |             r0 = r4;
    0x00057af8 bl 0x1ebdc                                        |             fcn_0001ebdc (r0, r1, r2, r3);
                                                                 |         }
    0x00057afc ldrd r0, r3, [r4, 0x6c]                           |         __asm ("ldrd r0, r3, [r4, 0x6c]");
    0x00057b00 cmp r0, r3                                        |         
                                                                 |         if (r0 >= r3) {
    0x00057b02 bge.w 0x57cea                                     |             goto label_37;
                                                                 |         }
    0x00057b06 ldr r2, [r4, 0x68]                                |         r2 = *((r4 + 0x68));
    0x00057b08 add.w r3, r0, r0, lsl 2                           |         r3 = r0 + (r0 << 2);
    0x00057b0c adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x00057b0e movs r5, 0                                        |         r5 = 0;
    0x00057b10 str r1, [r4, 0x6c]                                |         *((r4 + 0x6c)) = r1;
    0x00057b12 movs r1, 0x8a                                     |         r1 = 0x8a;
    0x00057b14 add.w ip, r2, r3, lsl 2                           |         
    0x00057b18 str.w r5, [ip, 0x10]                              |         __asm ("str.w r5, [ip, 0x10]");
    0x00057b1c ldr r5, [sp, 0xc]                                 |         r5 = var_ch;
    0x00057b1e str.w r7, [ip, 0xc]                               |         __asm ("str.w r7, [ip, 0xc]");
    0x00057b22 strd r5, sb, [ip, 4]                              |         __asm ("strd r5, sb, [ip, 4]");
    0x00057b26 str.w r1, [r2, r3, lsl 2]                         |         __asm ("str.w r1, [r2, r3, lsl 2]");
                                                                 | label_9:
    0x00057b2a ldr r3, [r4]                                      |         r3 = *(r4);
    0x00057b2c ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 == 0) {
    0x00057b30 cbnz r3, 0x57b44                                  |             
    0x00057b32 ldr r3, [r4, 0x68]                                |             r3 = *((r4 + 0x68));
    0x00057b34 add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x00057b38 movs r2, 1                                        |             r2 = 1;
    0x00057b3a add.w r3, r3, r0, lsl 2                           |             r3 += (r0 << 2);
    0x00057b3e str r2, [r3, 0x10]                                |             *((r3 + 0x10)) = r2;
    0x00057b40 movs r2, 0xfd                                     |             r2 = 0xfd;
    0x00057b42 strb r2, [r3, 1]                                  |             *((r3 + 1)) = r2;
                                                                 |         }
    0x00057b44 subs.w fp, fp, 1                                  |         
    0x00057b48 add.w sl, sl, 0x10                                |         sl += 0x10;
                                                                 |         if (fp == fp) {
    0x00057b4c beq.w 0x57cfa                                     |             goto label_38;
                                                                 |         }
    0x00057b50 ldr r5, [sl, -0x10]                               |         r5 = *((sl - 0x10));
    0x00057b54 cmp r6, 0                                         |         
    0x00057b56 beq 0x57a90                                       |         
                                                                 |     }
    0x00057b58 mov.w r3, 1                                       |     r3 = 1;
    0x00057b5c strh.w r3, [sp, 0x54]                             |     var_54h = r3;
    0x00057b60 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00057b62 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00057b64 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00057b66 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00057b68 movs r3, 0                                        |     r3 = 0;
    0x00057b6a str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00057b6c cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00057b6e beq 0x57a92                                       |         goto label_0;
                                                                 |     }
    0x00057b70 mov r1, r5                                        |     r1 = r5;
    0x00057b72 add r0, sp, 0x40                                  |     r0 += var_40h;
    0x00057b74 bl 0x2cd88                                        |     fcn_0002cd88 (r0, r1);
    0x00057b78 ldrh.w r3, [sp, 0x54]                             |     r3 = var_54h;
    0x00057b7c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00057b7e bne 0x57a92                                       |         goto label_0;
                                                                 |     }
    0x00057b80 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00057b82 ldrb.w r3, [r0, 0x57]                             |     r3 = *((r0 + 0x57));
    0x00057b86 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     if (r3 == 0) {
    0x00057b88 cbnz r3, 0x57be6                                  |         
    0x00057b8a subs r6, 1                                        |         r6--;
    0x00057b8c ldr r2, [r4, 0x68]                                |         r2 = *((r4 + 0x68));
    0x00057b8e add.w r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
    0x00057b92 lsls r3, r6, 2                                    |         r3 = r6 << 2;
    0x00057b94 strd r3, r2, [sp, 0x30]                           |         __asm ("strd r3, r2, [var_34h]");
    0x00057b98 add r2, r3                                        |         r2 += r3;
    0x00057b9a mov r1, r2                                        |         r1 = r2;
    0x00057b9c ldr r2, [r2, 0x10]                                |         r2 = *((r2 + 0x10));
    0x00057b9e str r1, [sp, 0x2c]                                |         var_2ch = r1;
    0x00057ba0 ldrsb.w r1, [r1, 1]                               |         r1 = *((r1 + 1));
    0x00057ba4 bl 0x187b8                                        |         fcn_000187b8 (r0);
    0x00057ba8 ldrd r3, r2, [sp, 0x28]                           |         __asm ("ldrd r3, r2, [var_28h]");
    0x00057bac mov.w r1, 0xb8                                    |         r1 = 0xb8;
    0x00057bb0 str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
    0x00057bb2 ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x00057bb4 strh.w r1, [r2, r6, lsl 2]                        |         offset_2 = r6 << 2;
                                                                 |         *((r2 + offset_2)) = r1;
    0x00057bb8 ldr r0, [r4]                                      |         r0 = *(r4);
    0x00057bba ldrb.w r2, [r0, 0x57]                             |         r2 = *((r0 + 0x57));
    0x00057bbe str r2, [sp, 0x28]                                |         var_28h = r2;
                                                                 |         if (r2 != 0) {
    0x00057bc0 cbnz r2, 0x57be6                                  |             goto label_39;
                                                                 |         }
    0x00057bc2 ldr r6, [sp, 0x30]                                |         r6 = var_30h;
    0x00057bc4 ldr r3, [r4, 0x68]                                |         r3 = *((r4 + 0x68));
    0x00057bc6 adds r6, 0x14                                     |         r6 += 0x14;
    0x00057bc8 str r3, [sp, 0x2c]                                |         var_2ch = r3;
    0x00057bca add r3, r6                                        |         r3 += r6;
    0x00057bcc ldr r2, [r3, 0x10]                                |         r2 = *((r3 + 0x10));
    0x00057bce ldrsb.w r1, [r3, 1]                               |         r1 = *((r3 + 1));
    0x00057bd2 str r3, [sp, 0x30]                                |         var_30h = r3;
    0x00057bd4 bl 0x187b8                                        |         fcn_000187b8 (r0);
    0x00057bd8 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x00057bda mov.w r1, 0xb8                                    |         r1 = 0xb8;
    0x00057bde ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00057be0 str r2, [r3, 0x10]                                |         *((r3 + 0x10)) = r2;
    0x00057be2 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00057be4 strh r1, [r3, r6]                                 |         *((r3 + r6)) = r1;
                                                                 |     }
                                                                 | label_39:
    0x00057be6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00057be8 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00057bea bic r3, r3, 0x2000000                             |     r3 = BIT_MASK (r3, 0x2000000);
    0x00057bee str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x00057bf0 b 0x57a90                                         |     goto label_1;
                                                                 | label_24:
    0x00057bf2 ands r2, r1, 0x2000000                            |     r2 = r1 & 0x2000000;
                                                                 |     if (r2 != r1) {
    0x00057bf6 bne.w 0x57d5e                                     |         goto label_40;
                                                                 |     }
    0x00057bfa ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x00057bfc cmp r0, sb                                        |     
    0x00057bfe orr r1, r1, 0x2000000                             |     r1 |= 0x2000000;
    0x00057c02 str.w r1, [fp, 4]                                 |     __asm ("str.w r1, [arg_4h]");
    0x00057c06 add.w r3, r3, 1                                   |     r3++;
    0x00057c0a str r3, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r3;
    0x00057c0c str.w r3, [fp, 0x30]                              |     __asm ("str.w r3, [arg_30h]");
                                                                 |     if (r0 <= sb) {
    0x00057c10 ble.w 0x57e76                                     |         goto label_41;
                                                                 |     }
    0x00057c14 add.w ip, sb, sb, lsl 2                           |     
    0x00057c18 ldr.w lr, [r4, 0x68]                              |     
    0x00057c1c add.w r1, sb, 1                                   |     r1 = sb + 1;
    0x00057c20 lsl.w ip, ip, 2                                   |     
    0x00057c24 mov r6, r1                                        |     r6 = r1;
    0x00057c26 mov.w r8, 0x4a                                    |     r8 = 0x4a;
    0x00057c2a str r1, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r1;
    0x00057c2c add.w r7, lr, ip                                  |     r7 = lr + ip;
    0x00057c30 strd r3, r2, [r7, 8]                              |     __asm ("strd r3, r2, [r7, 8]");
    0x00057c34 str r2, [r7, 0x10]                                |     *((r7 + 0x10)) = r2;
    0x00057c36 str.w r8, [lr, ip]                                |     __asm ("str.w r8, [lr, ip]");
    0x00057c3a str r2, [r7, 4]                                   |     *((r7 + 4)) = r2;
                                                                 | label_14:
    0x00057c3c cmp r0, r6                                        |     
    0x00057c3e str.w r1, [fp, 0x2c]                              |     __asm ("str.w r1, [arg_2ch]");
                                                                 |     if (r0 <= r6) {
    0x00057c42 ble.w 0x57ef6                                     |         goto label_42;
                                                                 |     }
    0x00057c46 add.w r2, r6, r6, lsl 2                           |     r2 = r6 + (r6 << 2);
    0x00057c4a ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x00057c4c add.w sb, r6, 1                                   |     sb = r6 + 1;
    0x00057c50 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00057c54 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00057c56 movs r7, 0xe                                      |     r7 = 0xe;
    0x00057c58 str.w sb, [r4, 0x6c]                              |     __asm ("str.w sb, [r4, 0x6c]");
    0x00057c5c movs r1, 0                                        |     r1 = 0;
    0x00057c5e str r7, [r3, r2]                                  |     *((r3 + r2)) = r7;
    0x00057c60 add r3, r2                                        |     r3 += r2;
    0x00057c62 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00057c64 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00057c68 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
    0x00057c6c b 0x57934                                         |     goto label_2;
                                                                 | label_23:
    0x00057c6e movs r6, 0                                        |     r6 = 0;
    0x00057c70 b 0x57934                                         |     goto label_2;
                                                                 | label_30:
    0x00057c72 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00057c74 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x00057c76 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00057c7a it lt                                             |     
                                                                 |     if (r6 >= 0) {
    0x00057c7c addlt r6, r2, -1                                  |         r6 = r2 + -1;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00057c80 cbz r3, 0x57ca8                                   |         goto label_43;
                                                                 |     }
    0x00057c82 ldr r3, [pc, 0x2f0]                               |     
    0x00057c84 add r3, pc                                        |     r3 = 0xafbfe;
    0x00057c86 adds r3, 4                                        |     r3 += 4;
                                                                 |     do {
    0x00057c88 movs r1, 1                                        |         r1 = 1;
    0x00057c8a str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00057c8c mov r0, r4                                        |         r0 = r4;
    0x00057c8e ldrd r3, r2, [fp, 0x2c]                           |         __asm ("ldrd r3, r2, [arg_2ch]");
    0x00057c92 str r1, [sp]                                      |         *(sp) = r1;
    0x00057c94 movs r1, 0x43                                     |         r1 = 0x43;
    0x00057c96 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00057c9a movs r3, 0                                        |         r3 = 0;
    0x00057c9c strb r3, [r5, 0x13]                               |         *((r5 + 0x13)) = r3;
    0x00057c9e str r3, [r5, 0x1c]                                |         *((r5 + 0x1c)) = r3;
    0x00057ca0 b 0x579e8                                         |         goto label_3;
                                                                 | label_28:
    0x00057ca2 ldr r3, [pc, 0x2d4]                               |         
    0x00057ca4 add r3, pc                                        |         r3 = 0xafc22;
    0x00057ca6 b 0x579b2                                         |         goto label_4;
                                                                 | label_43:
    0x00057ca8 ldr r3, [r4, 0x68]                                |         r3 = *((r4 + 0x68));
    0x00057caa add.w r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
    0x00057cae add.w r3, r3, r6, lsl 2                           |         r3 += (r6 << 2);
    0x00057cb2 b 0x57c88                                         |         
                                                                 |     } while (1);
                                                                 | label_32:
    0x00057cb4 ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x00057cb6 cmp r0, 0x45                                      |     
    0x00057cb8 it eq                                             |     
                                                                 |     if (r0 != 0x45) {
    0x00057cba moveq r0, 0x43                                    |         r0 = 0x43;
                                                                 |     }
    0x00057cbc strb.w r0, [sp, 0x3f]                             |     var_3fh = r0;
    0x00057cc0 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00057cc2 bne.w 0x57a26                                     |         goto label_5;
                                                                 |     }
    0x00057cc6 b 0x57a32                                         |     goto label_6;
                                                                 | label_33:
    0x00057cc8 ldr r2, [r5, 0x2c]                                |     r2 = *((r5 + 0x2c));
    0x00057cca add.w r8, r2, 1                                   |     r8 = r2 + 1;
    0x00057cce mov r3, r8                                        |     r3 = r8;
                                                                 | label_22:
    0x00057cd0 adds r3, 1                                        |     r3++;
    0x00057cd2 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00057cd4 str r3, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r3;
    0x00057cd6 b 0x57a5c                                         |     goto label_7;
                                                                 | label_36:
    0x00057cd8 movs r3, 1                                        |     r3 = 1;
    0x00057cda mov r2, r7                                        |     r2 = r7;
    0x00057cdc movs r1, 0x61                                     |     r1 = 0x61;
    0x00057cde mov r0, r4                                        |     r0 = r4;
    0x00057ce0 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00057ce4 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00057ce8 b 0x57ad0                                         |     goto label_8;
                                                                 | label_37:
    0x00057cea ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00057cec mov r3, sb                                        |     r3 = sb;
    0x00057cee movs r1, 0x8a                                     |     r1 = 0x8a;
    0x00057cf0 mov r0, r4                                        |     r0 = r4;
    0x00057cf2 str r7, [sp]                                      |     *(sp) = r7;
    0x00057cf4 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00057cf8 b 0x57b2a                                         |     goto label_9;
                                                                 | label_38:
    0x00057cfa ldr.w sb, [sp, 0x24]                              |     sb = var_24h;
    0x00057cfe mov r5, r8                                        |     r5 = r8;
    0x00057d00 ldr.w fp, [sp, 0x1c]                              |     fp = var_1ch;
    0x00057d04 mov r8, r7                                        |     r8 = r7;
                                                                 | label_35:
    0x00057d06 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00057d0a beq 0x57d1e                                       |         goto label_44;
                                                                 |     }
    0x00057d0c ldrb r3, [r5, 0x13]                               |     r3 = *((r5 + 0x13));
    0x00057d0e cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00057d10 bhi.w 0x579d0                                     |         goto label_10;
                                                                 |     }
    0x00057d14 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00057d16 adds r3, 0x26                                     |     r3 += 0x26;
    0x00057d18 strb r1, [r5, 0x13]                               |     *((r5 + 0x13)) = r1;
    0x00057d1a str.w r8, [r5, r3, lsl 2]                         |     __asm ("str.w r8, [r5, r3, lsl 2]");
                                                                 | label_44:
    0x00057d1e ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00057d20 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00057d22 beq.w 0x579d0                                     |         goto label_10;
                                                                 |     }
    0x00057d26 ldrb r3, [r5, 0x13]                               |     r3 = *((r5 + 0x13));
    0x00057d28 cmp r3, 7                                         |     
    0x00057d2a itttt ls                                          |     
                                                                 |     if (r3 > 7) {
    0x00057d2c addls r2, r3, 1                                   |         r2 = r3 + 1;
                                                                 |     }
                                                                 |     if (r3 > 7) {
    0x00057d2e addls r3, 0x26                                    |         r3 += 0x26;
                                                                 |     }
                                                                 |     if (r3 > 7) {
    0x00057d30 strbls r2, [r5, 0x13]                             |         *((r5 + 0x13)) = r2;
                                                                 |     }
                                                                 |     if (r3 > 7) {
    0x00057d32 strls r1, [r5, r3, lsl 2]                         |         offset_3 = r3 << 2;
                                                                 |         *((r5 + offset_3)) = r1;
                                                                 |     }
    0x00057d36 b 0x579d0                                         |     goto label_10;
                                                                 | label_25:
    0x00057d38 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00057d3a cmp r0, sb                                        |     
    0x00057d3c ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x00057d40 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00057d42 str.w r3, [fp, 0x1c]                              |     __asm ("str.w r3, [arg_1ch]");
                                                                 |     if (r0 > sb) {
    0x00057d46 bgt.w 0x57962                                     |         goto label_11;
                                                                 |     }
                                                                 | label_26:
    0x00057d4a movs r3, 0                                        |     r3 = 0;
    0x00057d4c ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00057d4e str r3, [sp]                                      |     *(sp) = r3;
    0x00057d50 movs r1, 0x76                                     |     r1 = 0x76;
    0x00057d52 mov r3, r8                                        |     r3 = r8;
    0x00057d54 mov r0, r4                                        |     r0 = r4;
    0x00057d56 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00057d5a mov sb, r0                                        |     sb = r0;
    0x00057d5c b 0x57988                                         |     goto label_12;
                                                                 | label_40:
    0x00057d5e cmp r0, sb                                        |     
                                                                 |     if (r0 <= sb) {
    0x00057d60 ble.w 0x57f3c                                     |         goto label_45;
                                                                 |     }
    0x00057d64 add.w r0, sb, sb, lsl 2                           |     r0 = sb + (sb << 2);
    0x00057d68 ldr r2, [r4, 0x68]                                |     r2 = *((r4 + 0x68));
    0x00057d6a add.w r6, sb, 1                                   |     r6 = sb + 1;
    0x00057d6e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00057d72 lsls r0, r0, 2                                    |     r0 <<= 2;
    0x00057d74 str r6, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r6;
    0x00057d76 movs r6, 0xe                                      |     r6 = 0xe;
    0x00057d78 str r6, [r2, r0]                                  |     *((r2 + r0)) = r6;
    0x00057d7a add r2, r0                                        |     r2 += r0;
    0x00057d7c adds r0, r2, 4                                    |     r0 = r2 + 4;
    0x00057d7e vst1.32 {d16}, [r0]                               |     __asm ("vst1.32 {d16}, [r0]");
    0x00057d82 strd r3, r3, [r2, 0xc]                            |     __asm ("strd r3, r3, [r2, 0xc]");
                                                                 | label_21:
    0x00057d86 lsls r2, r1, 0x13                                 |     r2 = r1 << 0x13;
                                                                 |     if (r2 < r1) {
    0x00057d88 bmi.w 0x57f0c                                     |         goto label_46;
                                                                 |     }
                                                                 | label_18:
    0x00057d8c movs r5, 0                                        |     r5 = 0;
    0x00057d8e movs r1, 9                                        |     r1 = 9;
    0x00057d90 str r5, [sp]                                      |     *(sp) = r5;
    0x00057d92 mov r0, r4                                        |     r0 = r4;
    0x00057d94 ldrd r3, r2, [fp, 0x2c]                           |     __asm ("ldrd r3, r2, [arg_2ch]");
    0x00057d98 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057d9c ldr.w r3, [fp, 0x1c]                              |     r3 = *(arg_1ch);
    0x00057da0 movs r1, 0x73                                     |     r1 = 0x73;
    0x00057da2 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00057da4 mov r0, r4                                        |     r0 = r4;
    0x00057da6 str r5, [sp]                                      |     *(sp) = r5;
    0x00057da8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00057dac ldr r3, [r4]                                      |     r3 = *(r4);
    0x00057dae cmp sb, r5                                        |     
    0x00057db0 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x00057db2 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00057db6 it lt                                             |     
                                                                 |     if (sb >= r5) {
    0x00057db8 addlt sb, r2, -1                                  |         sb = r2 + -1;
                                                                 |     }
    0x00057dbc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00057dbe bne 0x57e6e                                       |         goto label_47;
                                                                 |     }
    0x00057dc0 ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x00057dc2 add.w r1, sb, sb, lsl 2                           |     r1 = sb + (sb << 2);
    0x00057dc6 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 | label_13:
    0x00057dca str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00057dcc b 0x579e8                                         |     goto label_3;
                                                                 | label_29:
    0x00057dce ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00057dd0 movs r2, 0                                        |     r2 = 0;
    0x00057dd2 mov r1, fp                                        |     r1 = fp;
    0x00057dd4 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00057dd6 strd r2, r2, [sp, 0x48]                           |     __asm ("strd r2, r2, [var_48h]");
    0x00057dda str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00057ddc movs r3, 0xb                                      |     r3 = 0xb;
    0x00057dde strb.w r3, [sp, 0x40]                             |     var_40h = r3;
    0x00057de2 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00057de4 bl 0x1ecd8                                        |     fcn_0001ecd8 (r0, r1);
    0x00057de8 movs r2, 0                                        |     r2 = 0;
    0x00057dea str r0, [sp, 0x54]                                |     var_54h = r0;
    0x00057dec mov r1, sl                                        |     r1 = sl;
    0x00057dee str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x00057df0 str.w r2, [sl, 8]                                 |     __asm ("str.w r2, [sl, 8]");
    0x00057df4 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00057df6 bl 0x2db4c                                        |     r0 = fcn_0002db4c (r0, r1, r2, r3);
    0x00057dfa mov r1, r0                                        |     r1 = r0;
    0x00057dfc ldr r0, [r5]                                      |     r0 = *(r5);
    0x00057dfe ldrb.w r3, [r0, 0x57]                             |     r3 = *((r0 + 0x57));
    0x00057e02 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057e04 beq.w 0x57f20                                     |         goto label_48;
                                                                 |     }
    0x00057e08 mov.w sl, 1                                       |     sl = 1;
    0x00057e0c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00057e0e beq 0x57eb0                                       |         goto label_49;
                                                                 |     }
                                                                 | label_19:
    0x00057e10 movs r2, 1                                        |     r2 = 1;
    0x00057e12 bl 0x16b48                                        |     fcn_00016b48 (r0, r1, r2);
    0x00057e16 ldr r0, [r5]                                      |     r0 = *(r5);
                                                                 | label_20:
    0x00057e18 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
                                                                 |     if (r3 != 0) {
    0x00057e1a cbz r3, 0x57e22                                   |         
    0x00057e1c mov r1, r3                                        |         r1 = r3;
    0x00057e1e bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x00057e22 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00057e26 bne 0x57eb8                                       |         goto label_50;
                                                                 |     }
    0x00057e28 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x00057e2c ble.w 0x579d0                                     |         goto label_10;
                                                                 |     }
    0x00057e30 ldrd r2, r3, [sp, 0x10]                           |     __asm ("ldrd r2, r3, [var_10h]");
    0x00057e34 str r6, [sp, 0xc]                                 |     var_ch = r6;
    0x00057e36 str r4, [sp, 0x14]                                |     var_14h = r4;
    0x00057e38 adds r2, 0x10                                     |     r2 += 0x10;
    0x00057e3a mov r4, r3                                        |     r4 = r3;
    0x00057e3c mov r6, r2                                        |     r6 = r2;
                                                                 |     do {
    0x00057e3e ldrb r2, [r7]                                     |         r2 = *(r7);
    0x00057e40 cmp r2, 0xb0                                      |         
    0x00057e42 ite eq                                            |         
                                                                 |         if (r2 != 0xb0) {
    0x00057e44 ldrbeq r1, [r7, 2]                                |             r1 = *((r7 + 2));
                                                                 |         }
                                                                 |         if (r2 == 0xb0) {
    0x00057e46 movne r1, r2                                      |             r1 = r2;
                                                                 |         }
    0x00057e48 cmp r1, 0xb1                                      |         
                                                                 |         if (r1 == 0xb1) {
    0x00057e4a beq 0x57ef0                                       |             goto label_51;
                                                                 |         }
    0x00057e4c cmp r1, 0x8a                                      |         
                                                                 |         if (r1 == 0x8a) {
    0x00057e4e beq 0x57e88                                       |             goto label_52;
                                                                 |         }
                                                                 | label_15:
    0x00057e50 mov r1, r7                                        |         r1 = r7;
                                                                 | label_16:
    0x00057e52 ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x00057e54 add.w sl, sl, 1                                   |         sl++;
    0x00057e58 mov r0, r5                                        |         r0 = r5;
    0x00057e5a adds r4, 0x10                                     |         r4 += 0x10;
    0x00057e5c bl 0x27f10                                        |         fcn_00027f10 (r0, r1, r2);
    0x00057e60 cmp sl, r8                                        |         
    0x00057e62 str r0, [r6, 4]!                                  |         *((r6 += 4)) = r0;
    0x00057e66 bne 0x57e3e                                       |         
                                                                 |     } while (sl != r8);
    0x00057e68 ldr r6, [sp, 0xc]                                 |     r6 = var_ch;
    0x00057e6a ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x00057e6c b 0x579d0                                         |     goto label_10;
                                                                 | label_47:
    0x00057e6e ldr r3, [pc, 0x10c]                               |     
    0x00057e70 add r3, pc                                        |     r3 = 0xafdf2;
    0x00057e72 adds r3, 4                                        |     r3 += 4;
    0x00057e74 b 0x57dca                                         |     goto label_13;
                                                                 | label_41:
    0x00057e76 movs r1, 0x4a                                     |     r1 = 0x4a;
    0x00057e78 mov r0, r4                                        |     r0 = r4;
    0x00057e7a str r2, [sp]                                      |     *(sp) = r2;
    0x00057e7c bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00057e80 adds r1, r0, 1                                    |     r1 = r0 + 1;
    0x00057e82 ldrd r6, r0, [r4, 0x6c]                           |     __asm ("ldrd r6, r0, [r4, 0x6c]");
    0x00057e86 b 0x57c3c                                         |     goto label_14;
                                                                 | label_52:
    0x00057e88 ldr r1, [r7, 0x14]                                |     r1 = *((r7 + 0x14));
    0x00057e8a ldr r1, [r1, 0x1c]                                |     r1 = *((r1 + 0x1c));
    0x00057e8c ldr r1, [r1]                                      |     r1 = *(r1);
                                                                 | label_17:
    0x00057e8e cmp r1, 1                                         |     
                                                                 |     if (r1 <= 1) {
    0x00057e90 ble 0x57e50                                       |         goto label_15;
                                                                 |     }
    0x00057e92 ldrb r0, [r7, 2]                                  |     r0 = *((r7 + 2));
    0x00057e94 ldr r1, [r7, 0x14]                                |     r1 = *((r7 + 0x14));
    0x00057e96 cmp r2, 0x8a                                      |     
    0x00057e98 it ne                                             |     
                                                                 |     if (r2 != 0x8a) {
    0x00057e9a cmpne r0, 0x8a                                    |         __asm ("cmpne r0, 0x8a");
                                                                 |     }
    0x00057e9c iteet eq                                          |     
                                                                 |     if (r2 != 0x8a) {
    0x00057e9e ldreq r2, [r1, 0x1c]                              |         r2 = *((r1 + 0x1c));
                                                                 |     }
                                                                 |     if (r2 == 0x8a) {
    0x00057ea0 addne r1, r1, sl, lsl 4                           |         r1 += (sl << 4);
                                                                 |     }
                                                                 |     if (r2 != 0x8a) {
    0x00057ea4 ldreq r1, [r1, 8]                                 |         r1 = *((r1 + 8));
                                                                 |     }
                                                                 |     if (r2 == 0x8a) {
    0x00057ea6 add.w r2, r2, sl, lsl 4                           |         r2 += (sl << 4);
                                                                 |     }
    0x00057eaa it eq                                             |     
                                                                 |     if (r2 != 0x8a) {
    0x00057eac ldreq r1, [r2, 8]                                 |         r1 = *((r2 + 8));
                                                                 |     }
    0x00057eae b 0x57e52                                         |     goto label_16;
                                                                 | label_49:
    0x00057eb0 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
                                                                 |     if (r1 != 0) {
    0x00057eb2 cbz r1, 0x57eb8                                   |         
    0x00057eb4 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
                                                                 | label_50:
    0x00057eb8 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00057eba cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00057ebc beq.w 0x579e8                                     |         goto label_3;
                                                                 |     }
    0x00057ec0 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00057ec2 subs r3, 1                                        |     r3--;
    0x00057ec4 str r3, [r2]                                      |     *(r2) = r3;
    0x00057ec6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00057ec8 bne.w 0x579e8                                     |         goto label_3;
                                                                 |     }
    0x00057ecc ldr r2, [pc, 0xb0]                                |     
    0x00057ece ldr r3, [pc, 0x8c]                                |     r3 = *(0x57f5e);
    0x00057ed0 add r2, pc                                        |     r2 = 0xafe54;
    0x00057ed2 ldr r3, [r2, r3]                                  |     r3 = *(0xafe54);
    0x00057ed4 ldr r2, [r3]                                      |     r2 = *(0xafe54);
    0x00057ed6 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00057ed8 eors r2, r3                                       |     r2 ^= r3;
    0x00057eda mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00057ede bne 0x57f50                                       |         goto label_31;
                                                                 |     }
    0x00057ee0 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00057ee2 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00057ee4 mov r1, r3                                        |     r1 = r3;
    0x00057ee6 add sp, 0x64                                      |     
    0x00057ee8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00057eec b.w 0x137d0                                       |     void (*0x137d0)() ();
                                                                 | label_51:
    0x00057ef0 ldr r1, [r7, 0x14]                                |     r1 = *((r7 + 0x14));
    0x00057ef2 ldr r1, [r1]                                      |     r1 = *(r1);
    0x00057ef4 b 0x57e8e                                         |     goto label_17;
                                                                 | label_42:
    0x00057ef6 movs r3, 0                                        |     r3 = 0;
    0x00057ef8 movs r1, 0xe                                      |     r1 = 0xe;
    0x00057efa mov r2, r3                                        |     r2 = r3;
    0x00057efc mov r0, r4                                        |     r0 = r4;
    0x00057efe str r3, [sp]                                      |     *(sp) = r3;
    0x00057f00 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00057f04 mov r6, r0                                        |     r6 = r0;
    0x00057f06 ldrd sb, r0, [r4, 0x6c]                           |     __asm ("ldrd sb, r0, [r4, 0x6c]");
    0x00057f0a b 0x57934                                         |     goto label_2;
                                                                 | label_46:
    0x00057f0c ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x00057f10 mov r0, r5                                        |     r0 = r5;
    0x00057f12 ldr r2, [pc, 0x70]                                |     
    0x00057f14 movs r1, 0                                        |     r1 = 0;
    0x00057f16 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00057f18 add r2, pc                                        |     r2 = 0xafea2;
    0x00057f1a bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00057f1e b 0x57d8c                                         |     goto label_18;
                                                                 | label_48:
    0x00057f20 add r2, sp, 0x40                                  |     r2 += var_40h;
    0x00057f22 mov r0, r5                                        |     r0 = r5;
    0x00057f24 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00057f26 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00057f2a ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00057f2c mov sl, r0                                        |     sl = r0;
    0x00057f2e ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00057f30 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00057f32 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00057f34 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00057f36 bne.w 0x57e10                                     |         goto label_19;
                                                                 |     }
    0x00057f3a b 0x57e18                                         |     goto label_20;
                                                                 | label_45:
    0x00057f3c movs r1, 0xe                                      |     r1 = 0xe;
    0x00057f3e mov r2, r3                                        |     r2 = r3;
    0x00057f40 mov r0, r4                                        |     r0 = r4;
    0x00057f42 str r3, [sp]                                      |     *(sp) = r3;
    0x00057f44 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00057f48 ldr.w r1, [fp, 4]                                 |     r1 = *(arg_4h);
    0x00057f4c mov sb, r0                                        |     sb = r0;
    0x00057f4e b 0x57d86                                         |     goto label_21;
                                                                 | label_31:
    0x00057f50 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_34:
    0x00057f54 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x00057f56 b 0x57cd0                                         |     goto label_22;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x57f88 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00057f88 ()                                      | void fcn_00057f88 (int16_t arg_1h, int16_t arg_ch, int16_t arg_14h, int16_t arg_20h, arithmetic x, int16_t arg_8ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00057f88 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00057f8c sub sp, 0x64                                      |     
    0x00057f8e str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00057f90 mov sl, r0                                        |     sl = r0;
    0x00057f92 mov fp, r1                                        |     
    0x00057f94 ldr.w r2, [pc, 0x75c]                             |     
    0x00057f98 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00057f9a ldr r0, [sp, 0x88]                                |     r0 = *(x);
    0x00057f9c ldr.w r3, [pc, 0x758]                             |     r3 = *(0x586f8);
    0x00057fa0 add r2, pc                                        |     r2 = 0xb0698;
    0x00057fa2 str r0, [sp, 8]                                   |     var_8h = r0;
    0x00057fa4 ldr r3, [r2, r3]                                  |     
    0x00057fa6 ldr r2, [sp, 0x8c]                                |     r2 = *(arg_8ch);
    0x00057fa8 ldr r3, [r3]                                      |     r3 = *(0xb0698);
    0x00057faa str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00057fac mov.w r3, 0                                       |     r3 = 0;
    0x00057fb0 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x00057fb4 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00057fb6 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00057fb8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057fba beq.w 0x5813c                                     |         goto label_35;
                                                                 |     }
                                                                 | label_3:
    0x00057fbe ldr.w r3, [sl, 0x28]                              |     r3 = *((sl + 0x28));
    0x00057fc2 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00057fc4 adds r3, 1                                        |     r3++;
    0x00057fc6 str.w r3, [sl, 0x28]                              |     __asm ("str.w r3, [sl, 0x28]");
    0x00057fca ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00057fcc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00057fce beq.w 0x5814e                                     |         goto label_36;
                                                                 |     }
    0x00057fd2 ldr.w r7, [fp, 4]                                 |     r7 = *(arg_8ch);
    0x00057fd6 lsls r0, r7, 0x13                                 |     r0 = r7 << 0x13;
                                                                 |     if (r0 >= r7) {
    0x00057fd8 bpl 0x58012                                       |         goto label_37;
                                                                 |     }
    0x00057fda ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x00057fde movs r5, 0                                        |     r5 = 0;
    0x00057fe0 ldr r4, [r3, 0x1c]                                |     r4 = *((r3 + 0x1c));
    0x00057fe2 ldr r6, [r4]                                      |     r6 = *(r4);
    0x00057fe4 cmp r6, 0                                         |     
                                                                 |     if (r6 > 0) {
    0x00057fe6 bgt 0x57ff4                                       |         goto label_38;
                                                                 |     }
    0x00057fe8 b 0x57ffe                                         |     goto label_39;
                                                                 |     do {
    0x00057fea adds r5, 1                                        |         r5++;
    0x00057fec adds r4, 0x10                                     |         r4 += 0x10;
    0x00057fee cmp r5, r6                                        |         
                                                                 |         if (r5 == r6) {
    0x00057ff0 beq.w 0x581de                                     |             goto label_40;
                                                                 |         }
                                                                 | label_38:
    0x00057ff4 ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x00057ff6 bl 0xc0c4                                         |         r0 = fcn_0000c0c4 (r0);
    0x00057ffa cmp r0, 0                                         |         
    0x00057ffc beq 0x57fea                                       |         
                                                                 |     } while (r0 == 0);
                                                                 | label_39:
    0x00057ffe cmp r6, r5                                        |     
                                                                 |     if (r6 == r5) {
    0x00058000 beq.w 0x581de                                     |         goto label_40;
                                                                 |     }
    0x00058004 ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x00058008 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005800a bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x0005800c ldr.w r7, [fp, 4]                                 |     r7 = *(arg_8ch);
    0x00058010 b 0x5815e                                         |     goto label_8;
                                                                 | label_37:
    0x00058012 ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x00058016 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00058018 beq 0x580b6                                       |         goto label_5;
                                                                 |     }
    0x0005801a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0005801c cmp r3, 3                                         |     
                                                                 |     if (r3 != 3) {
    0x0005801e bne 0x580bc                                       |         goto label_41;
                                                                 |     }
    0x00058020 lsls r3, r7, 0x13                                 |     r3 = r7 << 0x13;
                                                                 |     if (r3 >= r7) {
    0x00058022 bpl 0x580e4                                       |         goto label_42;
                                                                 |     }
                                                                 | label_1:
    0x00058024 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00058026 ldr.w r4, [sl, 0x88]                              |     r4 = *((sl + 0x88));
    0x0005802a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005802c beq.w 0x581f4                                     |         goto label_43;
                                                                 |     }
    0x00058030 ldr.w r5, [sl, 0x2c]                              |     r5 = *((sl + 0x2c));
    0x00058034 mov r1, fp                                        |     r1 = fp;
    0x00058036 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00058038 mov r0, sl                                        |     r0 = sl;
    0x0005803a ldr r6, [sp, 0xc]                                 |     r6 = var_ch;
    0x0005803c adds r5, 1                                        |     r5++;
    0x0005803e str.w r5, [sl, 0x2c]                              |     __asm ("str.w r5, [sl, 0x2c]");
    0x00058042 mov r2, r6                                        |     r2 = r6;
    0x00058044 str r5, [r3]                                      |     *(r3) = r5;
    0x00058046 bl 0x578fc                                        |     fcn_000578fc (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     if (r5 != 0) {
    0x0005804a cbz r5, 0x58056                                   |         
    0x0005804c ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0005804e mov r2, r5                                        |         r2 = r5;
    0x00058050 mov r1, r6                                        |         r1 = r6;
    0x00058052 bl 0x2ab48                                        |         fcn_0002ab48 (r0, r1, r2);
                                                                 |     }
                                                                 | label_0:
    0x00058056 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00058058 movs r5, 2                                        |     r5 = 2;
    0x0005805a str.w r4, [sl, 0x88]                              |     __asm ("str.w r4, [sl, 0x88]");
                                                                 |     if (r3 == 0) {
    0x0005805e cbz r3, 0x5808e                                   |         goto label_2;
                                                                 |     }
    0x00058060 ldr.w r4, [fp, 0xc]                               |     r4 = *(arg_ch);
    0x00058064 movs r5, 2                                        |     r5 = 2;
                                                                 | label_10:
    0x00058066 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00058068 cmp r3, 0xb0                                      |     
    0x0005806a it eq                                             |     
                                                                 |     if (r3 != 0xb0) {
    0x0005806c ldrbeq r3, [r4, 2]                                |         r3 = *((r4 + 2));
                                                                 |     }
    0x0005806e cmp r3, 0xb1                                      |     
                                                                 |     if (r3 == 0xb1) {
    0x00058070 beq.w 0x5820a                                     |         goto label_44;
                                                                 |     }
    0x00058074 cmp r3, 0x8a                                      |     
    0x00058076 it ne                                             |     
                                                                 |     if (r3 == 0x8a) {
    0x00058078 movne r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x0005807a beq.w 0x581be                                     |         goto label_45;
                                                                 |     }
                                                                 | label_6:
    0x0005807e ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00058080 subs r2, r3, 4                                    |     r2 = r3 - 4;
    0x00058082 movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x00058084 str r3, [r2, 4]!                                  |         *((r2 += 4)) = r3;
    0x00058088 adds r3, 1                                        |         r3++;
    0x0005808a cmp r1, r3                                        |         
    0x0005808c bgt 0x58084                                       |         
                                                                 |     } while (r1 > r3);
                                                                 | label_2:
    0x0005808e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00058090 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00058092 str r2, [r3]                                      |     *(r3) = r2;
    0x00058094 ldr.w r2, [pc, 0x664]                             |     
    0x00058098 ldr.w r3, [pc, 0x65c]                             |     r3 = *(0x586f8);
    0x0005809c add r2, pc                                        |     r2 = 0xb079c;
    0x0005809e ldr r3, [r2, r3]                                  |     r3 = *(0xb079c);
    0x000580a0 ldr r2, [r3]                                      |     r2 = *(0xb079c);
    0x000580a2 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000580a4 eors r2, r3                                       |     r2 ^= r3;
    0x000580a6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000580aa bne.w 0x586f0                                     |         goto label_46;
                                                                 |     }
    0x000580ae mov r0, r5                                        |     r0 = r5;
    0x000580b0 add sp, 0x64                                      |     
    0x000580b2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_5:
    0x000580b6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000580b8 cmp r3, 3                                         |     
                                                                 |     if (r3 == 3) {
    0x000580ba beq 0x580e4                                       |         goto label_42;
                                                                 |     }
                                                                 |     do {
                                                                 | label_41:
    0x000580bc ldr.w r4, [sl, 0x88]                              |         r4 = *((sl + 0x88));
                                                                 | label_9:
    0x000580c0 movs r3, 0                                        |         r3 = 0;
    0x000580c2 ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x000580c4 mov r1, fp                                        |         r1 = fp;
    0x000580c6 mov r0, sl                                        |         r0 = sl;
    0x000580c8 str.w r3, [sl, 0x88]                              |         __asm ("str.w r3, [sl, 0x88]");
    0x000580cc bl 0x578fc                                        |         fcn_000578fc (r0, r1, r2, r3, r4, r5, r6);
    0x000580d0 b 0x58056                                         |         goto label_0;
                                                                 | label_12:
    0x000580d2 ldrd sl, fp, [sp, 0x24]                           |         __asm ("ldrd sl, fp, [var_24h]");
                                                                 | label_4:
    0x000580d6 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x000580d8 cmp r3, 3                                         |         
    0x000580da bne 0x580bc                                       |         
                                                                 |     } while (r3 != 3);
    0x000580dc ldr.w r7, [fp, 4]                                 |     r7 = *(arg_8ch);
    0x000580e0 lsls r3, r7, 0x13                                 |     r3 = r7 << 0x13;
                                                                 |     if (r3 < r7) {
    0x000580e2 bmi 0x58024                                       |         goto label_1;
                                                                 |     }
                                                                 | label_42:
    0x000580e4 ldr.w r3, [pc, 0x618]                             |     r3 = *(0x00058700);
    0x000580e8 mov r1, fp                                        |     r1 = fp;
    0x000580ea ldr.w r4, [fp, 0xc]                               |     r4 = *(arg_ch);
    0x000580ee add r0, sp, 0x40                                  |     r0 += var_40h;
    0x000580f0 add r3, pc                                        |     r3 += pc;
    0x000580f2 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000580f4 ldr.w r3, [pc, 0x60c]                             |     r3 = *(0x00058704);
    0x000580f8 add r3, pc                                        |     r3 += pc;
    0x000580fa str r3, [sp, 0x48]                                |     var_48h = r3;
    0x000580fc movs r3, 0                                        |     r3 = 0;
    0x000580fe str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00058100 str.w r3, [fp, 0xc]                               |     __asm ("str.w r3, [arg_ch]");
    0x00058104 movs r3, 1                                        |     r3 = 1;
    0x00058106 strh.w r3, [sp, 0x54]                             |     var_54h = r3;
    0x0005810a bl 0x2cd88                                        |     fcn_0002cd88 (r0, r1);
    0x0005810e ldrh.w r3, [sp, 0x54]                             |     r3 = var_54h;
    0x00058112 str.w r4, [fp, 0xc]                               |     __asm ("str.w r4, [arg_ch]");
                                                                 |     if (r3 == 0) {
    0x00058116 cbz r3, 0x58122                                   |         goto label_47;
                                                                 |     }
    0x00058118 ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0005811c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0005811e cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x00058120 bgt 0x58024                                       |         goto label_1;
                                                                 |     }
                                                                 | label_47:
    0x00058122 ldr.w r3, [sl, 0x28]                              |     r3 = *((sl + 0x28));
    0x00058126 subs r3, 1                                        |     r3--;
    0x00058128 str.w r3, [sl, 0x28]                              |     __asm ("str.w r3, [sl, 0x28]");
    0x0005812c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0005812e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00058130 bne 0x58200                                       |         goto label_48;
                                                                 |     }
    0x00058132 mov.w r3, -1                                      |     r3 = -1;
    0x00058136 movs r5, 5                                        |     r5 = 5;
    0x00058138 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0005813a b 0x5808e                                         |     goto label_2;
                                                                 | label_35:
    0x0005813c ldr.w r3, [sl, 0x74]                              |     r3 = *((sl + 0x74));
    0x00058140 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00058142 beq 0x581cc                                       |         goto label_49;
                                                                 |     }
                                                                 | label_7:
    0x00058144 mov r0, sl                                        |     r0 = sl;
    0x00058146 bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x0005814a str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0005814c b 0x57fbe                                         |     goto label_3;
                                                                 | label_36:
    0x0005814e ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x00058152 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00058154 bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x00058156 ldr.w r7, [fp, 4]                                 |     r7 = *(arg_8ch);
    0x0005815a lsls r1, r7, 0x13                                 |     r1 = r7 << 0x13;
                                                                 |     if (r1 >= r7) {
    0x0005815c bpl 0x580b6                                       |         goto label_5;
                                                                 |     }
                                                                 | label_8:
    0x0005815e lsls r2, r7, 0x19                                 |     r2 = r7 << 0x19;
                                                                 |     if (r2 < r7) {
    0x00058160 bmi 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x00058162 ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x00058166 ldr r2, [r3, 0x34]                                |     r2 = *((r3 + 0x34));
    0x00058168 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005816a bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x0005816c ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0005816e tst.w r2, 9                                       |     
                                                                 |     if ((r2 & 9) != 0) {
    0x00058172 bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x00058174 ldr r2, [r3, 0x3c]                                |     r2 = *((r3 + 0x3c));
    0x00058176 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00058178 bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x0005817a ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x0005817c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005817e bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x00058180 ldr r0, [r3, 0x20]                                |     r0 = *((r3 + 0x20));
    0x00058182 ldr r2, [r0]                                      |     r2 = *(r0);
    0x00058184 cmp r2, 1                                         |     
                                                                 |     if (r2 != 1) {
    0x00058186 bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x00058188 ldr r2, [r0, 0x1c]                                |     r2 = *((r0 + 0x1c));
    0x0005818a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005818c bne 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x0005818e ldr r7, [r0, 0x18]                                |     r7 = *((r0 + 0x18));
    0x00058190 ldrb.w r1, [r7, 0x2b]                             |     r1 = *((r7 + 0x2b));
    0x00058194 cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x00058196 beq 0x580d6                                       |         goto label_4;
                                                                 |     }
    0x00058198 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x0005819a ldr.w r8, [r1]                                    |     r8 = *(r1);
    0x0005819e str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x000581a0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x000581a4 ble 0x58218                                       |         goto label_50;
                                                                 |     }
    0x000581a6 mov r3, r2                                        |     r3 = r2;
    0x000581a8 mov r2, r1                                        |     r2 = r1;
    0x000581aa b 0x581b4                                         |     
                                                                 |     while (r1 == 0xa7) {
    0x000581ac adds r3, 1                                        |         r3++;
    0x000581ae adds r2, 0x10                                     |         r2 += 0x10;
    0x000581b0 cmp r3, r8                                        |         
                                                                 |         if (r3 == r8) {
    0x000581b2 beq 0x58210                                       |             goto label_51;
                                                                 |         }
    0x000581b4 ldr r1, [r2, 8]                                   |         r1 = *((r2 + 8));
    0x000581b6 ldrb r1, [r1]                                     |         r1 = *(r1);
    0x000581b8 cmp r1, 0xa7                                      |         
    0x000581ba beq 0x581ac                                       |         
                                                                 |     }
    0x000581bc b 0x580d6                                         |     goto label_4;
                                                                 | label_45:
    0x000581be ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x000581c0 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x000581c2 ldr r1, [r3]                                      |     r1 = *(r3);
                                                                 | label_11:
    0x000581c4 cmp r1, 0                                         |     
                                                                 |     if (r1 > 0) {
    0x000581c6 bgt.w 0x5807e                                     |         goto label_6;
                                                                 |     }
    0x000581ca b 0x5808e                                         |     goto label_2;
                                                                 | label_49:
    0x000581cc ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000581d0 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x000581d2 lsls r4, r3, 0x1c                                 |     r4 = r3 << 0x1c;
    0x000581d4 itt pl                                            |     
                                                                 |     if (r4 < r3) {
    0x000581d6 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r4 < r3) {
    0x000581d8 strbpl r3, [sl, 0x17]                             |         *((sl + 0x17)) = r3;
                                                                 |     }
    0x000581dc b 0x58144                                         |     goto label_7;
                                                                 | label_40:
    0x000581de ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
                                                                 |     if (r3 == 0) {
    0x000581e2 cbnz r3, 0x581e8                                  |         
    0x000581e4 str r3, [sp, 0x10]                                |         var_10h = r3;
    0x000581e6 b 0x5815e                                         |         goto label_8;
                                                                 |     }
    0x000581e8 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000581ea ldr.w r4, [sl, 0x88]                              |     r4 = *((sl + 0x88));
    0x000581ee cmp r3, 3                                         |     
                                                                 |     if (r3 != 3) {
    0x000581f0 bne.w 0x580c0                                     |         goto label_9;
                                                                 |     }
                                                                 | label_43:
    0x000581f4 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000581f6 mov r1, fp                                        |     r1 = fp;
    0x000581f8 mov r0, sl                                        |     r0 = sl;
    0x000581fa bl 0x578fc                                        |     fcn_000578fc (r0, r1, r2, r3, r4, r5, r6);
    0x000581fe b 0x58056                                         |     goto label_0;
                                                                 | label_48:
    0x00058200 mov.w r3, -1                                      |     r3 = -1;
    0x00058204 movs r5, 5                                        |     r5 = 5;
    0x00058206 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00058208 b 0x58066                                         |     goto label_10;
                                                                 | label_44:
    0x0005820a ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0005820c ldr r1, [r3]                                      |     r1 = *(r3);
    0x0005820e b 0x581c4                                         |     goto label_11;
                                                                 | label_51:
    0x00058210 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00058212 ldr r7, [r0, 0x18]                                |     r7 = *((r0 + 0x18));
    0x00058214 ldr.w r8, [r3]                                    |     r8 = *(r3);
                                                                 | label_50:
    0x00058218 ldr r1, [r7, 0x3c]                                |     r1 = *((r7 + 0x3c));
    0x0005821a ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x0005821e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00058220 beq.w 0x586e0                                     |         goto label_52;
                                                                 |     }
    0x00058224 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00058226 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00058228 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x0005822a beq.w 0x58696                                     |         goto label_53;
                                                                 |     }
    0x0005822e movs r5, 0                                        |     r5 = 0;
                                                                 |     do {
    0x00058230 ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
    0x00058232 adds r3, 0x10                                     |         r3 += 0x10;
    0x00058234 adds r5, 1                                        |         r5++;
    0x00058236 cmp r1, r2                                        |         
    0x00058238 bne 0x58230                                       |         
                                                                 |     } while (r1 != r2);
    0x0005823a movs r3, 1                                        |     r3 = 1;
    0x0005823c lsls r3, r5                                       |     r3 <<= r5;
                                                                 | label_29:
    0x0005823e ldr.w r0, [sl, 0x74]                              |     r0 = *((sl + 0x74));
    0x00058242 cmp r0, 0                                         |     
    0x00058244 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00058246 moveq r0, sl                                      |         r0 = sl;
                                                                 |     }
    0x00058248 ldr r2, [r0, 0x54]                                |     r2 = *((r0 + 0x54));
    0x0005824a tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0005824c bne.w 0x585fc                                     |         goto label_54;
                                                                 |     }
    0x00058250 cmp r5, 1                                         |     
    0x00058252 orr.w r2, r2, r3                                  |     r2 |= r3;
    0x00058256 str r2, [r0, 0x54]                                |     *((r0 + 0x54)) = r2;
                                                                 |     if (r5 == 1) {
    0x00058258 beq.w 0x5869c                                     |         goto label_55;
                                                                 |     }
    0x0005825c ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x0005825e ldr r1, [r7]                                      |     r1 = *(r7);
                                                                 | label_27:
    0x00058260 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00058262 add.w r3, r3, r5, lsl 4                           |     r3 += (r5 << 4);
    0x00058266 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00058268 ldrb r3, [r3, 9]                                  |     r3 = *((r3 + 9));
                                                                 |     if (r3 != 0) {
    0x0005826a cbz r3, 0x58278                                   |         
    0x0005826c str r1, [sp]                                      |         *(sp) = r1;
    0x0005826e movs r3, 0                                        |         r3 = 0;
    0x00058270 mov r1, r5                                        |         r1 = r5;
    0x00058272 mov r0, sl                                        |         r0 = sl;
    0x00058274 bl 0x2ba0c                                        |         fcn_0002ba0c (r0, r1, r2, r3, r4);
                                                                 |     }
                                                                 | label_26:
    0x00058278 cmp.w r8, 1                                       |     
                                                                 |     if (r8 == 1) {
    0x0005827c beq.w 0x58608                                     |         goto label_56;
                                                                 |     }
    0x00058280 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x00058284 ble 0x58342                                       |         goto label_57;
                                                                 |     }
                                                                 | label_28:
    0x00058286 ldr.w sb, [fp, 0xc]                               |     sb = *(arg_ch);
    0x0005828a movs r4, 0                                        |     r4 = 0;
    0x0005828c ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x0005828e str r5, [sp, 0x18]                                |     var_18h = r5;
    0x00058290 ldrb.w r2, [sb]                                   |     r2 = *(sb);
    0x00058294 str.w sl, [sp, 0x24]                              |     __asm ("str.w sl, [var_24h]");
    0x00058298 mov sl, r7                                        |     sl = r7;
    0x0005829a mov r7, sb                                        |     r7 = sb;
    0x0005829c str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [var_28h]");
    0x000582a0 sub.w r3, r2, 0x8a                                |     r3 = r2 - 0x8a;
    0x000582a4 mov sb, r2                                        |     sb = r2;
    0x000582a6 clz r3, r3                                        |     r3 &= r3;
    0x000582aa lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x000582ac mov r5, r3                                        |     r5 = r3;
                                                                 |     do {
    0x000582ae cmp.w sb, 0xb0                                    |         
    0x000582b2 ite eq                                            |         
                                                                 |         if (sb != 0xb0) {
    0x000582b4 ldrbeq r3, [r7, 2]                                |             r3 = *((r7 + 2));
                                                                 |         }
                                                                 |         if (sb == 0xb0) {
    0x000582b6 movne r3, sb                                      |             r3 = sb;
                                                                 |         }
    0x000582b8 cmp r3, 0xb1                                      |         
                                                                 |         if (r3 == 0xb1) {
    0x000582ba beq.w 0x585c6                                     |             goto label_58;
                                                                 |         }
    0x000582be cmp r3, 0x8a                                      |         
                                                                 |         if (r3 == 0x8a) {
    0x000582c0 beq.w 0x58502                                     |             goto label_59;
                                                                 |         }
                                                                 | label_15:
    0x000582c4 mov r0, r7                                        |         r0 = r7;
                                                                 | label_21:
    0x000582c6 ldr r3, [r6, 8]                                   |         r3 = *((r6 + 8));
    0x000582c8 ldrsh.w r3, [r3, 0x20]                            |         r3 = *((r3 + 0x20));
    0x000582cc cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x000582ce blt.w 0x58534                                     |             goto label_60;
                                                                 |         }
                                                                 | label_16:
    0x000582d2 ldrsh.w ip, [sl, 0x22]                            |         ip = *((sl + 0x22));
    0x000582d6 cmp r3, ip                                        |         
                                                                 |         if (r3 >= ip) {
    0x000582d8 bge.w 0x58534                                     |             goto label_60;
                                                                 |         }
    0x000582dc add.w ip, r3, r3, lsl 1                           |         
    0x000582e0 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x000582e4 add.w r3, r3, ip, lsl 2                           |         r3 += (ip << 2);
    0x000582e8 ldrb.w fp, [r3, 5]                                |         fp = *((r3 + 5));
    0x000582ec bl 0xd480                                         |         r0 = fcn_0000d480 (r0);
    0x000582f0 cmp r0, 0x40                                      |         
    0x000582f2 it hi                                             |         
                                                                 |         if (r0 > 0x40) {
    0x000582f4 cmphi fp, 0x40                                    |             __asm ("cmphi fp, 0x40");
                                                                 |         }
    0x000582f8 ite hi                                            |         
                                                                 |         if (r0 <= 0x40) {
    0x000582fa movhi ip, 1                                       |             
                                                                 |         }
                                                                 |         if (r0 <= 0x40) {
    0x000582fe mov.w ip, 0                                       |             
                                                                 |         }
                                                                 |         if (r0 < 0x40) {
    0x00058302 bls.w 0x585a0                                     |             goto label_61;
                                                                 |         }
    0x00058306 cmp.w fp, 0x42                                    |         
    0x0005830a ite ls                                            |         
                                                                 |         if (fp > 0x42) {
    0x0005830c movls r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (fp <= 0x42) {
    0x0005830e movhi r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00058310 cmp r0, 0x42                                      |         
    0x00058312 ite ls                                            |         
                                                                 |         if (r0 > 0x42) {
    0x00058314 movls r2, r3                                      |             r2 = r3;
                                                                 |         }
                                                                 |         if (r0 <= 0x42) {
    0x00058316 orrhi r2, r3, 1                                   |             r2 = r3 | 1;
                                                                 |         }
    0x0005831a cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0005831c bne.w 0x58544                                     |             goto label_62;
                                                                 |         }
    0x00058320 movs r3, 1                                        |         r3 = 1;
                                                                 | label_17:
    0x00058322 adds r4, 1                                        |         r4++;
    0x00058324 adds r6, 0x10                                     |         r6 += 0x10;
    0x00058326 cmp r4, r8                                        |         
    0x00058328 ite ge                                            |         
                                                                 |         if (r4 < r8) {
    0x0005832a movge r0, 0                                       |             r0 = 0;
                                                                 |         }
                                                                 |         if (r4 >= r8) {
    0x0005832c andlt r0, ip, 1                                   |             r0 = ip & 1;
                                                                 |         }
    0x00058330 cmp r0, 0                                         |         
    0x00058332 bne 0x582ae                                       |         
                                                                 |     } while (r0 != 0);
    0x00058334 mov r7, sl                                        |     r7 = sl;
    0x00058336 ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x00058338 ldrd sl, fp, [sp, 0x24]                           |     __asm ("ldrd sl, fp, [var_24h]");
    0x0005833c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005833e beq.w 0x580d6                                     |         goto label_4;
                                                                 |     }
                                                                 | label_57:
    0x00058342 ldr r7, [r7, 8]                                   |     r7 = *((r7 + 8));
    0x00058344 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00058346 beq.w 0x580d6                                     |         goto label_4;
                                                                 |     }
    0x0005834a movs r3, 1                                        |     r3 = 1;
    0x0005834c sub.w r2, r8, 0x20                                |     r2 = r8 - 0x20;
    0x00058350 rsb.w r1, r8, 0x20                                |     r1 = 0x20 - r8;
    0x00058354 lsl.w r2, r3, r2                                  |     r2 = r3 << r2;
    0x00058358 lsr.w r1, r3, r1                                  |     r1 = r3 >> r1;
    0x0005835c lsl.w r3, r3, r8                                  |     r3 <<= r8;
    0x00058360 ldr r4, [pc, 0x3a4]                               |     
    0x00058362 subs r3, 1                                        |     r3--;
    0x00058364 orr.w r2, r2, r1                                  |     r2 |= r1;
    0x00058368 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0005836a adc r3, r2, -1                                    |     __asm ("adc r3, r2, -1");
    0x0005836e str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00058370 add r4, pc                                        |     r4 = 0xb0a7c;
    0x00058372 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00058374 strd sl, fp, [sp, 0x24]                           |     __asm ("strd sl, fp, [var_24h]");
    0x00058378 str r5, [sp, 0x3c]                                |     var_3ch = r5;
    0x0005837a and r3, r3, 4                                     |     r3 &= 4;
    0x0005837e mov fp, r3                                        |     
    0x00058380 b 0x5838a                                         |     goto label_63;
                                                                 | label_13:
    0x00058382 ldr r7, [r7, 0x14]                                |     r7 = *((r7 + 0x14));
    0x00058384 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00058386 beq.w 0x580d2                                     |         goto label_12;
                                                                 |     }
                                                                 | label_63:
    0x0005838a ldrh r2, [r7, 0x34]                               |     r2 = *((r7 + 0x34));
    0x0005838c cmp r2, r8                                        |     
                                                                 |     if (r2 < r8) {
    0x0005838e blt 0x58382                                       |         goto label_13;
                                                                 |     }
    0x00058390 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00058392 cmp r2, 0x3e                                      |     
    0x00058394 it ls                                             |     
                                                                 |     if (r2 > 0x3e) {
    0x00058396 cmpls r3, 0                                       |         __asm ("cmpls r3, 0");
                                                                 |         goto label_64;
                                                                 |     }
                                                                 |     if (r2 != 0x3e) {
                                                                 | label_64:
    0x00058398 bne 0x58382                                       |         goto label_13;
                                                                 |     }
    0x0005839a cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0005839e beq 0x583b2                                       |         goto label_65;
                                                                 |     }
    0x000583a0 ldrh r3, [r7, 0x32]                               |     r3 = *((r7 + 0x32));
    0x000583a2 cmp r3, r8                                        |     
                                                                 |     if (r3 > r8) {
    0x000583a4 bgt 0x58382                                       |         goto label_13;
                                                                 |     }
    0x000583a6 cmp r2, r8                                        |     
                                                                 |     if (r2 <= r8) {
    0x000583a8 ble 0x583b2                                       |         goto label_65;
                                                                 |     }
    0x000583aa ldrb.w r3, [r7, 0x36]                             |     r3 = *((r7 + 0x36));
    0x000583ae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000583b0 beq 0x58382                                       |         goto label_13;
                                                                 |     }
                                                                 | label_65:
    0x000583b2 cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x000583b6 ble 0x58448                                       |         goto label_66;
                                                                 |     }
    0x000583b8 ldr.w sl, [sp, 0x2c]                              |     sl = var_2ch;
    0x000583bc movs r6, 0                                        |     r6 = 0;
    0x000583be mov sb, r6                                        |     sb = r6;
    0x000583c0 mov r5, r6                                        |     r5 = r6;
    0x000583c2 str.w fp, [sp, 0x30]                              |     __asm ("str.w fp, [var_30h]");
                                                                 | label_20:
    0x000583c6 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000583c8 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x000583ca ldrb r3, [r1]                                     |     r3 = *(r1);
    0x000583cc cmp r3, 0xb0                                      |     
    0x000583ce ite eq                                            |     
                                                                 |     if (r3 != 0xb0) {
    0x000583d0 ldrbeq r2, [r1, 2]                                |         r2 = *((r1 + 2));
                                                                 |     }
                                                                 |     if (r3 == 0xb0) {
    0x000583d2 movne r2, r3                                      |         r2 = r3;
                                                                 |     }
    0x000583d4 cmp r2, 0xb1                                      |     
                                                                 |     if (r2 == 0xb1) {
    0x000583d6 beq.w 0x585f6                                     |         goto label_67;
                                                                 |     }
    0x000583da cmp r2, 0x8a                                      |     
                                                                 |     if (r2 == 0x8a) {
    0x000583dc beq.w 0x585cc                                     |         goto label_68;
                                                                 |     }
                                                                 | label_24:
    0x000583e0 ldr.w fp, [sl, 8]                                 |     fp = *((sl + 8));
    0x000583e4 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000583e6 mov r2, fp                                        |     r2 = fp;
    0x000583e8 bl 0x27f10                                        |     fcn_00027f10 (r0, r1, r2);
    0x000583ec ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x000583ee movs r1, 0                                        |     r1 = 0;
    0x000583f0 ldrsh.w lr, [fp, 0x20]                            |     
    0x000583f4 str r5, [sp, 0x18]                                |     var_18h = r5;
    0x000583f6 sub.w ip, r3, 2                                   |     
                                                                 | label_14:
    0x000583fa ldrsh r3, [ip, 2]!                                |     r3 = *((ip += 2));
    0x000583fe cmp r3, lr                                        |     
                                                                 |     if (r3 != lr) {
    0x00058400 bne 0x58434                                       |         goto label_69;
                                                                 |     }
    0x00058402 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00058404 beq.w 0x5854e                                     |         goto label_70;
                                                                 |     }
    0x00058408 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0005840a ldr.w r5, [r3, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r5 = *((r3 + offset_0));
    0x0005840e ldr r3, [r0]                                      |     r3 = *(r0);
    0x00058410 subs r5, 1                                        |     r5--;
    0x00058412 add.w fp, r3, -1                                  |     
                                                                 |     do {
                                                                 | label_18:
    0x00058416 ldrb r3, [fp, 1]!                                 |         r3 = *(arg_1h);
    0x0005841a ldrb r2, [r5, 1]!                                 |         r2 = *((r5 += 1));
    0x0005841e cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x00058420 beq.w 0x58548                                     |             goto label_71;
                                                                 |         }
    0x00058424 add r3, r4                                        |         r3 += r4;
    0x00058426 add r2, r4                                        |         r2 += r4;
    0x00058428 ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x0005842c ldrb.w r2, [r2, 0x140]                            |         r2 = *((r2 + 0x140));
    0x00058430 cmp r3, r2                                        |         
    0x00058432 beq 0x58416                                       |         
                                                                 |     } while (r3 == r2);
                                                                 | label_69:
    0x00058434 adds r1, 1                                        |     r1++;
    0x00058436 cmp r1, r8                                        |     
                                                                 |     if (r1 != r8) {
    0x00058438 bne 0x583fa                                       |         goto label_14;
                                                                 |     }
                                                                 | label_19:
    0x0005843a ldrd fp, r3, [sp, 0x30]                           |     __asm ("ldrd fp, r3, [var_34h]");
    0x0005843e ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00058440 cmp r2, sb                                        |     
    0x00058442 it eq                                             |     
                                                                 |     if (r2 != sb) {
    0x00058444 cmpeq r3, r6                                      |         __asm ("cmpeq r3, r6");
                                                                 |         goto label_72;
                                                                 |     }
                                                                 |     if (r2 != sb) {
                                                                 | label_72:
    0x00058446 bne 0x58382                                       |         goto label_13;
                                                                 |     }
                                                                 | label_66:
    0x00058448 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005844a ldr r5, [sp, 0x3c]                                |     r5 = var_3ch;
    0x0005844c ldrd sl, fp, [sp, 0x24]                           |     __asm ("ldrd sl, fp, [var_24h]");
    0x00058450 ldrd r4, r3, [r3, 0x6c]                           |     __asm ("ldrd r4, r3, [r3, 0x6c]");
    0x00058454 cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x00058456 bge.w 0x586c4                                     |         goto label_73;
                                                                 |     }
    0x0005845a ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x0005845c add.w r2, r4, r4, lsl 2                           |     r2 = r4 + (r4 << 2);
    0x00058460 adds r0, r4, 1                                    |     r0 = r4 + 1;
    0x00058462 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00058466 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00058468 movs r1, 0                                        |     r1 = 0;
    0x0005846a ldr r3, [r6, 0x68]                                |     r3 = *((r6 + 0x68));
    0x0005846c str r0, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r0;
    0x0005846e movs r0, 0xe                                      |     r0 = 0xe;
    0x00058470 str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00058472 add r3, r2                                        |     r3 += r2;
    0x00058474 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00058476 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x0005847a strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_33:
    0x0005847e ldr r2, [pc, 0x28c]                               |     
    0x00058480 movs r1, 0                                        |     r1 = 0;
    0x00058482 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00058484 mov r0, sl                                        |     r0 = sl;
    0x00058486 add r2, pc                                        |     r2 = 0xb0b98;
    0x00058488 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x0005848c ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x0005848e movs r1, 0x70                                     |     r1 = 0x70;
    0x00058490 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00058492 str r5, [sp]                                      |     *(sp) = r5;
    0x00058494 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00058496 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005849a mov r1, r7                                        |     r1 = r7;
    0x0005849c mov r0, sl                                        |     r0 = sl;
    0x0005849e bl 0x27dcc                                        |     fcn_00027dcc (r0, r1);
    0x000584a2 ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x000584a4 ldrb r5, [r3]                                     |     r5 = *(r3);
    0x000584a6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000584a8 adds r5, 3                                        |     r5 += 3;
                                                                 |     if (r3 != 0) {
    0x000584aa cbz r3, 0x584c2                                   |         
    0x000584ac ldr.w r2, [sl, 0x2c]                              |         r2 = *((sl + 0x2c));
    0x000584b0 cmp.w r8, 1                                       |         
    0x000584b4 add.w r2, r2, 1                                   |         r2++;
    0x000584b8 str.w r2, [sl, 0x2c]                              |         __asm ("str.w r2, [sl, 0x2c]");
    0x000584bc str r2, [r3]                                      |         *(r3) = r2;
                                                                 |         if (r8 == 1) {
    0x000584be beq.w 0x586d6                                     |             goto label_74;
                                                                 |         }
    0x000584c0 strh r2, [r1, 8]                                  |         *((r1 + 8)) = r2;
                                                                 |     }
                                                                 | label_34:
    0x000584c2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000584c4 cmp r4, 0                                         |     
    0x000584c6 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000584c8 ldr r2, [r3, 0x6c]                                |     r2 = *((r3 + 0x6c));
    0x000584ca ldr r3, [r1]                                      |     r3 = *(r1);
    0x000584cc it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x000584ce addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x000584d2 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x000584d4 adds r0, 0x57                                     |     r0 += 0x57;
    0x000584d6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000584d8 bne.w 0x586a2                                     |         goto label_75;
                                                                 |     }
    0x000584dc ldr r3, [r1, 0x68]                                |     r3 = *((r1 + 0x68));
    0x000584de add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x000584e2 add.w r3, r3, r4, lsl 2                           |     r3 += (r4 << 2);
                                                                 | label_30:
    0x000584e6 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x000584e8 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000584ea cmp r3, 0                                         |     
    0x000584ec it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x000584ee cmpne r5, 3                                       |         __asm ("cmpne r5, 3");
                                                                 |         goto label_76;
                                                                 |     }
                                                                 |     if (r3 == 0) {
                                                                 | label_76:
    0x000584f0 beq.w 0x5808e                                     |         goto label_2;
                                                                 |     }
    0x000584f4 cmp r5, 4                                         |     
    0x000584f6 it ne                                             |     
                                                                 |     if (r5 != 4) {
    0x000584f8 ldrne r4, [fp, 0xc]                               |         r4 = *(arg_ch);
                                                                 |         goto label_77;
                                                                 |     }
                                                                 |     if (r5 == 4) {
                                                                 | label_77:
    0x000584fc beq.w 0x5808e                                     |         goto label_2;
                                                                 |     }
    0x00058500 b 0x58066                                         |     goto label_10;
                                                                 | label_59:
    0x00058502 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00058504 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00058506 ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 | label_23:
    0x00058508 cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x0005850a ble.w 0x582c4                                     |         goto label_15;
                                                                 |     }
    0x0005850e ldrb r3, [r7, 2]                                  |     r3 = *((r7 + 2));
    0x00058510 cmp r3, 0x8a                                      |     
    0x00058512 ite ne                                            |     
                                                                 |     if (r3 == 0x8a) {
    0x00058514 movne r0, r5                                      |         r0 = r5;
                                                                 |     }
                                                                 |     if (r3 != 0x8a) {
    0x00058516 orreq r0, r5, 1                                   |         r0 = r5 | 1;
                                                                 |     }
    0x0005851a ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x0005851c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005851e beq 0x58598                                       |         goto label_78;
                                                                 |     }
    0x00058520 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00058522 add.w r3, r3, r4, lsl 4                           |     r3 += (r4 << 4);
    0x00058526 ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x00058528 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0005852a ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x0005852e cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00058530 bge.w 0x582d2                                     |         goto label_16;
                                                                 |     }
                                                                 | label_60:
    0x00058534 bl 0xd480                                         |     r0 = fcn_0000d480 (r0);
    0x00058538 cmp r0, 0x40                                      |     
    0x0005853a it ls                                             |     
                                                                 |     if (r0 > 0x40) {
    0x0005853c movls fp, 0x44                                    |         
                                                                 |     }
                                                                 |     if (r0 < 0x40) {
    0x00058540 bls 0x585b4                                       |         goto label_79;
                                                                 |     }
                                                                 | label_22:
    0x00058542 movs r3, 1                                        |     r3 = 1;
                                                                 | label_62:
    0x00058544 mov ip, r3                                        |     
    0x00058546 b 0x58322                                         |     goto label_17;
                                                                 | label_71:
    0x00058548 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005854a bne.w 0x58416                                     |         goto label_18;
                                                                 |     }
                                                                 | label_70:
    0x0005854e cmp r1, r8                                        |     
    0x00058550 ldr r5, [sp, 0x18]                                |     r5 = var_18h;
                                                                 |     if (r1 == r8) {
    0x00058552 beq.w 0x5843a                                     |         goto label_19;
                                                                 |     }
    0x00058556 movs r0, 1                                        |     r0 = 1;
    0x00058558 sub.w r2, r1, 0x20                                |     r2 = r1 - 0x20;
    0x0005855c rsb.w r3, r1, 0x20                                |     r3 = 0x20 - r1;
    0x00058560 lsl.w r2, r0, r2                                  |     r2 = r0 << r2;
    0x00058564 lsr.w r3, r0, r3                                  |     r3 = r0 >> r3;
    0x00058568 lsls r0, r1                                       |     r0 <<= r1;
    0x0005856a orrs r2, r3                                       |     r2 |= r3;
    0x0005856c and.w r3, r0, r6                                  |     r3 = r0 & r6;
    0x00058570 and.w ip, r2, sb                                  |     
    0x00058574 orrs.w r3, r3, ip                                 |     r3 |= ip;
                                                                 |     if (r3 != r3) {
    0x00058578 bne.w 0x5843a                                     |         goto label_19;
                                                                 |     }
    0x0005857c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0005857e orrs r6, r0                                       |     r6 |= r0;
    0x00058580 orr.w sb, r2, sb                                  |     sb = r2 | sb;
                                                                 |     if (r3 != 0) {
    0x00058584 cbz r3, 0x5858a                                   |         
    0x00058586 str.w r1, [r3, r5, lsl 2]                         |         __asm ("str.w r1, [r3, r5, lsl 2]");
                                                                 |     }
    0x0005858a adds r5, 1                                        |     r5++;
    0x0005858c add.w sl, sl, 0x10                                |     sl += 0x10;
    0x00058590 cmp r5, r8                                        |     
                                                                 |     if (r5 != r8) {
    0x00058592 bne.w 0x583c6                                     |         goto label_20;
                                                                 |     }
    0x00058596 b 0x5843a                                         |     goto label_19;
                                                                 | label_78:
    0x00058598 add.w r3, r3, r4, lsl 4                           |     r3 += (r4 << 4);
    0x0005859c ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x0005859e b 0x582c6                                         |     goto label_21;
                                                                 | label_61:
    0x000585a0 cmp r0, 0x40                                      |     
    0x000585a2 itet hi                                           |     
                                                                 |     if (r0 <= 0x40) {
    0x000585a4 orrhi r0, r0, 0x40                                |         r0 |= 0x40;
                                                                 |     }
                                                                 |     if (r0 <= 0x40) {
    0x000585a8 orrhi r0, fp, 0x40                                |         r0 = fp | 0x40;
                                                                 |     }
                                                                 |     if (r0 > 0x40) {
    0x000585ac uxtb r0, r0                                       |         r0 = (int8_t) r0;
                                                                 |     }
    0x000585ae subs r0, 0x41                                     |     r0 -= 0x41;
    0x000585b0 cmp r0, 1                                         |     
                                                                 |     if (r0 < 1) {
    0x000585b2 bls 0x58542                                       |         goto label_22;
                                                                 |     }
                                                                 | label_79:
    0x000585b4 cmp.w fp, 0x42                                    |     
    0x000585b8 ite ls                                            |     
                                                                 |     if (fp > 0x42) {
    0x000585ba movls ip, 0                                       |         
                                                                 |     }
                                                                 |     if (fp > 0x42) {
    0x000585be mov.w ip, 1                                       |         
                                                                 |     }
    0x000585c2 mov r3, ip                                        |     r3 = ip;
    0x000585c4 b 0x58322                                         |     goto label_17;
                                                                 | label_58:
    0x000585c6 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x000585c8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000585ca b 0x58508                                         |     goto label_23;
                                                                 | label_68:
    0x000585cc ldr r2, [r1, 0x14]                                |     r2 = *((r1 + 0x14));
    0x000585ce ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x000585d0 ldr r2, [r2]                                      |     r2 = *(r2);
                                                                 | label_25:
    0x000585d2 cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x000585d4 ble.w 0x583e0                                     |         goto label_24;
                                                                 |     }
    0x000585d8 ldrb r0, [r1, 2]                                  |     r0 = *((r1 + 2));
    0x000585da ldr r2, [r1, 0x14]                                |     r2 = *((r1 + 0x14));
    0x000585dc cmp r3, 0x8a                                      |     
    0x000585de it ne                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x000585e0 cmpne r0, 0x8a                                    |         __asm ("cmpne r0, 0x8a");
                                                                 |     }
    0x000585e2 iteet eq                                          |     
                                                                 |     if (r3 != 0x8a) {
    0x000585e4 ldreq r3, [r2, 0x1c]                              |         r3 = *((r2 + 0x1c));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x000585e6 addne r2, r2, r5, lsl 4                           |         r2 += (r5 << 4);
                                                                 |     }
                                                                 |     if (r3 != 0x8a) {
    0x000585ea ldreq r1, [r2, 8]                                 |         r1 = *((r2 + 8));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x000585ec add.w r3, r3, r5, lsl 4                           |         r3 += (r5 << 4);
                                                                 |     }
    0x000585f0 it eq                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x000585f2 ldreq r1, [r3, 8]                                 |         r1 = *((r3 + 8));
                                                                 |     }
    0x000585f4 b 0x583e0                                         |     goto label_24;
                                                                 | label_67:
    0x000585f6 ldr r2, [r1, 0x14]                                |     r2 = *((r1 + 0x14));
    0x000585f8 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000585fa b 0x585d2                                         |     goto label_25;
                                                                 | label_54:
    0x000585fc cmp r5, 1                                         |     
    0x000585fe ldr r2, [r7, 0x14]                                |     r2 = *((r7 + 0x14));
    0x00058600 ldr r1, [r7]                                      |     r1 = *(r7);
                                                                 |     if (r5 == 1) {
    0x00058602 beq.w 0x58278                                     |         goto label_26;
                                                                 |     }
    0x00058606 b 0x58260                                         |     goto label_27;
                                                                 | label_56:
    0x00058608 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005860a ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0005860c ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x00058610 cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00058612 bge.w 0x58286                                     |         goto label_28;
                                                                 |     }
    0x00058616 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00058618 ldrd r4, r3, [r3, 0x6c]                           |     __asm ("ldrd r4, r3, [r3, 0x6c]");
    0x0005861c cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x0005861e bge 0x586b2                                       |         goto label_80;
                                                                 |     }
    0x00058620 ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x00058622 add.w r2, r4, r4, lsl 2                           |     r2 = r4 + (r4 << 2);
    0x00058626 adds r0, r4, 1                                    |     r0 = r4 + 1;
    0x00058628 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0005862c lsls r2, r2, 2                                    |     r2 <<= 2;
    0x0005862e movs r1, 0                                        |     r1 = 0;
    0x00058630 ldr r3, [r6, 0x68]                                |     r3 = *((r6 + 0x68));
    0x00058632 str r0, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r0;
    0x00058634 movs r0, 0xe                                      |     r0 = 0xe;
    0x00058636 str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00058638 add r3, r2                                        |     r3 += r2;
    0x0005863a adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x0005863c vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00058640 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_32:
    0x00058644 movs r3, 0x70                                     |     r3 = 0x70;
    0x00058646 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x00058648 mov r2, r5                                        |     r2 = r5;
    0x0005864a mov r0, sl                                        |     r0 = sl;
    0x0005864c str r3, [sp]                                      |     *(sp) = r3;
    0x0005864e mov r3, r7                                        |     r3 = r7;
    0x00058650 bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x00058654 ldr r2, [pc, 0xb8]                                |     
    0x00058656 movs r1, 0                                        |     r1 = 0;
    0x00058658 ldr r3, [r7]                                      |     r3 = *(r7);
    0x0005865a mov r0, sl                                        |     r0 = sl;
    0x0005865c add r2, pc                                        |     r2 = 0xb0d70;
    0x0005865e bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00058662 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00058664 cmp r4, 0                                         |     
    0x00058666 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00058668 ldr r2, [r3, 0x6c]                                |     r2 = *((r3 + 0x6c));
    0x0005866a ldr r3, [r1]                                      |     r3 = *(r1);
    0x0005866c it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x0005866e addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x00058672 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 != 0) {
    0x00058676 cbnz r3, 0x586aa                                  |         goto label_81;
                                                                 |     }
    0x00058678 ldr r3, [r1, 0x68]                                |     r3 = *((r1 + 0x68));
    0x0005867a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0005867e add.w r3, r3, r4, lsl 2                           |     r3 += (r4 << 2);
                                                                 | label_31:
    0x00058682 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00058684 movs r5, 1                                        |     r5 = 1;
    0x00058686 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00058688 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005868a beq.w 0x5808e                                     |         goto label_2;
                                                                 |     }
    0x0005868e ldr.w r4, [fp, 0xc]                               |     r4 = *(arg_ch);
    0x00058692 movs r5, 1                                        |     r5 = 1;
    0x00058694 b 0x58066                                         |     goto label_10;
                                                                 | label_53:
    0x00058696 movs r3, 1                                        |     r3 = 1;
    0x00058698 movs r5, 0                                        |     r5 = 0;
    0x0005869a b 0x5823e                                         |     goto label_29;
                                                                 | label_55:
    0x0005869c bl 0x4a260                                        |     fcn_0004a260 (r0);
    0x000586a0 b 0x58278                                         |     goto label_26;
                                                                 | label_75:
    0x000586a2 ldr r3, [pc, 0x70]                                |     
    0x000586a4 add r3, pc                                        |     r3 = 0xb0dbe;
    0x000586a6 adds r3, 4                                        |     r3 += 4;
    0x000586a8 b 0x584e6                                         |     goto label_30;
                                                                 | label_81:
    0x000586aa ldr r3, [pc, 0x6c]                                |     
    0x000586ac add r3, pc                                        |     r3 = 0xb0dca;
    0x000586ae adds r3, 4                                        |     r3 += 4;
    0x000586b0 b 0x58682                                         |     goto label_31;
                                                                 | label_80:
    0x000586b2 movs r3, 0                                        |     r3 = 0;
    0x000586b4 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000586b6 mov r2, r3                                        |     r2 = r3;
    0x000586b8 movs r1, 0xe                                      |     r1 = 0xe;
    0x000586ba str r3, [sp]                                      |     *(sp) = r3;
    0x000586bc bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000586c0 mov r4, r0                                        |     r4 = r0;
    0x000586c2 b 0x58644                                         |     goto label_32;
                                                                 | label_73:
    0x000586c4 movs r3, 0                                        |     r3 = 0;
    0x000586c6 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000586c8 mov r2, r3                                        |     r2 = r3;
    0x000586ca movs r1, 0xe                                      |     r1 = 0xe;
    0x000586cc str r3, [sp]                                      |     *(sp) = r3;
    0x000586ce bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000586d2 mov r4, r0                                        |     r4 = r0;
    0x000586d4 b 0x5847e                                         |     goto label_33;
                                                                 | label_74:
    0x000586d6 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000586d8 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000586da bl 0x2ab48                                        |     fcn_0002ab48 (r0, r1, r2);
    0x000586de b 0x584c2                                         |     goto label_34;
                                                                 | label_52:
    0x000586e0 mov.w r2, 0x8000                                  |     r2 = 0x8000;
    0x000586e4 movs r3, 1                                        |     r3 = 1;
    0x000586e6 movt r2, 0xffff                                   |     r2 = (r2 & 0xFFFF) | 0xffff0000;
    0x000586ea lsls r3, r2                                       |     r3 <<= r2;
    0x000586ec mov r5, r2                                        |     r5 = r2;
    0x000586ee b 0x5823e                                         |     goto label_29;
                                                                 | label_46:
    0x000586f0 blx 0x9b44                                        |     fcn_00009b44 ();
    0x000586f4 ldrh r0, [r4, 0x1a]                               |     r0 = *((r4 + 0x1a));
    0x000586f6 movs r4, r0                                       |     r4 = r0;
    0x000586f8 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x000586fa movs r0, r0                                       |     
    0x000586fc ldrh r4, [r4, 0x12]                               |     r4 = *((r4 + 0x12));
    0x000586fe movs r4, r0                                       |     r4 = r0;
    0x00058700 movs r5, 0x85                                     |     r5 = 0x85;
    0x00058702 invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5871c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0005871c ()                                      | void fcn_0005871c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0005871c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00058720 sub sp, 0x5c                                      |     
    0x00058722 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00058724 mov r4, r0                                        |     r4 = r0;
    0x00058726 mov r7, r1                                        |     r7 = r1;
    0x00058728 ldr.w r2, [pc, 0x798]                             |     r2 = *(0x00058ec4);
    0x0005872c str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0005872e ldr.w r3, [pc, 0x798]                             |     
    0x00058732 add r2, pc                                        |     r2 += pc;
    0x00058734 ldrb.w r8, [r0, 0x17]                             |     r8 = *((r0 + 0x17));
    0x00058738 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0005873a ldr r3, [r3]                                      |     r3 = *(0x58eca);
    0x0005873c str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0005873e mov.w r3, 0                                       |     r3 = 0;
    0x00058742 movs r3, 0                                        |     r3 = 0;
    0x00058744 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00058746 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00058748 ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x0005874a str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0005874c bl 0x20d90                                        |     r0 = fcn_00020d90 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x00058750 cbz r0, 0x58772                                   |         
                                                                 | label_1:
    0x00058752 ldr.w r2, [pc, 0x778]                             |         r2 = *(0x00058ecc);
    0x00058756 ldr.w r3, [pc, 0x770]                             |         r3 = *(0x58eca);
    0x0005875a add r2, pc                                        |         r2 += pc;
    0x0005875c ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0005875e ldr r2, [r3]                                      |         r2 = *(0x58eca);
    0x00058760 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00058762 eors r2, r3                                       |         r2 ^= r3;
    0x00058764 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00058768 bne.w 0x58ec0                                     |             goto label_32;
                                                                 |         }
    0x0005876c add sp, 0x5c                                      |         
    0x0005876e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00058772 mov fp, r0                                        |     
    0x00058774 mov r1, r7                                        |     r1 = r7;
    0x00058776 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00058778 bl 0x1ecd8                                        |     fcn_0001ecd8 (r0, r1);
    0x0005877c ldr r2, [r7, 0xc]                                 |     r2 = *((r7 + 0xc));
    0x0005877e str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00058780 ldrb r3, [r2]                                     |     r3 = *(r2);
    0x00058782 cmp r3, 0xb0                                      |     
    0x00058784 it eq                                             |     
                                                                 |     if (r3 != 0xb0) {
    0x00058786 ldrbeq r3, [r2, 2]                                |         r3 = *((r2 + 2));
                                                                 |     }
    0x00058788 cmp r3, 0xb1                                      |     
                                                                 |     if (r3 == 0xb1) {
    0x0005878a beq.w 0x58b82                                     |         goto label_33;
                                                                 |     }
    0x0005878e cmp r3, 0x8a                                      |     
    0x00058790 ittt ne                                           |     
                                                                 |     if (r3 == 0x8a) {
    0x00058792 movne r2, 6                                       |         r2 = 6;
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00058794 movne r6, 1                                       |         r6 = 1;
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00058796 movne r5, r2                                      |         r5 = r2;
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00058798 bne 0x587a8                                       |         
    0x0005879a ldr r3, [r2, 0x14]                                |         r3 = *((r2 + 0x14));
    0x0005879c ldr r3, [r3, 0x1c]                                |         r3 = *((r3 + 0x1c));
    0x0005879e ldr r6, [r3]                                      |         r6 = *(r3);
    0x000587a0 add.w r5, r6, r6, lsl 2                           |         r5 = r6 + (r6 << 2);
    0x000587a4 adds r5, 1                                        |         r5++;
    0x000587a6 mov r2, r5                                        |         r2 = r5;
                                                                 |     }
                                                                 | label_13:
    0x000587a8 ldr r1, [r4]                                      |     r1 = *(r4);
    0x000587aa cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000587ac beq.w 0x58af2                                     |         goto label_34;
                                                                 |     }
    0x000587b0 mov r0, r1                                        |     r0 = r1;
    0x000587b2 movs r3, 0                                        |     r3 = 0;
    0x000587b4 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x000587b8 str r0, [sp, 0x1c]                                |     var_1ch = r0;
                                                                 | label_4:
    0x000587ba ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000587bc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000587be beq.w 0x58ae4                                     |         goto label_35;
                                                                 |     }
    0x000587c2 mov r0, r3                                        |     r0 = r3;
    0x000587c4 mov r2, r5                                        |     r2 = r5;
    0x000587c6 movs r1, 0                                        |     r1 = 0;
    0x000587c8 blx 0x97d4                                        |     fcn_000097d4 ();
    0x000587cc ldr r0, [r4]                                      |     r0 = *(r4);
    0x000587ce ldrb.w r3, [r0, 0x57]                             |     r3 = *((r0 + 0x57));
    0x000587d2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000587d4 bne.w 0x58aae                                     |         goto label_36;
                                                                 |     }
                                                                 | label_2:
    0x000587d8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000587da ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000587dc ldr r5, [r4, 8]                                   |     r5 = *((r4 + 8));
    0x000587de cmp r3, r2                                        |     
    0x000587e0 it eq                                             |     
                                                                 |     if (r3 != r2) {
    0x000587e2 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x000587e4 beq 0x587e8                                       |         
    0x000587e6 add r3, sp, 0x44                                  |         r3 += var_44h;
                                                                 |     }
    0x000587e8 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000587ea mov r1, r7                                        |     r1 = r7;
    0x000587ec mov.w sb, 0                                       |     sb = 0;
    0x000587f0 mov r0, r4                                        |     r0 = r4;
    0x000587f2 str r2, [sp]                                      |     *(sp) = r2;
    0x000587f4 add r2, sp, 0x4c                                  |     r2 += var_4ch;
    0x000587f6 str r2, [sp, 4]                                   |     var_4h = r2;
    0x000587f8 movs r2, 3                                        |     r2 = 3;
    0x000587fa bl 0x57f88                                        |     fcn_00057f88 (r0, r1, r2, r3, r4, r5, r6);
    0x000587fe ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00058800 add r2, sp, 0x48                                  |     r2 += var_48h;
    0x00058802 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00058804 mov r0, r4                                        |     r0 = r4;
    0x00058806 strb.w sb, [r4, 0x17]                             |     *((r4 + 0x17)) = sb;
    0x0005880a bl 0x5be10                                        |     fcn_0005be10 (r0, r1, r2, r3, r4);
    0x0005880e cmp r6, sb                                        |     
    0x00058810 strb.w r8, [r4, 0x17]                             |     *((r4 + 0x17)) = r8;
    0x00058814 str r0, [sp, 0x34]                                |     var_34h = r0;
                                                                 |     if (r6 <= sb) {
    0x00058816 ble.w 0x58e52                                     |         goto label_37;
                                                                 |     }
    0x0005881a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0005881c mov r3, sb                                        |     r3 = sb;
    0x0005881e sub.w sb, r2, 4                                   |     sb = r2 - 4;
    0x00058822 mov r2, sb                                        |     r2 = sb;
    0x00058824 b 0x5882e                                         |     
                                                                 |     while (r1 == r3) {
    0x00058826 adds r3, 1                                        |         r3++;
    0x00058828 cmp r3, r6                                        |         
                                                                 |         if (r3 == r6) {
    0x0005882a beq.w 0x58b2c                                     |             goto label_38;
                                                                 |         }
    0x0005882e ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x00058832 cmp r1, r3                                        |         
    0x00058834 beq 0x58826                                       |         
                                                                 |     }
    0x00058836 cmp r6, r3                                        |     
                                                                 |     if (r6 == r3) {
    0x00058838 beq.w 0x58b2c                                     |         goto label_38;
                                                                 |     }
    0x0005883c mov r1, r6                                        |     r1 = r6;
    0x0005883e mov r0, r4                                        |     r0 = r4;
    0x00058840 bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x00058844 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00058846 mov.w sl, 0                                       |     sl = 0;
    0x0005884a str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [var_28h]");
    0x0005884e str r6, [sp, 0x38]                                |     var_80h = r6;
    0x00058850 mov r8, r3                                        |     r8 = r3;
    0x00058852 adds r3, r6, r3                                   |     r3 = r6 + r3;
    0x00058854 mov fp, r3                                        |     
    0x00058856 mov r6, r0                                        |     r6 = r0;
    0x00058858 str r0, [sp, 0x14]                                |     var_14h = r0;
                                                                 |     do {
    0x0005885a ldr r3, [sb, 4]!                                  |         r3 = *((sb += 4));
    0x0005885e mov r2, r8                                        |         r2 = r8;
    0x00058860 movs r1, 0x50                                     |         r1 = 0x50;
    0x00058862 add.w r8, r8, 1                                   |         r8++;
    0x00058866 mov r0, r5                                        |         r0 = r5;
    0x00058868 str.w sl, [sp]                                    |         __asm ("str.w sl, [sp]");
    0x0005886c add r3, r6                                        |         r3 += r6;
    0x0005886e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00058872 cmp fp, r8                                        |         
    0x00058874 bne 0x5885a                                       |         
                                                                 |     } while (fp != r8);
    0x00058876 ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x0005887a ldr r6, [sp, 0x38]                                |     r6 = var_80h;
                                                                 | label_7:
    0x0005887c ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005887e cmp r3, 5                                         |     
                                                                 |     if (r3 == 5) {
    0x00058880 beq.w 0x58c86                                     |         goto label_39;
                                                                 |     }
    0x00058884 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058886 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00058888 cmp r3, r2                                        |     
    0x0005888a iteet ne                                          |     
                                                                 |     if (r3 == r2) {
    0x0005888c ldrne r3, [r4, 0x38]                              |         r3 = *((r4 + 0x38));
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0005888e moveq sl, 0                                       |         sl = 0;
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00058892 ldrne sb, [sp, 0x18]                              |         sb = var_18h;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00058896 add.w sb, r3, -1                                  |         sb = r3 + -1;
                                                                 |     }
    0x0005889a itt ne                                            |     
                                                                 |     if (r3 == r2) {
    0x0005889c movne sl, sb                                      |         sl = sb;
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0005889e strne sb, [r4, 0x38]                              |         *((r4 + 0x38)) = sb;
                                                                 |     }
    0x000588a2 cmp r6, 0                                         |     
    0x000588a4 itt gt                                            |     
                                                                 |     if (r6 <= 0) {
    0x000588a6 movgt r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r6 > 0) {
    0x000588aa str r5, [sp, 0x28]                                |         var_28h = r5;
                                                                 |     }
                                                                 |     if (r6 > 0) {
    0x000588ac bgt 0x588b8                                       |         goto label_0;
                                                                 |     }
    0x000588ae b 0x588fa                                         |     goto label_30;
                                                                 |     do {
    0x000588b0 add.w r8, r8, 1                                   |         r8++;
    0x000588b4 cmp r8, r6                                        |         
                                                                 |         if (r8 == r6) {
    0x000588b6 beq 0x588f8                                       |             goto label_40;
                                                                 |         }
                                                                 | label_0:
    0x000588b8 ldr r0, [r7, 0xc]                                 |         r0 = *((r7 + 0xc));
    0x000588ba ldrb r3, [r0]                                     |         r3 = *(r0);
    0x000588bc cmp r3, 0xb0                                      |         
    0x000588be ite eq                                            |         
                                                                 |         if (r3 != 0xb0) {
    0x000588c0 ldrbeq r2, [r0, 2]                                |             r2 = *((r0 + 2));
                                                                 |         }
                                                                 |         if (r3 == 0xb0) {
    0x000588c2 movne r2, r3                                      |             r2 = r3;
                                                                 |         }
    0x000588c4 cmp r2, 0xb1                                      |         
                                                                 |         if (r2 == 0xb1) {
    0x000588c6 beq.w 0x58b26                                     |             goto label_41;
                                                                 |         }
    0x000588ca cmp r2, 0x8a                                      |         
                                                                 |         if (r2 == 0x8a) {
    0x000588cc beq.w 0x58afc                                     |             goto label_42;
                                                                 |         }
                                                                 | label_5:
    0x000588d0 ldr r5, [r4, 0x24]                                |         r5 = *((r4 + 0x24));
    0x000588d2 cmp r5, 0                                         |         
                                                                 |         if (r5 != 0) {
    0x000588d4 bne.w 0x58aa8                                     |             goto label_43;
                                                                 |         }
    0x000588d8 bl 0xc0c4                                         |         r0 = fcn_0000c0c4 (r0);
    0x000588dc cmp r0, 0                                         |         
    0x000588de beq 0x588b0                                       |         
                                                                 |     } while (r0 == 0);
    0x000588e0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000588e2 mov r3, sb                                        |     r3 = sb;
    0x000588e4 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000588e6 movs r1, 0x32                                     |     r1 = 0x32;
    0x000588e8 str r5, [sp]                                      |     *(sp) = r5;
    0x000588ea add r2, r8                                        |     r2 += r8;
    0x000588ec add.w r8, r8, 1                                   |     r8++;
    0x000588f0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000588f4 cmp r8, r6                                        |     
                                                                 |     if (r8 != r6) {
    0x000588f6 bne 0x588b8                                       |         goto label_0;
                                                                 |     }
                                                                 | label_40:
    0x000588f8 ldr r5, [sp, 0x28]                                |     r5 = var_28h;
                                                                 | label_30:
    0x000588fa ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000588fc str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000588fe ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00058900 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00058902 beq.w 0x58bf6                                     |         goto label_44;
                                                                 |     }
    0x00058906 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00058908 movs r7, 0                                        |     r7 = 0;
    0x0005890a ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0005890c movs r1, 0x60                                     |     r1 = 0x60;
    0x0005890e mov r0, r5                                        |     r0 = r5;
    0x00058910 str r6, [sp, 8]                                   |     var_8h = r6;
    0x00058912 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00058914 mov r3, r6                                        |     r3 = r6;
    0x00058916 str r7, [sp]                                      |     *(sp) = r7;
    0x00058918 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0005891c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005891e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00058920 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00058922 beq.w 0x58e3e                                     |         goto label_45;
                                                                 |     }
    0x00058924 strh r4, [r1, 0x14]                               |     *((r1 + 0x14)) = r4;
    0x00058926 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00058928 mov r3, r7                                        |     r3 = r7;
    0x0005892a movs r1, 0x1c                                     |     r1 = 0x1c;
    0x0005892c mov r0, r5                                        |     r0 = r5;
    0x0005892e str r6, [sp, 4]                                   |     var_4h = r6;
    0x00058930 str r2, [sp]                                      |     *(sp) = r2;
    0x00058932 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00058934 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00058938 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005893a mov r7, r0                                        |     r7 = r0;
    0x0005893c subs r3, r2, 0                                    |     r3 = r2 - 0;
    0x0005893e it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x00058940 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00058942 cmp r6, 1                                         |     
    0x00058944 it ne                                             |     
                                                                 |     if (r6 == 1) {
    0x00058946 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00058948 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005894a bne.w 0x58c46                                     |         goto label_46;
                                                                 |     }
                                                                 | label_17:
    0x0005894e cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00058952 bne.w 0x58c68                                     |         goto label_47;
                                                                 |     }
                                                                 | label_18:
    0x00058956 ldrd r8, r3, [r5, 0x6c]                           |     __asm ("ldrd r8, r3, [r5, 0x6c]");
    0x0005895a cmp r8, r3                                        |     
                                                                 |     if (r8 >= r3) {
    0x0005895c bge.w 0x58e06                                     |         goto label_48;
                                                                 |     }
    0x00058960 add.w r3, r8, r8, lsl 2                           |     r3 = r8 + (r8 << 2);
    0x00058964 ldr r1, [r5, 0x68]                                |     r1 = *((r5 + 0x68));
    0x00058966 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00058968 add.w r2, r8, 1                                   |     r2 = r8 + 1;
    0x0005896c lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0005896e str r2, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r2;
    0x00058970 mov.w lr, 0                                       |     lr = 0;
    0x00058974 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00058976 mov.w ip, 0x23                                    |     
    0x0005897a str r0, [r2, 4]                                   |     *((r2 + 4)) = r0;
    0x0005897c ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0005897e str.w lr, [r2, 0x10]                              |     __asm ("str.w lr, [r2, 0x10]");
    0x00058982 strd r0, lr, [r2, 8]                              |     __asm ("strd r0, lr, [r2, 8]");
    0x00058986 str.w ip, [r1, r3]                                |     __asm ("str.w ip, [r1, r3]");
                                                                 | label_22:
    0x0005898a cmp r6, 1                                         |     
                                                                 |     if (r6 <= 1) {
    0x0005898c ble.w 0x58bd0                                     |         goto label_49;
                                                                 |     }
    0x00058990 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x00058992 add.w sb, r3, -1                                  |     sb = r3 + -1;
    0x00058996 str.w sb, [r4, 0x38]                              |     __asm ("str.w sb, [r4, 0x38]");
                                                                 | label_16:
    0x0005899a mov.w sl, 0                                       |     sl = 0;
    0x0005899e str.w sb, [sp, 0x30]                              |     __asm ("str.w sb, [var_30h]");
    0x000589a2 str r7, [sp, 0x38]                                |     var_80h = r7;
    0x000589a4 ldr.w sb, [sp, 0x2c]                              |     sb = var_2ch;
    0x000589a8 str.w r8, [sp, 0x2c]                              |     __asm ("str.w r8, [var_2ch]");
                                                                 |     do {
    0x000589ac ldrb r3, [r4, 0x13]                               |         r3 = *((r4 + 0x13));
    0x000589ae cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000589b0 beq.w 0x58b62                                     |             goto label_50;
                                                                 |         }
    0x000589b4 subs r3, 1                                        |         r3--;
    0x000589b6 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x000589b8 strb r3, [r4, 0x13]                               |         *((r4 + 0x13)) = r3;
    0x000589ba adds r3, 0x26                                     |         r3 += 0x26;
    0x000589bc ldr.w r7, [r4, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r7 = *((r4 + offset_0));
                                                                 | label_10:
    0x000589c0 ldrb.w r3, [sb]                                   |         r3 = *(sb);
    0x000589c4 cmp r3, 0xb0                                      |         
    0x000589c6 ite eq                                            |         
                                                                 |         if (r3 != 0xb0) {
    0x000589c8 ldrbeq r2, [sb, 2]                                |             r2 = *((sb + 2));
                                                                 |         }
                                                                 |         if (r3 != 0xb0) {
    0x000589cc mov r2, r3                                        |             r2 = r3;
                                                                 |         }
    0x000589ce cmp r2, 0xb1                                      |         
                                                                 |         if (r2 == 0xb1) {
    0x000589d0 beq.w 0x58b6a                                     |             goto label_51;
                                                                 |         }
    0x000589d4 cmp r2, 0x8a                                      |         
                                                                 |         if (r2 == 0x8a) {
    0x000589d6 beq.w 0x58b32                                     |             goto label_52;
                                                                 |         }
                                                                 | label_8:
    0x000589da mov r1, sb                                        |         r1 = sb;
                                                                 | label_9:
    0x000589dc mov r0, r4                                        |         r0 = r4;
    0x000589de bl 0x27e14                                        |         fcn_00027e14 (r0, r1);
    0x000589e2 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x000589e4 mov r3, fp                                        |         r3 = fp;
    0x000589e6 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x000589e8 mov r8, r0                                        |         r8 = r0;
    0x000589ea str r7, [sp]                                      |         *(sp) = r7;
    0x000589ec mov r0, r5                                        |         r0 = r5;
    0x000589ee bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000589f2 ldrd r1, r3, [r5, 0x6c]                           |         __asm ("ldrd r1, r3, [r5, 0x6c]");
    0x000589f6 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x000589f8 cmp r1, r3                                        |         
    0x000589fa add r2, fp                                        |         r2 += fp;
                                                                 |         if (r1 >= r3) {
    0x000589fc bge.w 0x58b72                                     |             goto label_53;
                                                                 |         }
    0x00058a00 ldr r0, [r5, 0x68]                                |         r0 = *((r5 + 0x68));
    0x00058a02 add.w r3, r1, r1, lsl 2                           |         r3 = r1 + (r1 << 2);
    0x00058a06 add.w ip, r1, 1                                   |         
    0x00058a0a str.w ip, [r5, 0x6c]                              |         __asm ("str.w ip, [r5, 0x6c]");
    0x00058a0e mov.w ip, 0x34                                    |         
    0x00058a12 add.w lr, r0, r3, lsl 2                           |         lr = r0 + (r3 << 2);
    0x00058a14 lsrs r3, r0, 0x1a                                 |         r3 = r0 >> 0x1a;
    0x00058a16 str.w r2, [lr, 4]                                 |         __asm ("str.w r2, [lr, 4]");
    0x00058a1a ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00058a1c str.w sl, [lr, 0x10]                              |         __asm ("str.w sl, [lr, 0x10]");
    0x00058a20 strd r2, r7, [lr, 8]                              |         __asm ("strd r2, r7, [lr, 8]");
    0x00058a24 str.w ip, [r0, r3, lsl 2]                         |         __asm ("str.w ip, [r0, r3, lsl 2]");
                                                                 | label_12:
    0x00058a28 mov r2, r8                                        |         r2 = r8;
    0x00058a2a mvn r3, 1                                         |         r3 = ~1;
    0x00058a2e mov r0, r5                                        |         r0 = r5;
    0x00058a30 bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
                                                                 |         if (r7 != 0) {
    0x00058a34 cbz r7, 0x58a46                                   |             
    0x00058a36 ldrb r3, [r4, 0x13]                               |             r3 = *((r4 + 0x13));
    0x00058a38 cmp r3, 7                                         |             
    0x00058a3a itttt ls                                          |             
                                                                 |             if (r3 > 7) {
    0x00058a3c addls r2, r3, 1                                   |                 r2 = r3 + 1;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x00058a3e addls r3, 0x26                                    |                 r3 += 0x26;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x00058a40 strbls r2, [r4, 0x13]                             |                 *((r4 + 0x13)) = r2;
                                                                 |             }
                                                                 |             if (r3 <= 7) {
    0x00058a42 strls r7, [r4, r3, lsl 2]                         |                 offset_1 = r3 << 2;
                                                                 |                 *((r4 + offset_1)) = r7;
                                                                 |                 goto label_54;
                                                                 |             }
                                                                 |         }
                                                                 | label_54:
    0x00058a46 add.w fp, fp, 1                                   |         
    0x00058a4a cmp fp, r6                                        |         
    0x00058a4c blt 0x589ac                                       |         
                                                                 |     } while (fp < r6);
    0x00058a4e movs r2, 0                                        |     r2 = 0;
    0x00058a50 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00058a52 movs r1, 8                                        |     r1 = 8;
    0x00058a54 mov r0, r5                                        |     r0 = r5;
    0x00058a56 str r2, [sp]                                      |     *(sp) = r2;
    0x00058a58 ldrd r8, sb, [sp, 0x2c]                           |     __asm ("ldrd r8, sb, [var_2ch]");
    0x00058a5c ldr r7, [sp, 0x38]                                |     r7 = var_80h;
    0x00058a5e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00058a62 cmp r6, 1                                         |     
                                                                 |     if (r6 > 1) {
    0x00058a64 bgt.w 0x58b98                                     |         goto label_55;
                                                                 |     }
                                                                 | label_15:
    0x00058a68 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00058a6a cmp r7, 0                                         |     
    0x00058a6c ldr r2, [r5, 0x6c]                                |     r2 = *((r5 + 0x6c));
    0x00058a6e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00058a72 it lt                                             |     
                                                                 |     if (r7 >= 0) {
    0x00058a74 addlt r7, r2, -1                                  |         r7 = r2 + -1;
                                                                 |     }
    0x00058a78 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00058a7a bne.w 0x58b90                                     |         goto label_56;
                                                                 |     }
    0x00058a7e ldr r3, [r5, 0x68]                                |     r3 = *((r5 + 0x68));
    0x00058a80 add.w r7, r7, r7, lsl 2                           |     r7 += (r7 << 2);
    0x00058a84 add.w r3, r3, r7, lsl 2                           |     r3 += (r7 << 2);
                                                                 | label_14:
    0x00058a88 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
                                                                 | label_21:
    0x00058a8a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00058a8c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00058a8e cmp r3, r2                                        |     
    0x00058a90 it ne                                             |     
                                                                 |     if (r3 != r2) {
    0x00058a92 cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00058a94 beq 0x58aa8                                       |         
    0x00058a96 ldrb r3, [r4, 0x13]                               |         r3 = *((r4 + 0x13));
    0x00058a98 cmp r3, 7                                         |         
                                                                 |         if (r3 > 7) {
    0x00058a9a bhi 0x58aa8                                       |             goto label_43;
                                                                 |         }
    0x00058a9c adds r2, r3, 1                                    |         r2 = r3 + 1;
    0x00058a9e adds r3, 0x26                                     |         r3 += 0x26;
    0x00058aa0 strb r2, [r4, 0x13]                               |         *((r4 + 0x13)) = r2;
    0x00058aa2 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00058aa4 str.w r2, [r4, r3, lsl 2]                         |         __asm ("str.w r2, [r4, r3, lsl 2]");
                                                                 |     }
                                                                 | label_43:
    0x00058aa8 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00058aaa ldr r0, [r4]                                      |     r0 = *(r4);
                                                                 |     if (r3 != 0) {
    0x00058aac cbz r3, 0x58ab6                                   |         
                                                                 | label_36:
    0x00058aae ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x00058ab0 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x00058ab4 ldr r0, [r4]                                      |         r0 = *(r4);
                                                                 |     }
                                                                 | label_3:
    0x00058ab6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00058ab8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00058aba beq.w 0x58752                                     |         goto label_1;
                                                                 |     }
    0x00058abe ldr.w r2, [pc, 0x410]                             |     r2 = *(0x00058ed0);
    0x00058ac2 ldr.w r3, [pc, 0x404]                             |     r3 = *(0x58eca);
    0x00058ac6 add r2, pc                                        |     r2 += pc;
    0x00058ac8 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00058aca ldr r2, [r3]                                      |     r2 = *(0x58eca);
    0x00058acc ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00058ace eors r2, r3                                       |     r2 ^= r3;
    0x00058ad0 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00058ad4 bne.w 0x58ec0                                     |         goto label_32;
                                                                 |     }
    0x00058ad8 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00058ada add sp, 0x5c                                      |     
    0x00058adc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00058ae0 b.w 0x137d0                                       |     void (*0x137d0)() ();
                                                                 | label_35:
    0x00058ae4 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00058ae6 ldrb.w r3, [r0, 0x57]                             |     r3 = *((r0 + 0x57));
    0x00058aea cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00058aec beq.w 0x587d8                                     |         goto label_2;
                                                                 |     }
    0x00058af0 b 0x58ab6                                         |     goto label_3;
                                                                 | label_34:
    0x00058af2 mov r0, r2                                        |     r0 = r2;
    0x00058af4 bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x00058af8 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00058afa b 0x587ba                                         |     goto label_4;
                                                                 | label_42:
    0x00058afc ldr r2, [r0, 0x14]                                |     r2 = *((r0 + 0x14));
    0x00058afe ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x00058b00 ldr r2, [r2]                                      |     r2 = *(r2);
                                                                 | label_6:
    0x00058b02 cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x00058b04 ble.w 0x588d0                                     |         goto label_5;
                                                                 |     }
    0x00058b08 ldrb r1, [r0, 2]                                  |     r1 = *((r0 + 2));
    0x00058b0a ldr r2, [r0, 0x14]                                |     r2 = *((r0 + 0x14));
    0x00058b0c cmp r3, 0x8a                                      |     
    0x00058b0e it ne                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x00058b10 cmpne r1, 0x8a                                    |         __asm ("cmpne r1, 0x8a");
                                                                 |     }
    0x00058b12 iteet eq                                          |     
                                                                 |     if (r3 != 0x8a) {
    0x00058b14 ldreq r3, [r2, 0x1c]                              |         r3 = *((r2 + 0x1c));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00058b16 addne r2, r2, r8, lsl 4                           |         r2 += (r8 << 4);
                                                                 |     }
                                                                 |     if (r3 != 0x8a) {
    0x00058b1a ldreq r0, [r2, 8]                                 |         r0 = *((r2 + 8));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00058b1c add.w r3, r3, r8, lsl 4                           |         r3 += (r8 << 4);
                                                                 |     }
    0x00058b20 it eq                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x00058b22 ldreq r0, [r3, 8]                                 |         r0 = *((r3 + 8));
                                                                 |     }
    0x00058b24 b 0x588d0                                         |     goto label_5;
                                                                 | label_41:
    0x00058b26 ldr r2, [r0, 0x14]                                |     r2 = *((r0 + 0x14));
    0x00058b28 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00058b2a b 0x58b02                                         |     goto label_6;
                                                                 | label_38:
    0x00058b2c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00058b2e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00058b30 b 0x5887c                                         |     goto label_7;
                                                                 | label_52:
    0x00058b32 ldr.w r2, [sb, 0x14]                              |     r2 = *((sb + 0x14));
    0x00058b36 ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x00058b38 ldr r2, [r2]                                      |     r2 = *(r2);
                                                                 | label_11:
    0x00058b3a cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x00058b3c ble.w 0x589da                                     |         goto label_8;
                                                                 |     }
    0x00058b40 ldrb.w r1, [sb, 2]                                |     r1 = *((sb + 2));
    0x00058b44 ldr.w r2, [sb, 0x14]                              |     r2 = *((sb + 0x14));
    0x00058b48 cmp r3, 0x8a                                      |     
    0x00058b4a it ne                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x00058b4c cmpne r1, 0x8a                                    |         __asm ("cmpne r1, 0x8a");
                                                                 |     }
    0x00058b4e iteet eq                                          |     
                                                                 |     if (r3 != 0x8a) {
    0x00058b50 ldreq r3, [r2, 0x1c]                              |         r3 = *((r2 + 0x1c));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00058b52 addne r2, r2, fp, lsl 4                           |         r2 += (fp << 4);
                                                                 |     }
                                                                 |     if (r3 != 0x8a) {
    0x00058b56 ldreq r1, [r2, 8]                                 |         r1 = *((r2 + 8));
                                                                 |     }
                                                                 |     if (r3 == 0x8a) {
    0x00058b58 add.w r3, r3, fp, lsl 4                           |         r3 += (fp << 4);
                                                                 |     }
    0x00058b5c it eq                                             |     
                                                                 |     if (r3 != 0x8a) {
    0x00058b5e ldreq r1, [r3, 8]                                 |         r1 = *((r3 + 8));
                                                                 |     }
    0x00058b60 b 0x589dc                                         |     goto label_9;
                                                                 | label_50:
    0x00058b62 ldr r7, [r4, 0x2c]                                |     r7 = *((r4 + 0x2c));
    0x00058b64 adds r7, 1                                        |     r7++;
    0x00058b66 str r7, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r7;
    0x00058b68 b 0x589c0                                         |     goto label_10;
                                                                 | label_51:
    0x00058b6a ldr.w r2, [sb, 0x14]                              |     r2 = *((sb + 0x14));
    0x00058b6e ldr r2, [r2]                                      |     r2 = *(r2);
    0x00058b70 b 0x58b3a                                         |     goto label_11;
                                                                 | label_53:
    0x00058b72 movs r1, 0x34                                     |     r1 = 0x34;
    0x00058b74 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00058b76 mov r0, r5                                        |     r0 = r5;
    0x00058b78 str r7, [sp]                                      |     *(sp) = r7;
    0x00058b7a bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00058b7e mov r1, r0                                        |     r1 = r0;
    0x00058b80 b 0x58a28                                         |     goto label_12;
                                                                 | label_33:
    0x00058b82 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x00058b84 ldr r6, [r3]                                      |     r6 = *(r3);
    0x00058b86 add.w r5, r6, r6, lsl 2                           |     r5 = r6 + (r6 << 2);
    0x00058b8a adds r5, 1                                        |     r5++;
    0x00058b8c mov r2, r5                                        |     r2 = r5;
    0x00058b8e b 0x587a8                                         |     goto label_13;
                                                                 | label_56:
    0x00058b90 ldr r3, [pc, 0x340]                               |     
    0x00058b92 add r3, pc                                        |     r3 = 0xb1a6a;
    0x00058b94 adds r3, 4                                        |     r3 += 4;
    0x00058b96 b 0x58a88                                         |     goto label_14;
                                                                 | label_55:
    0x00058b98 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00058b9a mvn.w r2, sb                                      |     r2 = ~sb;
    0x00058b9e ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00058ba2 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00058ba4 bmi 0x58be8                                       |         goto label_57;
                                                                 |     }
    0x00058ba6 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00058ba8 ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00058baa str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 |     do {
    0x00058bae movs r6, 0                                        |         r6 = 0;
    0x00058bb0 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00058bb2 add.w r3, r8, 1                                   |         r3 = r8 + 1;
    0x00058bb6 movs r1, 0x26                                     |         r1 = 0x26;
    0x00058bb8 mov r0, r5                                        |         r0 = r5;
    0x00058bba str r6, [sp]                                      |         *(sp) = r6;
    0x00058bbc bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00058bc0 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00058bc2 mov r2, r6                                        |         r2 = r6;
    0x00058bc4 movs r1, 8                                        |         r1 = 8;
    0x00058bc6 mov r0, r5                                        |         r0 = r5;
    0x00058bc8 str r6, [sp]                                      |         *(sp) = r6;
    0x00058bca bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00058bce b 0x58a68                                         |         goto label_15;
                                                                 |         if (r1 == 8) {
                                                                 | label_49:
    0x00058bd0 bne 0x58bd8                                       |             
    0x00058bd2 ldr.w sb, [sp, 0x18]                              |             sb = var_18h;
    0x00058bd6 b 0x5899a                                         |             goto label_16;
                                                                 |         }
    0x00058bd8 movs r2, 0                                        |         r2 = 0;
    0x00058bda ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00058bdc movs r1, 8                                        |         r1 = 8;
    0x00058bde mov r0, r5                                        |         r0 = r5;
    0x00058be0 str r2, [sp]                                      |         *(sp) = r2;
    0x00058be2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00058be6 b 0x58a68                                         |         goto label_15;
                                                                 | label_57:
    0x00058be8 mov r1, r5                                        |         r1 = r5;
    0x00058bea bl 0x2bed8                                        |         fcn_0002bed8 (r0, r1, r2);
    0x00058bee b 0x58bae                                         |         
                                                                 |     } while (1);
                                                                 | label_23:
    0x00058bf0 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00058bf2 mov sl, r6                                        |     sl = r6;
    0x00058bf4 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_44:
    0x00058bf6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00058bf8 movs r1, 0x1d                                     |     r1 = 0x1d;
    0x00058bfa ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00058bfc mov r0, r5                                        |     r0 = r5;
    0x00058bfe str r3, [sp]                                      |     *(sp) = r3;
    0x00058c00 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058c02 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00058c06 ldrd r7, r3, [r5, 0x6c]                           |     __asm ("ldrd r7, r3, [r5, 0x6c]");
    0x00058c0a cmp r7, r3                                        |     
                                                                 |     if (r7 >= r3) {
    0x00058c0c bge.w 0x58e76                                     |         goto label_58;
                                                                 |     }
    0x00058c10 add.w r2, r7, r7, lsl 2                           |     r2 = r7 + (r7 << 2);
    0x00058c14 ldr r3, [r5, 0x68]                                |     r3 = *((r5 + 0x68));
    0x00058c16 adds r0, r7, 1                                    |     r0 = r7 + 1;
    0x00058c18 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00058c1c lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00058c1e str r0, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r0;
    0x00058c20 movs r0, 8                                        |     r0 = 8;
    0x00058c22 str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00058c24 add r3, r2                                        |     r3 += r2;
    0x00058c26 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00058c28 movs r1, 0                                        |     r1 = 0;
    0x00058c2a vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00058c2e strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_26:
    0x00058c32 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00058c34 sub.w r3, r6, 1                                   |     r3 = r6 - 1;
    0x00058c38 clz r3, r3                                        |     r3 &= r3;
    0x00058c3c lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00058c3e cmp r2, 0                                         |     
    0x00058c40 it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x00058c42 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00058c44 cbz r3, 0x58c54                                   |         
                                                                 | label_46:
    0x00058c46 movs r3, 0                                        |         r3 = 0;
    0x00058c48 movs r1, 0x33                                     |         r1 = 0x33;
    0x00058c4a str r3, [sp]                                      |         *(sp) = r3;
    0x00058c4c mov r0, r5                                        |         r0 = r5;
    0x00058c4e ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00058c50 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
    0x00058c54 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058c56 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00058c58 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00058c5a bne.w 0x5894e                                     |         goto label_17;
                                                                 |     }
    0x00058c5e mov r1, r3                                        |     r1 = r3;
    0x00058c60 mov r0, r5                                        |     r0 = r5;
    0x00058c62 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00058c66 b 0x5894e                                         |     goto label_17;
                                                                 | label_47:
    0x00058c68 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00058c6a mvn.w r2, sl                                      |     r2 = ~sl;
    0x00058c6e ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00058c72 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00058c74 bmi.w 0x58e6e                                     |         goto label_59;
                                                                 |     }
    0x00058c78 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00058c7a ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00058c7c str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x00058c80 b 0x58956                                         |     goto label_18;
                                                                 | label_28:
    0x00058c82 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00058c84 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_39:
    0x00058c86 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x00058c88 mov r0, r4                                        |     r0 = r4;
    0x00058c8a ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x00058c8c ldr r7, [r7, 0x14]                                |     r7 = *((r7 + 0x14));
    0x00058c8e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00058c90 subs r3, 1                                        |     r3--;
    0x00058c92 str r3, [r4, 0x38]                                |     *((r4 + 0x38)) = r3;
    0x00058c94 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00058c96 bl 0x27e14                                        |     fcn_00027e14 (r0, r1);
    0x00058c9a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058c9c mov sl, r0                                        |     sl = r0;
    0x00058c9e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00058ca0 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00058ca2 beq.w 0x58e60                                     |         goto label_60;
                                                                 |     }
    0x00058ca6 ldrb r3, [r4, 0x13]                               |     r3 = *((r4 + 0x13));
    0x00058ca8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00058caa beq.w 0x58eb4                                     |         goto label_61;
                                                                 |     }
    0x00058cae subs r3, 1                                        |     r3--;
    0x00058cb0 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00058cb2 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x00058cb4 adds r3, 0x26                                     |     r3 += 0x26;
    0x00058cb6 ldr.w r8, [r4, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r8 = *((r4 + offset_2));
                                                                 | label_31:
    0x00058cba ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00058cbc movs r1, 0x66                                     |     r1 = 0x66;
    0x00058cbe mov r0, r5                                        |     r0 = r5;
    0x00058cc0 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00058cc4 mov r2, r3                                        |     r2 = r3;
    0x00058cc6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00058cca ldr r3, [r7]                                      |     r3 = *(r7);
    0x00058ccc cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00058cce ble 0x58db6                                       |         goto label_62;
                                                                 |     }
                                                                 | label_24:
    0x00058cd0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058cd2 mov r6, r7                                        |     r6 = r7;
    0x00058cd4 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00058cd6 subs.w sb, r3, r2                                 |     sb = r3 - r2;
    0x00058cda add r3, sp, 0x50                                  |     r3 += var_50h;
    0x00058cdc strd r3, sl, [sp, 0x28]                           |     __asm ("strd r3, sl, [var_2ch]");
    0x00058ce0 it ne                                             |     
                                                                 |     if (sb == r3) {
    0x00058ce2 movne sb, 1                                       |         sb = 1;
                                                                 |     }
    0x00058ce6 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x00058cea b 0x58d54                                         |     
                                                                 |     while (r8 == 0) {
                                                                 | label_19:
    0x00058cec ldr r2, [sp, 0x50]                                |         r2 = var_50h;
                                                                 |         if (r2 != 0) {
    0x00058cee cbz r2, 0x58d00                                   |             
    0x00058cf0 ldrb r1, [r4, 0x13]                               |             r1 = *((r4 + 0x13));
    0x00058cf2 cmp r1, 7                                         |             
    0x00058cf4 itttt ls                                          |             
                                                                 |             if (r1 > 7) {
    0x00058cf6 addls r0, r1, 1                                   |                 r0 = r1 + 1;
                                                                 |             }
                                                                 |             if (r1 > 7) {
    0x00058cf8 addls r1, 0x26                                    |                 r1 += 0x26;
                                                                 |             }
                                                                 |             if (r1 > 7) {
    0x00058cfa strbls r0, [r4, 0x13]                             |                 *((r4 + 0x13)) = r0;
                                                                 |             }
                                                                 |             if (r1 <= 7) {
    0x00058cfc strls r2, [r4, r1, lsl 2]                         |                 offset_3 = r1 << 2;
                                                                 |                 *((r4 + offset_3)) = r2;
                                                                 |                 goto label_63;
                                                                 |             }
                                                                 |         }
                                                                 | label_63:
    0x00058d00 ldr r2, [r7]                                      |         r2 = *(r7);
    0x00058d02 subs r2, 1                                        |         r2--;
    0x00058d04 cmp r2, fp                                        |         
    0x00058d06 ite le                                            |         
                                                                 |         if (r2 > fp) {
    0x00058d08 movle r1, sb                                      |             r1 = sb;
                                                                 |         }
                                                                 |         if (r2 <= fp) {
    0x00058d0a orrgt r1, sb, 1                                   |             r1 = sb | 1;
                                                                 |         }
    0x00058d0e mvn r2, 1                                         |         r2 = ~1;
    0x00058d12 str r2, [sp, 8]                                   |         var_8h = r2;
    0x00058d14 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00058d16 strd r3, r2, [sp]                                 |         __asm ("strd r3, r2, [sp]");
    0x00058d1a cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00058d1c beq 0x58d86                                       |             goto label_64;
                                                                 |         }
    0x00058d1e cmp r3, sl                                        |         
    0x00058d20 ite ne                                            |         
                                                                 |         if (r3 == sl) {
    0x00058d22 movne r1, 0x35                                    |             r1 = 0x35;
                                                                 |         }
                                                                 |         if (r3 != sl) {
    0x00058d24 moveq r1, 0x33                                    |             r1 = 0x33;
                                                                 |         }
    0x00058d26 mov r2, sl                                        |         r2 = sl;
    0x00058d28 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x00058d2a mov r0, r5                                        |         r0 = r5;
    0x00058d2c bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00058d30 ldr r3, [r5, 0x6c]                                |         r3 = *((r5 + 0x6c));
    0x00058d32 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00058d34 cmp r3, 0                                         |         
    0x00058d36 ldrb r1, [r2]                                     |         r1 = *(r2);
                                                                 |         if (r3 > 0) {
    0x00058d38 ble 0x58d48                                       |             
    0x00058d3a ldr r2, [r5, 0x68]                                |             r2 = *((r5 + 0x68));
    0x00058d3c add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x00058d40 add.w r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
    0x00058d44 strh r1, [r2, -0x12]                              |             *((r2 - 0x12)) = r1;
                                                                 |         }
                                                                 | label_20:
    0x00058d48 ldr r3, [r7]                                      |         r3 = *(r7);
    0x00058d4a add.w fp, fp, 1                                   |         
    0x00058d4e adds r6, 0x10                                     |         r6 += 0x10;
    0x00058d50 cmp r3, fp                                        |         
                                                                 |         if (r3 <= fp) {
    0x00058d52 ble 0x58db6                                       |             goto label_62;
                                                                 |         }
    0x00058d54 ldr r1, [r6, 8]                                   |         r1 = *((r6 + 8));
    0x00058d56 mov r0, r4                                        |         r0 = r4;
    0x00058d58 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00058d5a bl 0x5bd14                                        |         r0 = fcn_0005bd14 (r0, r1, r2);
    0x00058d5e mov r3, r0                                        |         r3 = r0;
    0x00058d60 cmp.w r8, 0                                       |         
    0x00058d64 beq 0x58cec                                       |         
                                                                 |     }
    0x00058d66 str r0, [sp, 0x38]                                |     var_80h = r0;
    0x00058d68 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00058d6a bl 0xc0c4                                         |     fcn_0000c0c4 (r0);
    0x00058d6e ldr r3, [sp, 0x38]                                |     r3 = var_80h;
    0x00058d70 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00058d72 beq 0x58cec                                       |         goto label_19;
                                                                 |     }
    0x00058d74 mov r2, r8                                        |     r2 = r8;
    0x00058d76 movs r1, 0x66                                     |     r1 = 0x66;
    0x00058d78 mov r0, r5                                        |     r0 = r5;
    0x00058d7a str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00058d7c strh r0, [r0]                                     |     *(r0) = r0;
    0x00058d7e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00058d82 ldr r3, [sp, 0x38]                                |     r3 = var_80h;
    0x00058d84 b 0x58cec                                         |     goto label_19;
                                                                 | label_64:
    0x00058d86 cmp r3, sl                                        |     
    0x00058d88 ite ne                                            |     
                                                                 |     if (r3 == sl) {
    0x00058d8a movne r1, 0x34                                    |         r1 = 0x34;
                                                                 |     }
                                                                 |     if (r3 != sl) {
    0x00058d8c moveq r1, 0x32                                    |         r1 = 0x32;
                                                                 |     }
    0x00058d8e mov r2, sl                                        |     r2 = sl;
    0x00058d90 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058d92 mov r0, r5                                        |     r0 = r5;
    0x00058d94 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00058d98 ldr r3, [r5, 0x6c]                                |     r3 = *((r5 + 0x6c));
    0x00058d9a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00058d9c cmp r3, 0                                         |     
    0x00058d9e ldrb r2, [r2]                                     |     r2 = *(r2);
                                                                 |     if (r3 <= 0) {
    0x00058da0 ble 0x58d48                                       |         goto label_20;
                                                                 |     }
    0x00058da2 ldr r1, [r5, 0x68]                                |     r1 = *((r5 + 0x68));
    0x00058da4 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00058da8 orr r2, r2, 0x10                                  |     r2 |= 0x10;
    0x00058dac add.w r1, r1, r3, lsl 2                           |     r1 += (r3 << 2);
    0x00058db0 strh r2, [r1, -0x12]                              |     *((r1 - 0x12)) = r2;
    0x00058db4 b 0x58d48                                         |     goto label_20;
                                                                 | label_62:
    0x00058db6 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00058dba beq 0x58dd4                                       |         
    0x00058dbc movs r2, 0                                        |         r2 = 0;
    0x00058dbe movs r1, 0x32                                     |         r1 = 0x32;
    0x00058dc0 str r2, [sp]                                      |         *(sp) = r2;
    0x00058dc2 mov r0, r5                                        |         r0 = r5;
    0x00058dc4 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00058dc6 mov r2, r8                                        |         r2 = r8;
    0x00058dc8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00058dcc ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x00058dce mov r0, r5                                        |         r0 = r5;
    0x00058dd0 bl 0x2a2e4                                        |         fcn_0002a2e4 (r0, r1, r2);
                                                                 |     }
                                                                 | label_25:
    0x00058dd4 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00058dd6 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00058dd8 adds r2, 0xe                                      |     r2 += 0xe;
    0x00058dda cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00058ddc bmi 0x58e88                                       |         goto label_65;
                                                                 |     }
    0x00058dde ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00058de0 ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00058de2 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00058de4 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00058de6 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00058de8 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_27:
    0x00058dea cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00058dee beq.w 0x58a8a                                     |         goto label_21;
                                                                 |     }
    0x00058df2 ldrb r3, [r4, 0x13]                               |     r3 = *((r4 + 0x13));
    0x00058df4 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00058df6 bhi.w 0x58a8a                                     |         goto label_21;
                                                                 |     }
    0x00058dfa adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00058dfc adds r3, 0x26                                     |     r3 += 0x26;
    0x00058dfe strb r2, [r4, 0x13]                               |     *((r4 + 0x13)) = r2;
    0x00058e00 str.w r8, [r4, r3, lsl 2]                         |     __asm ("str.w r8, [r4, r3, lsl 2]");
    0x00058e04 b 0x58a8a                                         |     goto label_21;
                                                                 | label_48:
    0x00058e06 movs r3, 0                                        |     r3 = 0;
    0x00058e08 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00058e0a str r3, [sp]                                      |     *(sp) = r3;
    0x00058e0c movs r1, 0x23                                     |     r1 = 0x23;
    0x00058e0e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058e10 mov r0, r5                                        |     r0 = r5;
    0x00058e12 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00058e16 mov r8, r0                                        |     r8 = r0;
    0x00058e18 b 0x5898a                                         |     goto label_22;
                                                                 | label_29:
    0x00058e1a ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00058e1c str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00058e1e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00058e20 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00058e22 beq.w 0x58bf0                                     |         goto label_23;
                                                                 |     }
    0x00058e26 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00058e28 movs r1, 0x60                                     |     r1 = 0x60;
    0x00058e2a ldr r7, [sp, 0x34]                                |     r7 = var_34h;
    0x00058e2c mov r0, r5                                        |     r0 = r5;
    0x00058e2e str r6, [sp, 8]                                   |     var_8h = r6;
    0x00058e30 strd r6, r3, [sp]                                 |     __asm ("strd r6, r3, [sp]");
    0x00058e34 mov r3, r6                                        |     r3 = r6;
    0x00058e36 mov r2, r7                                        |     r2 = r7;
    0x00058e38 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00058e3c str r7, [sp, 0x14]                                |     var_14h = r7;
                                                                 | label_45:
    0x00058e3e ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00058e40 mov r0, r5                                        |     r0 = r5;
    0x00058e42 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058e44 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00058e46 str r1, [sp]                                      |     *(sp) = r1;
    0x00058e48 movs r1, 0x1b                                     |     r1 = 0x1b;
    0x00058e4a str r6, [sp, 4]                                   |     var_4h = r6;
    0x00058e4c bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00058e50 b 0x58a8a                                         |     goto label_21;
                                                                 |     if (r1 == 0x1b) {
                                                                 | label_37:
    0x00058e52 beq 0x58e94                                       |         goto label_66;
                                                                 |     }
    0x00058e54 mov r1, r6                                        |     r1 = r6;
    0x00058e56 mov r0, r4                                        |     r0 = r4;
    0x00058e58 bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x00058e5c str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00058e5e b 0x5887c                                         |     goto label_7;
                                                                 | label_60:
    0x00058e60 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00058e62 mov.w r8, 0                                       |     r8 = 0;
    0x00058e66 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00058e68 bgt.w 0x58cd0                                     |         goto label_24;
                                                                 |     }
    0x00058e6c b 0x58dd4                                         |     goto label_25;
                                                                 | label_59:
    0x00058e6e mov r1, r5                                        |     r1 = r5;
    0x00058e70 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00058e74 b 0x58956                                         |     goto label_18;
                                                                 | label_58:
    0x00058e76 movs r3, 0                                        |     r3 = 0;
    0x00058e78 movs r1, 8                                        |     r1 = 8;
    0x00058e7a mov r2, r3                                        |     r2 = r3;
    0x00058e7c mov r0, r5                                        |     r0 = r5;
    0x00058e7e str r3, [sp]                                      |     *(sp) = r3;
    0x00058e80 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00058e84 mov r7, r0                                        |     r7 = r0;
    0x00058e86 b 0x58c32                                         |     goto label_26;
                                                                 | label_65:
    0x00058e88 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00058e8a mov r1, r5                                        |     r1 = r5;
    0x00058e8c rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00058e8e bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00058e92 b 0x58dea                                         |     goto label_27;
                                                                 | label_66:
    0x00058e94 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00058e96 cmp r3, 5                                         |     
                                                                 |     if (r3 == 5) {
    0x00058e98 beq.w 0x58c82                                     |         goto label_28;
                                                                 |     }
    0x00058e9c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00058e9e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00058ea0 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00058ea2 beq 0x58e1a                                       |         goto label_29;
                                                                 |     }
    0x00058ea4 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x00058ea6 add.w sl, r3, -1                                  |     sl = r3 + -1;
    0x00058eaa ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00058eac str.w sl, [r4, 0x38]                              |     __asm ("str.w sl, [r4, 0x38]");
    0x00058eb0 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00058eb2 b 0x588fa                                         |     goto label_30;
                                                                 | label_61:
    0x00058eb4 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00058eb6 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00058eba str.w r8, [r4, 0x2c]                              |     __asm ("str.w r8, [r4, 0x2c]");
    0x00058ebe b 0x58cba                                         |     goto label_31;
                                                                 | label_32:
    0x00058ec0 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00058ec4 strh r6, [r1, 0x1e]                               |     *((r1 + 0x1e)) = r6;
    0x00058ec6 movs r4, r0                                       |     r4 = r0;
    0x00058ec8 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00058eca movs r0, r0                                       |     
    0x00058ecc strh r6, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r6;
    0x00058ece movs r4, r0                                       |     r4 = r0;
    0x00058ed0 strh r2, [r7]                                     |     *(r7) = r2;
    0x00058ed2 movs r4, r0                                       |     r4 = r0;
    0x00058ed4 adr r1, 0x348                                     |     r1 = 0x348;
    0x00058ed6 movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5aa48 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0005aa48 ()                                          | void fcn_0005aa48 (int16_t arg1) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_10h;
                                                                     |     r0 = arg1;
    0x0005aa48 blhs 0x79c5c                                          |     __asm ("blhs aav.0x000000ff");
                                                                     |     if (? != ?) {
    0x0005aa4c bne.w 0x5acb6                                         |         goto label_6;
                                                                     |     }
    0x0005aa50 ldr r3, [r0, 0x24]                                    |     r3 = *((r0 + 0x24));
    0x0005aa52 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005aa56 mov r4, r0                                            |     r4 = r0;
    0x0005aa58 vpush {d8}                                            |     __asm ("vpush {d8}");
    0x0005aa5c sub sp, 0x1c                                          |     
    0x0005aa5e ldr r6, [r0]                                          |     r6 = *(r0);
    0x0005aa60 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0005aa62 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005aa64 bne.w 0x5ac38                                         |         
    0x0005aa68 ldr r7, [r0, 8]                                       |         r7 = *((r0 + 8));
    0x0005aa6a cmp r7, 0                                             |         
                                                                     |         if (r7 == 0) {
    0x0005aa6c beq.w 0x5ae9c                                         |             goto label_7;
                                                                     |         }
                                                                     | label_1:
    0x0005aa70 ldrb.w r2, [r4, 0x95]                                 |         r2 = *((r4 + 0x95));
    0x0005aa74 ldr r3, [r7, 0x6c]                                    |         r3 = *((r7 + 0x6c));
    0x0005aa76 cmp r2, 0                                             |         
                                                                     |         if (r2 != 0) {
    0x0005aa78 bne.w 0x5acb8                                         |             goto label_8;
                                                                     |         }
                                                                     | label_0:
    0x0005aa7c ldr r2, [r7, 0x70]                                    |         r2 = *((r7 + 0x70));
    0x0005aa7e cmp r2, r3                                            |         
                                                                     |         if (r2 <= r3) {
    0x0005aa80 ble.w 0x5aed0                                         |             goto label_9;
                                                                     |         }
    0x0005aa84 add.w r2, r3, r3, lsl 2                               |         r2 = r3 + (r3 << 2);
    0x0005aa86 lsls r3, r0, 0xa                                      |         r3 = r0 << 0xa;
                                                                     |     }
    0x0005ac38 ldrb.w r3, [r6, 0x57]                                 |     r3 = *((r6 + 0x57));
    0x0005ac3c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ac3e beq 0x5acac                                           |         void (*0x5acac)() ();
                                                                     |     }
    0x0005ac40 movs r3, 7                                            |     r3 = 7;
    0x0005ac42 str r3, [r0, 0xc]                                     |     *((r0 + 0xc)) = r3;
    0x0005ac44 add sp, 0x1c                                          |     
    0x0005ac46 vpop {d8}                                             |     __asm ("vpop {d8}");
    0x0005ac4a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_6:
    0x0005acb6 bx lr                                                 |     return;
                                                                     | label_8:
    0x0005acb8 ldr.w r8, [r4, 0x84]                                  |     r8 = *((r4 + 0x84));
    0x0005acbc ldr.w r2, [r8, 0x60]                                  |     r2 = *((r8 + 0x60));
    0x0005acc0 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005acc2 beq.w 0x5aa7c                                         |         goto label_0;
                                                                     |     }
    0x0005acc6 ldr r1, [r7, 0x70]                                    |     r1 = *((r7 + 0x70));
    0x0005acc8 cmp r3, r1                                            |     
                                                                     |     if (r3 >= r1) {
    0x0005acca bge.w 0x5af04                                         |         goto label_10;
                                                                     |     }
    0x0005acce add.w r2, r3, r3, lsl 2                               |     r2 = r3 + (r3 << 2);
    0x0005acd2 add.w sb, r3, 1                                       |     sb = r3 + 1;
    0x0005acd4 lsrs r1, r0, 4                                        |     r1 = r0 >> 4;
    0x0005acd6 ldr r3, [r7, 0x68]                                    |     r3 = *((r7 + 0x68));
    0x0005acd8 movs r5, 0x53                                         |     r5 = 0x53;
    0x0005acda lsls r2, r2, 2                                        |     r2 <<= 2;
    0x0005acdc str.w sb, [r7, 0x6c]                                  |     __asm ("str.w sb, [r7, 0x6c]");
    0x0005ace0 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0005ace4 movs r0, 0                                            |     r0 = 0;
    0x0005ace6 str r5, [r3, r2]                                      |     *((r3 + r2)) = r5;
    0x0005ace8 add r3, r2                                            |     r3 += r2;
    0x0005acea adds r2, r3, 4                                        |     r2 = r3 + 4;
    0x0005acec vst1.32 {d16}, [r2]                                   |     __asm ("vst1.32 {d16}, [r2]");
    0x0005acf0 strd r0, r0, [r3, 0xc]                                |     __asm ("strd r0, r0, [r3, 0xc]");
                                                                     | label_3:
    0x0005acf4 cmp sb, r1                                            |     
    0x0005acf6 ldr.w r2, [r8, 0x5c]                                  |     r2 = *((r8 + 0x5c));
    0x0005acf8 movs r0, 0x5c                                         |     r0 = 0x5c;
                                                                     |     if (r0 >= 0x5c) {
    0x0005acfa bge.w 0x5af20                                         |         goto label_11;
                                                                     |     }
    0x0005acfe add.w r3, sb, sb, lsl 2                               |     r3 = sb + (sb << 2);
    0x0005ad02 ldr r5, [r7, 0x68]                                    |     r5 = *((r7 + 0x68));
    0x0005ad04 movs r0, 0                                            |     r0 = 0;
    0x0005ad06 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0005ad08 add.w fp, sb, 1                                       |     
    0x0005ad0c mov.w ip, 0x23                                        |     
    0x0005ad10 str.w fp, [r7, 0x6c]                                  |     __asm ("str.w fp, [r7, 0x6c]");
    0x0005ad14 adds r1, r5, r3                                       |     r1 = r5 + r3;
    0x0005ad16 strd r2, r0, [r1, 4]                                  |     __asm ("strd r2, r0, [r1, 4]");
    0x0005ad1a strd r0, r0, [r1, 0xc]                                |     __asm ("strd r0, r0, [r1, 0xc]");
    0x0005ad1e str.w ip, [r5, r3]                                    |     __asm ("str.w ip, [r5, r3]");
                                                                     | label_5:
    0x0005ad22 ldrd r3, sl, [r8, 0x60]                               |     __asm ("ldrd r3, sl, [r8, 0x60]");
    0x0005ad26 movs r5, 0                                            |     r5 = 0;
    0x0005ad28 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005ad2a ble 0x5ad4a                                           |         goto label_12;
                                                                     |     }
                                                                     |     do {
    0x0005ad2c add.w r3, r5, sl                                      |         r3 = r5 + sl;
    0x0005ad30 ldr.w r2, [r8, 0x5c]                                  |         r2 = *((r8 + 0x5c));
    0x0005ad34 movs r1, 0x5e                                         |         r1 = 0x5e;
    0x0005ad36 str r3, [sp]                                          |         *(sp) = r3;
    0x0005ad38 mov r0, r7                                            |         r0 = r7;
    0x0005ad3a mov r3, r5                                            |         r3 = r5;
    0x0005ad3c bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ad40 ldr.w r3, [r8, 0x60]                                  |         r3 = *((r8 + 0x60));
    0x0005ad44 adds r5, 1                                            |         r5++;
    0x0005ad46 cmp r3, r5                                            |         
    0x0005ad48 bgt 0x5ad2c                                           |         
                                                                     |     } while (r3 > r5);
                                                                     | label_12:
    0x0005ad4a mov r3, r5                                            |     r3 = r5;
    0x0005ad4c movs r5, 0                                            |     r5 = 0;
    0x0005ad4e mov r2, sl                                            |     r2 = sl;
    0x0005ad50 movs r1, 0x54                                         |     r1 = 0x54;
    0x0005ad52 mov r0, r7                                            |     r0 = r7;
    0x0005ad54 str r5, [sp]                                          |     *(sp) = r5;
    0x0005ad56 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ad5a ldr.w r2, [r8, 0x5c]                                  |     r2 = *((r8 + 0x5c));
    0x0005ad5e mov r3, fp                                            |     r3 = fp;
    0x0005ad60 movs r1, 0x26                                         |     r1 = 0x26;
    0x0005ad62 mov r0, r7                                            |     r0 = r7;
    0x0005ad64 str r5, [sp]                                          |     *(sp) = r5;
    0x0005ad66 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ad6a ldr r2, [r7]                                          |     r2 = *(r7);
    0x0005ad6c cmp sb, r5                                            |     
    0x0005ad6e ldr r3, [r7, 0x6c]                                    |     r3 = *((r7 + 0x6c));
    0x0005ad70 ldrb.w r2, [r2, 0x57]                                 |     r2 = *((r2 + 0x57));
    0x0005ad74 it lt                                                 |     
                                                                     |     if (sb >= r5) {
    0x0005ad76 addlt sb, r3, -1                                      |         sb = r3 + -1;
                                                                     |     }
    0x0005ad7a cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0005ad7c bne.w 0x5af18                                         |         goto label_13;
                                                                     |     }
    0x0005ad80 ldr r2, [r7, 0x68]                                    |     r2 = *((r7 + 0x68));
    0x0005ad82 add.w sb, sb, sb, lsl 2                               |     sb += (sb << 2);
    0x0005ad86 add.w r2, r2, sb, lsl 2                               |     r2 += (sb << 2);
                                                                     | label_4:
    0x0005ad8a str r3, [r2, 8]                                       |     *((r2 + 8)) = r3;
    0x0005ad8c b 0x5aa7c                                             |     goto label_0;
                                                                     | label_7:
    0x0005ae9c ldrb.w r3, [r6, 0xb1]                                 |     r3 = *((r6 + 0xb1));
                                                                     |     if (r3 != 0) {
    0x0005aea0 cbnz r3, 0x5aec2                                      |         void (*0x5aec2)() ();
                                                                     |     }
    0x0005aea2 ldr r3, [r0, 0x74]                                    |     r3 = *((r0 + 0x74));
                                                                     |     if (r3 == 0) {
    0x0005aea4 cbz r3, 0x5aef8                                       |         goto label_14;
                                                                     |     }
                                                                     | label_2:
    0x0005aea6 mov r0, r4                                            |     r0 = r4;
    0x0005aea8 bl 0x29b0c                                            |     r0 = fcn_00029b0c (r0);
    0x0005aeac mov r7, r0                                            |     r7 = r0;
    0x0005aeae cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0005aeb0 bne.w 0x5aa70                                         |         goto label_1;
                                                                     |     }
    0x0005aeb4 movs r3, 1                                            |     r3 = 1;
    0x0005aeb6 str r3, [r4, 0xc]                                     |     *((r4 + 0xc)) = r3;
    0x0005aeb8 b 0x5aca0                                             |     void (*0x5aca0)() ();
                                                                     | label_9:
    0x0005aed0 movs r3, 0                                            |     r3 = 0;
    0x0005aed2 movs r1, 0x46                                         |     r1 = 0x46;
    0x0005aed4 mov r2, r3                                            |     r2 = r3;
    0x0005aed6 mov r0, r7                                            |     r0 = r7;
    0x0005aed8 str r3, [sp]                                          |     *(sp) = r3;
    0x0005aeda bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005aede b 0x5aaa6                                             |     void (*0x5aaa6)() ();
                                                                     | label_14:
    0x0005aef8 ldr r3, [r6, 0x50]                                    |     r3 = *((r6 + 0x50));
    0x0005aefa lsls r3, r3, 0x1c                                     |     r3 <<= 0x1c;
    0x0005aefc itt pl                                                |     
                                                                     |     if (r3 < r3) {
    0x0005aefe movpl r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r3 < r3) {
    0x0005af00 strbpl r3, [r0, 0x17]                                 |         *((r0 + 0x17)) = r3;
                                                                     |     }
    0x0005af02 b 0x5aea6                                             |     goto label_2;
                                                                     | label_10:
    0x0005af04 movs r3, 0                                            |     r3 = 0;
    0x0005af06 movs r1, 0x53                                         |     r1 = 0x53;
    0x0005af08 mov r2, r3                                            |     r2 = r3;
    0x0005af0a mov r0, r7                                            |     r0 = r7;
    0x0005af0c str r3, [sp]                                          |     *(sp) = r3;
    0x0005af0e bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005af12 ldrd sb, r1, [r7, 0x6c]                               |     __asm ("ldrd sb, r1, [r7, 0x6c]");
    0x0005af16 b 0x5acf4                                             |     goto label_3;
                                                                     | label_13:
    0x0005af18 ldr r2, [pc, 0x20]                                    |     
    0x0005af1a add r2, pc                                            |     r2 = 0xb5e5a;
    0x0005af1c adds r2, 4                                            |     r2 += 4;
    0x0005af1e b 0x5ad8a                                             |     goto label_4;
                                                                     | label_11:
    0x0005af20 movs r3, 0                                            |     r3 = 0;
    0x0005af22 movs r1, 0x23                                         |     r1 = 0x23;
    0x0005af24 mov r0, r7                                            |     r0 = r7;
    0x0005af26 str r3, [sp]                                          |     *(sp) = r3;
    0x0005af28 bl 0x29a7c                                            |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005af2c mov sb, r0                                            |     sb = r0;
    0x0005af2e add.w fp, r0, 1                                       |     
    0x0005af32 b 0x5ad22                                             |     goto label_5;
                                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5af8c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0005af8c ()                                  | void fcn_0005af8c (arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     int16_t var_0h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x0005af8c push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0005af90 mov r6, r2                                    |     r6 = r2;
    0x0005af92 ldr r2, [r0, 0x34]                            |     r2 = *((r0 + 0x34));
    0x0005af94 sub sp, 0xc                                   |     
    0x0005af96 mov r4, r0                                    |     r4 = r0;
    0x0005af98 mov r8, r1                                    |     r8 = r1;
    0x0005af9a ldr r5, [r0, 8]                               |     r5 = *((r0 + 8));
    0x0005af9c mov r7, r3                                    |     r7 = r3;
    0x0005af9e cmp r2, 0                                     |     
    0x0005afa0 it le                                         |     
                                                             |     if (r2 > 0) {
    0x0005afa2 movle sb, 0                                   |         sb = 0;
                                                             |     }
                                                             |     if (r2 > 0) {
    0x0005afa6 bgt 0x5afe4                                   |         goto label_4;
                                                             |     }
                                                             | label_2:
    0x0005afa8 ldrh r3, [r6, 8]                              |     r3 = *((r6 + 8));
                                                             |     if (r3 == 0) {
    0x0005afaa cbz r3, 0x5b018                               |         goto label_5;
                                                             |     }
                                                             |     do {
    0x0005afac ldrb.w r2, [r8, 0x2b]                         |         r2 = *((r8 + 0x2b));
                                                             |         if (r2 != 0) {
    0x0005afb0 cbnz r2, 0x5b018                              |             goto label_5;
                                                             |         }
    0x0005afb2 ldr.w r1, [r8, 0x34]                          |         r1 = *((r8 + 0x34));
                                                             |         if (r1 != 0) {
    0x0005afb6 cbz r1, 0x5afca                               |             
    0x0005afb8 ldr r0, [r1]                                  |             r0 = *(r1);
    0x0005afba cmp r0, r3                                    |             
    0x0005afbc it lt                                         |             
                                                             |             if (r0 >= r3) {
    0x0005afbe movlt r1, r2                                  |                 r1 = r2;
                                                             |             }
                                                             |             if (r0 < r3) {
    0x0005afc0 blt 0x5afca                                   |                 goto label_6;
                                                             |             }
    0x0005afc2 add.w r1, r1, r3, lsl 4                       |             r1 += (r3 << 4);
    0x0005afc6 ldr r1, [r1, -0x8]                            |             r1 = *((r1 - 0x8));
                                                             |         }
                                                             | label_6:
    0x0005afca mov r0, r4                                    |         r0 = r4;
    0x0005afcc mov r2, r7                                    |         r2 = r7;
    0x0005afce bl 0x5af40                                    |         fcn_0005af40 (r0, r1, r2);
    0x0005afd2 ldrb r3, [r6, 5]                              |         r3 = *((r6 + 5));
    0x0005afd4 cmp r3, 0x41                                  |         
                                                             |         if (r3 > 0x41) {
    0x0005afd6 bhi 0x5b028                                   |             goto label_7;
                                                             |         }
                                                             | label_0:
    0x0005afd8 cmp.w sb, 0                                   |         
                                                             |         if (sb != 0) {
    0x0005afdc bne 0x5b084                                   |             goto label_8;
                                                             |         }
                                                             | label_1:
    0x0005afde add sp, 0xc                                   |         
    0x0005afe0 pop.w {r4, r5, r6, r7, r8, sb, pc}            |         
                                                             | label_4:
    0x0005afe4 ldrd sb, r3, [r5, 0x6c]                       |         __asm ("ldrd sb, r3, [r5, 0x6c]");
    0x0005afe8 subs r2, 1                                    |         r2--;
    0x0005afea cmp sb, r3                                    |         
                                                             |         if (sb >= r3) {
    0x0005afec bge 0x5b0ae                                   |             goto label_9;
                                                             |         }
    0x0005afee add.w r3, sb, sb, lsl 2                       |         r3 = sb + (sb << 2);
    0x0005aff2 ldr r0, [r5, 0x68]                            |         r0 = *((r5 + 0x68));
    0x0005aff4 add.w r1, sb, 1                               |         r1 = sb + 1;
    0x0005aff8 lsls r3, r3, 2                                |         r3 <<= 2;
    0x0005affa str r1, [r5, 0x6c]                            |         *((r5 + 0x6c)) = r1;
    0x0005affc mov.w ip, 0                                   |         
    0x0005b000 adds r1, r0, r3                               |         r1 = r0 + r3;
    0x0005b002 mov.w lr, 0x12                                |         lr = 0x12;
    0x0005b006 strd r2, ip, [r1, 4]                          |         __asm ("strd r2, ip, [r1, 4]");
    0x0005b00a strd r7, ip, [r1, 0xc]                        |         __asm ("strd r7, ip, [r1, 0xc]");
    0x0005b00e str.w lr, [r0, r3]                            |         __asm ("str.w lr, [r0, r3]");
    0x0005b012 ldrh r3, [r6, 8]                              |         r3 = *((r6 + 8));
    0x0005b014 cmp r3, 0                                     |         
    0x0005b016 bne 0x5afac                                   |         
                                                             |     } while (r3 != 0);
                                                             | label_5:
    0x0005b018 movs r1, 0                                    |     r1 = 0;
    0x0005b01a mov r0, r4                                    |     r0 = r4;
    0x0005b01c mov r2, r7                                    |     r2 = r7;
    0x0005b01e bl 0x5af40                                    |     fcn_0005af40 (r0, r1, r2);
    0x0005b022 ldrb r3, [r6, 5]                              |     r3 = *((r6 + 5));
    0x0005b024 cmp r3, 0x41                                  |     
                                                             |     if (r3 < 0x41) {
    0x0005b026 bls 0x5afd8                                   |         goto label_0;
                                                             |     }
                                                             | label_7:
    0x0005b028 ldrd r0, r3, [r5, 0x6c]                       |     __asm ("ldrd r0, r3, [r5, 0x6c]");
    0x0005b02c cmp r0, r3                                    |     
                                                             |     if (r0 >= r3) {
    0x0005b02e bge 0x5b0be                                   |         goto label_10;
                                                             |     }
    0x0005b030 add.w r3, r0, r0, lsl 2                       |     r3 = r0 + (r0 << 2);
    0x0005b034 ldr r1, [r5, 0x68]                            |     r1 = *((r5 + 0x68));
    0x0005b036 adds r2, r0, 1                                |     r2 = r0 + 1;
    0x0005b038 lsls r3, r3, 2                                |     r3 <<= 2;
    0x0005b03a str r2, [r5, 0x6c]                            |     *((r5 + 0x6c)) = r2;
    0x0005b03c movs r4, 0                                    |     r4 = 0;
    0x0005b03e adds r2, r1, r3                               |     r2 = r1 + r3;
    0x0005b040 mov.w ip, 1                                   |     
    0x0005b044 strd r7, ip, [r2, 4]                          |     __asm ("strd r7, ip, [r2, 4]");
    0x0005b048 strd r4, r4, [r2, 0xc]                        |     __asm ("strd r4, r4, [r2, 0xc]");
    0x0005b04c movs r2, 0x60                                 |     r2 = 0x60;
    0x0005b04e str r2, [r1, r3]                              |     *((r1 + r3)) = r2;
                                                             | label_3:
    0x0005b050 ldr r3, [r5]                                  |     r3 = *(r5);
    0x0005b052 ldrb.w r3, [r3, 0x57]                         |     r3 = *((r3 + 0x57));
    0x0005b056 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0005b058 bne 0x5afd8                                   |         goto label_0;
                                                             |     }
    0x0005b05a cmp r0, 0                                     |     
    0x0005b05c ldr r1, [r5, 0x68]                            |     r1 = *((r5 + 0x68));
    0x0005b05e it lt                                         |     
                                                             |     if (r0 >= 0) {
    0x0005b060 ldrlt r0, [r5, 0x6c]                          |         r0 = *((r5 + 0x6c));
                                                             |     }
    0x0005b062 add.w r2, r6, 5                               |     r2 = r6 + 5;
    0x0005b066 mov.w r3, 1                                   |     r3 = 1;
    0x0005b06a it lt                                         |     
                                                             |     if (r0 >= 0) {
    0x0005b06c addlt r0, r0, -1                              |         r0 += -1;
                                                             |     }
    0x0005b070 add.w r0, r0, r0, lsl 2                       |     r0 += (r0 << 2);
    0x0005b074 add.w r1, r1, r0, lsl 2                       |     r1 += (r0 << 2);
    0x0005b078 mov r0, r5                                    |     r0 = r5;
    0x0005b07a bl 0x1ebdc                                    |     fcn_0001ebdc (r0, r1, r2, r3);
    0x0005b07e cmp.w sb, 0                                   |     
                                                             |     if (sb == 0) {
    0x0005b082 beq 0x5afde                                   |         goto label_1;
                                                             |     }
                                                             | label_8:
    0x0005b084 ldr r3, [r5]                                  |     r3 = *(r5);
    0x0005b086 ldr r2, [r5, 0x6c]                            |     r2 = *((r5 + 0x6c));
    0x0005b088 ldrb.w r3, [r3, 0x57]                         |     r3 = *((r3 + 0x57));
    0x0005b08c it lt                                         |     
                                                             |     if (sb >= 0) {
    0x0005b08e addlt sb, r2, -1                              |         sb = r2 + -1;
                                                             |     }
                                                             |     if (r3 != 0) {
    0x0005b092 cbnz r3, 0x5b0a6                              |         goto label_11;
                                                             |     }
    0x0005b094 ldr r3, [r5, 0x68]                            |     r3 = *((r5 + 0x68));
    0x0005b096 add.w sb, sb, sb, lsl 2                       |     sb += (sb << 2);
    0x0005b09a add.w r3, r3, sb, lsl 2                       |     r3 += (sb << 2);
                                                             |     do {
    0x0005b09e str r2, [r3, 8]                               |         *((r3 + 8)) = r2;
    0x0005b0a0 add sp, 0xc                                   |         
    0x0005b0a2 pop.w {r4, r5, r6, r7, r8, sb, pc}            |         
                                                             | label_11:
    0x0005b0a6 ldr r3, [pc, 0x28]                            |         
    0x0005b0a8 add r3, pc                                    |         r3 = 0xb617e;
    0x0005b0aa adds r3, 4                                    |         r3 += 4;
    0x0005b0ac b 0x5b09e                                     |         
                                                             |     } while (1);
                                                             | label_9:
    0x0005b0ae movs r3, 0                                    |     r3 = 0;
    0x0005b0b0 movs r1, 0x12                                 |     r1 = 0x12;
    0x0005b0b2 mov r0, r5                                    |     r0 = r5;
    0x0005b0b4 str r7, [sp]                                  |     *(sp) = r7;
    0x0005b0b6 bl 0x29a7c                                    |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005b0ba mov sb, r0                                    |     sb = r0;
    0x0005b0bc b 0x5afa8                                     |     goto label_2;
                                                             | label_10:
    0x0005b0be movs r3, 0                                    |     r3 = 0;
    0x0005b0c0 mov r2, r7                                    |     r2 = r7;
    0x0005b0c2 str r3, [sp]                                  |     *(sp) = r3;
    0x0005b0c4 movs r1, 0x60                                 |     r1 = 0x60;
    0x0005b0c6 movs r3, 1                                    |     r3 = 1;
    0x0005b0c8 mov r0, r5                                    |     r0 = r5;
    0x0005b0ca bl 0x29a7c                                    |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005b0ce b 0x5b050                                     |     goto label_3;
                                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5b0d4 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.0005b0d4 ()                                  | void fcn_0005b0d4 (int16_t arg_30h, arithmetic arg1, arithmetic 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;
    0x0005b0d4 push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0005b0d8 sub sp, 0x14                                  |     
    0x0005b0da ldr r5, [pc, 0x25c]                           |     
    0x0005b0dc ldr r4, [pc, 0x25c]                           |     r4 = *(0x5b33c);
    0x0005b0de add r5, pc                                    |     r5 = 0xb641c;
    0x0005b0e0 ldr.w r8, [sp, 0x30]                          |     r8 = *(arg_30h);
    0x0005b0e4 ldr r4, [r5, r4]                              |     
    0x0005b0e6 ldr r4, [r4]                                  |     r4 = *(0xb641c);
    0x0005b0e8 str r4, [sp, 0xc]                             |     var_ch = r4;
    0x0005b0ea mov.w r4, 0                                   |     r4 = 0;
    0x0005b0ee cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0005b0f0 beq.w 0x5b2b4                                 |         goto label_6;
                                                             |     }
    0x0005b0f4 cmp r3, 0                                     |     
    0x0005b0f6 mov r5, r0                                    |     r5 = r0;
    0x0005b0f8 mov r6, r2                                    |     r6 = r2;
    0x0005b0fa mov ip, r3                                    |     
                                                             |     if (r3 >= 0) {
    0x0005b0fc blt 0x5b1f0                                   |         
    0x0005b0fe ldrsh.w r3, [r1, 0x20]                        |         r3 = *((r1 + 0x20));
    0x0005b102 mov r4, r1                                    |         r4 = r1;
    0x0005b104 cmp r3, ip                                    |         
                                                             |         if (r3 == ip) {
    0x0005b106 beq 0x5b1f0                                   |             goto label_7;
                                                             |         }
    0x0005b108 ldrb.w r3, [r1, 0x2b]                         |         r3 = *((r1 + 0x2b));
    0x0005b10c add.w r7, ip, ip, lsl 1                       |         r7 = ip + (ip << 1);
    0x0005b110 lsls r7, r7, 2                                |         r7 <<= 2;
    0x0005b112 cmp r3, 1                                     |         
                                                             |         if (r3 == 1) {
    0x0005b114 beq.w 0x5b2d4                                 |             goto label_8;
                                                             |         }
    0x0005b118 ldr r2, [r1, 4]                               |         r2 = *((r1 + 4));
    0x0005b11a add.w sb, r2, r7                              |         sb = r2 + r7;
    0x0005b11e ldrh.w r3, [sb, 0xa]                          |         r3 = *((sb + 0xa));
    0x0005b122 lsls r0, r3, 0x1a                             |         r0 = r3 << 0x1a;
                                                             |         if (r0 < r3) {
    0x0005b124 bmi.w 0x5b25e                                 |             goto label_9;
                                                             |         }
    0x0005b128 ldr r3, [r1, 0x1c]                            |         r3 = *((r1 + 0x1c));
    0x0005b12a lsls r2, r3, 0x18                             |         r2 = r3 << 0x18;
                                                             |         if (r2 < r3) {
    0x0005b12c bmi 0x5b21a                                   |             goto label_10;
                                                             |         }
    0x0005b12e eor r3, r3, 0x20                              |         r3 ^= 0x20;
    0x0005b132 ubfx r2, ip, 0xf, 1                           |         r2 = (ip >> 0xf) & ((1 << 1) - 1);
    0x0005b136 ubfx r3, r3, 5, 1                             |         r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x0005b13a sxth.w ip, ip                                 |         __asm ("sxth.w ip, ip");
    0x0005b13e orrs r2, r3                                   |         r2 |= r3;
                                                             |         if (r2 == r3) {
    0x0005b140 bne 0x5b14c                                   |             
    0x0005b142 mov r1, ip                                    |             r1 = ip;
    0x0005b144 mov r0, r4                                    |             r0 = r4;
    0x0005b146 bl 0xf6c8                                     |             r0 = fcn_0000f6c8 (r0, r1);
    0x0005b14a mov ip, r0                                    |             
                                                             |         }
                                                             | label_0:
    0x0005b14c movs r1, 0x5e                                 |         r1 = 0x5e;
                                                             | label_3:
    0x0005b14e mov r3, ip                                    |         r3 = ip;
    0x0005b150 mov r2, r6                                    |         r2 = r6;
    0x0005b152 mov r0, r5                                    |         r0 = r5;
    0x0005b154 str.w r8, [sp]                                |         __asm ("str.w r8, [sp]");
    0x0005b158 bl 0x29ac4                                    |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005b15c ldrb.w r3, [r4, 0x2b]                         |         r3 = *((r4 + 0x2b));
    0x0005b160 cmp r3, 2                                     |         
                                                             |         if (r3 == 2) {
    0x0005b162 beq.w 0x5b28a                                 |             goto label_11;
                                                             |         }
    0x0005b166 subs r2, r3, 0                                |         r2 = r3 - 0;
    0x0005b168 ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x0005b16a mov.w r1, 0                                   |         r1 = 0;
    0x0005b16e it ne                                         |         
                                                             |         if (r2 == r3) {
    0x0005b170 movne r2, 1                                   |             r2 = 1;
                                                             |         }
    0x0005b172 str r1, [sp, 8]                               |         var_8h = r1;
    0x0005b174 add r3, r7                                    |         r3 += r7;
    0x0005b176 ldrh r1, [r3, 8]                              |         r1 = *((r3 + 8));
    0x0005b178 ldrb r3, [r3, 5]                              |         r3 = *((r3 + 5));
    0x0005b17a cmp r1, 0                                     |         
    0x0005b17c it eq                                         |         
                                                             |         if (r1 != 0) {
    0x0005b17e orreq r2, r2, 1                               |             r2 |= 1;
                                                             |         }
                                                             |         if (r2 == 0) {
    0x0005b182 cbnz r2, 0x5b1d0                              |             
    0x0005b184 ldr r2, [r4, 0x34]                            |             r2 = *((r4 + 0x34));
                                                             |             if (r2 == 0) {
    0x0005b186 cbz r2, 0x5b1d0                               |                 goto label_5;
                                                             |             }
    0x0005b188 ldr r0, [r2]                                  |             r0 = *(r2);
    0x0005b18a cmp r0, r1                                    |             
                                                             |             if (r0 < r1) {
    0x0005b18c blt 0x5b1d0                                   |                 goto label_5;
                                                             |             }
    0x0005b18e add.w r2, r2, r1, lsl 4                       |             r2 += (r1 << 4);
    0x0005b192 ldr r1, [r2, -0x8]                            |             r1 = *((r2 - 0x8));
                                                             |             if (r1 == 0) {
    0x0005b196 cbz r1, 0x5b1d0                               |                 goto label_5;
                                                             |             }
    0x0005b198 ldr r0, [r5]                                  |             r0 = *(r5);
    0x0005b19a add r6, sp, 8                                 |             r6 += var_8h;
    0x0005b19c ldrb.w r2, [r0, 0x54]                         |             r2 = *((r0 + 0x54));
    0x0005b1a0 str r6, [sp]                                  |             *(sp) = r6;
    0x0005b1a2 bl 0x30528                                    |             fcn_00030528 (r0, r1, r2, r3, r4);
    0x0005b1a4 vst2.32 {d25[0], d26[0]}, [r1], r2            |             __asm ("vst2.32 {d25[0], d26[0]}, [r1], r2");
                                                             |             if (r1 != 0) {
    0x0005b1a8 cbz r1, 0x5b1ca                               |                 
    0x0005b1aa ldr r0, [r5]                                  |                 r0 = *(r5);
    0x0005b1ac ldrb.w r3, [r0, 0x57]                         |                 r3 = *((r0 + 0x57));
    0x0005b1b0 cmp r3, 0                                     |                 
                                                             |                 if (r3 != 0) {
    0x0005b1b2 bne.w 0x5b312                                 |                     goto label_12;
                                                             |                 }
    0x0005b1b6 ldr r3, [r5, 0x6c]                            |                 r3 = *((r5 + 0x6c));
    0x0005b1b8 ldr r2, [r5, 0x68]                            |                 r2 = *((r5 + 0x68));
    0x0005b1ba add.w r3, r3, r3, lsl 2                       |                 r3 += (r3 << 2);
    0x0005b1be lsls r3, r3, 2                                |                 r3 <<= 2;
    0x0005b1c0 subs r3, 0x14                                 |                 r3 -= 0x14;
    0x0005b1c2 add r3, r2                                    |                 r3 += r2;
    0x0005b1c4 movs r2, 0xf6                                 |                 r2 = 0xf6;
    0x0005b1c6 str r1, [r3, 0x10]                            |                 *((r3 + 0x10)) = r1;
    0x0005b1c8 strb r2, [r3, 1]                              |                 *((r3 + 1)) = r2;
                                                             |             }
    0x0005b1ca ldr r3, [r4, 4]                               |             r3 = *((r4 + 4));
    0x0005b1cc add r3, r7                                    |             r3 += r7;
    0x0005b1ce ldrb r3, [r3, 5]                              |             r3 = *((r3 + 5));
                                                             |         }
                                                             | label_5:
    0x0005b1d0 cmp r3, 0x45                                  |         
                                                             |         if (r3 == 0x45) {
    0x0005b1d2 beq.w 0x5b2d8                                 |             goto label_13;
                                                             |         }
                                                             | label_1:
    0x0005b1d6 ldr r2, [pc, 0x168]                           |         
    0x0005b1d8 ldr r3, [pc, 0x160]                           |         r3 = *(0x5b33c);
    0x0005b1da add r2, pc                                    |         r2 = 0xb6520;
    0x0005b1dc ldr r3, [r2, r3]                              |         r3 = *(0xb6520);
    0x0005b1de ldr r2, [r3]                                  |         r2 = *(0xb6520);
    0x0005b1e0 ldr r3, [sp, 0xc]                             |         r3 = var_ch;
    0x0005b1e2 eors r2, r3                                   |         r2 ^= r3;
    0x0005b1e4 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x0005b1e8 bne 0x5b2d0                                   |             goto label_14;
                                                             |         }
    0x0005b1ea add sp, 0x14                                  |         
    0x0005b1ec pop.w {r4, r5, r6, r7, r8, sb, pc}            |         
                                                             |     }
                                                             | label_7:
    0x0005b1f0 ldr r2, [pc, 0x150]                           |     
    0x0005b1f2 ldr r3, [pc, 0x148]                           |     r3 = *(0x5b33e);
    0x0005b1f4 add r2, pc                                    |     r2 = 0xb653c;
    0x0005b1f6 ldr r3, [r2, r3]                              |     r3 = *(0xb653c);
    0x0005b1f8 ldr r2, [r3]                                  |     r2 = *(0xb653c);
    0x0005b1fa ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x0005b1fc eors r2, r3                                   |     r2 ^= r3;
    0x0005b1fe mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 != r3) {
    0x0005b202 bne 0x5b2d0                                   |         goto label_14;
                                                             |     }
    0x0005b204 mov r3, r8                                    |     r3 = r8;
    0x0005b206 mov r2, r6                                    |     r2 = r6;
    0x0005b208 movs r1, 0x87                                 |     r1 = 0x87;
    0x0005b20a mov r0, r5                                    |     r0 = r5;
    0x0005b20c movs r4, 0                                    |     r4 = 0;
    0x0005b20e str r4, [sp, 0x30]                            |     *(arg_30h) = r4;
                                                             | label_2:
    0x0005b210 add sp, 0x14                                  |     
    0x0005b212 pop.w {r4, r5, r6, r7, r8, sb, lr}            |     
    0x0005b216 b.w 0x29ac4                                   |     void (*0x29ac4)() ();
                                                             | label_10:
    0x0005b21a ldr r3, [r1, 8]                               |     r3 = *((r1 + 8));
                                                             |     if (r3 != 0) {
    0x0005b21c cbnz r3, 0x5b228                              |         goto label_15;
                                                             |     }
    0x0005b21e b 0x5b332                                     |     goto label_16;
                                                             |     do {
    0x0005b220 ldr r3, [r3, 0x14]                            |         r3 = *((r3 + 0x14));
    0x0005b222 cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x0005b224 beq.w 0x5b332                                 |             goto label_16;
                                                             |         }
                                                             | label_15:
    0x0005b228 ldrb.w r1, [r3, 0x37]                         |         r1 = *((r3 + 0x37));
    0x0005b22c and r1, r1, 3                                 |         r1 &= 3;
    0x0005b230 cmp r1, 2                                     |         
    0x0005b232 bne 0x5b220                                   |         
                                                             |     } while (r1 != 2);
    0x0005b234 ldrh r0, [r3, 0x34]                           |     r0 = *((r3 + 0x34));
    0x0005b236 sxth.w r1, ip                                 |     __asm ("sxth.w r1, ip");
    0x0005b23a cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0005b23c beq 0x5b30c                                   |         goto label_17;
                                                             |     }
    0x0005b23e ldr r3, [r3, 4]                               |     r3 = *((r3 + 4));
    0x0005b240 mov.w ip, 0                                   |     
    0x0005b244 subs r3, 2                                    |     r3 -= 2;
    0x0005b246 b 0x5b250                                     |     
                                                             |     while (r2 != r1) {
    0x0005b248 add.w ip, ip, 1                               |         
    0x0005b24c cmp ip, r0                                    |         
                                                             |         if (ip == r0) {
    0x0005b24e beq 0x5b30c                                   |             goto label_17;
                                                             |         }
    0x0005b250 ldrsh r2, [r3, 2]!                            |         r2 = *((r3 += 2));
    0x0005b254 cmp r2, r1                                    |         
    0x0005b256 bne 0x5b248                                   |         
                                                             |     }
    0x0005b258 sxth.w ip, ip                                 |     __asm ("sxth.w ip, ip");
    0x0005b25c b 0x5b14c                                     |     goto label_0;
                                                             | label_9:
    0x0005b25e lsls r0, r3, 0x17                             |     r0 = r3 << 0x17;
    0x0005b260 ldr r5, [r5, 0xc]                             |     r5 = *((r5 + 0xc));
                                                             |     if (r0 >= r3) {
    0x0005b262 bpl 0x5b2e4                                   |         goto label_18;
                                                             |     }
    0x0005b264 ldr r1, [pc, 0xe0]                            |     
    0x0005b266 ldr r3, [pc, 0xd4]                            |     r3 = *(0x5b33e);
    0x0005b268 add r1, pc                                    |     r1 = 0xb65b4;
    0x0005b26a ldr r3, [r1, r3]                              |     r3 = *(0xb65b4);
    0x0005b26c ldr r1, [r3]                                  |     r1 = *(0xb65b4);
    0x0005b26e ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x0005b270 eors r1, r3                                   |     r1 ^= r3;
    0x0005b272 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r1 != r3) {
    0x0005b276 bne 0x5b2d0                                   |         goto label_14;
                                                             |     }
    0x0005b278 ldr r1, [pc, 0xd0]                            |     
    0x0005b27a mov r0, r5                                    |     r0 = r5;
    0x0005b27c ldr r2, [r2, r7]                              |     r2 = *((r2 + r7));
    0x0005b27e add r1, pc                                    |     r1 = 0xb65ce;
    0x0005b280 add sp, 0x14                                  |     
    0x0005b282 pop.w {r4, r5, r6, r7, r8, sb, lr}            |     
    0x0005b286 b.w 0x1d554                                   |     void (*0x1d554)() ();
                                                             | label_11:
    0x0005b28a ldr r3, [r4, 4]                               |     r3 = *((r4 + 4));
    0x0005b28c add r3, r7                                    |     r3 += r7;
    0x0005b28e ldrb r3, [r3, 5]                              |     r3 = *((r3 + 5));
    0x0005b290 cmp r3, 0x45                                  |     
                                                             |     if (r3 != 0x45) {
    0x0005b292 bne 0x5b1d6                                   |         goto label_1;
                                                             |     }
                                                             | label_4:
    0x0005b294 ldr r2, [pc, 0xb8]                            |     
    0x0005b296 ldr r3, [pc, 0xa4]                            |     r3 = *(0x5b33e);
    0x0005b298 add r2, pc                                    |     r2 = 0xb65ec;
    0x0005b29a ldr r3, [r2, r3]                              |     r3 = *(0xb65ec);
    0x0005b29c ldr r2, [r3]                                  |     r2 = *(0xb65ec);
    0x0005b29e ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x0005b2a0 eors r2, r3                                   |     r2 ^= r3;
    0x0005b2a2 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 != r3) {
    0x0005b2a6 bne 0x5b2d0                                   |         goto label_14;
                                                             |     }
    0x0005b2a8 movs r3, 0                                    |     r3 = 0;
    0x0005b2aa mov r2, r8                                    |     r2 = r8;
    0x0005b2ac movs r1, 0x57                                 |     r1 = 0x57;
    0x0005b2ae mov r0, r5                                    |     r0 = r5;
    0x0005b2b0 str r3, [sp, 0x30]                            |     *(arg_30h) = r3;
    0x0005b2b2 b 0x5b210                                     |     goto label_2;
                                                             | label_6:
    0x0005b2b4 ldr r4, [pc, 0x9c]                            |     
    0x0005b2b6 ldr r1, [pc, 0x84]                            |     r1 = *(0x5b33e);
    0x0005b2b8 add r4, pc                                    |     r4 = 0xb6610;
    0x0005b2ba ldr r1, [r4, r1]                              |     r1 = *(0xb6610);
    0x0005b2bc ldr r4, [r1]                                  |     r4 = *(0xb6610);
    0x0005b2be ldr r1, [sp, 0xc]                             |     r1 = var_ch;
    0x0005b2c0 eors r4, r1                                   |     r4 ^= r1;
    0x0005b2c2 mov.w r1, 0                                   |     r1 = 0;
    0x0005b2c6 itt eq                                        |     
                                                             |     if (r4 != r1) {
    0x0005b2c8 moveq r1, 0x5e                                |         r1 = 0x5e;
                                                             |     }
                                                             |     if (r4 == r1) {
    0x0005b2ca streq r8, [sp, 0x30]                          |         *(arg_30h) = r8;
                                                             |         goto label_19;
                                                             |     }
                                                             |     if (r4 == r1) {
                                                             | label_19:
    0x0005b2ce beq 0x5b210                                   |         goto label_2;
                                                             |     }
                                                             | label_14:
    0x0005b2d0 blx 0x9b44                                    |     fcn_00009b44 ();
                                                             | label_8:
    0x0005b2d4 movs r1, 0xaf                                 |     r1 = 0xaf;
    0x0005b2d6 b 0x5b14e                                     |     goto label_3;
                                                             | label_13:
    0x0005b2d8 ldrb.w r3, [r4, 0x2b]                         |     r3 = *((r4 + 0x2b));
    0x0005b2dc cmp r3, 1                                     |     
                                                             |     if (r3 == 1) {
    0x0005b2de beq.w 0x5b1d6                                 |         goto label_1;
                                                             |     }
    0x0005b2e2 b 0x5b294                                     |     goto label_4;
                                                             | label_18:
    0x0005b2e4 orr r4, r3, 0x100                             |     r4 = r3 | 0x100;
    0x0005b2e8 adds r6, 1                                    |     r6++;
    0x0005b2ea ldr r7, [r5, 0x34]                            |     r7 = *((r5 + 0x34));
    0x0005b2ec mov r3, r8                                    |     r3 = r8;
    0x0005b2ee strh.w r4, [sb, 0xa]                          |     *((sb + 0xa)) = r4;
    0x0005b2f2 mov r2, sb                                    |     r2 = sb;
    0x0005b2f4 mov r0, r5                                    |     r0 = r5;
    0x0005b2f6 str r6, [r5, 0x34]                            |     *((r5 + 0x34)) = r6;
    0x0005b2f8 bl 0x5af8c                                    |     fcn_0005af8c (r0, r1, r2, r3);
    0x0005b2fc ldrh.w r3, [sb, 0xa]                          |     r3 = *((sb + 0xa));
    0x0005b300 str r7, [r5, 0x34]                            |     *((r5 + 0x34)) = r7;
    0x0005b302 bic r3, r3, 0x100                             |     r3 = BIT_MASK (r3, 0x100);
    0x0005b306 strh.w r3, [sb, 0xa]                          |     *((sb + 0xa)) = r3;
    0x0005b30a b 0x5b1d6                                     |     goto label_1;
                                                             | label_17:
    0x0005b30c mov.w ip, -1                                  |     
    0x0005b310 b 0x5b14c                                     |     goto label_0;
                                                             | label_12:
    0x0005b312 ldr.w r3, [r0, 0x210]                         |     r3 = *((r0 + 0x210));
                                                             |     if (r3 != 0) {
    0x0005b316 cbz r3, 0x5b324                               |         
    0x0005b318 bl 0x186ec                                    |         fcn_000186ec (r0, r1);
    0x0005b31c ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x0005b31e add r3, r7                                    |         r3 += r7;
    0x0005b320 ldrb r3, [r3, 5]                              |         r3 = *((r3 + 5));
    0x0005b322 b 0x5b1d0                                     |         goto label_5;
                                                             |     }
    0x0005b324 mov r0, r1                                    |     r0 = r1;
    0x0005b326 bl 0x1874c                                    |     fcn_0001874c (r0);
    0x0005b32a ldr r3, [r4, 4]                               |     r3 = *((r4 + 4));
    0x0005b32c add r3, r7                                    |     r3 += r7;
    0x0005b32e ldrb r3, [r3, 5]                              |     r3 = *((r3 + 5));
    0x0005b330 b 0x5b1d0                                     |     goto label_5;
                                                             | label_16:
    0x0005b332 movs r3, 0                                    |     r3 = 0;
    0x0005b334 ldrh r3, [r3, 0x34]                           |     r3 = *((r3 + 0x34));
    0x0005b336 udf 0xff                                      |     __asm ("udf 0xff");
                                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5b358 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0005b358 ()                                          | void fcn_0005b358 (int16_t arg_0h, arithmetic arg1, int16_t arg2, arithmetic arg3) {
                                                                     |     arithmetic var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int32_t var_10h;
                                                                     |     int32_t var_10h_2;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0005b358 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005b35c sub sp, 0x2c                                          |     
    0x0005b35e str r0, [sp]                                          |     *(sp) = r0;
    0x0005b360 mov r4, r0                                            |     r4 = r0;
    0x0005b362 mov r5, r2                                            |     r5 = r2;
    0x0005b364 mov r2, r1                                            |     r2 = r1;
    0x0005b366 ldr r0, [pc, 0x1b0]                                   |     
    0x0005b368 ldr r3, [pc, 0x1b0]                                   |     r3 = *(0x5b51c);
    0x0005b36a str r1, [sp, 4]                                       |     var_4h = r1;
    0x0005b36c mov r1, r5                                            |     r1 = r5;
    0x0005b36e add r0, pc                                            |     r0 = 0xb688c;
    0x0005b370 ldr r3, [r0, r3]                                      |     
    0x0005b372 ldr r0, [r4, 8]                                       |     r0 = *((r4 + 8));
    0x0005b374 ldr r3, [r3]                                          |     r3 = *(0xb688c);
    0x0005b376 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0005b378 mov.w r3, 0                                           |     r3 = 0;
    0x0005b37c bl 0x329e8                                            |     fcn_000329e8 (r0, r1, r2);
    0x0005b380 ldr r3, [r5, 0x1c]                                    |     r3 = *((r5 + 0x1c));
    0x0005b382 lsls r3, r3, 0x19                                     |     r3 <<= 0x19;
                                                                     |     if (r3 < r3) {
    0x0005b384 bpl 0x5b3b2                                           |         
    0x0005b386 ldr r3, [r4, 8]                                       |         r3 = *((r4 + 8));
    0x0005b388 ldr r1, [r3]                                          |         r1 = *(r3);
    0x0005b38a ldr r2, [r3, 0x6c]                                    |         r2 = *((r3 + 0x6c));
    0x0005b38c ldrb.w r1, [r1, 0x57]                                 |         r1 = *((r1 + 0x57));
    0x0005b390 cmp r1, 0                                             |         
                                                                     |         if (r1 != 0) {
    0x0005b392 bne.w 0x5b4d6                                         |             goto label_4;
                                                                     |         }
    0x0005b396 ldr r3, [r3, 0x68]                                    |         r3 = *((r3 + 0x68));
    0x0005b398 subs r2, 1                                            |         r2--;
    0x0005b39a add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0005b39e add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0005b3a2 ldrb r2, [r3]                                         |         r2 = *(r3);
    0x0005b3a4 cmp r2, 0x60                                          |         
                                                                     |         if (r2 == 0x60) {
    0x0005b3a6 beq.w 0x5b4e4                                         |             goto label_5;
                                                                     |         }
                                                                     | label_2:
    0x0005b3aa cmp r2, 0x5f                                          |         
    0x0005b3ac itt eq                                                |         
                                                                     |         if (r2 != 0x5f) {
    0x0005b3ae moveq r2, 1                                           |             r2 = 1;
                                                                     |         }
                                                                     |         if (r2 == 0x5f) {
    0x0005b3b0 streq r2, [r3, 0xc]                                   |             *((r3 + 0xc)) = r2;
                                                                     |             goto label_3;
                                                                     |         }
                                                                     |     }
                                                                     | label_3:
    0x0005b3b2 ldrsh.w r3, [r5, 0x22]                                |     r3 = *((r5 + 0x22));
    0x0005b3b6 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005b3b8 ble 0x5b3d8                                           |         goto label_6;
                                                                     |     }
    0x0005b3ba ldr r2, [r5, 4]                                       |     r2 = *((r5 + 4));
    0x0005b3bc movs r0, 0xc                                          |     r0 = 0xc;
    0x0005b3be smlabb r0, r3, r0, r2                                 |     __asm ("smlabb r0, r3, r0, r2");
                                                                     |     do {
    0x0005b3c2 ldrh r1, [r2, 0xa]                                    |         r1 = *((r2 + 0xa));
    0x0005b3c4 adds r2, 0xc                                          |         r2 += 0xc;
    0x0005b3c6 tst.w r1, 0x60                                        |         
    0x0005b3ca itt ne                                                |         
                                                                     |         if ((r1 & 0x60) == 0) {
    0x0005b3cc orrne r1, r1, 0x80                                    |             r1 |= 0x80;
                                                                     |         }
                                                                     |         if ((r1 & 0x60) != 0) {
    0x0005b3d0 strh r1, [r2, -0x2]                                   |             *((r2 - 0x2)) = r1;
                                                                     |         }
    0x0005b3d4 cmp r0, r2                                            |         
    0x0005b3d6 bne 0x5b3c2                                           |         
                                                                     |     } while (r0 != r2);
                                                                     | label_6:
    0x0005b3d8 ldr r2, [pc, 0x144]                                   |     
    0x0005b3da mov.w r8, 0                                           |     r8 = 0;
    0x0005b3de ldr r1, [sp]                                          |     r1 = *(sp);
    0x0005b3e0 str r5, [sp, 0x20]                                    |     var_20h = r5;
    0x0005b3e2 add r2, pc                                            |     r2 = 0xb6906;
    0x0005b3e4 strd r8, r8, [sp, 0x10]                               |     __asm ("strd r8, r8, [var_10h]");
    0x0005b3e8 str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0005b3ea ldr r2, [sp, 4]                                       |     r2 = var_4h;
    0x0005b3ec rsbs r2, r2, 0                                        |     r2 -= ;
    0x0005b3ee str r2, [r1, 0x34]                                    |     *((r1 + 0x34)) = r2;
                                                                     | label_0:
    0x0005b3f0 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005b3f2 ble 0x5b484                                           |         goto label_7;
                                                                     |     }
    0x0005b3f4 movs r6, 0                                            |     r6 = 0;
    0x0005b3f6 add.w sb, sp, 8                                       |     sb += var_8h;
    0x0005b3fa mov sl, r6                                            |     sl = r6;
    0x0005b3fc mov fp, r6                                            |     
    0x0005b3fe mov r7, r6                                            |     r7 = r6;
                                                                     |     do {
    0x0005b400 ldr r2, [r5, 4]                                       |         r2 = *((r5 + 4));
    0x0005b402 adds r4, r2, r6                                       |         r4 = r2 + r6;
    0x0005b404 ldrh r3, [r4, 0xa]                                    |         r3 = *((r4 + 0xa));
    0x0005b406 lsls r1, r3, 0x18                                     |         r1 = r3 << 0x18;
                                                                     |         if (r1 < r3) {
    0x0005b408 bpl 0x5b454                                           |             
    0x0005b40a orr r1, r3, 0x100                                     |             r1 = r3 | 0x100;
    0x0005b40e strh r1, [r4, 0xa]                                    |             *((r4 + 0xa)) = r1;
    0x0005b410 strh.w r8, [sp, 0x1c]                                 |             var_1ch = r8;
    0x0005b414 ldrh r2, [r4, 8]                                      |             r2 = *((r4 + 8));
    0x0005b416 cmp r2, 0                                             |             
                                                                     |             if (r2 == 0) {
    0x0005b418 beq 0x5b4a4                                           |                 goto label_8;
                                                                     |             }
    0x0005b41a ldrb.w r1, [r5, 0x2b]                                 |             r1 = *((r5 + 0x2b));
    0x0005b41e cmp r1, 0                                             |             
                                                                     |             if (r1 != 0) {
    0x0005b420 bne 0x5b4a4                                           |                 goto label_8;
                                                                     |             }
    0x0005b422 ldr r1, [r5, 0x34]                                    |             r1 = *((r5 + 0x34));
    0x0005b424 cmp r1, 0                                             |             
                                                                     |             if (r1 == 0) {
    0x0005b426 beq 0x5b4a4                                           |                 goto label_8;
                                                                     |             }
    0x0005b428 ldr r0, [r1]                                          |             r0 = *(r1);
    0x0005b42a cmp r0, r2                                            |             
                                                                     |             if (r0 < r2) {
    0x0005b42c blt 0x5b4a4                                           |                 goto label_8;
                                                                     |             }
    0x0005b42e add.w r1, r1, r2, lsl 4                               |             r1 += (r2 << 4);
    0x0005b432 ldr r1, [r1, -0x8]                                    |             r1 = *((r1 - 0x8));
    0x0005b434 adds r0, r1, 0                                        |             r0 = r1 + 0;
    0x0005b436 cmp r1, 0                                             |             
                                                                     |             if (r1 == 0) {
    0x0005b438 beq 0x5b4a4                                           |                 goto label_8;
                                                                     |             }
    0x0005b43a mov r0, sb                                            |             r0 = sb;
    0x0005b43c bl 0x2cd88                                            |             fcn_0002cd88 (r0, r1);
    0x0005b440 ldrh.w r1, [sp, 0x1c]                                 |             r1 = var_1ch;
    0x0005b444 ldrh r3, [r4, 0xa]                                    |             r3 = *((r4 + 0xa));
    0x0005b446 lsls r2, r1, 0x18                                     |             r2 = r1 << 0x18;
    0x0005b448 bic r3, r3, 0x100                                     |             r3 = BIT_MASK (r3, 0x100);
    0x0005b44c it mi                                                 |             
                                                                     |             if (r2 >= r1) {
    0x0005b44e movmi fp, r4                                          |                 
                                                                     |             }
    0x0005b450 strh r3, [r4, 0xa]                                    |             *((r4 + 0xa)) = r3;
                                                                     |             if (r2 >= r1) {
    0x0005b452 bpl 0x5b4aa                                           |                 goto label_9;
                                                                     |             }
                                                                     |         }
                                                                     | label_1:
    0x0005b454 ldrsh.w r3, [r5, 0x22]                                |         r3 = *((r5 + 0x22));
    0x0005b458 adds r7, 1                                            |         r7++;
    0x0005b45a adds r6, 0xc                                          |         r6 += 0xc;
    0x0005b45c cmp r3, r7                                            |         
    0x0005b45e bgt 0x5b400                                           |         
                                                                     |     } while (r3 > r7);
    0x0005b460 cmp.w fp, 0                                           |     
    0x0005b464 ite eq                                                |     
                                                                     |     if (fp != 0) {
    0x0005b466 moveq r0, 0                                           |         r0 = 0;
                                                                     |     }
                                                                     |     if (fp == 0) {
    0x0005b468 andne r0, sl, 1                                       |         r0 = sl & 1;
                                                                     |     }
    0x0005b46c cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0005b46e bne 0x5b3f0                                           |         goto label_0;
                                                                     |     }
    0x0005b470 cmp.w fp, 0                                           |     
                                                                     |     if (fp != 0) {
    0x0005b474 beq 0x5b484                                           |         
    0x0005b476 ldr r1, [pc, 0xac]                                    |         
    0x0005b478 ldr.w r2, [fp]                                        |         r2 = *(fp);
    0x0005b47c ldr r0, [sp]                                          |         r0 = *(sp);
    0x0005b47e add r1, pc                                            |         r1 = 0xb69a8;
    0x0005b480 bl 0x1d554                                            |         fcn_0001d554 (r0, r1);
                                                                     |     }
                                                                     | label_7:
    0x0005b484 ldr r2, [sp]                                          |     r2 = *(sp);
    0x0005b486 movs r3, 0                                            |     r3 = 0;
    0x0005b488 str r3, [r2, 0x34]                                    |     *((r2 + 0x34)) = r3;
    0x0005b48a ldr r2, [pc, 0x9c]                                    |     
    0x0005b48c ldr r3, [pc, 0x8c]                                    |     r3 = *(0x5b51c);
    0x0005b48e add r2, pc                                            |     r2 = 0xb69bc;
    0x0005b490 ldr r3, [r2, r3]                                      |     r3 = *(0xb69bc);
    0x0005b492 ldr r2, [r3]                                          |     r2 = *(0xb69bc);
    0x0005b494 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005b496 eors r2, r3                                           |     r2 ^= r3;
    0x0005b498 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0005b49c bne 0x5b514                                           |         goto label_10;
                                                                     |     }
    0x0005b49e add sp, 0x2c                                          |     
    0x0005b4a0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_8:
    0x0005b4a4 bic r3, r3, 0x100                                     |     r3 = BIT_MASK (r3, 0x100);
    0x0005b4a8 strh r3, [r4, 0xa]                                    |     *((r4 + 0xa)) = r3;
                                                                     | label_9:
    0x0005b4aa ldr r3, [r5, 0x1c]                                    |     r3 = *((r5 + 0x1c));
    0x0005b4ac sxth r1, r7                                           |     __asm ("sxth r1, r7");
    0x0005b4ae lsls r3, r3, 0x1a                                     |     r3 <<= 0x1a;
                                                                     |     if (r3 < r3) {
    0x0005b4b0 bpl 0x5b4ba                                           |         
    0x0005b4b2 mov r0, r5                                            |         r0 = r5;
    0x0005b4b4 bl 0xf6c8                                             |         r0 = fcn_0000f6c8 (r0, r1);
    0x0005b4b8 mov r1, r0                                            |         r1 = r0;
                                                                     |     }
    0x0005b4ba ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0005b4bc mov r2, r4                                            |     r2 = r4;
    0x0005b4be ldr r0, [sp]                                          |     r0 = *(sp);
    0x0005b4c0 mov.w sl, 1                                           |     sl = 1;
    0x0005b4c4 adds r3, r1, r3                                       |     r3 = r1 + r3;
    0x0005b4c6 mov r1, r5                                            |     r1 = r5;
    0x0005b4c8 bl 0x5af8c                                            |     fcn_0005af8c (r0, r1, r2, r3);
    0x0005b4cc ldrh r3, [r4, 0xa]                                    |     r3 = *((r4 + 0xa));
    0x0005b4ce bic r3, r3, 0x80                                      |     r3 = BIT_MASK (r3, 0x80);
    0x0005b4d2 strh r3, [r4, 0xa]                                    |     *((r4 + 0xa)) = r3;
    0x0005b4d4 b 0x5b454                                             |     goto label_1;
                                                                     | label_4:
    0x0005b4d6 ldr r3, [pc, 0x54]                                    |     
    0x0005b4d8 add r3, pc                                            |     r3 = 0xb6a0a;
    0x0005b4da ldrb r2, [r3, 4]                                      |     r2 = *((r3 + 4));
    0x0005b4dc adds r3, 4                                            |     r3 += 4;
    0x0005b4de cmp r2, 0x60                                          |     
                                                                     |     if (r2 != 0x60) {
    0x0005b4e0 bne.w 0x5b3aa                                         |         goto label_2;
                                                                     |     }
                                                                     | label_5:
    0x0005b4e4 ldr r0, [r3, 0x10]                                    |     r0 = *((r3 + 0x10));
    0x0005b4e6 ldrb r3, [r0]                                         |     r3 = *(r0);
    0x0005b4e8 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b4ea beq.w 0x5b3b2                                         |         goto label_3;
                                                                     |     }
    0x0005b4ee movs r1, 0                                            |     r1 = 0;
    0x0005b4f0 mov r4, r0                                            |     r4 = r0;
    0x0005b4f2 mov r2, r1                                            |     r2 = r1;
    0x0005b4f4 movs r6, 0x40                                         |     r6 = 0x40;
                                                                     |     do {
    0x0005b4f6 ldr r3, [r5, 4]                                       |         r3 = *((r5 + 4));
    0x0005b4f8 add r3, r1                                            |         r3 += r1;
    0x0005b4fa ldrh r3, [r3, 0xa]                                    |         r3 = *((r3 + 0xa));
    0x0005b4fc lsls r7, r3, 0x1a                                     |         r7 = r3 << 0x1a;
                                                                     |         if (r7 >= r3) {
    0x0005b4fe bmi 0x5b508                                           |             
    0x0005b500 adds r2, 1                                            |             r2++;
    0x0005b502 lsls r7, r3, 0x19                                     |             r7 = r3 << 0x19;
    0x0005b504 it mi                                                 |             
                                                                     |             if (r7 < r3) {
    0x0005b506 strbmi r6, [r4]                                       |                 *(r4) = r6;
                                                                     |                 goto label_11;
                                                                     |             }
                                                                     |         }
                                                                     | label_11:
    0x0005b508 ldrb r3, [r0, r2]                                     |         r3 = *((r0 + r2));
    0x0005b50a adds r4, r0, r2                                       |         r4 = r0 + r2;
    0x0005b50c adds r1, 0xc                                          |         r1 += 0xc;
    0x0005b50e cmp r3, 0                                             |         
    0x0005b510 bne 0x5b4f6                                           |         
                                                                     |     } while (r3 != 0);
    0x0005b512 b 0x5b3b2                                             |     goto label_3;
                                                                     | label_10:
    0x0005b514 blx 0x9b44                                            |     fcn_00009b44 ();
    0x0005b518 ldrsb r2, [r2, r6]                                    |     r2 = *((r2 + r6));
    0x0005b51a movs r4, r0                                           |     r4 = r0;
    0x0005b51c lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0005b51e movs r0, r0                                           |     
    0x0005b520 strh r7, [r3, r7]                                     |     *((r3 + r7)) = r7;
    0x0005b522 vqshlu.s32 d22, d22, 0x1b                             |     __asm ("vqshlu.s32 d22, d22, 0x1b");
    0x0005b526 movs r3, r0                                           |     r3 = r0;
    0x0005b528 ldrsb r2, [r6, r1]                                    |     r2 = *((r6 + r1));
    0x0005b52a movs r4, r0                                           |     r4 = r0;
    0x0005b52c ldrb r4, [r1, 2]                                      |     r4 = *((r1 + 2));
    0x0005b52e movs r4, r0                                           |     r4 = r0;
                                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5b530 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.0005b530 ()                                  | void fcn_0005b530 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                             |     int16_t var_0h_3;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     if (? >= ?) {
    0x0005b530 ldrbmi lr, [r0, sp, lsr 18]!                  |         
                                                             |     }
    0x0005b534 lsr.w sl, r2, 0x1f                            |     sl = r2 >> 0x1f;
    0x0005b538 ldr.w sb, [r0, 0x44]                          |     sb = *((r0 + 0x44));
    0x0005b53c sub sp, 8                                     |     
    0x0005b53e mov r8, r0                                    |     r8 = r0;
    0x0005b540 mov r7, r2                                    |     r7 = r2;
    0x0005b542 mov r6, r1                                    |     r6 = r1;
    0x0005b544 subs.w r3, sb, 0                              |     r3 = sb - 0;
    0x0005b548 it ne                                         |     
                                                             |     if (r3 == sb) {
    0x0005b54a movne r3, 1                                   |         r3 = 1;
                                                             |     }
    0x0005b54c ands.w r3, r3, r2, lsr 31                     |     r3 &= (r2 >> 31);
                                                             |     if (r3 == r3) {
    0x0005b550 beq 0x5b55c                                   |         goto label_4;
                                                             |     }
    0x0005b552 mov r4, sb                                    |     r4 = sb;
    0x0005b554 ldr r5, [r4], 8                               |     r5 = *(r4);
                                                             |     r4 += 8;
    0x0005b558 cmp r5, 0                                     |     
                                                             |     if (r5 > 0) {
    0x0005b55a bgt 0x5b5e4                                   |         goto label_5;
                                                             |     }
                                                             |     do {
                                                             | label_4:
    0x0005b55c ldr.w r0, [r8]                                |         r0 = *(r8);
    0x0005b560 cmp r6, 0                                     |         
                                                             |         if (r6 == 0) {
    0x0005b562 beq 0x5b5fa                                   |             goto label_6;
                                                             |         }
    0x0005b564 movs r3, 0                                    |         r3 = 0;
    0x0005b566 mov r1, r6                                    |         r1 = r6;
    0x0005b568 mov r2, r3                                    |         r2 = r3;
    0x0005b56a bl 0x2dd00                                    |         r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005b56e mov r4, r0                                    |         r4 = r0;
    0x0005b570 cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x0005b572 beq 0x5b5fa                                   |             goto label_6;
                                                             |         }
    0x0005b574 ldr r3, [r0, 4]                               |         r3 = *((r0 + 4));
    0x0005b576 lsls r3, r3, 0x1c                             |         r3 <<= 0x1c;
                                                             |         if (r3 < r3) {
    0x0005b578 bmi 0x5b5fe                                   |             goto label_7;
                                                             |         }
                                                             | label_2:
    0x0005b57a mov r2, r4                                    |         r2 = r4;
    0x0005b57c mov r1, sb                                    |         r1 = sb;
    0x0005b57e mov r0, r8                                    |         r0 = r8;
    0x0005b580 mov r5, r7                                    |         r5 = r7;
    0x0005b582 bl 0x2bffc                                    |         r0 = fcn_0002bffc (r0, r1, r2);
                                                             |         if (r0 != 0) {
    0x0005b586 cbz r0, 0x5b5b4                               |             
    0x0005b588 ldr r3, [r0]                                  |             r3 = *(r0);
    0x0005b58a cmp r7, 0                                     |             
    0x0005b58c it lt                                         |             
                                                             |             if (r7 >= 0) {
    0x0005b58e ldrlt r7, [r8, 0x2c]                          |                 r7 = *((r8 + 0x2c));
                                                             |             }
    0x0005b592 add.w r2, r3, -1                              |             r2 = r3 + -1;
    0x0005b596 add.w r3, r0, r3, lsl 4                       |             r3 = r0 + (r3 << 4);
    0x0005b59a it lt                                         |             
                                                             |             if (r7 >= 0) {
    0x0005b59c addlt r7, 1                                   |                 r7++;
                                                             |             }
    0x0005b59e mov r5, r7                                    |             r5 = r7;
    0x0005b5a0 ldrb r1, [r3, 1]                              |             r1 = *((r3 + 1));
    0x0005b5a2 bfi r1, sl, 3, 1                              |             value_0 = BIT_MASK (3, 1);
                                                             |             value_1 = sl & value_0;
                                                             |             value_0 = ~value_0;
                                                             |             r1 &= value_0;
                                                             |             r1 |= value_1;
    0x0005b5a6 strb r1, [r3, 1]                              |             *((r3 + 1)) = r1;
    0x0005b5a8 add.w r3, r0, r2, lsl 4                       |             r3 = r0 + (r2 << 4);
    0x0005b5ac it lt                                         |             
                                                             |             if (r7 >= 0) {
    0x0005b5ae strlt r7, [r8, 0x2c]                          |                 *((r8 + 0x2c)) = r7;
                                                             |             }
    0x0005b5b2 str r7, [r3, 0x14]                            |             *((r3 + 0x14)) = r7;
                                                             |         }
    0x0005b5b4 str.w r0, [r8, 0x44]                          |         __asm ("str.w r0, [r8, 0x44]");
    0x0005b5b8 mov r0, r5                                    |         r0 = r5;
    0x0005b5ba add sp, 8                                     |         
    0x0005b5bc pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_1:
    0x0005b5c0 ldr r1, [r4]                                  |         r1 = *(r4);
    0x0005b5c2 mov.w r3, -1                                  |         r3 = -1;
    0x0005b5c6 mov r2, r6                                    |         r2 = r6;
    0x0005b5c8 cmp r6, 0                                     |         
    0x0005b5ca it ne                                         |         
                                                             |         if (r6 != 0) {
    0x0005b5cc cmpne r1, 0                                   |             __asm ("cmpne r1, 0");
                                                             |         }
    0x0005b5ce ite eq                                        |         
                                                             |         if (r6 != 0) {
    0x0005b5d0 moveq r0, 1                                   |             r0 = 1;
                                                             |         }
                                                             |         if (r6 == 0) {
    0x0005b5d2 movne r0, 0                                   |             r0 = 0;
                                                             |         }
                                                             |         if (r6 == 0) {
    0x0005b5d4 beq 0x5b5ec                                   |             goto label_8;
                                                             |         }
    0x0005b5d6 bl 0x3480c                                    |         r0 = fcn_0003480c (r0, r1, r2, r3);
                                                             |         if (r0 == 0) {
    0x0005b5da cbz r0, 0x5b5f0                               |             goto label_9;
                                                             |         }
                                                             | label_0:
    0x0005b5dc subs r5, 1                                    |         r5--;
    0x0005b5de add.w r4, r4, 0x10                            |         r4 += 0x10;
    0x0005b5e2 beq 0x5b55c                                   |         
                                                             |     } while (r5 == 1);
                                                             | label_5:
    0x0005b5e4 ldrb r3, [r4, 9]                              |     r3 = *((r4 + 9));
    0x0005b5e6 lsls r2, r3, 0x1c                             |     r2 = r3 << 0x1c;
                                                             |     if (r2 >= r3) {
    0x0005b5e8 bpl 0x5b5dc                                   |         goto label_0;
                                                             |     }
    0x0005b5ea b 0x5b5c0                                     |     goto label_1;
                                                             | label_8:
    0x0005b5ec cmp r1, r6                                    |     
                                                             |     if (r1 != r6) {
    0x0005b5ee bne 0x5b5dc                                   |         goto label_0;
                                                             |     }
                                                             | label_9:
    0x0005b5f0 ldr r5, [r4, 0xc]                             |     r5 = *((r4 + 0xc));
    0x0005b5f2 mov r0, r5                                    |     r0 = r5;
    0x0005b5f4 add sp, 8                                     |     
    0x0005b5f6 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |     
                                                             | label_6:
    0x0005b5fa movs r4, 0                                    |     r4 = 0;
    0x0005b5fc b 0x5b57a                                     |     goto label_2;
                                                             | label_7:
    0x0005b5fe ldr.w sb, [r8, 8]                             |     sb = *((r8 + 8));
    0x0005b602 ldrd r6, r3, [sb, 0x6c]                       |     __asm ("ldrd r6, r3, [sb, 0x6c]");
    0x0005b606 cmp r6, r3                                    |     
                                                             |     if (r6 >= r3) {
    0x0005b608 bge 0x5b6a6                                   |         goto label_10;
                                                             |     }
    0x0005b60a add.w r2, r6, r6, lsl 2                       |     r2 = r6 + (r6 << 2);
    0x0005b60e ldr.w r3, [sb, 0x68]                          |     r3 = *((sb + 0x68));
    0x0005b612 adds r0, r6, 1                                |     r0 = r6 + 1;
    0x0005b614 vmov.i32 d16, 0                               |     __asm ("vmov.i32 d16, 0");
    0x0005b618 lsls r2, r2, 2                                |     r2 <<= 2;
    0x0005b61a str.w r0, [sb, 0x6c]                          |     __asm ("str.w r0, [sb, 0x6c]");
    0x0005b61e movs r0, 0xe                                  |     r0 = 0xe;
    0x0005b620 str r0, [r3, r2]                              |     *((r3 + r2)) = r0;
    0x0005b622 add r3, r2                                    |     r3 += r2;
    0x0005b624 adds r2, r3, 4                                |     r2 = r3 + 4;
    0x0005b626 movs r1, 0                                    |     r1 = 0;
    0x0005b628 vst1.32 {d16}, [r2]                           |     __asm ("vst1.32 {d16}, [r2]");
    0x0005b62c strd r1, r1, [r3, 0xc]                        |     __asm ("strd r1, r1, [r3, 0xc]");
                                                             | label_3:
    0x0005b630 ldr.w r0, [r8]                                |     r0 = *(r8);
    0x0005b634 movs r3, 0                                    |     r3 = 0;
    0x0005b636 strb.w r3, [r8, 0x17]                         |     *((r8 + 0x17)) = r3;
    0x0005b63a mov r5, r7                                    |     r5 = r7;
    0x0005b63c ldrb.w r3, [r0, 0x57]                         |     r3 = *((r0 + 0x57));
                                                             |     if (r3 == 0) {
    0x0005b640 cbnz r3, 0x5b666                              |         
    0x0005b642 cmp r7, 0                                     |         
    0x0005b644 ldr.w r3, [r8, 8]                             |         r3 = *((r8 + 8));
    0x0005b648 itett lt                                      |         
                                                             |         if (r7 >= 0) {
    0x0005b64a ldrlt r5, [r8, 0x2c]                          |             r5 = *((r8 + 0x2c));
                                                             |         }
                                                             |         if (r7 >= 0) {
    0x0005b64e movlt r5, r7                                  |             r5 = r7;
                                                             |         }
                                                             |         if (r7 >= 0) {
    0x0005b650 addlt r5, 1                                   |             r5++;
                                                             |         }
                                                             |         if (r7 < 0) {
    0x0005b652 str.w r5, [r8, 0x2c]                          |             __asm ("str.w r5, [r8, 0x2c]");
                                                             |         }
                                                             |         if (r3 == 0) {
    0x0005b656 cbz r3, 0x5b666                               |             goto label_11;
                                                             |         }
    0x0005b658 mov r0, r8                                    |         r0 = r8;
    0x0005b65a mov r2, r5                                    |         r2 = r5;
    0x0005b65c mov r1, r4                                    |         r1 = r4;
    0x0005b65e bl 0x5aa10                                    |         fcn_0005aa10 (r0, r1, r2);
    0x0005b662 ldr.w r0, [r8]                                |         r0 = *(r8);
                                                             |     }
                                                             | label_11:
    0x0005b666 movs r3, 1                                    |     r3 = 1;
    0x0005b668 mov r1, r4                                    |     r1 = r4;
    0x0005b66a strb.w r3, [r8, 0x17]                         |     *((r8 + 0x17)) = r3;
    0x0005b66e bl 0x16c0c                                    |     fcn_00016c0c (r0, r1);
    0x0005b672 ldr.w r3, [sb]                                |     r3 = *(sb);
    0x0005b676 cmp r6, 0                                     |     
    0x0005b678 ldr.w r2, [sb, 0x6c]                          |     r2 = *((sb + 0x6c));
    0x0005b67c ldrb.w r3, [r3, 0x57]                         |     r3 = *((r3 + 0x57));
    0x0005b680 it lt                                         |     
                                                             |     if (r6 >= 0) {
    0x0005b682 addlt r6, r2, -1                              |         r6 = r2 + -1;
                                                             |     }
                                                             |     if (r3 != 0) {
    0x0005b686 cbnz r3, 0x5b69e                              |         goto label_12;
                                                             |     }
    0x0005b688 ldr.w r3, [sb, 0x68]                          |     r3 = *((sb + 0x68));
    0x0005b68c add.w r6, r6, r6, lsl 2                       |     r6 += (r6 << 2);
    0x0005b690 add.w r3, r3, r6, lsl 2                       |     r3 += (r6 << 2);
                                                             |     do {
    0x0005b694 mov r0, r5                                    |         r0 = r5;
    0x0005b696 str r2, [r3, 8]                               |         *((r3 + 8)) = r2;
    0x0005b698 add sp, 8                                     |         
    0x0005b69a pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_12:
    0x0005b69e ldr r3, [pc, 0x18]                            |         
    0x0005b6a0 add r3, pc                                    |         r3 = 0xb6d5e;
    0x0005b6a2 adds r3, 4                                    |         r3 += 4;
    0x0005b6a4 b 0x5b694                                     |         
                                                             |     } while (1);
                                                             | label_10:
    0x0005b6a6 movs r3, 0                                    |     r3 = 0;
    0x0005b6a8 movs r1, 0xe                                  |     r1 = 0xe;
    0x0005b6aa mov r2, r3                                    |     r2 = r3;
    0x0005b6ac mov r0, sb                                    |     r0 = sb;
    0x0005b6ae str r3, [sp]                                  |     *(sp) = r3;
    0x0005b6b0 bl 0x29a7c                                    |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005b6b4 mov r6, r0                                    |     r6 = r0;
    0x0005b6b6 b 0x5b630                                     |     goto label_3;
                                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5b760 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0005b760 ()                                          | void fcn_0005b760 (int16_t arg_1h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     int16_t var_0h_2;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0005b760 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005b764 mov r8, r2                                            |     r8 = r2;
    0x0005b766 ldr r2, [pc, 0x1b8]                                   |     
    0x0005b768 sub sp, 0x14                                          |     
    0x0005b76a ldr r3, [pc, 0x1b8]                                   |     r3 = *(0x5b926);
    0x0005b76c add r2, pc                                            |     r2 = 0xb7092;
    0x0005b76e ldr r6, [r1, 8]                                       |     r6 = *((r1 + 8));
    0x0005b770 ldr r3, [r2, r3]                                      |     
    0x0005b772 ldr r3, [r3]                                          |     r3 = *(0xb7092);
    0x0005b774 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0005b776 mov.w r3, 0                                           |     r3 = 0;
    0x0005b77a cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0005b77c bne 0x5b812                                           |         goto label_3;
                                                                     |     }
    0x0005b77e ldr r7, [r1, 0x3c]                                    |     r7 = *((r1 + 0x3c));
    0x0005b780 mov r5, r1                                            |     r5 = r1;
    0x0005b782 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0005b784 beq 0x5b812                                           |         goto label_3;
                                                                     |     }
    0x0005b786 ldr r6, [r0, 0x2c]                                    |     r6 = *((r0 + 0x2c));
    0x0005b788 mov r4, r0                                            |     r4 = r0;
    0x0005b78a ldr.w sb, [r0, 8]                                     |     sb = *((r0 + 8));
    0x0005b78e adds r6, 1                                            |     r6++;
    0x0005b790 str r6, [r0, 0x2c]                                    |     *((r0 + 0x2c)) = r6;
    0x0005b792 str r6, [r1, 8]                                       |     *((r1 + 8)) = r6;
    0x0005b794 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0005b798 beq 0x5b82c                                           |         goto label_4;
                                                                     |     }
    0x0005b79a ldr.w sl, [r7, 0xc]                                   |     sl = *((r7 + 0xc));
    0x0005b79e add r1, sp, 8                                         |     r1 += var_8h;
    0x0005b7a0 mov r0, sl                                            |     r0 = sl;
    0x0005b7a2 bl 0xc048                                             |     r0 = fcn_0000c048 (r0, r1);
    0x0005b7a6 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0005b7a8 bne 0x5b84a                                           |         goto label_5;
                                                                     |     }
                                                                     |     do {
    0x0005b7aa ldr r3, [r4, 8]                                       |         r3 = *((r4 + 8));
                                                                     |         if (r3 != 0) {
    0x0005b7ac cbz r3, 0x5b7b8                                       |             
    0x0005b7ae mov r1, sl                                            |             r1 = sl;
    0x0005b7b0 mov r2, r6                                            |             r2 = r6;
    0x0005b7b2 mov r0, r4                                            |             r0 = r4;
    0x0005b7b4 bl 0x5aa10                                            |             fcn_0005aa10 (r0, r1, r2);
                                                                     |         }
    0x0005b7b8 mov.w sl, 0                                           |         sl = 0;
    0x0005b7bc mov r2, r6                                            |         r2 = r6;
    0x0005b7be mov r3, sl                                            |         r3 = sl;
    0x0005b7c0 movs r1, 0xc                                          |         r1 = 0xc;
    0x0005b7c2 mov r0, sb                                            |         r0 = sb;
    0x0005b7c4 str.w sl, [sp]                                        |         __asm ("str.w sl, [sp]");
    0x0005b7c8 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005b7cc mov r3, r8                                            |         r3 = r8;
    0x0005b7ce mov r2, r6                                            |         r2 = r6;
    0x0005b7d0 movs r1, 0x10                                         |         r1 = 0x10;
    0x0005b7d2 mov r0, sb                                            |         r0 = sb;
    0x0005b7d4 str.w sl, [sp]                                        |         __asm ("str.w sl, [sp]");
    0x0005b7d8 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_0:
    0x0005b7dc ldr r1, [r7, 0x10]                                    |         r1 = *((r7 + 0x10));
                                                                     |         if (r1 != 0) {
    0x0005b7de cbz r1, 0x5b812                                       |             
    0x0005b7e0 ldr r3, [r4, 0x2c]                                    |             r3 = *((r4 + 0x2c));
    0x0005b7e2 ldr r2, [r4, 8]                                       |             r2 = *((r4 + 8));
    0x0005b7e4 adds r7, r3, 1                                        |             r7 = r3 + 1;
    0x0005b7e6 str r7, [r5, 0xc]                                     |             *((r5 + 0xc)) = r7;
    0x0005b7e8 adds r5, r3, 2                                        |             r5 = r3 + 2;
    0x0005b7ea str r5, [r4, 0x2c]                                    |             *((r4 + 0x2c)) = r5;
                                                                     |             if (r2 != 0) {
    0x0005b7ec cbz r2, 0x5b7f6                                       |                 
    0x0005b7ee mov r0, r4                                            |                 r0 = r4;
    0x0005b7f0 mov r2, r7                                            |                 r2 = r7;
    0x0005b7f2 bl 0x5aa10                                            |                 fcn_0005aa10 (r0, r1, r2);
                                                                     |             }
    0x0005b7f6 movs r3, 0                                            |             r3 = 0;
    0x0005b7f8 mov r2, r7                                            |             r2 = r7;
    0x0005b7fa movs r1, 0xc                                          |             r1 = 0xc;
    0x0005b7fc str r3, [sp]                                          |             *(sp) = r3;
    0x0005b7fe mov r0, sb                                            |             r0 = sb;
    0x0005b800 bl 0x29ac4                                            |             fcn_00029ac4 (r0, r1, r2, r3);
    0x0005b804 mov r3, r5                                            |             r3 = r5;
    0x0005b806 mov r2, r6                                            |             r2 = r6;
    0x0005b808 movs r1, 0xa0                                         |             r1 = 0xa0;
    0x0005b80a mov r0, sb                                            |             r0 = sb;
    0x0005b80c str r7, [sp]                                          |             *(sp) = r7;
    0x0005b80e bl 0x29ac4                                            |             fcn_00029ac4 (r0, r1, r2, r3);
                                                                     |         }
                                                                     | label_3:
    0x0005b812 ldr r2, [pc, 0x114]                                   |         
    0x0005b814 ldr r3, [pc, 0x10c]                                   |         r3 = *(0x5b924);
    0x0005b816 add r2, pc                                            |         r2 = 0xb7144;
    0x0005b818 ldr r3, [r2, r3]                                      |         r3 = *(0xb7144);
    0x0005b81a ldr r2, [r3]                                          |         r2 = *(0xb7144);
    0x0005b81c ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0005b81e eors r2, r3                                           |         r2 ^= r3;
    0x0005b820 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0005b824 bne 0x5b91a                                           |             goto label_6;
                                                                     |         }
    0x0005b826 add sp, 0x14                                          |         
    0x0005b828 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_4:
    0x0005b82c ldr r3, [r0, 0x74]                                    |         r3 = *((r0 + 0x74));
    0x0005b82e cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0005b830 beq 0x5b8c6                                           |             goto label_7;
                                                                     |         }
                                                                     | label_1:
    0x0005b832 mov r0, r4                                            |         r0 = r4;
    0x0005b834 bl 0x29b0c                                            |         fcn_00029b0c (r0);
    0x0005b838 ldr.w sl, [r7, 0xc]                                   |         sl = *((r7 + 0xc));
    0x0005b83c mov sb, r0                                            |         sb = r0;
    0x0005b83e add r1, sp, 8                                         |         r1 += var_8h;
    0x0005b840 mov r0, sl                                            |         r0 = sl;
    0x0005b842 bl 0xc048                                             |         r0 = fcn_0000c048 (r0, r1);
    0x0005b846 cmp r0, 0                                             |         
    0x0005b848 beq 0x5b7aa                                           |         
                                                                     |     } while (r0 == 0);
                                                                     | label_5:
    0x0005b84a ldr.w fp, [sp, 8]                                     |     fp = var_8h;
    0x0005b84e mov.w sl, 0                                           |     sl = 0;
    0x0005b852 mov r3, r6                                            |     r3 = r6;
    0x0005b854 movs r1, 0x47                                         |     r1 = 0x47;
    0x0005b856 mov r0, sb                                            |     r0 = sb;
    0x0005b858 str.w sl, [sp]                                        |     __asm ("str.w sl, [sp]");
    0x0005b85c mov r2, fp                                            |     r2 = fp;
    0x0005b85e bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005b862 cmp fp, sl                                            |     
                                                                     |     if (fp == sl) {
    0x0005b864 beq 0x5b8d4                                           |         goto label_8;
                                                                     |     }
                                                                     |     if (fp < sl) {
    0x0005b866 blt 0x5b7dc                                           |         goto label_0;
                                                                     |     }
    0x0005b868 cmp.w fp, 7                                           |     
    0x0005b86c ldrsh.w r2, [r5, 2]                                   |     r2 = *((r5 + 2));
    0x0005b870 asr.w r0, fp, 0x1f                                    |     r0 = fp >> 0x1f;
                                                                     |     if (fp > 7) {
    0x0005b874 bgt 0x5b8de                                           |         goto label_9;
                                                                     |     }
    0x0005b876 add.w r3, fp, -1                                      |     r3 = fp + -1;
    0x0005b87a orrs r3, r0                                           |     r3 |= r0;
                                                                     |     if (r3 != r0) {
    0x0005b87c beq 0x5b8b4                                           |         
    0x0005b87e adds.w r3, fp, fp                                     |         r3 = fp + fp;
    0x0005b882 adcs r0, r0                                           |         __asm ("adcs r0, r0");
    0x0005b884 cmp r3, 8                                             |         
    0x0005b886 sbcs r0, r0, 0                                        |         __asm ("sbcs r0, r0, 0");
    0x0005b88a ite lo                                                |         
                                                                     |         if (r3 >= 8) {
    0x0005b88c movlo r1, 0x14                                        |             r1 = 0x14;
                                                                     |         }
                                                                     |         if (r3 < 8) {
    0x0005b88e movhs r1, 0x1e                                        |             r1 = 0x1e;
                                                                     |         }
    0x0005b890 sub.w sl, r1, 0xa                                     |         sl = r1 - 0xa;
    0x0005b894 it lo                                                 |         
                                                                     |         if (r3 >= 8) {
    0x0005b896 lsllo r3, fp, 2                                       |             r3 = fp << 2;
                                                                     |         }
    0x0005b89a uxth.w sl, sl                                         |         sl = (int16_t) sl;
                                                                     | label_2:
    0x0005b89e ldr r1, [pc, 0x8c]                                    |         
    0x0005b8a0 and r3, r3, 7                                         |         r3 &= 7;
    0x0005b8a4 add r1, pc                                            |         r1 = 0xb71d6;
    0x0005b8a6 add.w r3, r1, r3, lsl 1                               |         r3 = r1 + (r3 << 1);
    0x0005b8aa ldrh.w r3, [r3, 0xd58]                                |         r3 = *((r3 + 0xd58));
    0x0005b8ae add sl, r3                                            |         sl += r3;
    0x0005b8b0 sxth.w sl, sl                                         |         __asm ("sxth.w sl, sl");
                                                                     |     }
    0x0005b8b4 cmp r2, sl                                            |     
                                                                     |     if (r2 <= sl) {
    0x0005b8b6 ble 0x5b7dc                                           |         goto label_0;
                                                                     |     }
    0x0005b8b8 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0005b8ba strh.w sl, [r5, 2]                                    |     *((r5 + 2)) = sl;
    0x0005b8be orr r3, r3, 0x4000                                    |     r3 |= 0x4000;
    0x0005b8c2 str r3, [r5, 4]                                       |     *((r5 + 4)) = r3;
    0x0005b8c4 b 0x5b7dc                                             |     goto label_0;
                                                                     | label_7:
    0x0005b8c6 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0005b8c8 ldr r3, [r3, 0x50]                                    |     r3 = *((r3 + 0x50));
    0x0005b8ca lsls r3, r3, 0x1c                                     |     r3 <<= 0x1c;
    0x0005b8cc itt pl                                                |     
                                                                     |     if (r3 < r3) {
    0x0005b8ce movpl r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r3 < r3) {
    0x0005b8d0 strbpl r3, [r0, 0x17]                                 |         *((r0 + 0x17)) = r3;
                                                                     |     }
    0x0005b8d2 b 0x5b832                                             |     goto label_1;
                                                                     | label_8:
    0x0005b8d4 mov r1, r8                                            |     r1 = r8;
    0x0005b8d6 mov r0, sb                                            |     r0 = sb;
    0x0005b8d8 bl 0x2a2e4                                            |     fcn_0002a2e4 (r0, r1, r2);
    0x0005b8dc b 0x5b7dc                                             |     goto label_0;
                                                                     | label_9:
    0x0005b8de clz ip, r0                                            |     
                                                                     |     if (r0 == 0) {
    0x0005b8e2 cbnz r0, 0x5b8ec                                      |         
    0x0005b8e4 clz r1, fp                                            |         r1 &= fp;
    0x0005b8e8 add.w ip, r1, 0x20                                    |         
                                                                     |     }
    0x0005b8ec rsb.w r1, ip, 0x3c                                    |     r1 = 0x3c - ip;
    0x0005b8f0 lsr.w r3, fp, r1                                      |     r3 = fp >> r1;
    0x0005b8f4 add.w r1, r1, r1, lsl 2                               |     r1 += (r1 << 2);
    0x0005b8f8 lsl.w sl, r1, 1                                       |     sl = r1 << 1;
    0x0005b8fc sub.w r1, ip, 0x1c                                    |     r1 = ip - 0x1c;
    0x0005b900 lsl.w r1, r0, r1                                      |     r1 = r0 << r1;
    0x0005b904 add.w sl, sl, 0x1e                                    |     sl += 0x1e;
    0x0005b908 orrs r3, r1                                           |     r3 |= r1;
    0x0005b90a rsb.w r1, ip, 0x1c                                    |     r1 = 0x1c - ip;
    0x0005b90e lsr.w r1, r0, r1                                      |     r1 = r0 >> r1;
    0x0005b912 uxth.w sl, sl                                         |     sl = (int16_t) sl;
    0x0005b914 invalid                                               |     
    0x0005b918 b 0x5b89e                                             |     goto label_2;
                                                                     | label_6:
    0x0005b91a blx 0x9b44                                            |     fcn_00009b44 ();
    0x0005b91e nop                                                   |     
    0x0005b920 strh r4, [r2, r6]                                     |     *((r2 + r6)) = r4;
    0x0005b922 movs r4, r0                                           |     r4 = r0;
    0x0005b924 lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0005b926 movs r0, r0                                           |     
    0x0005b928 strh r2, [r5, r3]                                     |     *((r5 + r3)) = r2;
    0x0005b92a movs r4, r0                                           |     r4 = r0;
    0x0005b92c push {r4, r5, r6}                                     |     
    0x0005b92e movs r3, r0                                           |     r3 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5c134 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0005c134 ()                                      | void fcn_0005c134 (arithmetic arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
                                                                 |     int16_t var_bp_8h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_3;
                                                                 |     arithmetic var_14h;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ach;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0005c134 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0005c138 mov sl, r1                                        |     sl = r1;
    0x0005c13a ldr.w r4, [pc, 0x538]                             |     
    0x0005c13e sub sp, 0x3c                                      |     
    0x0005c140 ldr.w r1, [pc, 0x534]                             |     r1 = *(0x5c678);
    0x0005c144 add r4, pc                                        |     r4 = 0xb87be;
    0x0005c146 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0005c148 ldr.w fp, [r0, 8]                                 |     fp = *((r0 + 8));
    0x0005c14c ldr r1, [r4, r1]                                  |     
    0x0005c14e ldr.w r4, [sl]                                    |     r4 = *(sl);
    0x0005c152 ldr r1, [r1]                                      |     r1 = *(0xb87be);
    0x0005c154 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x0005c156 mov.w r1, 0                                       |     r1 = 0;
    0x0005c15a strd r2, r3, [sp, 0xc]                            |     __asm ("strd r2, r3, [sp, 0xc]");
    0x0005c15e ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0005c160 sub.w r2, r3, 0x2d                                |     r2 = r3 - 0x2d;
    0x0005c164 tst.w r2, 0xf7                                    |     
                                                                 |     if ((r2 & 0xf7) == 0) {
    0x0005c168 beq 0x5c20a                                       |         goto label_18;
                                                                 |     }
    0x0005c16a cmp r3, 0x32                                      |     
                                                                 |     if (r3 == 0x32) {
    0x0005c16c beq.w 0x5c436                                     |         goto label_19;
                                                                 |     }
    0x0005c170 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x0005c172 ldr r7, [r3, 0x50]                                |     r7 = *((r3 + 0x50));
    0x0005c174 ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x0005c176 lsls r6, r3, 0x15                                 |     r6 = r3 << 0x15;
                                                                 |     if (r6 >= r3) {
    0x0005c178 bpl 0x5c250                                       |         goto label_20;
                                                                 |     }
                                                                 | label_0:
    0x0005c17a ldr r2, [sp, 0x10]                                |     r2 = var_10h_3;
                                                                 |     if (r2 == 0) {
    0x0005c17c cbz r2, 0x5c194                                   |         goto label_21;
                                                                 |     }
    0x0005c17e ldr r3, [r7, 0x34]                                |     r3 = *((r7 + 0x34));
    0x0005c180 add.w r1, r3, r2, lsl 2                           |     r1 = r3 + (r2 << 2);
                                                                 |     do {
    0x0005c184 ldr r2, [r3], 4                                   |         r2 = *(r3);
                                                                 |         r3 += 4;
                                                                 |         if (r2 != 0) {
    0x0005c188 cbz r2, 0x5c190                                   |             
    0x0005c18a ldr r2, [r2]                                      |             r2 = *(r2);
    0x0005c18c cmp r2, r4                                        |             
                                                                 |             if (r2 == r4) {
    0x0005c18e beq 0x5c226                                       |                 goto label_22;
                                                                 |             }
                                                                 |         }
    0x0005c190 cmp r1, r3                                        |         
    0x0005c192 bne 0x5c184                                       |         
                                                                 |     } while (r1 != r3);
                                                                 | label_21:
    0x0005c194 ldrh r1, [r7, 0x2c]                               |     r1 = *((r7 + 0x2c));
    0x0005c196 ldr r2, [sp, 0x10]                                |     r2 = var_10h_3;
    0x0005c198 cmp r2, r1                                        |     
                                                                 |     if (r2 >= r1) {
    0x0005c19a bge.w 0x5c5d6                                     |         goto label_23;
                                                                 |     }
    0x0005c19e ldr r3, [r7, 0x34]                                |     r3 = *((r7 + 0x34));
    0x0005c1a0 mov.w r8, 0                                       |     r8 = 0;
    0x0005c1a4 add.w r1, r3, r1, lsl 2                           |     r1 = r3 + (r1 << 2);
    0x0005c1a8 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
                                                                 |     do {
    0x0005c1ac ldr r2, [r3], 4                                   |         r2 = *(r3);
                                                                 |         r3 += 4;
    0x0005c1b0 ldr r2, [r2]                                      |         r2 = *(r2);
    0x0005c1b2 cmp r4, r2                                        |         
    0x0005c1b4 it eq                                             |         
                                                                 |         if (r4 != r2) {
    0x0005c1b6 addeq r8, r8, 1                                   |             r8++;
                                                                 |         }
    0x0005c1ba cmp r1, r3                                        |         
    0x0005c1bc bne 0x5c1ac                                       |         
                                                                 |     } while (r1 != r3);
                                                                 | label_13:
    0x0005c1be ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0005c1c0 movs r2, 0                                        |     r2 = 0;
    0x0005c1c2 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x0005c1c4 lsls r5, r3, 0x13                                 |     r5 = r3 << 0x13;
                                                                 |     if (r5 >= r3) {
    0x0005c1c6 bpl 0x5c26c                                       |         goto label_24;
                                                                 |     }
    0x0005c1c8 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x0005c1ca ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x0005c1cc ldr r2, [r2]                                      |     r2 = *(r2);
    0x0005c1ce cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x0005c1d0 beq 0x5c26c                                       |         goto label_24;
                                                                 |     }
    0x0005c1d2 ldr r2, [r4, 0x1c]                                |     r2 = *((r4 + 0x1c));
    0x0005c1d4 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0005c1d6 ldr r5, [r1]                                      |     r5 = *(r1);
                                                                 |     if (r2 != 0) {
    0x0005c1d8 cbz r2, 0x5c1e0                                   |         
    0x0005c1da lsls r0, r3, 6                                    |         r0 = r3 << 6;
                                                                 |         if (r0 < r3) {
    0x0005c1dc bmi.w 0x5c5dc                                     |             goto label_25;
                                                                 |         }
                                                                 |     }
    0x0005c1e0 movs r3, 0                                        |     r3 = 0;
    0x0005c1e2 mov r1, r4                                        |     r1 = r4;
    0x0005c1e4 mov r2, r3                                        |     r2 = r3;
    0x0005c1e6 mov r0, r5                                        |     r0 = r5;
    0x0005c1e8 bl 0x2dd00                                        |     fcn_0002dd00 (r0, r1, r2, r3);
    0x0005c1ec ldrb.w r2, [r5, 0x57]                             |     r2 = *((r5 + 0x57));
    0x0005c1f0 mov r6, r0                                        |     r6 = r0;
    0x0005c1f2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005c1f4 beq.w 0x5c490                                     |         goto label_26;
                                                                 |     }
    0x0005c1f8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c1fa bne.w 0x5c50e                                     |         goto label_10;
                                                                 |     }
                                                                 | label_8:
    0x0005c1fe movs r3, 0                                        |     r3 = 0;
    0x0005c200 movs r2, 5                                        |     r2 = 5;
    0x0005c202 str r3, [sp, 0x18]                                |     var_18h_2 = r3;
    0x0005c204 strd r3, r2, [sp, 0x1c]                           |     __asm ("strd r3, r2, [sp, 0x1c]");
    0x0005c208 b 0x5c296                                         |     goto label_27;
                                                                 | label_18:
    0x0005c20a ldr r2, [sp, 0x64]                                |     r2 = var_4h;
    0x0005c20c ldr r1, [r4, 0x10]                                |     r1 = *((r4 + 0x10));
    0x0005c20e bl 0x5959c                                        |     fcn_0005959c (r0, r1, r2, r3);
    0x0005c212 str r0, [sp, 0x64]                                |     var_4h = r0;
                                                                 | label_2:
    0x0005c214 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x0005c216 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x0005c218 ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x0005c21a lsls r2, r3, 0xa                                  |     r2 = r3 << 0xa;
                                                                 |     if (r2 < r3) {
    0x0005c21c bpl 0x5c226                                       |         
    0x0005c21e ldrh.w r3, [sl, 0xc]                              |         r3 = *((sl + 0xc));
    0x0005c222 lsls r3, r3, 0x14                                 |         r3 <<= 0x14;
                                                                 |         if (r3 < r3) {
    0x0005c224 bmi 0x5c22e                                       |             goto label_28;
                                                                 |         }
                                                                 |     }
                                                                 | label_22:
    0x0005c226 ldr r0, [sp, 0xc]                                 |     r0 = var_ch_2;
    0x0005c228 mov r1, sl                                        |     r1 = sl;
    0x0005c22a bl 0xc5c0                                         |     fcn_0000c5c0 (r0, r1);
                                                                 | label_28:
    0x0005c22e ldr.w r2, [pc, 0x44c]                             |     r2 = *(0x0005c67c);
    0x0005c232 ldr.w r3, [pc, 0x444]                             |     r3 = *(0x5c67a);
    0x0005c236 add r2, pc                                        |     r2 += pc;
    0x0005c238 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0005c23a ldr r2, [r3]                                      |     r2 = *(0x5c67a);
    0x0005c23c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005c23e eors r2, r3                                       |     r2 ^= r3;
    0x0005c240 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0005c244 bne.w 0x5c670                                     |         goto label_29;
                                                                 |     }
    0x0005c248 ldr r0, [sp, 0x64]                                |     r0 = var_4h;
    0x0005c24a add sp, 0x3c                                      |     
    0x0005c24c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_20:
    0x0005c250 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0005c252 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c254 beq 0x5c17a                                       |         goto label_0;
                                                                 |     }
    0x0005c256 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0005c258 ldr r2, [sp, 0x10]                                |     r2 = var_10h_3;
    0x0005c25a ldrb r3, [r3, r2]                                 |     r3 = *((r3 + r2));
    0x0005c25c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c25e beq 0x5c17a                                       |         goto label_0;
                                                                 |     }
    0x0005c260 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0005c262 clz r3, r3                                        |     r3 &= r3;
    0x0005c266 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0005c268 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0005c26a b 0x5c17a                                         |     goto label_0;
                                                                 | label_24:
    0x0005c26c movs r3, 0                                        |     r3 = 0;
    0x0005c26e add r2, sp, 0x30                                  |     r2 += var_30h;
    0x0005c270 str r3, [sp]                                      |     *(sp) = r3;
    0x0005c272 str r2, [sp, 4]                                   |     var_4h_2 = r2;
    0x0005c274 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
                                                                 | label_14:
    0x0005c276 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005c278 movs r2, 4                                        |     r2 = 4;
    0x0005c27a mov r1, r4                                        |     r1 = r4;
    0x0005c27c bl 0x57f88                                        |     fcn_00057f88 (r0, r1, r2, r3, r4, r5, r6);
    0x0005c280 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005c282 str r0, [sp, 0x20]                                |     var_20h = r0;
    0x0005c284 str r3, [sp, 0x18]                                |     var_18h_2 = r3;
                                                                 | label_11:
    0x0005c286 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0005c288 cmp r3, 4                                         |     
    0x0005c28a itttt eq                                          |     
                                                                 |     if (r3 != 4) {
    0x0005c28c ldreq r3, [sp, 0x60]                              |         r3 = var_60h;
                                                                 |     }
                                                                 |     if (r3 == 4) {
    0x0005c28e clzeq r3, r3                                      |         __asm ("clzeq r3, r3");
                                                                 |     }
                                                                 |     if (r3 != 4) {
    0x0005c292 lsreq r3, r3, 5                                   |         r3 >>= 5;
                                                                 |     }
                                                                 |     if (r3 == 4) {
    0x0005c294 str r3, [sp, 0x60]                                |         var_60h = r3;
                                                                 |     }
                                                                 | label_27:
    0x0005c296 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0005c298 mov r0, fp                                        |     r0 = fp;
    0x0005c29a ldr r2, [sp, 0x18]                                |     r2 = var_18h_2;
    0x0005c29c cmp r3, 0                                         |     
    0x0005c29e mov.w r3, 0                                       |     r3 = 0;
    0x0005c2a2 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x0005c2a4 movne r1, 0x1f                                    |         r1 = 0x1f;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0005c2a6 moveq r1, 0x23                                    |         r1 = 0x23;
                                                                 |     }
    0x0005c2a8 str r3, [sp]                                      |     *(sp) = r3;
    0x0005c2aa bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c2ae ldr r1, [sp, 0xc]                                 |     r1 = var_ch_2;
    0x0005c2b0 ldr r3, [r7, 0x28]                                |     r3 = *((r7 + 0x28));
    0x0005c2b2 ldr.w sb, [r1, 0x48]                              |     sb = *((r1 + 0x48));
    0x0005c2b6 orr r2, r3, 0x800                                 |     r2 = r3 | 0x800;
    0x0005c2ba str r2, [r7, 0x28]                                |     *((r7 + 0x28)) = r2;
    0x0005c2bc cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0005c2c0 bne 0x5c2cc                                       |         
    0x0005c2c2 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0005c2c4 ldr r2, [r0, 0x38]                                |         r2 = *((r0 + 0x38));
    0x0005c2c6 subs r2, 1                                        |         r2--;
    0x0005c2c8 str r2, [r0, 0x38]                                |         *((r0 + 0x38)) = r2;
    0x0005c2ca str r2, [r1, 0x10]                                |         *((r1 + 0x10)) = r2;
                                                                 |     }
    0x0005c2cc ldr r2, [sp, 0x10]                                |     r2 = var_10h_3;
                                                                 |     if (r2 != 0) {
    0x0005c2ce cbz r2, 0x5c2da                                   |         
    0x0005c2d0 lsls r1, r3, 0xb                                  |         r1 = r3 << 0xb;
    0x0005c2d2 itt pl                                            |         
                                                                 |         if (r1 < r3) {
    0x0005c2d4 orrpl r3, r3, 0x40800                             |             r3 |= 0x40800;
                                                                 |         }
                                                                 |         if (r1 < r3) {
    0x0005c2d8 str r3, [r7, 0x28]                                |             *((r7 + 0x28)) = r3;
                                                                 |             goto label_30;
                                                                 |         }
                                                                 |     }
                                                                 | label_30:
    0x0005c2da ldr r5, [sp, 0xc]                                 |     r5 = var_ch_2;
    0x0005c2dc add.w r3, sb, r8                                  |     r3 = sb + r8;
    0x0005c2e0 add.w r8, r3, r3, lsl 2                           |     r8 = r3 + (r3 << 2);
    0x0005c2e4 movs r6, 0                                        |     r6 = 0;
    0x0005c2e6 str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x0005c2e8 lsl.w r8, r8, 2                                   |     r8 <<= 2;
    0x0005c2ec ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x0005c2f0 adds.w r2, r8, 0x10                               |     r2 = r8 + 0x10;
    0x0005c2f4 ldr r5, [r5, 0x4c]                                |     r5 = *((r5 + 0x4c));
    0x0005c2f6 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0005c2f8 adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x0005c2fc ldr r0, [r1]                                      |     r0 = *(r1);
    0x0005c2fe str r1, [sp, 0x24]                                |     var_24h = r1;
    0x0005c300 ldr r0, [r0]                                      |     r0 = *(r0);
    0x0005c302 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0005c306 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c308 beq.w 0x5c47a                                     |         goto label_31;
                                                                 |     }
    0x0005c30c ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0005c30e ldr r3, [r1, 0x48]                                |     r3 = *((r1 + 0x48));
    0x0005c310 strd r8, r6, [r0, 8]                              |     __asm ("strd r8, r6, [r0, 8]");
    0x0005c314 str r3, [r0]                                      |     *(r0) = r3;
    0x0005c316 add.w r3, r0, 0x10                                |     r3 = r0 + 0x10;
    0x0005c31a str r0, [r1, 0x48]                                |     *((r1 + 0x48)) = r0;
                                                                 |     if (r5 != 0) {
    0x0005c31c cbz r5, 0x5c32c                                   |         
    0x0005c31e mov r0, r3                                        |         r0 = r3;
    0x0005c320 ldr r2, [r5, -0x8]                                |         r2 = *((r5 - 0x8));
    0x0005c324 mov r1, r5                                        |         r1 = r5;
    0x0005c326 blx 0x9e2c                                        |         r0 = fcn_00009e2c ();
    0x0005c32a mov r3, r0                                        |         r3 = r0;
                                                                 |     }
    0x0005c32c ldr r2, [sp, 0xc]                                 |     r2 = var_ch_2;
    0x0005c32e add.w sb, sb, sb, lsl 2                           |     sb += (sb << 2);
    0x0005c332 add.w sb, r3, sb, lsl 2                           |     sb = r3 + (sb << 2);
    0x0005c336 str r3, [r2, 0x4c]                                |     *((r2 + 0x4c)) = r3;
    0x0005c338 ldrh r3, [r7, 0x2c]                               |     r3 = *((r7 + 0x2c));
    0x0005c33a ldr r2, [sp, 0x10]                                |     r2 = var_10h_3;
    0x0005c33c cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0005c33e bge 0x5c3e6                                       |         goto label_32;
                                                                 |     }
    0x0005c340 ldr r2, [sp, 0x10]                                |     r2 = var_10h_3;
    0x0005c342 movs r5, 0                                        |     r5 = 0;
    0x0005c344 ldr r1, [sp, 0x64]                                |     r1 = var_4h;
    0x0005c346 mov r8, r2                                        |     r8 = r2;
    0x0005c348 subs r1, r1, r2                                   |     r1 -= r2;
    0x0005c34a strd r1, sl, [sp, 0x24]                           |     __asm ("strd r1, sl, [sp, 0x24]");
    0x0005c34e mov sl, r2                                        |     sl = r2;
    0x0005c350 b 0x5c35a                                         |     
                                                                 |     while (r2 != r4) {
    0x0005c352 add.w r8, r8, 1                                   |         r8++;
    0x0005c356 cmp r3, r8                                        |         
                                                                 |         if (r3 <= r8) {
    0x0005c358 ble 0x5c3e2                                       |             goto label_33;
                                                                 |         }
                                                                 | label_1:
    0x0005c35a ldr r2, [r7, 0x34]                                |         r2 = *((r7 + 0x34));
    0x0005c35c ldr.w r2, [r2, r8, lsl 2]                         |         offset_0 = r8 << 2;
                                                                 |         r2 = *((r2 + offset_0));
    0x0005c360 ldr r2, [r2]                                      |         r2 = *(r2);
    0x0005c362 cmp r2, r4                                        |         
    0x0005c364 bne 0x5c352                                       |         
                                                                 |     }
    0x0005c366 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0005c368 ldrd r0, r2, [fp, 0x6c]                           |     __asm ("ldrd r0, r2, [var_6ch]");
    0x0005c36c add.w r6, r3, r8                                  |     r6 = r3 + r8;
    0x0005c370 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0005c372 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0005c374 beq 0x5c44a                                       |         goto label_34;
                                                                 |     }
    0x0005c376 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x0005c378 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c37a beq 0x5c446                                       |         goto label_35;
                                                                 |     }
    0x0005c37c ldr.w r3, [r3, r5, lsl 2]                         |     offset_1 = r5 << 2;
                                                                 |     r3 = *((r3 + offset_1));
    0x0005c380 adds r5, 1                                        |     r5++;
                                                                 | label_4:
    0x0005c382 cmp r2, r0                                        |     
                                                                 |     if (r2 <= r0) {
    0x0005c384 ble 0x5c482                                       |         goto label_36;
                                                                 |     }
    0x0005c386 ldr.w r1, [fp, 0x68]                              |     r1 = var_ach;
    0x0005c38a add.w r2, r0, r0, lsl 2                           |     r2 = r0 + (r0 << 2);
    0x0005c38c lsls r0, r0, 0xa                                  |     r0 <<= 0xa;
    0x0005c38e add.w ip, r0, 1                                   |     
    0x0005c392 str.w ip, [fp, 0x6c]                              |     __asm ("str.w ip, [var_6ch]");
    0x0005c396 mov.w ip, 0x5e                                    |     
    0x0005c39a add.w lr, r1, r2, lsl 2                           |     lr = r1 + (r2 << 2);
    0x0005c39e str.w r3, [lr, 8]                                 |     __asm ("str.w r3, [lr, 8]");
    0x0005c3a2 ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x0005c3a4 str.w r6, [lr, 0xc]                               |     __asm ("str.w r6, [lr, 0xc]");
    0x0005c3a8 str.w r3, [lr, 4]                                 |     __asm ("str.w r3, [lr, 4]");
    0x0005c3ac movs r3, 0                                        |     r3 = 0;
    0x0005c3ae str.w r3, [lr, 0x10]                              |     __asm ("str.w r3, [lr, 0x10]");
    0x0005c3b2 str.w ip, [r1, r2, lsl 2]                         |     __asm ("str.w ip, [r1, r2, lsl 2]");
                                                                 | label_5:
    0x0005c3b6 movs r3, 0                                        |     r3 = 0;
    0x0005c3b8 str.w r0, [sb, 4]                                 |     __asm ("str.w r0, [sb, 4]");
    0x0005c3bc mov r2, r6                                        |     r2 = r6;
    0x0005c3be str r3, [sp]                                      |     *(sp) = r3;
    0x0005c3c0 movs r1, 0x32                                     |     r1 = 0x32;
    0x0005c3c2 mov r0, fp                                        |     r0 = fp;
    0x0005c3c4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c3c8 cmp sl, r8                                        |     
    0x0005c3ca itt ne                                            |     
                                                                 |     if (sl == r8) {
    0x0005c3cc movne r3, 0xb8                                    |         r3 = 0xb8;
                                                                 |     }
                                                                 |     if (sl == r8) {
    0x0005c3ce strbne r3, [sb, 0x10]                             |         *((sb + 0x10)) = r3;
                                                                 |     }
                                                                 |     if (sl == r8) {
    0x0005c3d2 beq 0x5c40c                                       |         goto label_37;
                                                                 |     }
                                                                 | label_3:
    0x0005c3d4 ldrh r3, [r7, 0x2c]                               |     r3 = *((r7 + 0x2c));
    0x0005c3d6 add.w r8, r8, 1                                   |     r8++;
    0x0005c3da add.w sb, sb, 0x14                                |     sb += 0x14;
    0x0005c3de cmp r3, r8                                        |     
                                                                 |     if (r3 > r8) {
    0x0005c3e0 bgt 0x5c35a                                       |         goto label_1;
                                                                 |     }
                                                                 | label_33:
    0x0005c3e2 ldr.w sl, [sp, 0x28]                              |     sl = var_28h;
                                                                 | label_32:
    0x0005c3e6 ldr r3, [sp, 0x10]                                |     r3 = var_10h_3;
                                                                 |     if (r3 != 0) {
    0x0005c3e8 cbz r3, 0x5c3fa                                   |         
    0x0005c3ea ldr r2, [r7, 0x28]                                |         r2 = *((r7 + 0x28));
    0x0005c3ec mov.w r3, 0x400                                   |         
    0x0005c3f0 movt r3, 0x10                                     |         r3 = 0x100400;
    0x0005c3f4 ands r3, r2                                       |         r3 &= r2;
                                                                 |         if (r3 == r2) {
    0x0005c3f6 beq.w 0x5c5c4                                     |             goto label_38;
                                                                 |         }
                                                                 |     }
                                                                 | label_6:
    0x0005c3fa ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x0005c3fc cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005c3fe beq.w 0x5c214                                     |         goto label_2;
                                                                 |     }
    0x0005c402 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005c404 ldr r0, [r3]                                      |     r0 = *(r3);
    0x0005c406 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0005c40a b 0x5c214                                         |     goto label_2;
                                                                 | label_37:
    0x0005c40c ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0005c40e str.w sl, [sb, 0xc]                               |     __asm ("str.w sl, [sb, 0xc]");
    0x0005c412 cmp r3, 0                                         |     
    0x0005c414 ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x0005c416 str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x0005c41a ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x0005c41c moveq r3, 0x26                                    |         r3 = 0x26;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0005c41e movne r3, 0x25                                    |         r3 = 0x25;
                                                                 |     }
    0x0005c420 strb.w r3, [sb, 0x10]                             |     *((sb + 0x10)) = r3;
    0x0005c424 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0005c428 beq 0x5c3d4                                       |         goto label_3;
                                                                 |     }
    0x0005c42a ldr r3, [sp, 0x64]                                |     r3 = var_4h;
    0x0005c42c sub.w r3, r3, sl                                  |     r3 -= sl;
    0x0005c430 str.w r3, [sb, 8]                                 |     __asm ("str.w r3, [sb, 8]");
    0x0005c434 b 0x5c3d4                                         |     goto label_3;
                                                                 | label_19:
    0x0005c436 movs r2, 0                                        |     r2 = 0;
    0x0005c438 ldr r3, [sp, 0x64]                                |     r3 = var_4h;
    0x0005c43a mov r0, fp                                        |     r0 = fp;
    0x0005c43c movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0005c43e str r2, [sp]                                      |     *(sp) = r2;
    0x0005c440 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c444 b 0x5c214                                         |     goto label_2;
                                                                 | label_35:
    0x0005c446 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x0005c448 b 0x5c382                                         |     goto label_4;
                                                                 | label_34:
    0x0005c44a cmp r2, r0                                        |     
                                                                 |     if (r2 <= r0) {
    0x0005c44c ble.w 0x5c628                                     |         goto label_39;
                                                                 |     }
    0x0005c450 ldr.w r2, [fp, 0x68]                              |     r2 = var_ach;
    0x0005c454 add.w r3, r0, r0, lsl 2                           |     r3 = r0 + (r0 << 2);
    0x0005c458 ldr r1, [sp, 0x18]                                |     r1 = var_18h_2;
    0x0005c45a add.w ip, r0, 1                                   |     
    0x0005c45e str.w ip, [fp, 0x6c]                              |     __asm ("str.w ip, [var_6ch]");
    0x0005c462 mov.w ip, 0x87                                    |     
    0x0005c466 add.w lr, r2, r3, lsl 2                           |     lr = r2 + (r3 << 2);
    0x0005c46a strd r1, r6, [lr, 4]                              |     __asm ("strd r1, r6, [lr, 4]");
    0x0005c46e movs r1, 0                                        |     r1 = 0;
    0x0005c470 strd r1, r1, [lr, 0xc]                            |     __asm ("strd r1, r1, [lr, 0xc]");
    0x0005c474 str.w ip, [r2, r3, lsl 2]                         |     __asm ("str.w ip, [r2, r3, lsl 2]");
    0x0005c478 b 0x5c3b6                                         |     goto label_5;
                                                                 | label_31:
    0x0005c47a ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x0005c47c strd r0, r0, [r3, 0x48]                           |     __asm ("strd r0, r0, [r3, 0x48]");
    0x0005c480 b 0x5c3fa                                         |     goto label_6;
                                                                 | label_36:
    0x0005c482 ldr r2, [sp, 0x18]                                |     r2 = var_18h_2;
    0x0005c484 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x0005c486 mov r0, fp                                        |     r0 = fp;
    0x0005c488 str r6, [sp]                                      |     *(sp) = r6;
    0x0005c48a bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005c48e b 0x5c3b6                                         |     goto label_5;
                                                                 | label_26:
    0x0005c490 ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x0005c492 ldr r1, [sp, 0x10]                                |     r1 = var_10h_3;
    0x0005c494 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0005c496 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0005c498 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0005c49a ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0005c49c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0005c49e ldrh r3, [r7, 0x2c]                               |     r3 = *((r7 + 0x2c));
    0x0005c4a0 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x0005c4a2 bge 0x5c518                                       |         goto label_40;
                                                                 |     }
    0x0005c4a4 mov sb, r1                                        |     sb = r1;
    0x0005c4a6 str r2, [sp, 0x18]                                |     var_18h_2 = r2;
    0x0005c4a8 mov r1, r3                                        |     r1 = r3;
    0x0005c4aa str r2, [sp, 0x1c]                                |     var_1ch_2 = r2;
    0x0005c4ac strd fp, r5, [sp, 0x28]                           |     __asm ("strd fp, r5, [sp, 0x28]");
    0x0005c4b0 b 0x5c4bc                                         |     
                                                                 |     while (r4 != r3) {
                                                                 | label_7:
    0x0005c4b2 add.w sb, sb, 1                                   |         sb++;
    0x0005c4b6 cmp sb, r1                                        |         
                                                                 |         if (sb >= r1) {
    0x0005c4b8 bge.w 0x5c5be                                     |             goto label_41;
                                                                 |         }
    0x0005c4bc ldr r3, [r7, 0x34]                                |         r3 = *((r7 + 0x34));
    0x0005c4be ldr.w r2, [r3, sb, lsl 2]                         |         offset_2 = sb << 2;
                                                                 |         r2 = *((r3 + offset_2));
    0x0005c4c2 ldr r3, [r2]                                      |         r3 = *(r2);
    0x0005c4c4 cmp r4, r3                                        |         
    0x0005c4c6 bne 0x5c4b2                                       |         
                                                                 |     }
    0x0005c4c8 ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x0005c4ca ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0005c4cc add.w fp, r2, -1                                  |     
    0x0005c4d0 lsl.w fp, fp, 4                                   |     
    0x0005c4d4 add.w r5, r3, fp                                  |     r5 = r3 + fp;
    0x0005c4d8 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x0005c4da cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005c4dc beq 0x5c4b2                                       |         goto label_7;
                                                                 |     }
    0x0005c4de ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0005c4e0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x0005c4e2 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005c4e4 add fp, r3                                        |     
    0x0005c4e6 bl 0x2bffc                                        |     fcn_0002bffc (r0, r1, r2);
    0x0005c4ea movs r3, 0                                        |     r3 = 0;
    0x0005c4ec ldr r1, [sp, 0x18]                                |     r1 = var_18h_2;
    0x0005c4ee str r3, [r5, 8]                                   |     *((r5 + 8)) = r3;
    0x0005c4f0 str r0, [sp, 0x1c]                                |     var_1ch_2 = r0;
    0x0005c4f2 ldr.w r2, [fp, 8]                                 |     r2 = var_bp_8h;
    0x0005c4f6 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005c4f8 bl 0x2bffc                                        |     fcn_0002bffc (r0, r1, r2);
    0x0005c4fc movs r3, 0                                        |     r3 = 0;
    0x0005c4fe ldrh r1, [r7, 0x2c]                               |     r1 = *((r7 + 0x2c));
    0x0005c500 str.w r3, [fp, 8]                                 |     __asm ("str.w r3, [var_bp_8h]");
    0x0005c504 str r0, [sp, 0x18]                                |     var_18h_2 = r0;
    0x0005c506 b 0x5c4b2                                         |     goto label_7;
                                                                 |     do {
                                                                 | label_9:
    0x0005c508 cmp.w ip, 0                                       |         
                                                                 |         if (ip == 0) {
    0x0005c50c beq 0x5c572                                       |             goto label_42;
                                                                 |         }
                                                                 | label_10:
    0x0005c50e mov r1, r6                                        |         r1 = r6;
    0x0005c510 mov r0, r5                                        |         r0 = r5;
    0x0005c512 bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
    0x0005c516 b 0x5c1fe                                         |         goto label_8;
                                                                 | label_40:
    0x0005c518 strd r2, r2, [sp, 0x18]                           |         __asm ("strd r2, r2, [sp, 0x18]");
                                                                 | label_12:
    0x0005c51c ldr r3, [sp, 0x20]                                |         r3 = var_20h;
                                                                 |         if (r3 != 0) {
    0x0005c51e cbz r3, 0x5c528                                   |             
    0x0005c520 mov r1, r3                                        |             r1 = r3;
    0x0005c522 mov r0, r5                                        |             r0 = r5;
    0x0005c524 bl 0x16c98                                        |             fcn_00016c98 (r0, r1);
                                                                 |         }
    0x0005c528 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
                                                                 |         if (r3 != 0) {
    0x0005c52a cbz r3, 0x5c534                                   |             
    0x0005c52c mov r1, r3                                        |             r1 = r3;
    0x0005c52e mov r0, r5                                        |             r0 = r5;
    0x0005c530 bl 0x16c98                                        |             fcn_00016c98 (r0, r1);
                                                                 |         }
    0x0005c534 ldr r1, [r6, 0xc]                                 |         r1 = *((r6 + 0xc));
    0x0005c536 ldr r2, [sp, 0x18]                                |         r2 = var_18h_2;
    0x0005c538 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch_2;
    0x0005c53a str r2, [r1, 0x14]                                |         *((r1 + 0x14)) = r2;
    0x0005c53c ldr r3, [r6, 0x14]                                |         r3 = *((r6 + 0x14));
    0x0005c53e str r0, [r3, 0x1c]                                |         *((r3 + 0x1c)) = r0;
                                                                 |         if (r2 != 0) {
    0x0005c540 cbz r2, 0x5c54a                                   |             
    0x0005c542 ldr r2, [r2]                                      |             r2 = *(r2);
    0x0005c544 cmp r2, 1                                         |             
                                                                 |             if (r2 == 1) {
    0x0005c546 beq.w 0x5c652                                     |                 goto label_43;
                                                                 |             }
                                                                 |         }
                                                                 | label_16:
    0x0005c54a ldr r3, [r3, 0x30]                                |         r3 = *((r3 + 0x30));
    0x0005c54c ldrb.w ip, [r5, 0x57]                             |         ip = *((r5 + 0x57));
    0x0005c550 cmp r3, 0                                         |         
    0x0005c552 beq 0x5c508                                       |         
                                                                 |     } while (r3 == 0);
    0x0005c554 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0005c556 cmp r1, 0                                         |     
    0x0005c558 itt gt                                            |     
                                                                 |     if (r1 <= 0) {
    0x0005c55a movgt r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r1 > 0) {
    0x0005c55c movgt r0, r2                                      |         r0 = r2;
                                                                 |         goto label_44;
                                                                 |     }
                                                                 |     if (r1 <= 0) {
                                                                 | label_44:
    0x0005c55e ble 0x5c508                                       |         goto label_9;
                                                                 |     }
                                                                 |     do {
    0x0005c560 adds r2, 1                                        |         r2++;
    0x0005c562 strh r0, [r3, 0x14]                               |         *((r3 + 0x14)) = r0;
    0x0005c564 cmp r1, r2                                        |         
    0x0005c566 add.w r3, r3, 0x10                                |         r3 += 0x10;
    0x0005c56a bne 0x5c560                                       |         
                                                                 |     } while (r1 != r2);
    0x0005c56c cmp.w ip, 0                                       |     
                                                                 |     if (ip != 0) {
    0x0005c570 bne 0x5c50e                                       |         goto label_10;
                                                                 |     }
                                                                 | label_42:
    0x0005c572 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005c574 lsl.w sb, r8, 2                                   |     sb = r8 << 2;
    0x0005c578 ldr r0, [r3]                                      |     r0 = *(r3);
    0x0005c57a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c57c beq 0x5c63a                                       |         goto label_45;
                                                                 |     }
    0x0005c57e mov r2, sb                                        |     r2 = sb;
    0x0005c580 movs r3, 0                                        |     r3 = 0;
    0x0005c582 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x0005c586 str r0, [sp, 0x1c]                                |     var_1ch_2 = r0;
                                                                 |     do {
    0x0005c588 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
                                                                 |         if (r3 != 0) {
    0x0005c58a cbz r3, 0x5c596                                   |             
    0x0005c58c mov r2, sb                                        |             r2 = sb;
    0x0005c58e movs r1, 0                                        |             r1 = 0;
    0x0005c590 mov r0, r3                                        |             r0 = r3;
    0x0005c592 blx 0x97d4                                        |             fcn_000097d4 ();
    0x0005c594 invalid                                           |             
                                                                 |         }
    0x0005c596 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
    0x0005c598 mov r1, r6                                        |         r1 = r6;
    0x0005c59a ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0005c59c movs r2, 4                                        |         r2 = 4;
    0x0005c59e str r3, [sp]                                      |         *(sp) = r3;
    0x0005c5a0 add r3, sp, 0x30                                  |         r3 += var_30h;
    0x0005c5a2 str r3, [sp, 4]                                   |         var_4h_2 = r3;
    0x0005c5a4 movs r3, 0                                        |         r3 = 0;
    0x0005c5a6 bl 0x57f88                                        |         r0 = fcn_00057f88 (r0, r1, r2, r3, r4, r5, r6);
    0x0005c5aa mov r3, r0                                        |         r3 = r0;
    0x0005c5ac mov r1, r6                                        |         r1 = r6;
    0x0005c5ae str r3, [sp, 0x20]                                |         var_20h = r3;
    0x0005c5b0 mov r0, r5                                        |         r0 = r5;
    0x0005c5b2 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0005c5b4 str r3, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r3;
    0x0005c5b6 str r3, [sp, 0x18]                                |         var_18h_2 = r3;
    0x0005c5b8 bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
    0x0005c5bc b 0x5c286                                         |         goto label_11;
                                                                 | label_41:
    0x0005c5be ldrd fp, r5, [sp, 0x28]                           |         __asm ("ldrd fp, r5, [var_28h]");
    0x0005c5c2 b 0x5c51c                                         |         goto label_12;
                                                                 | label_38:
    0x0005c5c4 ldr r2, [sp, 0x10]                                |         r2 = var_10h_3;
    0x0005c5c6 mov r0, fp                                        |         r0 = fp;
    0x0005c5c8 movs r1, 0x7d                                     |         r1 = 0x7d;
    0x0005c5ca str r2, [sp]                                      |         *(sp) = r2;
    0x0005c5cc ldr r2, [sp, 0xc]                                 |         r2 = var_ch_2;
    0x0005c5ce ldr r2, [r2, 8]                                   |         r2 = *((r2 + 8));
    0x0005c5d0 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c5d4 b 0x5c3fa                                         |         goto label_6;
                                                                 | label_23:
    0x0005c5d6 mov.w r8, 0                                       |         r8 = 0;
    0x0005c5da b 0x5c1be                                         |         goto label_13;
                                                                 | label_25:
    0x0005c5dc ldr r2, [r4, 0xc]                                 |         r2 = *((r4 + 0xc));
    0x0005c5de ldrb r3, [r2]                                     |         r3 = *(r2);
    0x0005c5e0 cmp r3, 0xb0                                      |         
    0x0005c5e2 it eq                                             |         
                                                                 |         if (r3 != 0xb0) {
    0x0005c5e4 ldrbeq r3, [r2, 2]                                |             r3 = *((r2 + 2));
                                                                 |         }
    0x0005c5e6 cmp r3, 0xb1                                      |         
                                                                 |         if (r3 == 0xb1) {
    0x0005c5e8 beq 0x5c66a                                       |             goto label_46;
                                                                 |         }
    0x0005c5ea cmp r3, 0x8a                                      |         
    0x0005c5ec itett eq                                          |         
                                                                 |         if (r3 != 0x8a) {
    0x0005c5ee ldreq r3, [r2, 0x14]                              |             r3 = *((r2 + 0x14));
                                                                 |         }
                                                                 |         if (r3 == 0x8a) {
    0x0005c5f0 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r3 != 0x8a) {
    0x0005c5f2 ldreq r3, [r3, 0x1c]                              |             r3 = *((r3 + 0x1c));
                                                                 |         }
                                                                 |         if (r3 != 0x8a) {
    0x0005c5f4 ldreq r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
                                                                 | label_17:
    0x0005c5f6 cmp r3, r8                                        |         
    0x0005c5f8 it lt                                             |         
                                                                 |         if (r3 >= r8) {
    0x0005c5fa movlt r3, r8                                      |             r3 = r8;
                                                                 |         }
    0x0005c5fc lsl.w sb, r3, 2                                   |         sb = r3 << 2;
                                                                 |         if (r5 == 0) {
    0x0005c600 cbz r5, 0x5c646                                   |             goto label_47;
                                                                 |         }
    0x0005c602 mov r0, r5                                        |         r0 = r5;
    0x0005c604 mov r2, sb                                        |         r2 = sb;
    0x0005c606 movs r3, 0                                        |         r3 = 0;
    0x0005c608 bl 0x1d740                                        |         fcn_0001d740 (r0, r1);
    0x0005c60c str r0, [sp, 0x1c]                                |         var_1ch_2 = r0;
                                                                 | label_15:
    0x0005c60e ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
                                                                 |         if (r3 != 0) {
    0x0005c610 cbz r3, 0x5c61c                                   |             
    0x0005c612 mov r2, sb                                        |             r2 = sb;
    0x0005c614 movs r1, 0                                        |             r1 = 0;
    0x0005c616 mov r0, r3                                        |             r0 = r3;
    0x0005c618 blx 0x97d4                                        |             fcn_000097d4 ();
                                                                 |         }
    0x0005c61c ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
    0x0005c61e str r3, [sp]                                      |         *(sp) = r3;
    0x0005c620 add r3, sp, 0x30                                  |         r3 += var_30h;
    0x0005c622 str r3, [sp, 4]                                   |         var_4h_2 = r3;
    0x0005c624 movs r3, 0                                        |         r3 = 0;
    0x0005c626 b 0x5c276                                         |         goto label_14;
                                                                 | label_39:
    0x0005c628 movs r3, 0                                        |         r3 = 0;
    0x0005c62a ldr r2, [sp, 0x18]                                |         r2 = var_18h_2;
    0x0005c62c str r3, [sp]                                      |         *(sp) = r3;
    0x0005c62e movs r1, 0x87                                     |         r1 = 0x87;
    0x0005c630 mov r3, r6                                        |         r3 = r6;
    0x0005c632 mov r0, fp                                        |         r0 = fp;
    0x0005c634 bl 0x29a7c                                        |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005c638 b 0x5c3b6                                         |         goto label_5;
                                                                 | label_45:
    0x0005c63a mov r1, r0                                        |         r1 = r0;
    0x0005c63c mov r0, sb                                        |         r0 = sb;
    0x0005c63e bl 0x117c8                                        |         fcn_000117c8 (r0);
    0x0005c642 str r0, [sp, 0x1c]                                |         var_1ch_2 = r0;
    0x0005c644 b 0x5c588                                         |         
                                                                 |     } while (1);
                                                                 | label_47:
    0x0005c646 mov r1, r5                                        |     r1 = r5;
    0x0005c648 mov r0, sb                                        |     r0 = sb;
    0x0005c64a bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x0005c64e str r0, [sp, 0x1c]                                |     var_1ch_2 = r0;
    0x0005c650 b 0x5c60e                                         |     goto label_15;
                                                                 | label_43:
    0x0005c652 ldr r2, [sp, 0x18]                                |     r2 = var_18h_2;
    0x0005c654 movs r3, 0                                        |     r3 = 0;
    0x0005c656 mov r0, r5                                        |     r0 = r5;
    0x0005c658 ldr.w sb, [r2, 8]                                 |     sb = *((r2 + 8));
    0x0005c65c str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x0005c65e bl 0x16c0c                                        |     fcn_00016c0c (r0, r1);
    0x0005c662 ldr r3, [r6, 0x14]                                |     r3 = *((r6 + 0x14));
    0x0005c664 str.w sb, [r6, 0xc]                               |     __asm ("str.w sb, [r6, 0xc]");
    0x0005c668 b 0x5c54a                                         |     goto label_16;
                                                                 | label_46:
    0x0005c66a ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x0005c66c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0005c66e b 0x5c5f6                                         |     goto label_17;
                                                                 | label_29:
    0x0005c670 blx 0x9b44                                        |     fcn_00009b44 ();
    0x0005c674 ldr r1, [pc, 0x2f0]                               |     r1 = *(0x5c968);
    0x0005c676 movs r4, r0                                       |     r4 = r0;
    0x0005c678 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0005c67a movs r0, r0                                       |     
    0x0005c67c ldr r0, [pc, 0x328]                               |     r0 = *(0x5c9a8);
    0x0005c67e movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5c680 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0005c680 ()                                      | void fcn_0005c680 (arithmetic arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_bp_8h;
                                                                 |     int16_t var_bp_14h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_3;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_48h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0005c680 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0005c684 sub sp, 0x24                                      |     
    0x0005c686 ldr r7, [r1, 0x50]                                |     r7 = *((r1 + 0x50));
    0x0005c688 mov fp, r1                                        |     
    0x0005c68a mov r8, r0                                        |     r8 = r0;
    0x0005c68c str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0005c68e ldrh.w sl, [r7, 0x18]                             |     sl = *((r7 + 0x18));
    0x0005c692 ldr r2, [r0, 0x2c]                                |     r2 = *(var_0hx2c);
    0x0005c694 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0005c696 ldr r4, [r0]                                      |     r4 = *(r0);
    0x0005c698 add r3, sl                                        |     r3 += sl;
    0x0005c69a ldrh r5, [r7, 0x2e]                               |     r5 = *((r7 + 0x2e));
    0x0005c69c add.w sb, r2, 1                                   |     sb = r2 + 1;
    0x0005c6a0 str r3, [sp, 8]                                   |     var_bp_8h = r3;
    0x0005c6a2 adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x0005c6a4 str r1, [sp, 0xc]                                 |     var_ch_3 = r1;
    0x0005c6a6 ldr r1, [r7, 0x20]                                |     r1 = *((r7 + 0x20));
    0x0005c6a8 str r3, [r0, 0x2c]                                |     *(var_0hx2c) = r3;
    0x0005c6aa mov r0, r4                                        |     r0 = r4;
    0x0005c6ac bl 0x319d4                                        |     r0 = fcn_000319d4 (r0, r1);
    0x0005c6b0 mov r1, r0                                        |     r1 = r0;
    0x0005c6b2 mov r0, r4                                        |     r0 = r4;
    0x0005c6b4 bl 0x1e948                                        |     fcn_0001e948 (r0, r1);
    0x0005c6b8 str r0, [sp, 0x14]                                |     var_bp_14h = r0;
    0x0005c6ba cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0005c6bc bne.w 0x5c7f0                                     |         goto label_11;
                                                                 |     }
    0x0005c6c0 mov r4, r5                                        |     r4 = r5;
    0x0005c6c2 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0005c6c6 beq.w 0x5c8b8                                     |         goto label_12;
                                                                 |     }
                                                                 | label_7:
    0x0005c6ca mov r5, r4                                        |     r5 = r4;
    0x0005c6cc str r4, [sp, 0x10]                                |     var_10h_2 = r4;
    0x0005c6ce ldr r4, [sp, 0x18]                                |     r4 = var_18h;
                                                                 | label_2:
    0x0005c6d0 ldr r1, [r7, 0x34]                                |     r1 = *((r7 + 0x34));
    0x0005c6d2 add.w r6, sb, r5                                  |     r6 = sb + r5;
    0x0005c6d6 mov r3, r5                                        |     r3 = r5;
    0x0005c6d8 mov r2, fp                                        |     r2 = fp;
    0x0005c6da mov r0, r8                                        |     r0 = r8;
    0x0005c6dc ldr.w r1, [r1, r5, lsl 2]                         |     offset_0 = r5 << 2;
                                                                 |     r1 = *((r1 + offset_0));
    0x0005c6e0 adds r5, 1                                        |     r5++;
    0x0005c6e2 strd r4, r6, [sp]                                 |     __asm ("strd r4, r6, [sp]");
    0x0005c6e6 bl 0x5c134                                        |     r0 = fcn_0005c134 (r0, r1, r2, r3);
    0x0005c6ea cmp r6, r0                                        |     
                                                                 |     if (r6 == r0) {
    0x0005c6ec beq 0x5c79a                                       |         goto label_13;
                                                                 |     }
    0x0005c6ee ldr r3, [sp, 8]                                   |     r3 = var_bp_8h;
    0x0005c6f0 mov r2, r0                                        |     r2 = r0;
    0x0005c6f2 cmp r3, 1                                         |     
    0x0005c6f4 mov r3, r6                                        |     r3 = r6;
                                                                 |     if (r3 != 1) {
    0x0005c6f6 bne 0x5c78e                                       |         goto label_14;
                                                                 |     }
    0x0005c6f8 ldr r4, [sp, 0x10]                                |     r4 = var_10h_2;
    0x0005c6fa cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0005c6fe bne 0x5c7a4                                       |         goto label_15;
                                                                 |     }
                                                                 | label_3:
    0x0005c700 cmp sl, r4                                        |     
                                                                 |     if (sl <= r4) {
    0x0005c702 ble 0x5c780                                       |         goto label_8;
                                                                 |     }
    0x0005c704 str.w fp, [sp, 0x10]                              |     __asm ("str.w fp, [var_10h_2]");
    0x0005c708 movs r6, 0x41                                     |     r6 = 0x41;
    0x0005c70a ldr r5, [sp, 0x14]                                |     r5 = var_bp_14h;
    0x0005c70c mov fp, r2                                        |     
    0x0005c70e b 0x5c728                                         |     
                                                                 |     while (r1 < r2) {
    0x0005c710 ldr r2, [r3]                                      |         r2 = *(r3);
    0x0005c712 subs r3, r5, 0                                    |         r3 = r5 - 0;
    0x0005c714 it ne                                             |         
                                                                 |         if (r3 == r5) {
    0x0005c716 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x0005c718 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x0005c71a ands.w r3, r3, r2, lsr 12                         |         r3 &= (r2 >> 12);
    0x0005c71e it ne                                             |         
                                                                 |         if (r3 == r3) {
    0x0005c720 strbne r6, [r5, r4]                               |             *((r5 + r4)) = r6;
                                                                 |         }
                                                                 | label_0:
    0x0005c722 adds r4, 1                                        |         r4++;
    0x0005c724 cmp sl, r4                                        |         
                                                                 |         if (sl == r4) {
    0x0005c726 beq 0x5c77e                                       |             goto label_16;
                                                                 |         }
                                                                 | label_1:
    0x0005c728 ldr r3, [r7, 0x34]                                |         r3 = *((r7 + 0x34));
    0x0005c72a ldr.w r3, [r3, r4, lsl 2]                         |         offset_1 = r4 << 2;
                                                                 |         r3 = *((r3 + offset_1));
    0x0005c72e ldrh r2, [r3, 0xc]                                |         r2 = *((r3 + 0xc));
    0x0005c730 lsls r1, r2, 0x1f                                 |         r1 = r2 << 0x1f;
    0x0005c732 bmi 0x5c710                                       |         
                                                                 |     }
    0x0005c734 lsls r2, r2, 0x17                                 |     r2 <<= 0x17;
                                                                 |     if (r2 < r2) {
    0x0005c736 bmi 0x5c722                                       |         goto label_0;
                                                                 |     }
    0x0005c738 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0005c73a ldrh r3, [r3, 0xa]                                |     r3 = *((r3 + 0xa));
    0x0005c73c ldr.w sb, [r2, 0x10]                              |     sb = *((r2 + 0x10));
    0x0005c740 ands r3, r3, 0x800                                |     r3 &= 0x800;
                                                                 |     if (r3 == r3) {
    0x0005c744 beq 0x5c7ba                                       |         goto label_17;
                                                                 |     }
                                                                 | label_4:
    0x0005c746 ldr.w r3, [r8, 0x24]                              |     r3 = *((r8 + 0x24));
    0x0005c74a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005c74c bne 0x5c722                                       |         goto label_0;
                                                                 |     }
    0x0005c74e mov r0, sb                                        |     r0 = sb;
    0x0005c750 bl 0xd480                                         |     fcn_0000d480 (r0);
    0x0005c754 ldrb r1, [r5, r4]                                 |     r1 = *((r5 + r4));
    0x0005c756 cmp r0, 0x40                                      |     
    0x0005c758 it hi                                             |     
                                                                 |     if (r0 > 0x40) {
    0x0005c75a cmphi r1, 0x40                                    |         __asm ("cmphi r1, 0x40");
                                                                 |     }
                                                                 |     if (r0 < 0x40) {
    0x0005c75c bls 0x5c7dc                                       |         goto label_18;
                                                                 |     }
    0x0005c75e cmp r1, 0x42                                      |     
    0x0005c760 it ls                                             |     
                                                                 |     if (r1 <= 0x42) {
    0x0005c762 cmpls r0, 0x42                                    |         __asm ("cmpls r0, 0x42");
                                                                 |     }
                                                                 |     if (r1 <= 0x42) {
    0x0005c764 bhi 0x5c76a                                       |         
                                                                 | label_6:
    0x0005c766 movs r1, 0x41                                     |         r1 = 0x41;
    0x0005c768 strb r1, [r5, r4]                                 |         *((r5 + r4)) = r1;
                                                                 |     }
                                                                 | label_5:
    0x0005c76a mov r0, sb                                        |     r0 = sb;
    0x0005c76c bl 0xc134                                         |     r0 = fcn_0000c134 (r0, r1);
    0x0005c770 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c772 beq 0x5c722                                       |         goto label_0;
                                                                 |     }
    0x0005c774 movs r3, 0x41                                     |     r3 = 0x41;
    0x0005c776 strb r3, [r5, r4]                                 |     *((r5 + r4)) = r3;
    0x0005c778 adds r4, 1                                        |     r4++;
    0x0005c77a cmp sl, r4                                        |     
                                                                 |     if (sl != r4) {
    0x0005c77c bne 0x5c728                                       |         goto label_1;
                                                                 |     }
                                                                 | label_16:
    0x0005c77e mov r2, fp                                        |     r2 = fp;
                                                                 | label_8:
    0x0005c780 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0005c782 mov r0, r2                                        |     r0 = r2;
    0x0005c784 ldr r1, [sp, 0x14]                                |     r1 = var_bp_14h;
    0x0005c786 str r1, [r3]                                      |     *(r3) = r1;
    0x0005c788 add sp, 0x24                                      |     
    0x0005c78a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_14:
    0x0005c78e movs r1, 0                                        |     r1 = 0;
    0x0005c790 ldr r0, [sp, 0xc]                                 |     r0 = var_ch_3;
    0x0005c792 str r1, [sp]                                      |     *(sp) = r1;
    0x0005c794 movs r1, 0x50                                     |     r1 = 0x50;
    0x0005c796 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_13:
    0x0005c79a cmp sl, r5                                        |     
                                                                 |     if (sl > r5) {
    0x0005c79c bgt 0x5c6d0                                       |         goto label_2;
                                                                 |     }
    0x0005c79e ldr r4, [sp, 0x10]                                |     r4 = var_10h_2;
    0x0005c7a0 mov r2, sb                                        |     r2 = sb;
    0x0005c7a2 b 0x5c700                                         |     goto label_3;
                                                                 | label_15:
    0x0005c7a4 ldrb.w r3, [r8, 0x13]                             |     r3 = *((r8 + 0x13));
    0x0005c7a8 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x0005c7aa bhi 0x5c700                                       |         goto label_3;
                                                                 |     }
    0x0005c7ac adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x0005c7ae adds r3, 0x26                                     |     r3 += 0x26;
    0x0005c7b0 strb.w r1, [r8, 0x13]                             |     *((r8 + 0x13)) = r1;
    0x0005c7b4 str.w sb, [r8, r3, lsl 2]                         |     __asm ("str.w sb, [r8, r3, lsl 2]");
    0x0005c7b8 b 0x5c700                                         |     goto label_3;
                                                                 | label_17:
    0x0005c7ba mov r0, sb                                        |     r0 = sb;
    0x0005c7bc str r3, [sp, 8]                                   |     var_bp_8h = r3;
    0x0005c7be bl 0xc0c4                                         |     fcn_0000c0c4 (r0);
    0x0005c7c2 ldr r3, [sp, 8]                                   |     r3 = var_bp_8h;
    0x0005c7c4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c7c6 beq 0x5c746                                       |         goto label_4;
                                                                 |     }
    0x0005c7c8 str r3, [sp]                                      |     *(sp) = r3;
    0x0005c7ca add.w r2, fp, r4                                  |     r2 = fp + r4;
    0x0005c7ce ldr r3, [sp, 0x10]                                |     r3 = var_10h_2;
    0x0005c7d0 movs r1, 0x32                                     |     r1 = 0x32;
    0x0005c7d2 ldr r0, [sp, 0xc]                                 |     r0 = var_ch_3;
    0x0005c7d4 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0005c7d6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c7da b 0x5c746                                         |     goto label_4;
                                                                 | label_18:
    0x0005c7dc cmp r0, 0x40                                      |     
    0x0005c7de itet hi                                           |     
                                                                 |     if (r0 <= 0x40) {
    0x0005c7e0 orrhi r3, r0, 0x40                                |         r3 = r0 | 0x40;
                                                                 |     }
                                                                 |     if (r0 <= 0x40) {
    0x0005c7e4 orrhi r3, r1, 0x40                                |         r3 = r1 | 0x40;
                                                                 |     }
                                                                 |     if (r0 > 0x40) {
    0x0005c7e8 uxtb r3, r3                                       |         r3 = (int8_t) r3;
                                                                 |     }
    0x0005c7ea cmp r3, 0x41                                      |     
                                                                 |     if (r3 != 0x41) {
    0x0005c7ec bne 0x5c76a                                       |         goto label_5;
                                                                 |     }
    0x0005c7ee b 0x5c766                                         |     goto label_6;
                                                                 | label_11:
    0x0005c7f0 add.w r3, r5, sb                                  |     r3 = r5 + sb;
    0x0005c7f4 ldr r4, [sp, 0xc]                                 |     r4 = var_ch_3;
    0x0005c7f6 subs r3, 1                                        |     r3--;
    0x0005c7f8 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0005c7fa str r3, [sp]                                      |     *(sp) = r3;
    0x0005c7fc movs r2, 0                                        |     r2 = 0;
    0x0005c7fe ldr.w r6, [fp, 8]                                 |     r6 = var_bp_8h;
    0x0005c802 mov r3, sb                                        |     r3 = sb;
    0x0005c804 mov r0, r4                                        |     r0 = r4;
    0x0005c806 str r6, [sp, 0x10]                                |     var_10h_2 = r6;
    0x0005c808 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c80c ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005c80e movs r3, 0                                        |     r3 = 0;
    0x0005c810 mov r0, r4                                        |     r0 = r4;
    0x0005c812 str r3, [sp]                                      |     *(sp) = r3;
    0x0005c814 cmp r2, 0                                         |     
    0x0005c816 mov r2, r6                                        |     r2 = r6;
    0x0005c818 ite ne                                            |     
                                                                 |     if (r2 == 0) {
    0x0005c81a movne r1, 0x1f                                    |         r1 = 0x1f;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x0005c81c moveq r1, 0x23                                    |         r1 = 0x23;
                                                                 |     }
    0x0005c81e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c822 ldrd r4, r2, [r4, 0x6c]                           |     __asm ("ldrd r4, r2, [r4, 0x6c]");
    0x0005c826 movs r3, 0                                        |     r3 = 0;
    0x0005c828 cmp r4, r2                                        |     
                                                                 |     if (r4 >= r2) {
    0x0005c82a bge 0x5c8c4                                       |         goto label_19;
                                                                 |     }
    0x0005c82c ldr r6, [sp, 0xc]                                 |     r6 = var_ch_3;
    0x0005c82e add.w r1, r4, r4, lsl 2                           |     r1 = r4 + (r4 << 2);
    0x0005c832 adds r0, r4, 1                                    |     r0 = r4 + 1;
    0x0005c834 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0005c838 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x0005c83a ldr r2, [r6, 0x68]                                |     r2 = *((r6 + 0x68));
    0x0005c83c str r0, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r0;
    0x0005c83e movs r0, 8                                        |     r0 = 8;
    0x0005c840 str r0, [r2, r1]                                  |     *((r2 + r1)) = r0;
    0x0005c842 add r2, r1                                        |     r2 += r1;
    0x0005c844 adds r1, r2, 4                                    |     r1 = r2 + 4;
    0x0005c846 vst1.32 {d16}, [r1]                               |     __asm ("vst1.32 {d16}, [r1]");
    0x0005c84a strd r3, r3, [r2, 0xc]                            |     __asm ("strd r3, r3, [r2, 0xc]");
                                                                 | label_10:
    0x0005c84e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005c850 ldr r6, [sp, 0xc]                                 |     r6 = var_ch_3;
    0x0005c852 ldr r2, [sp, 0x10]                                |     r2 = var_10h_2;
    0x0005c854 cmp r3, 0                                         |     
    0x0005c856 strd sb, r5, [sp]                                 |     __asm ("strd sb, r5, [sp]");
    0x0005c85a mov.w r3, 0                                       |     r3 = 0;
    0x0005c85e ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x0005c860 movne r1, 0x14                                    |         r1 = 0x14;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0005c862 moveq r1, 0x17                                    |         r1 = 0x17;
                                                                 |     }
    0x0005c864 mov r0, r6                                        |     r0 = r6;
    0x0005c866 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0005c86a ldr r2, [sp, 0xc]                                 |     r2 = var_ch_3;
    0x0005c86c cmp r4, 0                                         |     
    0x0005c86e str.w r0, [fp, 0x14]                              |     __asm ("str.w r0, [var_bp_14h]");
    0x0005c872 ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x0005c874 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0005c876 it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x0005c878 addlt r4, r3, -1                                  |         r4 = r3 + -1;
                                                                 |     }
    0x0005c87c ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
                                                                 |     if (r2 != 0) {
    0x0005c880 cbnz r2, 0x5c8bc                                  |         goto label_20;
                                                                 |     }
    0x0005c882 ldr r2, [sp, 0xc]                                 |     r2 = var_ch_3;
    0x0005c884 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0005c888 ldr r2, [r2, 0x68]                                |     r2 = *((r2 + 0x68));
    0x0005c88a add.w r2, r2, r4, lsl 2                           |     r2 += (r4 << 2);
    0x0005c88e str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
                                                                 | label_9:
    0x0005c890 str r7, [sp, 0x1c]                                |     var_1ch = r7;
    0x0005c892 movs r4, 0                                        |     r4 = 0;
    0x0005c894 ldrd r7, r6, [sp, 0xc]                            |     __asm ("ldrd r7, r6, [var_ch_3]");
                                                                 |     do {
    0x0005c898 add.w r3, sb, r4                                  |         r3 = sb + r4;
    0x0005c89c mov r2, r6                                        |         r2 = r6;
    0x0005c89e str r3, [sp]                                      |         *(sp) = r3;
    0x0005c8a0 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x0005c8a2 mov r3, r4                                        |         r3 = r4;
    0x0005c8a4 mov r0, r7                                        |         r0 = r7;
    0x0005c8a6 adds r4, 1                                        |         r4++;
    0x0005c8a8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005c8ac cmp r5, r4                                        |         
    0x0005c8ae bne 0x5c898                                       |         
                                                                 |     } while (r5 != r4);
    0x0005c8b0 cmp sl, r4                                        |     
    0x0005c8b2 ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
                                                                 |     if (sl > r4) {
    0x0005c8b4 bgt.w 0x5c6ca                                     |         goto label_7;
                                                                 |     }
                                                                 | label_12:
    0x0005c8b8 mov r2, sb                                        |     r2 = sb;
    0x0005c8ba b 0x5c780                                         |     goto label_8;
                                                                 | label_20:
    0x0005c8bc ldr r2, [pc, 0x14]                                |     
    0x0005c8be add r2, pc                                        |     r2 = 0xb9196;
    0x0005c8c0 str r3, [r2, 0xc]                                 |     *((r2 + 0xc)) = r3;
    0x0005c8c2 b 0x5c890                                         |     goto label_9;
                                                                 | label_19:
    0x0005c8c4 ldr r0, [sp, 0xc]                                 |     r0 = var_ch_3;
    0x0005c8c6 mov r2, r3                                        |     r2 = r3;
    0x0005c8c8 movs r1, 8                                        |     r1 = 8;
    0x0005c8ca str r3, [sp]                                      |     *(sp) = r3;
    0x0005c8cc bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005c8d0 mov r4, r0                                        |     r4 = r0;
    0x0005c8d2 b 0x5c84e                                         |     goto label_10;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5c8d8 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0005c8d8 ()                                          | void fcn_0005c8d8 (int16_t arg_40h, int16_t arg_44h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_2ch;
                                                                     |     int16_t var_7ch;
                                                                     |     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;
    0x0005c8d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005c8dc mov sl, r1                                            |     sl = r1;
    0x0005c8de ldr r1, [pc, 0x1b8]                                   |     
    0x0005c8e0 adds r5, r2, 1                                        |     r5 = r2 + 1;
    0x0005c8e2 mov r6, r0                                            |     r6 = r0;
    0x0005c8e4 sub sp, 0x1c                                          |     
    0x0005c8e6 ldr r2, [pc, 0x1b4]                                   |     r2 = *(0x5ca9e);
    0x0005c8e8 mov fp, r3                                            |     
    0x0005c8ea ldrb.w r0, [sl, 0x30]                                 |     r0 = *((sl + 0x30));
    0x0005c8ec movs r0, r6                                           |     r0 = r6;
    0x0005c8ee add r1, pc                                            |     r1 = 0xb938c;
    0x0005c8f0 ldr r3, [sp, 0x44]                                    |     r3 = *(arg_44h);
    0x0005c8f2 ldr r2, [r1, r2]                                      |     
    0x0005c8f4 cmp r0, r5                                            |     
    0x0005c8f6 ldr.w sb, [sp, 0x40]                                  |     sb = *(arg_40h);
    0x0005c8fa ldr r2, [r2]                                          |     r2 = *(0xb938c);
    0x0005c8fc str r2, [sp, 0x14]                                    |     var_14h = r2;
    0x0005c8fe mov.w r2, 0                                           |     r2 = 0;
    0x0005c900 lsls r0, r0, 8                                        |     r0 <<= 8;
    0x0005c902 str r3, [sp, 8]                                       |     var_8h = r3;
                                                                     |     if (r0 <= r0) {
    0x0005c904 ble 0x5c9ca                                           |         goto label_4;
                                                                     |     }
    0x0005c906 add.w r4, r5, r5, lsl 1                               |     r4 = r5 + (r5 << 1);
    0x0005c90a add.w r4, sl, r4, lsl 5                               |     r4 = sl + (r4 << 5);
    0x0005c90e add.w r4, r4, 0x300                                   |     r4 += 0x300;
                                                                     |     do {
    0x0005c912 ldr r3, [r4, 0x34]                                    |         r3 = *((r4 + 0x34));
    0x0005c914 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0005c916 beq 0x5c9c2                                           |             
    0x0005c918 ldr r2, [r4, 0x50]                                    |             r2 = *((r4 + 0x50));
    0x0005c91a ldrh r3, [r2, 0x2e]                                   |             r3 = *((r2 + 0x2e));
    0x0005c91c cmp r3, 0                                             |             
                                                                     |             if (r3 != 0) {
    0x0005c91e bne 0x5c9c2                                           |                 goto label_5;
                                                                     |             }
    0x0005c920 ldr r3, [r2]                                          |             r3 = *(r2);
    0x0005c922 ldr r1, [r2, 4]                                       |             r1 = *((r2 + 4));
    0x0005c924 ldr r7, [sp, 8]                                       |             r7 = var_8h;
    0x0005c926 and.w r3, sb, r3                                      |             r3 = sb & r3;
    0x0005c92a ands r1, r7                                           |             r1 &= r7;
    0x0005c92c orrs r3, r1                                           |             r3 |= r1;
                                                                     |             if (r3 != r1) {
    0x0005c92e bne 0x5c9c2                                           |                 goto label_5;
                                                                     |             }
    0x0005c930 ldr r3, [r2, 0x28]                                    |             r3 = *((r2 + 0x28));
    0x0005c932 str.w fp, [r4, 0xc]                                   |             __asm ("str.w fp, [r4, 0xc]");
    0x0005c936 ands r3, r3, 0x100                                    |             r3 &= 0x100;
                                                                     |             if (r3 == r3) {
    0x0005c93a beq 0x5c9e4                                           |                 goto label_6;
                                                                     |             }
    0x0005c93c ldr r3, [r2, 0x34]                                    |             r3 = *((r2 + 0x34));
    0x0005c93e ldr r1, [r3]                                          |             r1 = *(r3);
    0x0005c940 ldrb r3, [r6, 0x13]                                   |             r3 = *((r6 + 0x13));
    0x0005c942 cmp r3, 0                                             |             
                                                                     |             if (r3 == 0) {
    0x0005c944 beq.w 0x5ca6a                                         |                 goto label_7;
                                                                     |             }
    0x0005c948 subs r3, 1                                            |             r3--;
    0x0005c94a uxtb r3, r3                                           |             r3 = (int8_t) r3;
    0x0005c94c strb r3, [r6, 0x13]                                   |             *((r6 + 0x13)) = r3;
    0x0005c94e adds r3, 0x26                                         |             r3 += 0x26;
    0x0005c950 ldr.w r3, [r6, r3, lsl 2]                             |             offset_0 = r3 << 2;
                                                                     |             r3 = *((r6 + offset_0));
                                                                     | label_1:
    0x0005c954 str r3, [sp, 4]                                       |             var_4h = r3;
    0x0005c956 movs r3, 0                                            |             r3 = 0;
    0x0005c958 mov r2, r4                                            |             r2 = r4;
    0x0005c95a str r3, [sp]                                          |             *(sp) = r3;
    0x0005c95c mov r0, r6                                            |             r0 = r6;
    0x0005c95e bl 0x5c134                                            |             fcn_0005c134 (r0, r1, r2, r3);
    0x0005c962 ldr.w r8, [r6, 8]                                     |             r8 = *((r6 + 8));
    0x0005c966 ldr.w ip, [r4, 0x34]                                  |             ip = *((r4 + 0x34));
    0x0005c96a ldrd r3, r2, [r8, 0x6c]                               |             __asm ("ldrd r3, r2, [r8, 0x6c]");
    0x0005c96e cmp r3, r2                                            |             
                                                                     |             if (r3 >= r2) {
    0x0005c970 bge 0x5ca72                                           |                 goto label_8;
                                                                     |             }
    0x0005c972 ldr.w r2, [r8, 0x68]                                  |             r2 = *((r8 + 0x68));
    0x0005c976 add.w r1, r3, r3, lsl 2                               |             r1 = r3 + (r3 << 2);
    0x0005c97a add.w lr, r3, 1                                       |             lr = r3 + 1;
    0x0005c97e str.w lr, [r8, 0x6c]                                  |             __asm ("str.w lr, [r8, 0x6c]");
    0x0005c982 add.w lr, r2, r1, lsl 2                               |             lr = r2 + (r1 << 2);
    0x0005c986 strd fp, r0, [lr, 8]                                  |             __asm ("strd fp, r0, [lr, 8]");
    0x0005c98a movs r0, 0                                            |             r0 = 0;
    0x0005c98c str.w r0, [lr, 0x10]                                  |             __asm ("str.w r0, [lr, 0x10]");
    0x0005c990 movs r0, 0x3f                                         |             r0 = 0x3f;
    0x0005c992 str.w ip, [lr, 4]                                     |             __asm ("str.w ip, [lr, 4]");
    0x0005c996 str.w r0, [r2, r1, lsl 2]                             |             __asm ("str.w r0, [r2, r1, lsl 2]");
                                                                     | label_2:
    0x0005c99a ldr.w r2, [r8]                                        |             r2 = *(r8);
    0x0005c99e ldrb.w r2, [r2, 0x57]                                 |             r2 = *((r2 + 0x57));
                                                                     |             if (r2 == 0) {
    0x0005c9a2 cbnz r2, 0x5c9b8                                      |                 
    0x0005c9a4 ldr.w r2, [r8, 0x68]                                  |                 r2 = *((r8 + 0x68));
    0x0005c9a8 add.w r3, r3, r3, lsl 2                               |                 r3 += (r3 << 2);
    0x0005c9ac add.w r3, r2, r3, lsl 2                               |                 r3 = r2 + (r3 << 2);
    0x0005c9b0 movs r2, 0xfd                                         |                 r2 = 0xfd;
    0x0005c9b2 strb r2, [r3, 1]                                      |                 *((r3 + 1)) = r2;
    0x0005c9b4 movs r2, 1                                            |                 r2 = 1;
    0x0005c9b6 str r2, [r3, 0x10]                                    |                 *((r3 + 0x10)) = r2;
                                                                     |             }
                                                                     | label_0:
    0x0005c9b8 movs r3, 0                                            |             r3 = 0;
    0x0005c9ba str r3, [r4, 0x34]                                    |             *((r4 + 0x34)) = r3;
    0x0005c9bc str r3, [r4, 0xc]                                     |             *((r4 + 0xc)) = r3;
    0x0005c9be ldrb.w r0, [sl, 0x30]                                 |             r0 = *((sl + 0x30));
                                                                     |         }
                                                                     | label_5:
    0x0005c9c2 adds r5, 1                                            |         r5++;
    0x0005c9c4 adds r4, 0x60                                         |         r4 += 0x60;
    0x0005c9c6 cmp r0, r5                                            |         
    0x0005c9c8 bgt 0x5c912                                           |         
                                                                     |     } while (r0 > r5);
                                                                     | label_4:
    0x0005c9ca ldr r2, [pc, 0xd4]                                    |     
    0x0005c9cc ldr r3, [pc, 0xcc]                                    |     r3 = *(0x5ca9c);
    0x0005c9ce add r2, pc                                            |     r2 = 0xb9474;
    0x0005c9d0 ldr r3, [r2, r3]                                      |     r3 = *(0xb9474);
    0x0005c9d2 ldr r2, [r3]                                          |     r2 = *(0xb9474);
    0x0005c9d4 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0005c9d6 eors r2, r3                                           |     r2 ^= r3;
    0x0005c9d8 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0005c9dc bne 0x5ca94                                           |         goto label_9;
                                                                     |     }
    0x0005c9de add sp, 0x1c                                          |     
    0x0005c9e0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_6:
    0x0005c9e4 ldrh r7, [r2, 0x18]                                   |     r7 = *((r2 + 0x18));
    0x0005c9e6 add r2, sp, 0x10                                      |     r2 += var_10h;
    0x0005c9e8 mov r1, r4                                            |     r1 = r4;
    0x0005c9ea str r2, [sp]                                          |     *(sp) = r2;
    0x0005c9ec mov r0, r6                                            |     r0 = r6;
    0x0005c9ee mov r2, r3                                            |     r2 = r3;
    0x0005c9f0 bl 0x5c680                                            |     fcn_0005c680 (r0, r1, r2);
    0x0005c9f4 ldr.w r8, [sp, 0x10]                                  |     r8 = var_10h;
    0x0005c9f8 mov r1, r0                                            |     r1 = r0;
    0x0005c9fa str r0, [sp, 0xc]                                     |     var_ch = r0;
    0x0005c9fc mov r2, r7                                            |     r2 = r7;
    0x0005c9fe ldr r0, [r6, 8]                                       |     r0 = *((r6 + 8));
    0x0005ca00 mov r3, r8                                            |     r3 = r8;
    0x0005ca02 bl 0x2b47c                                            |     fcn_0002b47c (r0, r1, r2, r3);
    0x0005ca06 cmp.w r8, 0                                           |     
                                                                     |     if (r8 != 0) {
    0x0005ca0a beq 0x5ca14                                           |         
    0x0005ca0c ldr r0, [r6]                                          |         r0 = *(r6);
    0x0005ca0e mov r1, r8                                            |         r1 = r8;
    0x0005ca10 bl 0x137d0                                            |         fcn_000137d0 (r0, r1);
                                                                     |     }
    0x0005ca14 ldr.w r8, [r6, 8]                                     |     r8 = *((r6 + 8));
    0x0005ca18 ldr r2, [r4, 0x34]                                    |     r2 = *((r4 + 0x34));
    0x0005ca1a ldrd r0, r3, [r8, 0x6c]                               |     __asm ("ldrd r0, r3, [r8, 0x6c]");
    0x0005ca1e cmp r0, r3                                            |     
                                                                     |     if (r0 >= r3) {
    0x0005ca20 bge 0x5ca84                                           |         goto label_10;
                                                                     |     }
    0x0005ca22 ldr.w ip, [r8, 0x68]                                  |     ip = *((r8 + 0x68));
    0x0005ca26 add.w r3, r0, r0, lsl 2                               |     r3 = r0 + (r0 << 2);
    0x0005ca2a adds r1, r0, 1                                        |     r1 = r0 + 1;
    0x0005ca2c str.w r1, [r8, 0x6c]                                  |     __asm ("str.w r1, [r8, 0x6c]");
    0x0005ca30 mov.w lr, 0                                           |     lr = 0;
    0x0005ca34 add.w r1, ip, r3, lsl 2                               |     r1 = ip + (r3 << 2);
    0x0005ca38 str r2, [r1, 4]                                       |     *((r1 + 4)) = r2;
    0x0005ca3a ldr r2, [sp, 0xc]                                     |     r2 = var_ch;
    0x0005ca3c str.w fp, [r1, 8]                                     |     __asm ("str.w fp, [r1, 8]");
    0x0005ca40 strd r2, lr, [r1, 0xc]                                |     __asm ("strd r2, lr, [r1, 0xc]");
    0x0005ca44 movs r2, 0x3f                                         |     r2 = 0x3f;
    0x0005ca46 str.w r2, [ip, r3, lsl 2]                             |     __asm ("str.w r2, [ip, r3, lsl 2]");
                                                                     | label_3:
    0x0005ca4a ldr.w r3, [r8]                                        |     r3 = *(r8);
    0x0005ca4e ldrb.w r3, [r3, 0x57]                                 |     r3 = *((r3 + 0x57));
    0x0005ca52 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005ca54 bne 0x5c9b8                                           |         goto label_0;
                                                                     |     }
    0x0005ca56 ldr.w r3, [r8, 0x68]                                  |     r3 = *((r8 + 0x68));
    0x0005ca5a add.w r0, r0, r0, lsl 2                               |     r0 += (r0 << 2);
    0x0005ca5e movs r2, 0xfd                                         |     r2 = 0xfd;
    0x0005ca60 add.w r3, r3, r0, lsl 2                               |     r3 += (r0 << 2);
    0x0005ca64 str r7, [r3, 0x10]                                    |     *((r3 + 0x10)) = r7;
    0x0005ca66 strb r2, [r3, 1]                                      |     *((r3 + 1)) = r2;
    0x0005ca68 b 0x5c9b8                                             |     goto label_0;
                                                                     | label_7:
    0x0005ca6a ldr r3, [r6, 0x2c]                                    |     r3 = *((r6 + 0x2c));
    0x0005ca6c adds r3, 1                                            |     r3++;
    0x0005ca6e str r3, [r6, 0x2c]                                    |     *((r6 + 0x2c)) = r3;
    0x0005ca70 b 0x5c954                                             |     goto label_1;
                                                                     | label_8:
    0x0005ca72 mov r3, fp                                            |     r3 = fp;
    0x0005ca74 str r0, [sp]                                          |     *(sp) = r0;
    0x0005ca76 mov r2, ip                                            |     r2 = ip;
    0x0005ca78 movs r1, 0x3f                                         |     r1 = 0x3f;
    0x0005ca7a mov r0, r8                                            |     r0 = r8;
    0x0005ca7c bl 0x29a7c                                            |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005ca80 mov r3, r0                                            |     r3 = r0;
    0x0005ca82 b 0x5c99a                                             |     goto label_2;
                                                                     | label_10:
    0x0005ca84 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0005ca86 movs r1, 0x3f                                         |     r1 = 0x3f;
    0x0005ca88 mov r0, r8                                            |     r0 = r8;
    0x0005ca8a str r3, [sp]                                          |     *(sp) = r3;
    0x0005ca8c mov r3, fp                                            |     r3 = fp;
    0x0005ca8e bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005ca92 b 0x5ca4a                                             |     goto label_3;
                                                                     | label_9:
    0x0005ca94 blx 0x9b44                                            |     fcn_00009b44 ();
    0x0005ca98 tst r2, r2                                            |     
    0x0005ca9a movs r4, r0                                           |     r4 = r0;
    0x0005ca9c lsls r0, r1, 0x13                                     |     r0 = r1 << 0x13;
    0x0005ca9e movs r0, r0                                           |     
    0x0005caa0 asrs r2, r6                                           |     r2 >>= r6;
    0x0005caa2 movs r4, r0                                           |     r4 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5caa4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0005caa4 ()                                      | void fcn_0005caa4 (int16_t arg_0h, int16_t arg_4h, int16_t arg_8h, int16_t arg_9h, int16_t arg_ch, int16_t arg_14h, int16_t arg_18h, arithmetic arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int16_t var_14h;
                                                                 |     arithmetic var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_79h;
                                                                 |     int16_t var_7ah;
                                                                 |     int16_t var_7bh;
                                                                 |     int16_t var_7ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0005caa4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0005caa8 mov fp, r1                                        |     
    0x0005caaa vpush {d8}                                        |     __asm ("vpush {d8}");
    0x0005caae sub sp, 0x84                                      |     
    0x0005cab0 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0005cab2 ldr r5, [r1]                                      |     r5 = *(r1);
    0x0005cab4 mov r1, r2                                        |     r1 = r2;
    0x0005cab6 ldr.w r2, [pc, 0xb70]                             |     
    0x0005caba ldr.w r3, [pc, 0xb70]                             |     r3 = *(0x5d62e);
    0x0005cabe str r0, [sp, 0x20]                                |     x = r0;
    0x0005cac0 add r2, pc                                        |     r2 = 0xba0ee;
    0x0005cac2 ldr r3, [r2, r3]                                  |     
    0x0005cac4 ldr r3, [r3]                                      |     r3 = *(0xba0ee);
    0x0005cac6 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x0005cac8 mov.w r3, 0                                       |     r3 = 0;
    0x0005cacc ldr r3, [r5]                                      |     r3 = *(r5);
    0x0005cace str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0005cad0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0005cad2 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0005cad4 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005cad8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005cada bne.w 0x5cc66                                     |         goto label_1;
                                                                 |     }
    0x0005cade add.w r2, r1, r1, lsl 1                           |     r2 = r1 + (r1 << 1);
    0x0005cae2 ldr.w r7, [fp, 0x18]                              |     r7 = *(arg_18h);
    0x0005cae6 add.w r0, r5, 0x1f8                               |     r0 = r5 + 0x1f8;
    0x0005caea lsls r2, r2, 4                                    |     r2 <<= 4;
    0x0005caec str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0005caee ldr r1, [r7, r2]                                  |     r1 = *((r7 + r2));
    0x0005caf0 add r7, r2                                        |     r7 += r2;
    0x0005caf2 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0005caf4 str.w r3, [r5, 0x1f8]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0005caf8 ldr r6, [r1, 0xc]                                 |     r6 = *((r1 + 0xc));
    0x0005cafa str r1, [sp, 0x14]                                |     var_14h = r1;
    0x0005cafc cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005cafe beq.w 0x5cc8a                                     |         goto label_87;
                                                                 |     }
    0x0005cb02 mov r1, r6                                        |     r1 = r6;
    0x0005cb04 bl 0x182e4                                        |     fcn_000182e4 (r0, r1);
    0x0005cb08 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cb0a strd r0, r1, [sp, 0x30]                           |     __asm ("strd r0, r1, [var_30h]");
    0x0005cb0e ldrb.w sl, [r3]                                   |     sl = *(r3);
    0x0005cb12 cmp.w sl, 0x31                                    |     
                                                                 |     if (sl == 0x31) {
    0x0005cb16 beq.w 0x5cc9c                                     |         goto label_88;
                                                                 |     }
                                                                 | label_0:
    0x0005cb1a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cb1c ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0005cb1e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005cb20 beq.w 0x5cd72                                     |         goto label_89;
                                                                 |     }
    0x0005cb24 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0005cb26 bl 0x182e4                                        |     fcn_000182e4 (r0, r1);
                                                                 | label_4:
    0x0005cb2a strd r0, r1, [r7, 0x20]                           |     __asm ("strd r0, r1, [r7, 0x20]");
                                                                 |     if (r6 != 0) {
    0x0005cb2e cbz r6, 0x5cb46                                   |         
    0x0005cb30 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0005cb32 ldr r6, [r3, 4]                                   |         r6 = *((r3 + 4));
    0x0005cb34 tst.w r6, 0x41000                                 |         
                                                                 |         if ((r6 & 0x41000) != 0) {
    0x0005cb38 bne 0x5cb46                                       |             goto label_90;
                                                                 |         }
    0x0005cb3a ldr.w sb, [r3, 0x14]                              |         sb = *((r3 + 0x14));
    0x0005cb3e cmp.w sb, 0                                       |         
                                                                 |         if (sb == 0) {
    0x0005cb42 beq.w 0x5d29e                                     |             goto label_91;
                                                                 |         }
                                                                 |     }
                                                                 | label_90:
    0x0005cb46 ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x0005cb48 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0005cb4a mov r1, r4                                        |     r1 = r4;
    0x0005cb4c bl 0x182e4                                        |     fcn_000182e4 (r0, r1);
    0x0005cb50 ldr r6, [r4, 4]                                   |     r6 = *((r4 + 4));
    0x0005cb52 mov r8, r0                                        |     r8 = r0;
    0x0005cb54 mov sb, r1                                        |     sb = r1;
                                                                 | label_2:
    0x0005cb56 ldr.w r3, [r5, 0x1f8]                             |     r3 = *((r5 + 0x1f8));
                                                                 |     if (r3 != 0) {
    0x0005cb5a cbz r3, 0x5cb64                                   |         
    0x0005cb5c ldrh r3, [r7, 0xa]                                |         r3 = *((r7 + 0xa));
    0x0005cb5e orr r3, r3, 0x1000                                |         r3 |= 0x1000;
    0x0005cb62 strh r3, [r7, 0xa]                                |         *((r7 + 0xa)) = r3;
                                                                 |     }
    0x0005cb64 lsls r3, r6, 0x1e                                 |     r3 = r6 << 0x1e;
                                                                 |     if (r3 != r6) {
    0x0005cb66 bne.w 0x5ccd8                                     |         goto label_92;
                                                                 |     }
                                                                 | label_9:
    0x0005cb6a movs r3, 0                                        |     r3 = 0;
    0x0005cb6c strd r3, r3, [sp, 0x38]                           |     __asm ("strd r3, r3, [var_38h]");
                                                                 | label_3:
    0x0005cb70 sub.w r3, sl, 0x2d                                |     r3 = sl - 0x2d;
    0x0005cb74 vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x0005cb78 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0005cb7a movs r2, 0                                        |     r2 = 0;
    0x0005cb7c strd r8, sb, [r7, 0x28]                           |     __asm ("strd r8, sb, [r7, 0x28]");
    0x0005cb80 cmp r3, 0xc                                       |     
    0x0005cb82 vstr d16, [r7, 0x10]                              |     __asm ("vstr d16, [r7, 0x10]");
    0x0005cb86 strh r2, [r7, 0xc]                                |     *((r7 + 0xc)) = r2;
                                                                 |     if (r3 > 0xc) {
    0x0005cb88 bhi 0x5cc3a                                       |         goto label_93;
                                                                 |     }
    0x0005cb8a movw r2, 0x1f31                                   |     r2 = 0x1f31;
    0x0005cb8e lsr.w r3, r2, r3                                  |     r3 = r2 >> r3;
    0x0005cb92 lsls r4, r3, 0x1f                                 |     r4 = r3 << 0x1f;
                                                                 |     if (r4 >= r3) {
    0x0005cb94 bpl 0x5cc3a                                       |         goto label_93;
                                                                 |     }
    0x0005cb96 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cb98 ldr r5, [r3, 0xc]                                 |     r5 = *((r3 + 0xc));
                                                                 |     if (r5 != 0) {
    0x0005cb9a cbnz r5, 0x5cba2                                  |         goto label_94;
                                                                 |     }
    0x0005cb9c b 0x5cba8                                         |     goto label_95;
                                                                 |     do {
    0x0005cb9e ldr r5, [r5, 0xc]                                 |         r5 = *((r5 + 0xc));
                                                                 |         if (r5 == 0) {
    0x0005cba0 cbz r5, 0x5cba8                                   |             goto label_95;
                                                                 |         }
                                                                 | label_94:
    0x0005cba2 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0005cba4 lsls r0, r3, 0x12                                 |         r0 = r3 << 0x12;
    0x0005cba6 bmi 0x5cb9e                                       |         
                                                                 |     } while (r0 < r3);
                                                                 | label_95:
    0x0005cba8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cbaa ldr r6, [r3, 0x10]                                |     r6 = *((r3 + 0x10));
                                                                 |     if (r6 != 0) {
    0x0005cbac cbnz r6, 0x5cbb4                                  |         goto label_96;
                                                                 |     }
    0x0005cbae b 0x5cbba                                         |     goto label_97;
                                                                 |     do {
    0x0005cbb0 ldr r6, [r6, 0xc]                                 |         r6 = *((r6 + 0xc));
                                                                 |         if (r6 == 0) {
    0x0005cbb2 cbz r6, 0x5cbba                                   |             goto label_97;
                                                                 |         }
                                                                 | label_96:
    0x0005cbb4 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0005cbb6 lsls r1, r3, 0x12                                 |         r1 = r3 << 0x12;
    0x0005cbb8 bmi 0x5cbb0                                       |         
                                                                 |     } while (r1 < r3);
                                                                 | label_97:
    0x0005cbba ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0005cbbc ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0005cbbe ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0005cbc0 ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005cbc2 ands r3, r2                                       |     r3 &= r2;
    0x0005cbc4 ldr r2, [r7, 0x24]                                |     r2 = *((r7 + 0x24));
    0x0005cbc6 ands r2, r1                                       |     r2 &= r1;
    0x0005cbc8 add r1, sp, 0x70                                  |     r1 += var_70h;
    0x0005cbca orrs r3, r2                                       |     r3 |= r2;
    0x0005cbcc str r1, [sp, 0x40]                                |     var_40h = r1;
    0x0005cbce ite eq                                            |     
                                                                 |     if (r3 == r2) {
    0x0005cbd0 movweq r3, 0x3fff                                 |         __asm ("movweq r3, aav.0x000000ff");
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0005cbd4 mov.w r3, 0x800                                   |         r3 = 0x800;
                                                                 |     }
    0x0005cbd8 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0005cbda ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x0005cbdc cmp r3, 0                                         |     
    0x0005cbde ittt gt                                           |     
                                                                 |     if (r3 <= 0) {
    0x0005cbe0 ldrgt r2, [r5, 0x14]                              |         r2 = *((r5 + 0x14));
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0005cbe2 addgt r3, r2, r3, lsl 4                           |         r3 = r2 + (r3 << 4);
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0005cbe4 asrgt r3, r0, 0xc                                 |         __asm ("asrgt r3, r0, 0xc");
                                                                 |     }
    0x0005cbe6 ldr r5, [r3, -0x8]                                |     r5 = *((r3 - 0x8));
    0x0005cbea str r1, [sp]                                      |     *(sp) = r1;
    0x0005cbec ldrd r2, r3, [sp, 0x30]                           |     __asm ("ldrd r2, r3, [var_30h]");
    0x0005cbf0 strd r5, sl, [sp, 4]                              |     __asm ("strd r5, sl, [var_4h]");
    0x0005cbf4 bl 0x34b9c                                        |     fcn_00034b9c (r0, r1, r2, r3, r4, r5);
    0x0005cbf8 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0005cbfa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005cbfc beq.w 0x5d102                                     |         goto label_98;
                                                                 |     }
    0x0005cc00 vldr d16, [sp, 0x70]                              |     __asm ("vldr d16, [sp, 0x70]");
    0x0005cc04 add.w r3, r7, 0x14                                |     r3 = r7 + 0x14;
    0x0005cc08 cmp.w sl, 0x31                                    |     
    0x0005cc0c vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
                                                                 |     if (sl == 0x31) {
    0x0005cc10 beq.w 0x5d972                                     |         goto label_99;
                                                                 |     }
    0x0005cc14 cmp.w sl, 0x32                                    |     
                                                                 |     if (sl == 0x32) {
    0x0005cc18 beq.w 0x5d32a                                     |         goto label_100;
                                                                 |     }
    0x0005cc1c cmp.w sl, 0x2d                                    |     
                                                                 |     if (sl == 0x2d) {
    0x0005cc20 beq.w 0x5d312                                     |         goto label_101;
                                                                 |     }
    0x0005cc24 sub.w r2, sl, 0x35                                |     r2 = sl - 0x35;
    0x0005cc28 movs r3, 2                                        |     r3 = 2;
    0x0005cc2a lsls r3, r2                                       |     r3 <<= r2;
    0x0005cc2c ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005cc2e ands r3, r2                                       |     r3 &= r2;
    0x0005cc30 strh r3, [r7, 0xc]                                |     *((r7 + 0xc)) = r3;
    0x0005cc32 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005cc34 bne.w 0x5d10c                                     |         goto label_10;
                                                                 |     }
    0x0005cc38 b 0x5d12c                                         |     goto label_11;
                                                                 | label_93:
    0x0005cc3a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cc3c ldrb r5, [r3]                                     |     r5 = *(r3);
    0x0005cc3e cmp r5, 0x30                                      |     
                                                                 |     if (r5 != 0x30) {
    0x0005cc40 bne.w 0x5cd76                                     |         goto label_102;
                                                                 |     }
    0x0005cc44 ldrb.w r3, [fp, 8]                                |     r3 = *(arg_8h);
    0x0005cc48 cmp r3, 0x2c                                      |     
                                                                 |     if (r3 == 0x2c) {
    0x0005cc4a beq.w 0x5d98c                                     |         goto label_103;
                                                                 |     }
                                                                 | label_5:
    0x0005cc4e ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005cc52 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005cc54 add r3, r2                                        |     r3 += r2;
                                                                 | label_31:
    0x0005cc56 ldrd r1, r2, [r3, 0x20]                           |     __asm ("ldrd r1, r2, [r3, 0x20]");
    0x0005cc5a ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0005cc5c orrs r1, r0                                       |     r1 |= r0;
    0x0005cc5e ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0005cc60 orrs r2, r0                                       |     r2 |= r0;
    0x0005cc62 strd r1, r2, [r3, 0x20]                           |     __asm ("strd r1, r2, [r3, 0x20]");
                                                                 | label_1:
    0x0005cc66 ldr.w r2, [pc, 0x9c8]                             |     r2 = *(0x0005d630);
    0x0005cc6a ldr.w r3, [pc, 0x9c0]                             |     r3 = *(0x5d62e);
    0x0005cc6e add r2, pc                                        |     r2 += pc;
    0x0005cc70 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0005cc72 ldr r2, [r3]                                      |     r2 = *(0x5d62e);
    0x0005cc74 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x0005cc76 eors r2, r3                                       |     r2 ^= r3;
    0x0005cc78 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0005cc7c bne.w 0x5e4b6                                     |         goto label_104;
                                                                 |     }
    0x0005cc80 add sp, 0x84                                      |     
    0x0005cc82 vpop {d8}                                         |     __asm ("vpop {d8}");
    0x0005cc86 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_87:
    0x0005cc8a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cc8c strd r6, r6, [sp, 0x30]                           |     __asm ("strd r6, r6, [var_30h]");
    0x0005cc90 ldrb.w sl, [r3]                                   |     sl = *(r3);
    0x0005cc94 cmp.w sl, 0x31                                    |     
                                                                 |     if (sl != 0x31) {
    0x0005cc98 bne.w 0x5cb1a                                     |         goto label_0;
                                                                 |     }
                                                                 | label_88:
    0x0005cc9c ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005cc9e mov r1, r3                                        |     r1 = r3;
    0x0005cca0 mov r4, r3                                        |     r4 = r3;
    0x0005cca2 bl 0x20d90                                        |     r0 = fcn_00020d90 (r0, r1);
    0x0005cca6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005cca8 bne 0x5cc66                                       |         goto label_1;
                                                                 |     }
    0x0005ccaa ldr r6, [r4, 4]                                   |     r6 = *((r4 + 4));
    0x0005ccac ldr.w sb, [r4, 0x14]                              |     sb = *((r4 + 0x14));
    0x0005ccb0 lsls r2, r6, 0x13                                 |     r2 = r6 << 0x13;
                                                                 |     if (r2 < r6) {
    0x0005ccb2 bmi.w 0x5da3e                                     |         goto label_105;
                                                                 |     }
    0x0005ccb6 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0005ccba beq.w 0x5d7d0                                     |         goto label_106;
                                                                 |     }
    0x0005ccbe mov r1, sb                                        |     r1 = sb;
    0x0005ccc0 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0005ccc2 bl 0x18150                                        |     fcn_00018150 (r0, r1);
    0x0005ccc6 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005ccc8 orr.w r8, r0, r3                                  |     r8 = r0 | r3;
    0x0005cccc ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005ccce orr.w sb, r1, r3                                  |     sb = r1 | r3;
                                                                 | label_22:
    0x0005ccd2 strd r0, r1, [r7, 0x20]                           |     __asm ("strd r0, r1, [r7, 0x20]");
    0x0005ccd6 b 0x5cb56                                         |     goto label_2;
                                                                 | label_92:
    0x0005ccd8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005ccda and r1, r6, 1                                     |     r1 = r6 & 1;
    0x0005ccde ldr r2, [r3, 0x24]                                |     r2 = *((r3 + 0x24));
    0x0005cce0 ldr.w r3, [r5, 0x200]                             |     r3 = *((r5 + 0x200));
    0x0005cce4 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0005cce6 beq.w 0x5d514                                     |         goto label_107;
                                                                 |     }
    0x0005ccea ldr.w r0, [r5, 0x1fc]                             |     r0 = *((r5 + 0x1fc));
    0x0005ccee cmp r0, 1                                         |     
                                                                 |     if (r0 <= 1) {
    0x0005ccf0 ble.w 0x5d2c8                                     |         goto label_108;
                                                                 |     }
    0x0005ccf4 add.w r5, r5, 0x200                               |     r5 += 0x200;
    0x0005ccf8 movs r3, 1                                        |     r3 = 1;
    0x0005ccfa b 0x5cd04                                         |     
                                                                 |     while (r2 != r4) {
    0x0005ccfc adds r3, 1                                        |         r3++;
    0x0005ccfe cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x0005cd00 beq.w 0x5d2c8                                     |             goto label_108;
                                                                 |         }
    0x0005cd04 ldr r4, [r5, 4]!                                  |         r4 = *((r5 += 4));
    0x0005cd08 cmp r2, r4                                        |         
    0x0005cd0a bne 0x5ccfc                                       |         
                                                                 |     }
    0x0005cd0c movs r5, 1                                        |     r5 = 1;
    0x0005cd0e sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0005cd12 rsb.w r0, r3, 0x20                                |     r0 = 0x20 - r3;
    0x0005cd16 lsl.w r2, r5, r2                                  |     r2 = r5 << r2;
    0x0005cd1a lsr.w r0, r5, r0                                  |     r0 = r5 >> r0;
    0x0005cd1e lsl.w r3, r5, r3                                  |     r3 = r5 << r3;
    0x0005cd20 ssat r3, 3, r3, lsl 0x10                          |     __asm ("ssat r3, 3, r3, lsl 0x10");
                                                                 | label_17:
    0x0005cd24 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005cd26 beq.w 0x5d51a                                     |         goto label_109;
                                                                 |     }
    0x0005cd2a orr.w r8, r8, r3                                  |     r8 |= r3;
    0x0005cd2e orr.w sb, sb, r2                                  |     sb |= r2;
    0x0005cd32 lsr.w r1, r8, 1                                   |     r1 = r8 >> 1;
    0x0005cd36 subs r4, r3, 1                                    |     r4 = r3 - 1;
    0x0005cd38 lsr.w r0, sb, 1                                   |     r0 = sb >> 1;
    0x0005cd3c str r4, [sp, 0x38]                                |     var_38h = r4;
    0x0005cd3e orr.w r1, r1, sb, lsl 31                          |     r1 |= (sb << 31);
    0x0005cd42 adc r4, r2, -1                                    |     __asm ("adc r4, r2, -1");
    0x0005cd46 str r4, [sp, 0x3c]                                |     var_3ch = r4;
    0x0005cd48 cmp r1, r3                                        |     
    0x0005cd4a sbcs r0, r2                                       |     __asm ("sbcs r0, r2");
                                                                 |     if (r1 <= r3) {
    0x0005cd4c blo.w 0x5cb70                                     |         goto label_3;
                                                                 |     }
                                                                 | label_8:
    0x0005cd50 ldr.w r2, [pc, 0x8e0]                             |     
    0x0005cd54 ldr.w r3, [pc, 0x8d4]                             |     r3 = *(0x5d62c);
    0x0005cd58 add r2, pc                                        |     r2 = 0xba390;
    0x0005cd5a ldr r3, [r2, r3]                                  |     r3 = *(0xba390);
    0x0005cd5c ldr r2, [r3]                                      |     r2 = *(0xba390);
    0x0005cd5e ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x0005cd60 eors r2, r3                                       |     r2 ^= r3;
    0x0005cd62 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0005cd66 bne.w 0x5e4b6                                     |         goto label_104;
                                                                 |     }
    0x0005cd6a ldr.w r1, [pc, 0x8cc]                             |     r1 = *(0x0005d638);
    0x0005cd6e add r1, pc                                        |     r1 += pc;
    0x0005cd70 b 0x5d2f8                                         |     goto label_110;
                                                                 | label_89:
    0x0005cd72 mov r0, r1                                        |     r0 = r1;
    0x0005cd74 b 0x5cb2a                                         |     goto label_4;
                                                                 | label_102:
    0x0005cd76 cmp r5, 0x2b                                      |     
                                                                 |     if (r5 == 0x2b) {
    0x0005cd78 beq.w 0x5d53a                                     |         goto label_111;
                                                                 |     }
    0x0005cd7c cmp r5, 0x33                                      |     
                                                                 |     if (r5 == 0x33) {
    0x0005cd7e beq.w 0x5d384                                     |         goto label_112;
                                                                 |     }
    0x0005cd82 cmp r5, 0xac                                      |     
    0x0005cd84 ldrb.w r0, [fp, 8]                                |     r0 = *(arg_8h);
                                                                 |     if (r5 != 0xac) {
    0x0005cd88 bne.w 0x5d406                                     |         goto label_113;
                                                                 |     }
    0x0005cd8c cmp r0, 0x2c                                      |     
                                                                 |     if (r0 != 0x2c) {
    0x0005cd8e bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005cd92 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cd94 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0005cd96 ldr.w sb, [r3, 0x14]                              |     sb = *((r3 + 0x14));
    0x0005cd9a ldr r0, [r2]                                      |     r0 = *(r2);
    0x0005cd9c str r0, [sp, 0x34]                                |     var_34h = r0;
    0x0005cd9e cmp.w sb, 0                                       |     
    0x0005cda0 lsrs r0, r0, 0x1c                                 |     r0 >>= 0x1c;
                                                                 |     if (r0 == r0) {
    0x0005cda2 beq.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005cda6 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0005cda8 movs r5, 0                                        |     r5 = 0;
    0x0005cdaa ldr.w r6, [sb]                                    |     r6 = *(sb);
    0x0005cdae str r5, [sp]                                      |     *(sp) = r5;
    0x0005cdb0 mov r1, r3                                        |     r1 = r3;
    0x0005cdb2 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0005cdb4 mov r2, r6                                        |     r2 = r6;
    0x0005cdb6 movs r3, 1                                        |     r3 = 1;
    0x0005cdb8 bl 0x33454                                        |     r0 = fcn_00033454 (r0, r1, r2, r3, r4, r5);
    0x0005cdbc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005cdbe beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005cdc0 strh r6, [r3, 0x18]                               |     *((r3 + 0x18)) = r6;
    0x0005cdc2 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0005cdc4 lsls r2, r3, 0x1d                                 |     r2 = r3 << 0x1d;
                                                                 |     if (r2 >= r3) {
    0x0005cdc6 bpl.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005cdca ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
    0x0005cdcc cmp r6, 2                                         |     
    0x0005cdce ldrh r1, [r2]                                     |     r1 = *(r2);
    0x0005cdd0 ldrb r2, [r2, 2]                                  |     r2 = *((r2 + 2));
    0x0005cdd2 strh.w r1, [sp, 0x78]                             |     var_78h = r1;
    0x0005cdd6 strb.w r2, [sp, 0x7a]                             |     var_7ah = r2;
                                                                 |     if (r6 <= 2) {
    0x0005cdda ble.w 0x5e1a6                                     |         goto label_114;
                                                                 |     }
    0x0005cdde ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005cde0 ldr.w sb, [r0, 0x14]                              |     sb = *((r0 + 0x14));
    0x0005cde4 ldr.w r2, [sb, 0x28]                              |     r2 = *((sb + 0x28));
    0x0005cde8 ldrb r1, [r2]                                     |     r1 = *(r2);
    0x0005cdea cmp r1, 0x75                                      |     
    0x0005cdec itt ne                                            |     
                                                                 |     if (r1 == 0x75) {
    0x0005cdee ldrbne r5, [r0]                                   |         r5 = *(r0);
                                                                 |     }
                                                                 |     if (r1 == 0x75) {
    0x0005cdf0 ldrbne r0, [fp, 8]                                |         r0 = *(arg_8h);
                                                                 |     }
                                                                 |     if (r1 != 0x75) {
    0x0005cdf4 bne.w 0x5d406                                     |         goto label_113;
                                                                 |     }
    0x0005cdf8 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0005cdfa ldrb.w sl, [r2]                                   |     sl = *(r2);
    0x0005cdfe cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0005ce02 beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005ce06 ldrb r2, [r2, 1]                                  |     r2 = *((r2 + 1));
    0x0005ce08 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005ce0a bne.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005ce0e ldrb.w r2, [sp, 0x78]                             |     r2 = var_78h;
    0x0005ce12 cmp r2, sl                                        |     
                                                                 |     if (r2 == sl) {
    0x0005ce14 beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005ce18 ldrb.w r2, [sp, 0x79]                             |     r2 = var_79h;
    0x0005ce1c cmp r2, sl                                        |     
                                                                 |     if (r2 == sl) {
    0x0005ce1e beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
                                                                 | label_56:
    0x0005ce22 and r3, r3, 8                                     |     r3 &= 8;
    0x0005ce26 ldr.w r5, [sb, 8]                                 |     r5 = *((sb + 8));
    0x0005ce2a str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0005ce2c ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0005ce30 strb.w sl, [sp, 0x7b]                             |     var_7bh = sl;
    0x0005ce34 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 |     if (r5 != 0) {
    0x0005ce36 cbnz r5, 0x5ce44                                  |         goto label_115;
                                                                 |     }
    0x0005ce38 b.w 0x5e62a                                       |     goto label_116;
                                                                 |     do {
    0x0005ce3c ldr r5, [r5, 0xc]                                 |         r5 = *((r5 + 0xc));
    0x0005ce3e cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0005ce40 beq.w 0x5e62a                                     |             goto label_116;
                                                                 |         }
                                                                 | label_115:
    0x0005ce44 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0005ce46 ands r3, r3, 0x2000                               |         r3 &= 0x2000;
    0x0005ce4a bne 0x5ce3c                                       |         
                                                                 |     } while (r3 != r3);
    0x0005ce4c mov r6, r3                                        |     r6 = r3;
    0x0005ce4e ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0005ce50 cmp r3, 0x9c                                      |     
    0x0005ce52 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 |     if (r3 == 0x9c) {
    0x0005ce54 beq.w 0x5e10e                                     |         goto label_117;
                                                                 |     }
    0x0005ce58 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0005ce5a cmp r3, 0x75                                      |     
                                                                 |     if (r3 != 0x75) {
    0x0005ce5c bne.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005ce60 ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x0005ce62 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005ce64 beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005ce68 ldrb.w sb, [r0]                                   |     sb = *(r0);
    0x0005ce6c cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0005ce70 beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005ce74 str r6, [sp, 0x30]                                |     var_30h = r6;
                                                                 | label_77:
    0x0005ce76 ldrb.w r1, [sp, 0x78]                             |     r1 = var_78h;
    0x0005ce7a mov r3, sb                                        |     r3 = sb;
    0x0005ce7c ldrb.w lr, [sp, 0x79]                             |     lr = var_79h;
    0x0005ce80 mov.w r8, 0                                       |     r8 = 0;
    0x0005ce84 ldrb.w ip, [sp, 0x7a]                             |     ip = var_7ah;
    0x0005ce88 b 0x5ce96                                         |     
                                                                 |     while (sl != r3) {
                                                                 | label_53:
    0x0005ce8a ldrb.w r3, [r0, r8]                               |         r3 = *((r0 + r8));
    0x0005ce8e mov r6, r8                                        |         r6 = r8;
    0x0005ce90 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005ce92 beq.w 0x5e560                                     |             goto label_118;
                                                                 |         }
    0x0005ce96 cmp r1, r3                                        |         
                                                                 |         if (r1 == r3) {
    0x0005ce98 beq.w 0x5e1b2                                     |             goto label_119;
                                                                 |         }
    0x0005ce9c cmp lr, r3                                        |         
                                                                 |         if (lr == r3) {
    0x0005ce9e beq.w 0x5e1b2                                     |             goto label_119;
                                                                 |         }
    0x0005cea2 cmp ip, r3                                        |         
                                                                 |         if (ip == r3) {
    0x0005cea4 beq.w 0x5e1b2                                     |             goto label_119;
                                                                 |         }
    0x0005cea8 cmp sl, r3                                        |         
    0x0005ceaa add.w r2, r8, 1                                   |         r2 = r8 + 1;
    0x0005ceae it ne                                             |         
                                                                 |         if (sl == r3) {
    0x0005ceb0 movne r8, r2                                      |             r8 = r2;
                                                                 |         }
    0x0005ceb2 bne 0x5ce8a                                       |         
                                                                 |     }
    0x0005ceb4 ldrb r3, [r0, r2]                                 |     r3 = *((r0 + r2));
    0x0005ceb6 mov r6, r2                                        |     r6 = r2;
    0x0005ceb8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005ceba bne.w 0x5e0ec                                     |         goto label_120;
                                                                 |     }
                                                                 | label_79:
    0x0005cebe mov r8, r2                                        |     r8 = r2;
    0x0005cec0 movs r3, 0                                        |     r3 = 0;
                                                                 | label_57:
    0x0005cec2 adds r2, r0, r6                                   |     r2 = r0 + r6;
    0x0005cec4 ldrb ip, [r2, -0x1]                               |     ip = *((r2 - 0x1));
    0x0005cec8 cmp.w ip, 0xff                                    |     
                                                                 |     if (ip == 0xff) {
    0x0005cecc beq.w 0x5e1ba                                     |         goto label_74;
                                                                 |     }
    0x0005ced0 cmp.w r8, 1                                       |     
                                                                 |     if (r8 == 1) {
    0x0005ced4 beq.w 0x5e494                                     |         goto label_121;
                                                                 |     }
                                                                 | label_73:
    0x0005ced8 cmp r1, r3                                        |     
    0x0005ceda ite eq                                            |     
                                                                 |     if (r1 != r3) {
    0x0005cedc ldrbeq r3, [r2, 1]                                |         r3 = *((r2 + 1));
                                                                 |     }
                                                                 |     if (r1 == r3) {
    0x0005cede movne r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x0005cee0 str r0, [sp, 0x68]                                |     var_68h = r0;
    0x0005cee2 itt eq                                            |     
                                                                 |     if (r1 == r3) {
    0x0005cee4 clzeq r4, r3                                      |         __asm ("clzeq r4, r3");
                                                                 |     }
                                                                 |     if (r1 == r3) {
    0x0005cee8 lsrs r4, r4, 5                                    |         r4 >>= 5;
                                                                 |     }
    0x0005ceea blx 0x9e8c                                        |     fcn_00009e8c ();
    0x0005ceee add r3, sp, 0x68                                  |     r3 += var_68h;
    0x0005cef0 bic r0, r0, 0xc0000000                            |     r0 = BIT_MASK (r0, 0xc0000000);
    0x0005cef4 mov r2, r3                                        |     r2 = r3;
    0x0005cef6 str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0005cef8 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0005cefa movs r1, 0x75                                     |     r1 = 0x75;
    0x0005cefc ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0005cefe movs r3, 0                                        |     r3 = 0;
    0x0005cf00 bl 0x1db90                                        |     r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x0005cf04 mov sb, r0                                        |     sb = r0;
    0x0005cf06 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005cf08 beq 0x5cf8c                                       |         goto label_76;
                                                                 |     }
    0x0005cf0a ldr r0, [r0, 8]                                   |     r0 = *((r0 + 8));
    0x0005cf0c movs r3, 0                                        |     r3 = 0;
    0x0005cf0e strb r3, [r0, r6]                                 |     *((r0 + r6)) = r3;
    0x0005cf10 mov r6, r0                                        |     r6 = r0;
    0x0005cf12 str r0, [sp, 0x44]                                |     var_44h = r0;
    0x0005cf14 b 0x5cf18                                         |     
                                                                 |     while (r8 > r3) {
    0x0005cf16 mov r6, r2                                        |         r6 = r2;
    0x0005cf18 ldrb r1, [r0, r3]                                 |         r1 = *((r0 + r3));
    0x0005cf1a mov r2, r6                                        |         r2 = r6;
    0x0005cf1c cmp sl, r1                                        |         
    0x0005cf1e itt eq                                            |         
                                                                 |         if (sl != r1) {
    0x0005cf20 addeq r3, 1                                       |             r3++;
                                                                 |         }
                                                                 |         if (sl != r1) {
    0x0005cf22 ldrbeq r1, [r0, r3]                               |             r1 = *((r0 + r3));
                                                                 |         }
    0x0005cf24 adds r3, 1                                        |         r3++;
    0x0005cf26 cmp r8, r3                                        |         
    0x0005cf28 strb r1, [r2], 1                                  |         *(r2) = r1;
                                                                 |         r2++;
    0x0005cf2c bgt 0x5cf16                                       |         
                                                                 |     }
    0x0005cf2e ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005cf30 mov r3, r6                                        |     r3 = r6;
    0x0005cf32 str r6, [sp, 0x54]                                |     var_54h = r6;
    0x0005cf34 rsb.w r6, r2, 1                                   |     r6 = 1 - r2;
    0x0005cf38 add r6, r3                                        |     r6 += r3;
    0x0005cf3a movs r3, 0                                        |     r3 = 0;
    0x0005cf3c strb r3, [r2, r6]                                 |     *((r2 + r6)) = r3;
    0x0005cf3e ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005cf40 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0005cf42 cmp r3, 0xa7                                      |     
                                                                 |     if (r3 == 0xa7) {
    0x0005cf44 beq.w 0x5e4f8                                     |         goto label_122;
                                                                 |     }
                                                                 | label_75:
    0x0005cf48 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0005cf4a movs r3, 1                                        |     r3 = 1;
    0x0005cf4c ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0005cf4e mov r2, r6                                        |     r2 = r6;
    0x0005cf50 bl 0xa5b8                                         |     r0 = fcn_0000a5b8 (r0, r1, r2, r3);
    0x0005cf54 cmp r0, 0                                         |     
                                                                 |     if (r0 > 0) {
    0x0005cf56 bgt.w 0x5e49c                                     |         goto label_123;
                                                                 |     }
    0x0005cf5a cmp r6, 1                                         |     
                                                                 |     if (r6 == 1) {
    0x0005cf5c bne 0x5cf68                                       |         
    0x0005cf5e ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x0005cf60 ldrb r3, [r3]                                     |         r3 = *(r3);
    0x0005cf62 cmp r3, 0x2d                                      |         
                                                                 |         if (r3 == 0x2d) {
    0x0005cf64 beq.w 0x5e49c                                     |             goto label_123;
                                                                 |         }
                                                                 |     }
    0x0005cf68 mov r2, r6                                        |     r2 = r6;
    0x0005cf6a ldr r6, [sp, 0x54]                                |     r6 = var_54h;
    0x0005cf6c movs r3, 1                                        |     r3 = 1;
    0x0005cf6e ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0005cf70 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0005cf72 ldrb.w r8, [r6]                                   |     r8 = *(r6);
    0x0005cf76 add.w ip, r8, r3                                  |     
    0x0005cf7a strb.w ip, [r6]                                   |     *(r6) = ip;
    0x0005cf7e bl 0xa5b8                                         |     r0 = fcn_0000a5b8 (r0, r1, r2, r3);
    0x0005cf80 smlabb r8, fp, r0, r2                             |     __asm ("smlabb r8, fp, r0, r2");
    0x0005cf84 strb.w r8, [r6]                                   |     *(r6) = r8;
                                                                 |     if (r3 > 1) {
    0x0005cf88 bgt.w 0x5e49c                                     |         goto label_123;
                                                                 |     }
                                                                 | label_76:
    0x0005cf8c ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0005cf8e cmp r3, 0x9c                                      |     
                                                                 |     if (r3 == 0x9c) {
    0x0005cf90 beq.w 0x5e56c                                     |         goto label_124;
                                                                 |     }
                                                                 | label_81:
    0x0005cf94 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
                                                                 |     if (r3 != 0) {
    0x0005cf96 cbz r3, 0x5cfbe                                   |         
    0x0005cf98 movs r5, 1                                        |         r5 = 1;
                                                                 | label_55:
    0x0005cf9a ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x0005cf9c ldrh r3, [r2, 0x10]                               |         r3 = *((r2 + 0x10));
    0x0005cf9e tst.w r3, 0x9000                                  |         
                                                                 |         if ((r3 & 0x9000) == 0) {
    0x0005cfa2 bne 0x5cfa8                                       |             
    0x0005cfa4 ldr r3, [r2, 0x18]                                |             r3 = *((r2 + 0x18));
                                                                 |             if (r3 == 0) {
    0x0005cfa6 cbz r3, 0x5cfae                                   |                 goto label_125;
                                                                 |             }
                                                                 |         }
    0x0005cfa8 ldr r0, [sp, 0x30]                                |         r0 = var_30h;
    0x0005cfaa bl 0x13c18                                        |         fcn_00013c18 (r0);
                                                                 | label_125:
    0x0005cfae ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0005cfb0 ldr r0, [r3, 0x14]                                |         r0 = *((r3 + 0x14));
    0x0005cfb2 mov r1, r3                                        |         r1 = r3;
    0x0005cfb4 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x0005cfb8 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0005cfba beq.w 0x5d3fe                                     |             goto label_28;
                                                                 |         }
                                                                 |     }
    0x0005cfbe ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005cfc0 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0005cfc2 ldr.w r8, [r3, 0x18]                              |     r8 = *((r3 + 0x18));
    0x0005cfc4 strh r0, [r3]                                     |     *(r3) = r0;
    0x0005cfc6 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0005cfca beq.w 0x5e566                                     |         goto label_126;
                                                                 |     }
    0x0005cfce movs r3, 0                                        |     r3 = 0;
    0x0005cfd0 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0005cfd2 mov r1, sb                                        |     r1 = sb;
    0x0005cfd4 mov r2, r3                                        |     r2 = r3;
    0x0005cfd6 bl 0x2dd00                                        |     r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005cfda mov r6, r0                                        |     r6 = r0;
                                                                 | label_80:
    0x0005cfdc ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0005cfde cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005cfe0 beq.w 0x5e0ca                                     |         goto label_127;
                                                                 |     }
    0x0005cfe4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005cfe6 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 == 0) {
    0x0005cfea cbnz r3, 0x5d008                                  |         
    0x0005cfec ldr r5, [r6, 8]                                   |         r5 = *((r6 + 8));
    0x0005cfee cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0005cff0 beq.w 0x5e484                                     |             goto label_128;
                                                                 |         }
    0x0005cff4 mov r0, r5                                        |         r0 = r5;
    0x0005cff6 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x0005cffa bic r3, r0, 0xc0000000                            |         r3 = BIT_MASK (r0, 0xc0000000);
    0x0005cffe subs r3, 1                                        |         r3--;
    0x0005d000 ldrb r2, [r5, r3]                                 |         r2 = *((r5 + r3));
    0x0005d002 add r3, r5                                        |         r3 += r5;
                                                                 | label_72:
    0x0005d004 adds r2, 1                                        |         r2++;
    0x0005d006 strb r2, [r3]                                     |         *(r3) = r2;
                                                                 |     }
    0x0005d008 ldr.w r3, [pc, 0x630]                             |     
    0x0005d00c add r3, pc                                        |     r3 = 0xba64c;
    0x0005d00e addw r7, r3, 0xeec                                |     __asm ("addw r7, r3, aav.0x000000ff");
                                                                 | label_52:
    0x0005d012 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0005d016 beq.w 0x5e1c4                                     |         goto label_129;
                                                                 |     }
    0x0005d01a movs r3, 0                                        |     r3 = 0;
    0x0005d01c mov r1, r8                                        |     r1 = r8;
    0x0005d01e mov r2, r3                                        |     r2 = r3;
    0x0005d020 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0005d022 bl 0x2dd00                                        |     fcn_0002dd00 (r0, r1, r2, r3);
    0x0005d026 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x0005d028 mov r1, r0                                        |     r1 = r0;
    0x0005d02a mov r2, r7                                        |     r2 = r7;
    0x0005d02c mov r0, r5                                        |     r0 = r5;
    0x0005d02e bl 0x1dd3c                                        |     fcn_0001dd3c (r0, r1, r2);
    0x0005d032 movs r1, 0x39                                     |     r1 = 0x39;
    0x0005d034 mov r2, r0                                        |     r2 = r0;
    0x0005d036 mov r3, sb                                        |     r3 = sb;
    0x0005d038 mov r0, r5                                        |     r0 = r5;
    0x0005d03a bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005d03e mov r1, r0                                        |     r1 = r0;
    0x0005d040 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d042 beq.w 0x5e0f4                                     |         goto label_130;
                                                                 |     }
    0x0005d046 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d048 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005d04a ands r3, r3, 3                                    |     r3 &= 3;
                                                                 |     if (r3 == r3) {
    0x0005d04e beq.w 0x5e0f4                                     |         goto label_130;
                                                                 |     }
                                                                 | label_59:
    0x0005d052 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0005d054 mov r0, fp                                        |     r0 = fp;
    0x0005d056 orrs r2, r3                                       |     r2 |= r3;
    0x0005d058 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d05a str r2, [r1, 4]                                   |     *((r1 + 4)) = r2;
    0x0005d05c movw r2, 0x103                                    |     r2 = 0x103;
    0x0005d060 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0005d062 str r3, [r1, 0x24]                                |     *((r1 + 0x24)) = r3;
    0x0005d064 bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x0005d068 mov r1, fp                                        |     r1 = fp;
    0x0005d06a mov r5, r0                                        |     r5 = r0;
    0x0005d06c mov r2, r0                                        |     r2 = r0;
    0x0005d06e ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005d070 bl 0x5caa4                                        |     fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005d074 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0005d078 beq 0x5d088                                       |         
                                                                 | label_54:
    0x0005d07a movs r3, 0                                        |         r3 = 0;
    0x0005d07c mov r1, r8                                        |         r1 = r8;
    0x0005d07e ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0005d080 mov r2, r3                                        |         r2 = r3;
    0x0005d082 bl 0x2dd00                                        |         r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005d086 mov r8, r0                                        |         r8 = r0;
                                                                 |     }
                                                                 | label_60:
    0x0005d088 mov r2, r7                                        |     r2 = r7;
    0x0005d08a ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x0005d08c mov r1, r8                                        |     r1 = r8;
    0x0005d08e mov r0, r7                                        |     r0 = r7;
    0x0005d090 bl 0x1dd3c                                        |     fcn_0001dd3c (r0, r1, r2);
    0x0005d094 movs r1, 0x38                                     |     r1 = 0x38;
    0x0005d096 mov r2, r0                                        |     r2 = r0;
    0x0005d098 mov r3, r6                                        |     r3 = r6;
    0x0005d09a mov r0, r7                                        |     r0 = r7;
    0x0005d09c bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005d0a0 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r0 != 0) {
    0x0005d0a2 cbz r0, 0x5d0b8                                   |         
    0x0005d0a4 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0005d0a6 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x0005d0a8 ands r3, r3, 3                                    |         r3 &= 3;
                                                                 |         if (r3 == r3) {
    0x0005d0ac beq 0x5d0b8                                       |             goto label_131;
                                                                 |         }
    0x0005d0ae ldr r2, [r1, 4]                                   |         r2 = *((r1 + 4));
    0x0005d0b0 orrs r2, r3                                       |         r2 |= r3;
    0x0005d0b2 ldr r3, [r0, 0x24]                                |         r3 = *((r0 + 0x24));
    0x0005d0b4 str r2, [r1, 4]                                   |         *((r1 + 4)) = r2;
    0x0005d0b6 str r3, [r1, 0x24]                                |         *((r1 + 0x24)) = r3;
                                                                 |     }
                                                                 | label_131:
    0x0005d0b8 movw r2, 0x103                                    |     r2 = 0x103;
    0x0005d0bc mov r0, fp                                        |     r0 = fp;
    0x0005d0be bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x0005d0c2 mov r1, fp                                        |     r1 = fp;
    0x0005d0c4 mov r2, r0                                        |     r2 = r0;
    0x0005d0c6 mov r6, r0                                        |     r6 = r0;
    0x0005d0c8 ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005d0ca bl 0x5caa4                                        |     fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005d0ce ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005d0d2 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005d0d4 adds r7, r3, r2                                   |     r7 = r3 + r2;
    0x0005d0d6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0005d0d8 beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005d0dc add.w r2, r5, r5, lsl 1                           |     r2 = r5 + (r5 << 1);
    0x0005d0e0 ldrsh.w r1, [r7, 8]                               |     r1 = *((r7 + 8));
    0x0005d0e4 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0005d0e6 add.w r6, r6, r6, lsl 1                           |     r6 += (r6 << 1);
    0x0005d0ea add.w r2, r3, r2, lsl 4                           |     r2 = r3 + (r2 << 4);
    0x0005d0ee add.w r3, r3, r6, lsl 4                           |     r3 += (r6 << 4);
    0x0005d0f2 str r0, [r2, 0x10]                                |     *((r2 + 0x10)) = r0;
    0x0005d0f4 strh r1, [r2, 8]                                  |     *((r2 + 8)) = r1;
    0x0005d0f6 ldrb r2, [r7, 0xe]                                |     r2 = *((r7 + 0xe));
    0x0005d0f8 strh r1, [r3, 8]                                  |     *((r3 + 8)) = r1;
    0x0005d0fa str r0, [r3, 0x10]                                |     *((r3 + 0x10)) = r0;
    0x0005d0fc adds r3, r2, 2                                    |     r3 = r2 + 2;
    0x0005d0fe strb r3, [r7, 0xe]                                |     *((r7 + 0xe)) = r3;
    0x0005d100 b 0x5d3fe                                         |     goto label_28;
                                                                 | label_98:
    0x0005d102 cmp.w sl, 0x2d                                    |     
                                                                 |     if (sl == 0x2d) {
    0x0005d106 beq.w 0x5d31a                                     |         goto label_132;
                                                                 |     }
                                                                 |     if (r6 != 0) {
    0x0005d10a cbz r6, 0x5d124                                   |         
                                                                 | label_10:
    0x0005d10c ldrd r2, r3, [r7, 0x20]                           |         __asm ("ldrd r2, r3, [r7, 0x20]");
    0x0005d110 ldr r0, [sp, 0x20]                                |         r0 = x;
    0x0005d112 stm.w sp, {r1, r6, sl}                            |         *(sp) = r1;
                                                                 |         *((sp + 4)) = r6;
                                                                 |         *((sp + 8)) = sl;
    0x0005d116 bl 0x34b9c                                        |         r0 = fcn_00034b9c (r0, r1, r2, r3, r4, r5);
                                                                 |         if (r0 == 0) {
    0x0005d11a cbz r0, 0x5d124                                   |             goto label_133;
                                                                 |         }
    0x0005d11c ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0005d11e lsls r2, r3, 0x1a                                 |         r2 = r3 << 0x1a;
                                                                 |         if (r2 >= r3) {
    0x0005d120 bpl.w 0x5d76e                                     |             goto label_134;
                                                                 |         }
                                                                 |     }
                                                                 | label_133:
    0x0005d124 cmp.w sl, 0x32                                    |     
                                                                 |     if (sl == 0x32) {
    0x0005d128 beq.w 0x5d34c                                     |         goto label_135;
                                                                 |     }
                                                                 | label_11:
    0x0005d12c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 | label_12:
    0x0005d12e ldrb r5, [r3]                                     |     r5 = *(r3);
    0x0005d130 sub.w r3, r5, 0x2d                                |     r3 = r5 - 0x2d;
    0x0005d134 and r3, r3, 0xf7                                  |     r3 &= 0xf7;
                                                                 | label_26:
    0x0005d138 ldrb.w r0, [fp, 8]                                |     r0 = *(arg_8h);
                                                                 | label_13:
    0x0005d13c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005d13e bne.w 0x5d2ac                                     |         goto label_136;
                                                                 |     }
    0x0005d142 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d144 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0005d146 ldrb r6, [r2]                                     |     r6 = *(r2);
    0x0005d148 mov r1, r2                                        |     r1 = r2;
    0x0005d14a cmp r6, 0xb0                                      |     
    0x0005d14c ite eq                                            |     
                                                                 |     if (r6 != 0xb0) {
    0x0005d14e ldrbeq r3, [r2, 2]                                |         r3 = *((r2 + 2));
                                                                 |     }
                                                                 |     if (r6 == 0xb0) {
    0x0005d150 movne r3, r6                                      |         r3 = r6;
                                                                 |     }
    0x0005d152 cmp r3, 0xb1                                      |     
                                                                 |     if (r3 == 0xb1) {
    0x0005d154 beq.w 0x5d532                                     |         goto label_137;
                                                                 |     }
    0x0005d158 cmp r3, 0x8a                                      |     
                                                                 |     if (r3 == 0x8a) {
    0x0005d15a beq.w 0x5d410                                     |         goto label_138;
                                                                 |     }
                                                                 | label_14:
    0x0005d15e cmp r5, 0x31                                      |     
                                                                 |     if (r5 == 0x31) {
    0x0005d160 beq.w 0x5d2b2                                     |         goto label_139;
                                                                 |     }
    0x0005d164 cmp r0, 0x2c                                      |     
                                                                 |     if (r0 != 0x2c) {
    0x0005d166 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_16:
    0x0005d16a cmp r5, 0xab                                      |     
    0x0005d16c it ne                                             |     
                                                                 |     if (r5 != 0xab) {
    0x0005d16e cmpne r5, 0x34                                    |         __asm ("cmpne r5, 0x34");
                                                                 |     }
    0x0005d170 ite eq                                            |     
                                                                 |     if (r5 != 0xab) {
    0x0005d172 moveq sl, 1                                       |         sl = 1;
                                                                 |     }
                                                                 |     if (r5 != 0xab) {
    0x0005d176 mov.w sl, 0                                       |         sl = 0;
                                                                 |     }
    0x0005d17a cmp r5, 0x33                                      |     
    0x0005d17c ite ne                                            |     
                                                                 |     if (r5 == 0x33) {
    0x0005d17e movne r3, sl                                      |         r3 = sl;
                                                                 |     }
                                                                 |     if (r5 != 0x33) {
    0x0005d180 orreq r3, sl, 1                                   |         r3 = sl | 1;
                                                                 |     }
    0x0005d184 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005d186 beq.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d18a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d18c ldrd r6, sb, [r3, 0xc]                            |     __asm ("ldrd r6, sb, [r3, 0xc]");
    0x0005d190 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0005d192 cmp r3, 0xa7                                      |     
    0x0005d194 it ne                                             |     
                                                                 |     if (r3 == 0xa7) {
    0x0005d196 movne r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0xa7) {
    0x0005d19a beq.w 0x5d86c                                     |         goto label_140;
                                                                 |     }
                                                                 | label_24:
    0x0005d19e cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0005d1a2 beq 0x5d1ae                                       |         
    0x0005d1a4 ldrb.w r3, [sb]                                   |         r3 = *(sb);
    0x0005d1a8 cmp r3, 0xa7                                      |         
                                                                 |         if (r3 == 0xa7) {
    0x0005d1aa beq.w 0x5dd68                                     |             goto label_141;
                                                                 |         }
                                                                 |     }
                                                                 | label_39:
    0x0005d1ae cmp r5, 0x34                                      |     
    0x0005d1b0 itet ne                                           |     
                                                                 |     if (r5 != 0x34) {
    0x0005d1b2 rsbne sl, sl, 0x46                                |         __asm ("rsbne sl, sl, 0x46");
                                                                 |     }
                                                                 |     if (r5 != 0x34) {
    0x0005d1b4 lsreq r6, r0, 9                                   |         r6 = r0 >> 9;
                                                                 |     }
                                                                 |     if (r5 == 0x34) {
    0x0005d1b6 movne sl, 0x44                                    |         sl = 0x44;
                                                                 |     }
    0x0005d1ba uxtb.w sl, sl                                     |     sl = (int8_t) sl;
    0x0005d1be cmp.w r8, 1                                       |     
                                                                 |     if (r8 != 1) {
    0x0005d1c2 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_23:
    0x0005d1c6 mov r4, sb                                        |     r4 = sb;
    0x0005d1c8 str.w sl, [sp, 0x20]                              |     __asm ("str.w sl, [x]");
    0x0005d1cc ldr.w sb, [sp, 0x28]                              |     sb = var_28h;
    0x0005d1d0 mov.w r8, 0                                       |     r8 = 0;
    0x0005d1d4 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
                                                                 |     if (r4 == 0) {
                                                                 | label_40:
    0x0005d1d8 cbz r4, 0x5d214                                   |         goto label_142;
                                                                 |     }
                                                                 | label_6:
    0x0005d1da mov r1, r4                                        |     r1 = r4;
    0x0005d1dc mov r0, sb                                        |     r0 = sb;
    0x0005d1de bl 0x182e4                                        |     r0 = fcn_000182e4 (r0, r1);
    0x0005d1e2 mov r7, r0                                        |     r7 = r0;
    0x0005d1e4 mov r5, r1                                        |     r5 = r1;
    0x0005d1e6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005d1e8 beq.w 0x5d888                                     |         goto label_143;
                                                                 |     }
    0x0005d1ec mov r1, r6                                        |     r1 = r6;
    0x0005d1ee mov r0, sb                                        |     r0 = sb;
    0x0005d1f0 bl 0x182e4                                        |     fcn_000182e4 (r0, r1);
    0x0005d1f4 ands r0, r7                                       |     r0 &= r7;
    0x0005d1f6 ands r1, r5                                       |     r1 &= r5;
    0x0005d1f8 orrs r0, r1                                       |     r0 |= r1;
                                                                 |     if (r0 == r1) {
    0x0005d1fa beq.w 0x5d888                                     |         goto label_143;
                                                                 |     }
                                                                 | label_7:
    0x0005d1fe cmp.w r8, 1                                       |     
    0x0005d202 mov r3, r6                                        |     r3 = r6;
    0x0005d204 mov r6, r4                                        |     r6 = r4;
                                                                 |     if (r8 != 1) {
    0x0005d206 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d20a mov r4, r3                                        |     r4 = r3;
    0x0005d20c mov.w r8, 0                                       |     r8 = 0;
    0x0005d210 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0005d212 bne 0x5d1da                                       |         goto label_6;
                                                                 |     }
                                                                 |     if (r6 != 0) {
                                                                 | label_142:
    0x0005d214 cbz r6, 0x5d21e                                   |         
    0x0005d216 mov r1, r6                                        |         r1 = r6;
    0x0005d218 mov r0, sb                                        |         r0 = sb;
    0x0005d21a bl 0x182e4                                        |         fcn_000182e4 (r0, r1);
                                                                 |     }
    0x0005d21e movs r3, 0                                        |     r3 = 0;
    0x0005d220 mov r7, r3                                        |     r7 = r3;
    0x0005d222 mov r5, r3                                        |     r5 = r3;
                                                                 | label_25:
    0x0005d224 movs r1, 0x2e                                     |     r1 = 0x2e;
    0x0005d226 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005d228 movs r2, 0                                        |     r2 = 0;
    0x0005d22a bl 0x20c10                                        |     fcn_00020c10 (r0, r1, r2, r3);
    0x0005d22e ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x0005d232 mov r1, r0                                        |     r1 = r0;
    0x0005d234 cmp r0, 0                                         |     
    0x0005d236 ite eq                                            |     
                                                                 |     if (r0 != 0) {
    0x0005d238 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0005d23a andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0005d23e cbz r3, 0x5d24e                                   |         
    0x0005d240 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x0005d242 orr r3, r3, 1                                     |         r3 |= 1;
    0x0005d246 str r3, [r0, 4]                                   |         *((r0 + 4)) = r3;
    0x0005d248 ldr.w r3, [sl, 0x24]                              |         r3 = *((sl + 0x24));
    0x0005d24c str r3, [r0, 0x24]                                |         *((r0 + 0x24)) = r3;
                                                                 |     }
    0x0005d24e movs r2, 3                                        |     r2 = 3;
    0x0005d250 mov r0, fp                                        |     r0 = fp;
    0x0005d252 bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x0005d256 ldr.w r2, [fp, 0x18]                              |     r2 = *(arg_18h);
    0x0005d25a add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x0005d25e ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0005d260 add.w r3, r2, r0, lsl 4                           |     r3 = r2 + (r0 << 4);
    0x0005d264 add r2, r1                                        |     r2 += r1;
    0x0005d266 ldr r1, [r6, 0x1c]                                |     r1 = *((r6 + 0x1c));
    0x0005d268 strd r7, r5, [r3, 0x20]                           |     __asm ("strd r7, r5, [r3, 0x20]");
    0x0005d26c str r1, [r3, 0x14]                                |     *((r3 + 0x14)) = r1;
    0x0005d26e ldrsh.w r1, [r6, 0x20]                            |     r1 = *((r6 + 0x20));
    0x0005d272 str r1, [r3, 0x18]                                |     *((r3 + 0x18)) = r1;
    0x0005d274 ldr r1, [sp, 0x20]                                |     r1 = x;
    0x0005d276 strb r1, [r3, 0xf]                                |     *((r3 + 0xf)) = r1;
    0x0005d278 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0005d27a str r1, [r3, 0x10]                                |     *((r3 + 0x10)) = r1;
    0x0005d27c ldrsh.w r1, [r2, 8]                               |     r1 = *((r2 + 8));
    0x0005d280 strh r1, [r3, 8]                                  |     *((r3 + 8)) = r1;
    0x0005d282 movs r1, 0x40                                     |     r1 = 0x40;
    0x0005d284 strh r1, [r3, 0xc]                                |     *((r3 + 0xc)) = r1;
    0x0005d286 ldrh r1, [r2, 0xa]                                |     r1 = *((r2 + 0xa));
    0x0005d288 orr r1, r1, 8                                     |     r1 |= 8;
    0x0005d28c strh r1, [r2, 0xa]                                |     *((r2 + 0xa)) = r1;
    0x0005d28e ldrb r1, [r2, 0xe]                                |     r1 = *((r2 + 0xe));
    0x0005d290 adds r1, 1                                        |     r1++;
    0x0005d292 strb r1, [r2, 0xe]                                |     *((r2 + 0xe)) = r1;
    0x0005d294 ldrd r0, r1, [r2, 0x28]                           |     __asm ("ldrd r0, r1, [r2, 0x28]");
    0x0005d298 strd r0, r1, [r3, 0x28]                           |     __asm ("strd r0, r1, [r3, 0x28]");
    0x0005d29c b 0x5d1fe                                         |     goto label_7;
                                                                 | label_91:
    0x0005d29e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005d2a0 orr.w r8, r0, r3                                  |     r8 = r0 | r3;
    0x0005d2a4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005d2a6 orr.w sb, r1, r3                                  |     sb = r1 | r3;
    0x0005d2aa b 0x5cb56                                         |     goto label_2;
                                                                 | label_136:
    0x0005d2ac cmp r5, 0x31                                      |     
                                                                 |     if (r5 != 0x31) {
    0x0005d2ae bne.w 0x5d7dc                                     |         goto label_144;
                                                                 |     }
                                                                 | label_139:
    0x0005d2b2 ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x0005d2b4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005d2b6 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d2ba ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d2bc ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0005d2be ldrb r3, [r2]                                     |     r3 = *(r2);
    0x0005d2c0 cmp r3, 0xb1                                      |     
                                                                 |     if (r3 != 0xb1) {
    0x0005d2c2 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d2c6 b 0x5d47a                                         |     goto label_145;
                                                                 | label_108:
    0x0005d2c8 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0005d2ca bne.w 0x5cd50                                     |         goto label_8;
                                                                 |     }
                                                                 | label_18:
    0x0005d2ce ldr r2, [sp, 0x20]                                |     r2 = x;
    0x0005d2d0 ldr r3, [r2]                                      |     r3 = *(r2);
    0x0005d2d2 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x0005d2d4 ble 0x5d308                                       |         
    0x0005d2d6 ldrb.w r3, [r2, 0x2c]                             |         r3 = *((r2 + 0x2c));
    0x0005d2da lsls r5, r3, 0x19                                 |         r5 = r3 << 0x19;
                                                                 |         if (r5 >= r3) {
    0x0005d2dc bpl 0x5d308                                       |             goto label_146;
                                                                 |         }
    0x0005d2de ldr r2, [pc, 0x360]                               |         
    0x0005d2e0 ldr r3, [pc, 0x348]                               |         r3 = *(0x5d62c);
    0x0005d2e2 add r2, pc                                        |         r2 = 0xba928;
    0x0005d2e4 ldr r3, [r2, r3]                                  |         r3 = *(0xba928);
    0x0005d2e6 ldr r2, [r3]                                      |         r2 = *(0xba928);
    0x0005d2e8 ldr r3, [sp, 0x7c]                                |         r3 = var_7ch;
    0x0005d2ea eors r2, r3                                       |         r2 ^= r3;
    0x0005d2ec mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005d2f0 bne.w 0x5e4b6                                     |             goto label_104;
                                                                 |         }
    0x0005d2f4 ldr r1, [pc, 0x34c]                               |         
    0x0005d2f6 add r1, pc                                        |         r1 = 0xba93e;
                                                                 | label_110:
    0x0005d2f8 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x0005d2fa add sp, 0x84                                      |         
    0x0005d2fc vpop {d8}                                         |         __asm ("vpop {d8}");
    0x0005d300 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x0005d304 b.w 0x1d554                                       |         void (*0x1d554)() ();
                                                                 |     }
                                                                 | label_146:
    0x0005d308 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d30a bic r6, r6, 2                                     |     r6 = BIT_MASK (r6, 2);
    0x0005d30e str r6, [r3, 4]                                   |     *((r3 + 4)) = r6;
    0x0005d310 b 0x5cb6a                                         |     goto label_9;
                                                                 | label_101:
    0x0005d312 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005d314 and r3, r3, 0x80                                  |     r3 &= 0x80;
    0x0005d318 strh r3, [r7, 0xc]                                |     *((r7 + 0xc)) = r3;
                                                                 | label_132:
    0x0005d31a ldrh r3, [r7, 0xa]                                |     r3 = *((r7 + 0xa));
    0x0005d31c orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x0005d320 strh r3, [r7, 0xa]                                |     *((r7 + 0xa)) = r3;
    0x0005d322 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005d324 bne.w 0x5d10c                                     |         goto label_10;
                                                                 |     }
    0x0005d328 b 0x5d12c                                         |     goto label_11;
                                                                 | label_100:
    0x0005d32a ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005d32c and r3, r3, 0x100                                 |     r3 &= 0x100;
    0x0005d330 strh r3, [r7, 0xc]                                |     *((r7 + 0xc)) = r3;
                                                                 |     if (r6 != 0) {
    0x0005d332 cbz r6, 0x5d34c                                   |         
    0x0005d334 ldrd r2, r3, [r7, 0x20]                           |         __asm ("ldrd r2, r3, [r7, 0x20]");
    0x0005d338 ldr r0, [sp, 0x20]                                |         r0 = x;
    0x0005d33a stm.w sp, {r1, r6, sl}                            |         *(sp) = r1;
                                                                 |         *((sp + 4)) = r6;
                                                                 |         *((sp + 8)) = sl;
    0x0005d33e bl 0x34b9c                                        |         r0 = fcn_00034b9c (r0, r1, r2, r3, r4, r5);
                                                                 |         if (r0 == 0) {
    0x0005d342 cbz r0, 0x5d34c                                   |             goto label_135;
                                                                 |         }
    0x0005d344 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0005d346 lsls r3, r3, 0x1a                                 |         r3 <<= 0x1a;
                                                                 |         if (r3 >= r3) {
    0x0005d348 bpl.w 0x5d76e                                     |             goto label_134;
                                                                 |         }
                                                                 |     }
                                                                 | label_135:
    0x0005d34c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d34e ldr r6, [r3, 4]                                   |     r6 = *((r3 + 4));
    0x0005d350 lsls r0, r6, 0x1f                                 |     r0 = r6 << 0x1f;
                                                                 |     if (r0 < r6) {
    0x0005d352 bmi.w 0x5d12e                                     |         goto label_12;
                                                                 |     }
    0x0005d356 mov r0, r5                                        |     r0 = r5;
    0x0005d358 bl 0xc0c4                                         |     r0 = fcn_0000c0c4 (r0);
    0x0005d35c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005d35e bne.w 0x5d12c                                     |         goto label_11;
                                                                 |     }
    0x0005d362 ldr r3, [pc, 0x2e4]                               |     
    0x0005d364 orr r6, r6, 0x20000000                            |     r6 |= 0x20000000;
    0x0005d368 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0005d36a movs r5, 0xaa                                     |     r5 = 0xaa;
    0x0005d36c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0005d370 add r3, pc                                        |     r3 = 0xba9be;
    0x0005d372 str r6, [r2, 4]                                   |     *((r2 + 4)) = r6;
    0x0005d374 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x0005d376 strb r5, [r2]                                     |     *(r2) = r5;
    0x0005d378 strh r0, [r7, 0xc]                                |     *((r7 + 0xc)) = r0;
    0x0005d37a vstr d16, [r7, 0x28]                              |     __asm ("vstr d16, [r7, 0x28]");
    0x0005d37e ldrb.w r3, [fp, 8]                                |     r3 = *(arg_8h);
    0x0005d382 b 0x5d50c                                         |     goto label_147;
                                                                 | label_112:
    0x0005d384 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d386 ldr r6, [r3, 0xc]                                 |     r6 = *((r3 + 0xc));
    0x0005d388 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0005d38a cmp r3, 0xa7                                      |     
                                                                 |     if (r3 != 0xa7) {
    0x0005d38c bne.w 0x5d508                                     |         goto label_148;
                                                                 |     }
    0x0005d390 ldrsh.w r3, [r6, 0x20]                            |     r3 = *((r6 + 0x20));
    0x0005d394 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0005d396 blt.w 0x5d508                                     |         goto label_148;
                                                                 |     }
    0x0005d39a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d39c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005d39e ands r8, r3, 1                                    |     r8 = r3 & 1;
                                                                 |     if (r8 != r3) {
    0x0005d3a2 bne.w 0x5d508                                     |         goto label_148;
                                                                 |     }
    0x0005d3a6 ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x0005d3a8 mov r3, r8                                        |     r3 = r8;
    0x0005d3aa mov r2, r8                                        |     r2 = r8;
    0x0005d3ac mov r1, r6                                        |     r1 = r6;
    0x0005d3ae mov r0, r4                                        |     r0 = r4;
    0x0005d3b0 bl 0x2dd00                                        |     fcn_0002dd00 (r0, r1, r2, r3);
    0x0005d3b4 movs r2, 0x34                                     |     r2 = 0x34;
    0x0005d3b6 mov sb, r0                                        |     sb = r0;
    0x0005d3b8 movs r3, 0                                        |     r3 = 0;
    0x0005d3ba mov r0, r4                                        |     r0 = r4;
    0x0005d3bc bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0005d3c0 mov sl, r0                                        |     sl = r0;
                                                                 |     if (r0 != 0) {
    0x0005d3c2 cbz r0, 0x5d3e2                                   |         
    0x0005d3c4 mov r2, r5                                        |         r2 = r5;
    0x0005d3c6 mov r1, r8                                        |         r1 = r8;
    0x0005d3c8 adds r0, 1                                        |         r0++;
    0x0005d3ca blx 0x97d4                                        |         fcn_000097d4 ();
    0x0005d3ce movs r3, 0x79                                     |         r3 = 0x79;
    0x0005d3d0 strb.w r3, [sl]                                   |         *(sl) = r3;
    0x0005d3d4 movw r3, 0xffff                                   |         r3 = 0xffff;
    0x0005d3d8 strh.w r3, [sl, 0x22]                             |         *((sl + 0x22)) = r3;
    0x0005d3dc movs r3, 1                                        |         r3 = 1;
    0x0005d3de str.w r3, [sl, 0x18]                              |         __asm ("str.w r3, [sl, 0x18]");
                                                                 |     }
    0x0005d3e2 mov r2, sb                                        |     r2 = sb;
    0x0005d3e4 movs r1, 0x36                                     |     r1 = 0x36;
    0x0005d3e6 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005d3e8 mov r3, sl                                        |     r3 = sl;
    0x0005d3ea bl 0x20c10                                        |     fcn_00020c10 (r0, r1, r2, r3);
    0x0005d3ee movs r2, 0x83                                     |     r2 = 0x83;
    0x0005d3f0 mov r1, r0                                        |     r1 = r0;
    0x0005d3f2 mov r0, fp                                        |     r0 = fp;
    0x0005d3f4 bl 0x1e248                                        |     r0 = fcn_0001e248 (r0, r1, r2, r3);
    0x0005d3f8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005d3fa bne.w 0x5e15c                                     |         goto label_149;
                                                                 |     }
                                                                 | label_28:
    0x0005d3fe ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d400 ldrb.w r0, [fp, 8]                                |     r0 = *(arg_8h);
    0x0005d404 ldrb r5, [r3]                                     |     r5 = *(r3);
                                                                 | label_113:
    0x0005d406 sub.w r3, r5, 0x2d                                |     r3 = r5 - 0x2d;
    0x0005d40a and r3, r3, 0xf7                                  |     r3 &= 0xf7;
    0x0005d40e b 0x5d13c                                         |     goto label_13;
                                                                 | label_138:
    0x0005d410 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x0005d412 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0005d414 ldr.w r8, [r3]                                    |     r8 = *(r3);
                                                                 | label_19:
    0x0005d418 cmp.w r8, 1                                       |     
                                                                 |     if (r8 <= 1) {
    0x0005d41c ble.w 0x5d15e                                     |         goto label_14;
                                                                 |     }
    0x0005d420 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d422 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0005d424 ldrb.w ip, [r3]                                   |     ip = *(r3);
    0x0005d428 cmp.w ip, 0xb0                                    |     
    0x0005d42c it eq                                             |     
                                                                 |     if (ip != 0xb0) {
    0x0005d42e ldrbeq ip, [r3, 2]                                |         ip = *((r3 + 2));
                                                                 |     }
    0x0005d432 cmp.w ip, 0xb1                                    |     
                                                                 |     if (ip == 0xb1) {
    0x0005d436 beq.w 0x5d984                                     |         goto label_150;
                                                                 |     }
    0x0005d43a cmp.w ip, 0x8a                                    |     
                                                                 |     if (ip != 0x8a) {
    0x0005d43e bne.w 0x5d15e                                     |         goto label_14;
                                                                 |     }
    0x0005d442 ldr r4, [r3, 0x14]                                |     r4 = *((r3 + 0x14));
    0x0005d444 ldr.w ip, [r4, 0x1c]                              |     ip = *((r4 + 0x1c));
    0x0005d448 ldr.w ip, [ip]                                    |     ip = *(ip);
                                                                 | label_27:
    0x0005d44c cmp r8, ip                                        |     
                                                                 |     if (r8 != ip) {
    0x0005d44e bne.w 0x5d15e                                     |         goto label_14;
                                                                 |     }
    0x0005d452 ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x0005d454 lsls r4, r4, 0x13                                 |     r4 <<= 0x13;
                                                                 |     if (r4 >= r4) {
    0x0005d456 bpl 0x5d460                                       |         goto label_151;
                                                                 |     }
    0x0005d458 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005d45a lsls r3, r3, 0x13                                 |     r3 <<= 0x13;
                                                                 |     if (r3 < r3) {
    0x0005d45c bmi.w 0x5d15e                                     |         goto label_14;
                                                                 |     }
                                                                 | label_151:
    0x0005d460 cmp r0, 0x2c                                      |     
                                                                 |     if (r0 == 0x2c) {
    0x0005d462 beq.w 0x5db28                                     |         goto label_152;
                                                                 |     }
    0x0005d466 cmp r5, 0x31                                      |     
                                                                 |     if (r5 != 0x31) {
    0x0005d468 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d46c ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x0005d46e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005d470 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d474 cmp r6, 0xb1                                      |     
                                                                 |     if (r6 != 0xb1) {
    0x0005d476 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_145:
    0x0005d47a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d47c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005d47e lsls r6, r3, 0x13                                 |     r6 = r3 << 0x13;
                                                                 |     if (r6 >= r3) {
    0x0005d480 bpl.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d484 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d486 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0005d488 ldr r1, [r3, 0x34]                                |     r1 = *((r3 + 0x34));
    0x0005d48a cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0005d48c bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d490 ldr r5, [r3, 0x44]                                |     r5 = *((r3 + 0x44));
    0x0005d492 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0005d494 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d498 cmp r0, 0x2c                                      |     
                                                                 |     if (r0 != 0x2c) {
    0x0005d49a bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_15:
    0x0005d49e ldrb r3, [r2]                                     |     r3 = *(r2);
    0x0005d4a0 cmp r3, 0xb0                                      |     
    0x0005d4a2 it eq                                             |     
                                                                 |     if (r3 != 0xb0) {
    0x0005d4a4 ldrbeq r3, [r2, 2]                                |         r3 = *((r2 + 2));
                                                                 |     }
    0x0005d4a6 cmp r3, 0xb1                                      |     
    0x0005d4a8 itt eq                                            |     
                                                                 |     if (r3 != 0xb1) {
    0x0005d4aa ldreq r3, [r2, 0x14]                              |         r3 = *((r2 + 0x14));
                                                                 |     }
                                                                 |     if (r3 != 0xb1) {
    0x0005d4ac ldreq r3, [r3]                                    |         r3 = *(r3);
                                                                 |     }
                                                                 |     if (r3 != 0xb1) {
    0x0005d4ae beq 0x5d4bc                                       |         
    0x0005d4b0 cmp r3, 0x8a                                      |         
    0x0005d4b2 itett eq                                          |         
                                                                 |         if (r3 != 0x8a) {
    0x0005d4b4 ldreq r3, [r2, 0x14]                              |             r3 = *((r2 + 0x14));
                                                                 |         }
                                                                 |         if (r3 == 0x8a) {
    0x0005d4b6 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r3 != 0x8a) {
    0x0005d4b8 ldreq r3, [r3, 0x1c]                              |             r3 = *((r3 + 0x1c));
                                                                 |         }
                                                                 |         if (r3 == 0x8a) {
    0x0005d4ba ldreq r3, [r3]                                    |             r3 = *(r3);
                                                                 |             goto label_153;
                                                                 |         }
                                                                 |     }
                                                                 | label_153:
    0x0005d4bc cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x0005d4be bge.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d4c2 ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x0005d4c4 movw r2, 0x8002                                   |     r2 = 0x8002;
    0x0005d4c8 mov r0, fp                                        |     r0 = fp;
    0x0005d4ca adds r5, 1                                        |     r5++;
    0x0005d4cc mov r1, r6                                        |     r1 = r6;
    0x0005d4ce bl 0x1e248                                        |     r0 = fcn_0001e248 (r0, r1, r2, r3);
    0x0005d4d2 add.w r4, r0, r0, lsl 1                           |     r4 = r0 + (r0 << 1);
    0x0005d4d6 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005d4da mov r2, r0                                        |     r2 = r0;
    0x0005d4dc ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005d4de lsls r4, r4, 4                                    |     r4 <<= 4;
    0x0005d4e0 mov r1, fp                                        |     r1 = fp;
    0x0005d4e2 add r3, r4                                        |     r3 += r4;
    0x0005d4e4 str r5, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r5;
    0x0005d4e6 bl 0x5caa4                                        |     fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005d4ea ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005d4ee ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005d4f0 add r4, r3                                        |     r4 += r3;
    0x0005d4f2 add r3, r2                                        |     r3 += r2;
    0x0005d4f4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0005d4f6 str r2, [r4, 0x10]                                |     *((r4 + 0x10)) = r2;
    0x0005d4f8 ldrsh.w r2, [r3, 8]                               |     r2 = *((r3 + 8));
    0x0005d4fc strh r2, [r4, 8]                                  |     *((r4 + 8)) = r2;
    0x0005d4fe ldrb r2, [r3, 0xe]                                |     r2 = *((r3 + 0xe));
    0x0005d500 adds r2, 1                                        |     r2++;
    0x0005d502 strb r2, [r3, 0xe]                                |     *((r3 + 0xe)) = r2;
    0x0005d504 ldr r2, [r6, 0xc]                                 |     r2 = *((r6 + 0xc));
    0x0005d506 b 0x5d49e                                         |     goto label_15;
                                                                 | label_148:
    0x0005d508 ldrb.w r3, [fp, 8]                                |     r3 = *(arg_8h);
                                                                 | label_147:
    0x0005d50c cmp r3, 0x2c                                      |     
                                                                 |     if (r3 != 0x2c) {
    0x0005d50e bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d512 b 0x5d16a                                         |     goto label_16;
                                                                 | label_107:
    0x0005d514 movs r3, 1                                        |     r3 = 1;
    0x0005d516 movs r2, 0                                        |     r2 = 0;
    0x0005d518 b 0x5cd24                                         |     goto label_17;
                                                                 | label_109:
    0x0005d51a lsr.w r0, r8, 1                                   |     r0 = r8 >> 1;
    0x0005d51e lsr.w r1, sb, 1                                   |     r1 = sb >> 1;
    0x0005d522 orr.w r0, r0, sb, lsl 31                          |     r0 |= (sb << 31);
    0x0005d526 cmp r0, r3                                        |     
    0x0005d528 mov r3, r1                                        |     r3 = r1;
    0x0005d52a sbcs r3, r2                                       |     __asm ("sbcs r3, r2");
                                                                 |     if (r0 <= r3) {
    0x0005d52c blo.w 0x5cb6a                                     |         goto label_9;
                                                                 |     }
    0x0005d530 b 0x5d2ce                                         |     goto label_18;
                                                                 | label_137:
    0x0005d532 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x0005d534 ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x0005d538 b 0x5d418                                         |     goto label_19;
                                                                 | label_111:
    0x0005d53a ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0005d53e ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0005d540 mov r2, r3                                        |     r2 = r3;
    0x0005d542 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0005d544 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005d548 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0005d54a ldr r0, [r3, r1]                                  |     r0 = *((r3 + r1));
    0x0005d54c adds r4, r3, r1                                   |     r4 = r3 + r1;
    0x0005d54e str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0005d550 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x0005d552 ldr r0, [r2]                                      |     r0 = *(r2);
    0x0005d554 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x0005d556 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d558 beq.w 0x5d7c2                                     |         goto label_154;
                                                                 |     }
    0x0005d55c mov.w r2, 0x1a8                                   |     r2 = 0x1a8;
    0x0005d560 movs r3, 0                                        |     r3 = 0;
    0x0005d562 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0005d566 mov r8, r0                                        |     r8 = r0;
                                                                 | label_21:
    0x0005d568 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0005d56c beq.w 0x5da56                                     |         goto label_155;
                                                                 |     }
    0x0005d570 mov.w r2, 0x1a8                                   |     r2 = 0x1a8;
    0x0005d574 movs r1, 0                                        |     r1 = 0;
    0x0005d576 mov r0, r8                                        |     r0 = r8;
    0x0005d578 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0005d57c ldrh r3, [r4, 0xa]                                |     r3 = *((r4 + 0xa));
    0x0005d57e mov.w r2, 0x180                                   |     r2 = 0x180;
    0x0005d582 movs r1, 0                                        |     r1 = 0;
    0x0005d584 str.w r8, [r4, 0x18]                              |     __asm ("str.w r8, [r4, 0x18]");
    0x0005d588 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x0005d58c strh r3, [r4, 0xa]                                |     *((r4 + 0xa)) = r3;
    0x0005d58e add.w r3, r8, 0x20                                |     r3 = r8 + 0x20;
    0x0005d592 mov r0, r3                                        |     r0 = r3;
    0x0005d594 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0005d598 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0005d59a movs r1, 0                                        |     r1 = 0;
    0x0005d59c vldr d16, [pc, 0x80]                              |     __asm ("vldr d16, aav.0x000000ff");
    0x0005d5a0 strb.w r1, [r8, 9]                                |     *((r8 + 9)) = r1;
    0x0005d5a4 str.w r2, [r8]                                    |     __asm ("str.w r2, [r8]");
    0x0005d5a8 add.w r2, r8, 0xc                                 |     r2 = r8 + 0xc;
    0x0005d5ac str.w r1, [r8, 4]                                 |     __asm ("str.w r1, [r8, 4]");
    0x0005d5b0 str.w r1, [r8, 0x14]                              |     __asm ("str.w r1, [r8, 0x14]");
    0x0005d5b4 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x0005d5b8 movs r2, 0x2b                                     |     r2 = 0x2b;
    0x0005d5ba str.w r0, [r8, 0x18]                              |     __asm ("str.w r0, [r8, 0x18]");
    0x0005d5be mov r0, r8                                        |     r0 = r8;
    0x0005d5c0 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0005d5c2 bl 0x1e3d0                                        |     fcn_0001e3d0 (r0, r1, r2);
    0x0005d5c6 ldr.w r5, [r8, 0xc]                               |     r5 = *((r8 + 0xc));
    0x0005d5ca subs r5, 1                                        |     r5--;
    0x0005d5cc it pl                                             |     
                                                                 |     if (r5 < 1) {
    0x0005d5ce ldrpl r6, [sp, 0x20]                              |         r6 = x;
                                                                 |     }
                                                                 |     if (r5 < 1) {
    0x0005d5d0 bmi.w 0x5e08c                                     |         goto label_156;
                                                                 |     }
                                                                 |     do {
    0x0005d5d4 mov r2, r5                                        |         r2 = r5;
    0x0005d5d6 mov r1, r8                                        |         r1 = r8;
    0x0005d5d8 subs r5, 1                                        |         r5--;
    0x0005d5da mov r0, r6                                        |         r0 = r6;
    0x0005d5dc bl 0x5caa4                                        |         fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005d5e0 adds r1, r5, 1                                    |         r1 = r5 + 1;
    0x0005d5e2 bne 0x5d5d4                                       |         
                                                                 |     } while (r1 != r5);
    0x0005d5e4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005d5e6 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005d5ea cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005d5ec bne.w 0x5d95a                                     |         goto label_29;
                                                                 |     }
    0x0005d5f0 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x0005d5f4 ldr.w r2, [r8, 0x18]                              |     r2 = *((r8 + 0x18));
    0x0005d5f8 subs.w sb, r3, 1                                  |     sb = r3 - 1;
                                                                 |     if (sb < r3) {
    0x0005d5fc bmi.w 0x5e098                                     |         goto label_157;
                                                                 |     }
    0x0005d600 mov r3, r5                                        |     r3 = r5;
    0x0005d602 mov r6, r5                                        |     r6 = r5;
    0x0005d604 mov r7, r5                                        |     r7 = r5;
    0x0005d606 str r5, [sp, 0x30]                                |     var_30h = r5;
    0x0005d608 str.w fp, [sp, 0x40]                              |     __asm ("str.w fp, [var_40h]");
    0x0005d60c add.w sl, r2, 0x30                                |     sl = r2 + 0x30;
    0x0005d610 ldr r5, [sp, 0x48]                                |     r5 = var_48h;
    0x0005d612 mov fp, r3                                        |     
    0x0005d614 vldr d8, [pc, 8]                                  |     __asm ("vldr d8, aav.0x000000ff");
    0x0005d618 strd r8, r4, [sp, 0x54]                           |     __asm ("strd r8, r4, [var_54h]");
    0x0005d61c b 0x5d662                                         |     
                                                                 |     while (r3 != r8) {
    0x0005d64c orrs.w r3, r6, r7                                 |         r3 = r6 | r7;
    0x0005d650 and r4, r4, 1                                     |         r4 &= 1;
    0x0005d654 it eq                                             |         
                                                                 |         if (r3 != r6) {
    0x0005d656 moveq r4, 0                                       |             r4 = 0;
                                                                 |         }
                                                                 | label_20:
    0x0005d658 add.w sl, sl, 0x30                                |         sl += 0x30;
    0x0005d65c cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0005d65e beq.w 0x5de24                                     |             goto label_158;
                                                                 |         }
    0x0005d662 ldrh r0, [sl, -0x24]                              |         r0 = *((sl - 0x24));
    0x0005d666 add.w sb, sb, -1                                  |         sb += -1;
    0x0005d66a mvn.w r4, sb                                      |         r4 = ~sb;
    0x0005d66e lsrs r4, r4, 0x1f                                 |         r4 >>= 0x1f;
    0x0005d670 ubfx r8, r0, 0, 9                                 |         r8 = (r0 >> 0) & ((1 << 9) - 1);
    0x0005d674 cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x0005d678 beq.w 0x5d898                                     |             goto label_159;
                                                                 |         }
    0x0005d67c ldrh r8, [sl, -0x26]                              |         r8 = *((sl - 0x26));
    0x0005d680 ands r3, r8, 8                                    |         r3 = r8 & 8;
    0x0005d684 bne 0x5d64c                                       |         
                                                                 |     }
    0x0005d686 ldr.w r2, [r5, 0x200]                             |     r2 = *((r5 + 0x200));
    0x0005d68a ldr ip, [sl, -0x1c]                               |     ip = *((sl - 0x1c));
    0x0005d68e str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0005d690 cmp ip, r2                                        |     
                                                                 |     if (ip == r2) {
    0x0005d692 beq.w 0x5dba2                                     |         goto label_160;
                                                                 |     }
    0x0005d696 ldr.w lr, [r5, 0x1fc]                             |     
    0x0005d69a cmp.w lr, 1                                       |     
                                                                 |     if (lr <= 1) {
    0x0005d69e ble.w 0x5e0c2                                     |         goto label_161;
                                                                 |     }
    0x0005d6a2 add.w r2, r5, 0x200                               |     r2 = r5 + 0x200;
    0x0005d6a6 movs r3, 1                                        |     r3 = 1;
    0x0005d6a8 b 0x5d6b2                                         |     
                                                                 |     while (ip != r1) {
    0x0005d6aa adds r3, 1                                        |         r3++;
    0x0005d6ac cmp lr, r3                                        |         
                                                                 |         if (lr == r3) {
    0x0005d6ae beq.w 0x5da5c                                     |             goto label_162;
                                                                 |         }
    0x0005d6b2 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0005d6b6 cmp ip, r1                                        |         
    0x0005d6b8 bne 0x5d6aa                                       |         
                                                                 |     }
    0x0005d6ba mov.w ip, 1                                       |     
    0x0005d6be sub.w r1, r3, 0x20                                |     r1 = r3 - 0x20;
    0x0005d6c2 rsb.w r2, r3, 0x20                                |     r2 = 0x20 - r3;
    0x0005d6c6 lsl.w r1, ip, r1                                  |     r1 = ip << r1;
    0x0005d6ca lsr.w r2, ip, r2                                  |     r2 = ip >> r2;
    0x0005d6ce lsl.w ip, ip, r3                                  |     
    0x0005d6d2 orrs r1, r2                                       |     r1 |= r2;
                                                                 | label_30:
    0x0005d6d4 tst.w r8, 2                                       |     
                                                                 |     if ((r8 & 2) == 0) {
    0x0005d6d8 beq 0x5d742                                       |         goto label_32;
                                                                 |     }
    0x0005d6da ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0005d6dc ldr r2, [sl, -0x20]                               |     r2 = *((sl - 0x20));
    0x0005d6e0 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0005d6e2 add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x0005d6e6 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0005d6ea ldr.w lr, [r3, 0x14]                              |     
    0x0005d6ee ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005d6f0 cmp r3, lr                                        |     
    0x0005d6f2 it eq                                             |     
                                                                 |     if (r3 != lr) {
    0x0005d6f4 orreq ip, ip, 1                                   |         
                                                                 |     }
                                                                 |     if (r3 == lr) {
    0x0005d6f8 beq 0x5d742                                       |         goto label_32;
                                                                 |     }
    0x0005d6fa ldr.w r8, [r5, 0x1fc]                             |     r8 = *((r5 + 0x1fc));
    0x0005d6fe cmp.w r8, 1                                       |     
                                                                 |     if (r8 <= 1) {
    0x0005d702 ble 0x5d742                                       |         goto label_32;
                                                                 |     }
    0x0005d704 add.w r2, r5, 0x200                               |     r2 = r5 + 0x200;
    0x0005d708 movs r3, 1                                        |     r3 = 1;
    0x0005d70a str r5, [sp, 0x44]                                |     var_44h = r5;
    0x0005d70c b 0x5d716                                         |     
                                                                 |     while (lr != r5) {
    0x0005d70e adds r3, 1                                        |         r3++;
    0x0005d710 cmp r8, r3                                        |         
                                                                 |         if (r8 == r3) {
    0x0005d712 beq.w 0x5dbaa                                     |             goto label_163;
                                                                 |         }
    0x0005d716 ldr r5, [r2, 4]!                                  |         r5 = *((r2 += 4));
    0x0005d71a cmp lr, r5                                        |         
    0x0005d71c bne 0x5d70e                                       |         
                                                                 |     }
    0x0005d71e mov.w lr, 1                                       |     lr = 1;
    0x0005d722 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0005d726 rsb.w r8, r3, 0x20                                |     r8 = 0x20 - r3;
    0x0005d72a lsl.w r2, lr, r2                                  |     r2 = lr << r2;
    0x0005d72e lsr.w r8, lr, r8                                  |     r8 = lr >> r8;
    0x0005d732 ldr r5, [sp, 0x44]                                |     r5 = var_44h;
    0x0005d734 lsl.w lr, lr, r3                                  |     lr <<= r3;
    0x0005d738 orr.w r2, r2, r8                                  |     r2 |= r8;
    0x0005d73c orr.w ip, lr, ip                                  |     
    0x0005d740 orrs r1, r2                                       |     r1 |= r2;
                                                                 | label_32:
    0x0005d742 and.w r6, ip, r6                                  |     r6 = ip & r6;
    0x0005d746 ands r7, r1                                       |     r7 &= r1;
    0x0005d748 orrs.w r3, r6, r7                                 |     r3 = r6 | r7;
    0x0005d74c and r4, r4, 1                                     |     r4 &= 1;
    0x0005d750 it eq                                             |     
                                                                 |     if (r3 != r6) {
    0x0005d752 moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x0005d754 ands r0, r0, 2                                    |     r0 &= 2;
    0x0005d758 itete ne                                          |     
                                                                 |     if (r0 == r0) {
    0x0005d75a ldrne r3, [sp, 0x30]                              |         r3 = var_30h;
                                                                 |     }
                                                                 |     if (r0 != r0) {
    0x0005d75c moveq fp, r0                                      |         
                                                                 |     }
                                                                 |     if (r0 == r0) {
    0x0005d75e andne fp, ip, fp                                  |         
                                                                 |     }
                                                                 |     if (r0 == r0) {
    0x0005d762 str.w fp, [sp, 0x30]                              |         __asm ("str.w fp, [var_30h]");
                                                                 |     }
    0x0005d766 itt ne                                            |     
                                                                 |     if (r0 == r0) {
    0x0005d768 andne r3, r1                                      |         r3 &= r1;
                                                                 |     }
                                                                 |     if (r0 == r0) {
    0x0005d76a strne r3, [sp, 0x30]                              |         var_30h = r3;
                                                                 |     }
    0x0005d76c b 0x5d658                                         |     goto label_20;
                                                                 | label_134:
    0x0005d76e ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x0005d770 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0005d772 blt.w 0x5da64                                     |         goto label_164;
                                                                 |     }
    0x0005d776 ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x0005d778 movs r3, 0                                        |     r3 = 0;
    0x0005d77a mov r2, r3                                        |     r2 = r3;
    0x0005d77c ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0005d77e mov r0, r4                                        |     r0 = r4;
    0x0005d780 bl 0x2dd00                                        |     fcn_0002dd00 (r0, r1, r2, r3);
    0x0005d784 ldrb.w r2, [r4, 0x57]                             |     r2 = *((r4 + 0x57));
    0x0005d788 mov r6, r0                                        |     r6 = r0;
    0x0005d78a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005d78c beq.w 0x5dbae                                     |         goto label_165;
                                                                 |     }
    0x0005d790 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d792 beq.w 0x5cc66                                     |         goto label_1;
                                                                 |     }
    0x0005d796 ldr.w r1, [pc, 0xaf4]                             |     r1 = *(0x0005e28c);
    0x0005d79a ldr.w r2, [pc, 0xaf4]                             |     r2 = *(0x5e292);
    0x0005d79e add r1, pc                                        |     r1 += pc;
    0x0005d7a0 ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x0005d7a2 ldr r1, [r2]                                      |     r1 = *(0x5e292);
    0x0005d7a4 ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x0005d7a6 eors r1, r2                                       |     r1 ^= r2;
    0x0005d7a8 mov.w r2, 0                                       |     r2 = 0;
                                                                 |     if (r1 != r2) {
    0x0005d7ac bne.w 0x5e4b6                                     |         goto label_104;
                                                                 |     }
    0x0005d7b0 mov r1, r0                                        |     r1 = r0;
    0x0005d7b2 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0005d7b4 add sp, 0x84                                      |     
    0x0005d7b6 vpop {d8}                                         |     __asm ("vpop {d8}");
    0x0005d7ba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0005d7be b.w 0x16c0c                                       |     void (*0x16c0c)() ();
                                                                 | label_154:
    0x0005d7c2 mov.w r0, 0x1a8                                   |     r0 = 0x1a8;
    0x0005d7c6 movs r1, 0                                        |     r1 = 0;
    0x0005d7c8 bl 0x117c8                                        |     r0 = fcn_000117c8 (r0);
    0x0005d7cc mov r8, r0                                        |     r8 = r0;
    0x0005d7ce b 0x5d568                                         |     goto label_21;
                                                                 | label_106:
    0x0005d7d0 mov r0, sb                                        |     r0 = sb;
    0x0005d7d2 ldrd r8, sb, [sp, 0x30]                           |     __asm ("ldrd r8, sb, [var_30h]");
    0x0005d7d6 mov r1, r0                                        |     r1 = r0;
    0x0005d7d8 b.w 0x5ccd2                                       |     goto label_22;
                                                                 | label_144:
    0x0005d7dc cmp r0, 0x2c                                      |     
                                                                 |     if (r0 != 0x2c) {
    0x0005d7de bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d7e2 cmp r5, 0xac                                      |     
                                                                 |     if (r5 != 0xac) {
    0x0005d7e4 bne.w 0x5d16a                                     |         goto label_16;
                                                                 |     }
    0x0005d7e8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d7ea ldr.w sb, [r3, 0x14]                              |     sb = *((r3 + 0x14));
    0x0005d7ee cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0005d7f2 beq.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d7f6 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0005d7fa cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x0005d7fc bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d800 ldr.w r6, [sb, 0x18]                              |     r6 = *((sb + 0x18));
    0x0005d804 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0005d806 cmp r3, 0xa7                                      |     
                                                                 |     if (r3 == 0xa7) {
    0x0005d808 beq.w 0x5dda2                                     |         goto label_166;
                                                                 |     }
                                                                 | label_41:
    0x0005d80c ldr.w r6, [sb, 8]                                 |     r6 = *((sb + 8));
    0x0005d810 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0005d812 cmp r3, 0xa7                                      |     
                                                                 |     if (r3 != 0xa7) {
    0x0005d814 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d818 ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x0005d81a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005d81c beq.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d820 ldrb.w r2, [r3, 0x2b]                             |     r2 = *((r3 + 0x2b));
    0x0005d824 cmp r2, 1                                         |     
                                                                 |     if (r2 != 1) {
    0x0005d826 bne.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d82a ldr r3, [r3, 0x34]                                |     r3 = *((r3 + 0x34));
    0x0005d82c ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0005d82e cbnz r3, 0x5d83c                                  |         goto label_167;
                                                                 |     }
    0x0005d830 b.w 0x5e630                                       |     goto label_168;
                                                                 |     do {
    0x0005d834 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0005d836 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005d838 beq.w 0x5e630                                     |             goto label_168;
                                                                 |         }
                                                                 | label_167:
    0x0005d83c ldr r2, [r3]                                      |         r2 = *(r3);
    0x0005d83e cmp r1, r2                                        |         
    0x0005d840 bne 0x5d834                                       |         
                                                                 |     } while (r1 != r2);
    0x0005d842 ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x0005d844 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0005d846 ldr r5, [r3, 0x48]                                |     r5 = *((r3 + 0x48));
    0x0005d848 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0005d84a beq.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d84e ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0005d850 add r3, sp, 0x68                                  |     r3 += var_68h;
    0x0005d852 str r3, [sp]                                      |     *(sp) = r3;
    0x0005d854 movs r1, 2                                        |     r1 = 2;
    0x0005d856 add r3, sp, 0x64                                  |     r3 += var_64h;
    0x0005d858 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0005d85a blx r5                                            |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x0005d85c cmp r0, 0x95                                      |     
                                                                 |     if (r0 <= 0x95) {
    0x0005d85e ble.w 0x5cc4e                                     |         goto label_5;
                                                                 |     }
    0x0005d862 ldr.w sb, [sb, 0x18]                              |     sb = *((sb + 0x18));
    0x0005d866 uxtb.w sl, r0                                     |     sl = (int8_t) r0;
    0x0005d86a b 0x5d1c6                                         |     goto label_23;
                                                                 | label_140:
    0x0005d86c ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x0005d86e mov r8, r3                                        |     r8 = r3;
    0x0005d870 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005d872 beq.w 0x5d19e                                     |         goto label_24;
                                                                 |     }
    0x0005d876 ldrb.w r8, [r3, 0x2b]                             |     r8 = *((r3 + 0x2b));
    0x0005d87a sub.w r8, r8, 1                                   |     r8--;
    0x0005d87e clz r8, r8                                        |     r8 &= r8;
    0x0005d882 lsr.w r8, r8, 5                                   |     r8 >>= 5;
    0x0005d886 b 0x5d19e                                         |     goto label_24;
                                                                 | label_143:
    0x0005d888 movs r3, 0                                        |     r3 = 0;
    0x0005d88a ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0005d88c mov r2, r3                                        |     r2 = r3;
    0x0005d88e mov r1, r4                                        |     r1 = r4;
    0x0005d890 bl 0x2dd00                                        |     r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005d894 mov r3, r0                                        |     r3 = r0;
    0x0005d896 b 0x5d224                                         |     goto label_25;
                                                                 | label_159:
    0x0005d898 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0005d89a mov.w r2, 0x1a0                                   |     r2 = 0x1a0;
    0x0005d89e movs r3, 0                                        |     r3 = 0;
    0x0005d8a0 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0005d8a4 mov fp, r0                                        |     
    0x0005d8a6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d8a8 beq.w 0x5da2e                                     |         goto label_169;
                                                                 |     }
    0x0005d8ac ldrh r3, [sl, -0x26]                              |     r3 = *((sl - 0x26));
    0x0005d8b0 mov.w r2, 0x400                                   |     r2 = 0x400;
    0x0005d8b4 strh r2, [sl, -0x24]                              |     *((sl - 0x24)) = r2;
    0x0005d8b8 mov.w r2, -1                                      |     r2 = -1;
    0x0005d8bc mov r1, r8                                        |     r1 = r8;
    0x0005d8be str r0, [sl, -0x18]                               |     *((sl - 0x18)) = r0;
    0x0005d8c2 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x0005d8c6 str r2, [sl, -0x1c]                               |     *((sl - 0x1c)) = r2;
    0x0005d8ca strh r3, [sl, -0x26]                              |     *((sl - 0x26)) = r3;
    0x0005d8ce add.w r3, r0, 0x20                                |     r3 = r0 + 0x20;
    0x0005d8d2 mov r0, r3                                        |     r0 = r3;
    0x0005d8d4 mov.w r2, 0x180                                   |     r2 = 0x180;
    0x0005d8d8 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0005d8dc ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0005d8de ldr r2, [r2]                                      |     r2 = *(r2);
    0x0005d8e0 strb.w r8, [fp, 9]                                |     *(arg_9h) = r8;
    0x0005d8e4 str.w r8, [fp, 4]                                 |     __asm ("str.w r8, [arg_4h]");
    0x0005d8e8 str.w r2, [fp]                                    |     __asm ("str.w r2, [fp]");
    0x0005d8ec add.w r2, fp, 0xc                                 |     r2 += arg_ch;
    0x0005d8f0 str.w r8, [fp, 0x14]                              |     __asm ("str.w r8, [arg_14h]");
    0x0005d8f4 ldr r1, [sl, -0x30]                               |     r1 = *((sl - 0x30));
    0x0005d8f8 vst1.32 {d8}, [r2]                                |     __asm ("vst1.32 {d8}, [r2]");
    0x0005d8fc movs r2, 0x2c                                     |     r2 = 0x2c;
    0x0005d8fe str.w r0, [fp, 0x18]                              |     __asm ("str.w r0, [arg_18h]");
    0x0005d902 mov r0, fp                                        |     r0 = fp;
    0x0005d904 bl 0x1e3d0                                        |     fcn_0001e3d0 (r0, r1, r2);
    0x0005d908 ldr.w r3, [fp, 0xc]                               |     r3 = *(arg_ch);
    0x0005d90c subs.w r8, r3, 1                                  |     r8 = r3 - 1;
                                                                 |     if (r8 < r3) {
    0x0005d910 bmi 0x5d92c                                       |         goto label_170;
                                                                 |     }
    0x0005d912 str r4, [sp, 0x30]                                |     var_30h = r4;
    0x0005d914 mov r4, r8                                        |     r4 = r8;
    0x0005d916 ldr.w r8, [sp, 0x20]                              |     r8 = x;
                                                                 |     do {
    0x0005d91a mov r2, r4                                        |         r2 = r4;
    0x0005d91c mov r1, fp                                        |         r1 = fp;
    0x0005d91e subs r4, 1                                        |         r4--;
    0x0005d920 mov r0, r8                                        |         r0 = r8;
    0x0005d922 bl 0x5caa4                                        |         fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005d926 adds r2, r4, 1                                    |         r2 = r4 + 1;
    0x0005d928 bne 0x5d91a                                       |         
                                                                 |     } while (r2 != r4);
    0x0005d92a ldr r4, [sp, 0x30]                                |     r4 = var_30h;
                                                                 | label_170:
    0x0005d92c ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005d92e str.w r3, [fp, 4]                                 |     __asm ("str.w r3, [arg_4h]");
    0x0005d932 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005d934 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005d938 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005d93a beq.w 0x5dca4                                     |         goto label_171;
                                                                 |     }
                                                                 | label_35:
    0x0005d93e ldrd r8, r4, [sp, 0x54]                           |     __asm ("ldrd r8, r4, [var_54h]");
    0x0005d942 mov.w r3, 0x200                                   |     r3 = 0x200;
    0x0005d946 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0005d94a ldr.w fp, [sp, 0x40]                              |     fp = var_40h;
    0x0005d94e vstr d16, [r8, 0x1a0]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x0005d952 strh r3, [r4, 0xc]                                |     *((r4 + 0xc)) = r3;
    0x0005d954 mov.w r3, -1                                      |     r3 = -1;
    0x0005d958 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
                                                                 | label_29:
    0x0005d95a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005d95c ldr.w r7, [fp, 0x18]                              |     r7 = *(arg_18h);
    0x0005d960 ldrb r5, [r3]                                     |     r5 = *(r3);
    0x0005d962 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005d964 add r7, r3                                        |     r7 += r3;
    0x0005d966 sub.w r3, r5, 0x2d                                |     r3 = r5 - 0x2d;
    0x0005d96a and r3, r3, 0xf7                                  |     r3 &= 0xf7;
    0x0005d96e b.w 0x5d138                                       |     goto label_26;
                                                                 | label_99:
    0x0005d972 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005d974 and r3, r3, 1                                     |     r3 &= 1;
    0x0005d978 strh r3, [r7, 0xc]                                |     *((r7 + 0xc)) = r3;
    0x0005d97a cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005d97c bne.w 0x5d10c                                     |         goto label_10;
                                                                 |     }
    0x0005d980 b.w 0x5d12c                                       |     goto label_11;
                                                                 | label_150:
    0x0005d984 ldr r4, [r3, 0x14]                                |     r4 = *((r3 + 0x14));
    0x0005d986 ldr.w ip, [r4]                                    |     ip = *(r4);
    0x0005d98a b 0x5d44c                                         |     goto label_27;
                                                                 | label_103:
    0x0005d98c ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0005d98e ldr.w r6, [pc, 0x904]                             |     r6 = *(0x0005e294);
    0x0005d992 ldr.w sl, [sp, 0x2c]                              |     sl = var_2ch;
    0x0005d996 ldr.w sb, [r5, 0x14]                              |     sb = *((r5 + 0x14));
    0x0005d99a add r6, pc                                        |     r6 += pc;
    0x0005d99c add.w r8, r6, 0x18c                               |     r8 = r6 + 0x18c;
    0x0005d9a0 add.w r6, r6, 0x18e                               |     r6 += 0x18e;
                                                                 |     do {
    0x0005d9a4 ldr r4, [r5, 0xc]                                 |         r4 = *((r5 + 0xc));
    0x0005d9a6 ldrb r7, [r8], 1                                  |         r7 = *(r8);
                                                                 |         r8++;
                                                                 |         if (r4 != 0) {
    0x0005d9aa cbz r4, 0x5d9ba                                   |             
    0x0005d9ac movs r3, 0                                        |             r3 = 0;
    0x0005d9ae mov r1, r4                                        |             r1 = r4;
    0x0005d9b0 mov r2, r3                                        |             r2 = r3;
    0x0005d9b2 mov r0, sl                                        |             r0 = sl;
    0x0005d9b4 bl 0x2dd00                                        |             r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005d9b8 mov r4, r0                                        |             r4 = r0;
                                                                 |         }
    0x0005d9ba ldr.w r3, [sb, 8]                                 |         r3 = *((sb + 8));
                                                                 |         if (r3 != 0) {
    0x0005d9be cbz r3, 0x5d9ce                                   |             
    0x0005d9c0 mov r1, r3                                        |             r1 = r3;
    0x0005d9c2 movs r3, 0                                        |             r3 = 0;
    0x0005d9c4 mov r2, r3                                        |             r2 = r3;
    0x0005d9c6 mov r0, sl                                        |             r0 = sl;
    0x0005d9c8 bl 0x2dd00                                        |             r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005d9cc mov r3, r0                                        |             r3 = r0;
                                                                 |         }
    0x0005d9ce mov r1, r7                                        |         r1 = r7;
    0x0005d9d0 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x0005d9d2 mov r2, r4                                        |         r2 = r4;
    0x0005d9d4 bl 0x20c10                                        |         r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005d9d8 mov r1, r0                                        |         r1 = r0;
                                                                 |         if (r0 != 0) {
    0x0005d9da cbz r0, 0x5d9ee                                   |             
    0x0005d9dc ldr r3, [r5, 4]                                   |             r3 = *((r5 + 4));
    0x0005d9de ands r3, r3, 3                                    |             r3 &= 3;
                                                                 |             if (r3 == r3) {
    0x0005d9e2 beq 0x5d9ee                                       |                 goto label_172;
                                                                 |             }
    0x0005d9e4 ldr r2, [r0, 4]                                   |             r2 = *((r0 + 4));
    0x0005d9e6 orrs r2, r3                                       |             r2 |= r3;
    0x0005d9e8 ldr r3, [r5, 0x24]                                |             r3 = *((r5 + 0x24));
    0x0005d9ea str r2, [r0, 4]                                   |             *((r0 + 4)) = r2;
    0x0005d9ec str r3, [r0, 0x24]                                |             *((r0 + 0x24)) = r3;
                                                                 |         }
                                                                 | label_172:
    0x0005d9ee movs r2, 3                                        |         r2 = 3;
    0x0005d9f0 mov r0, fp                                        |         r0 = fp;
    0x0005d9f2 bl 0x1e248                                        |         fcn_0001e248 (r0, r1, r2, r3);
    0x0005d9f6 mov r1, fp                                        |         r1 = fp;
    0x0005d9f8 mov r4, r0                                        |         r4 = r0;
    0x0005d9fa mov r2, r0                                        |         r2 = r0;
    0x0005d9fc ldr r0, [sp, 0x20]                                |         r0 = x;
    0x0005d9fe bl 0x5caa4                                        |         fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005da02 ldr.w r7, [fp, 0x18]                              |         r7 = *(arg_18h);
    0x0005da06 add.w r4, r4, r4, lsl 1                           |         r4 += (r4 << 1);
    0x0005da0a ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0005da0c cmp r6, r8                                        |         
    0x0005da0e add.w sb, sb, 0x10                                |         sb += 0x10;
    0x0005da12 add.w r4, r7, r4, lsl 4                           |         r4 = r7 + (r4 << 4);
    0x0005da16 add r7, r3                                        |         r7 += r3;
    0x0005da18 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x0005da1a str r3, [r4, 0x10]                                |         *((r4 + 0x10)) = r3;
    0x0005da1c ldrsh.w r3, [r7, 8]                               |         r3 = *((r7 + 8));
    0x0005da20 strh r3, [r4, 8]                                  |         *((r4 + 8)) = r3;
    0x0005da22 ldrb r3, [r7, 0xe]                                |         r3 = *((r7 + 0xe));
    0x0005da24 add.w r3, r3, 1                                   |         r3++;
    0x0005da28 strb r3, [r7, 0xe]                                |         *((r7 + 0xe)) = r3;
    0x0005da2a bne 0x5d9a4                                       |         
                                                                 |     } while (r6 != r8);
    0x0005da2c b 0x5d3fe                                         |     goto label_28;
                                                                 | label_169:
    0x0005da2e orrs.w r3, r6, r7                                 |     r3 = r6 | r7;
    0x0005da32 and r4, r4, 1                                     |     r4 &= 1;
    0x0005da36 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x0005da38 it eq                                             |     
                                                                 |     if (r3 != r6) {
    0x0005da3a moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x0005da3c b 0x5d658                                         |     goto label_20;
                                                                 | label_105:
    0x0005da3e mov r1, sb                                        |     r1 = sb;
    0x0005da40 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0005da42 bl 0x1834c                                        |     fcn_0001834c (r0, r1, r2);
    0x0005da46 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005da48 orr.w r8, r0, r3                                  |     r8 = r0 | r3;
    0x0005da4c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005da4e orr.w sb, r1, r3                                  |     sb = r1 | r3;
    0x0005da52 b.w 0x5ccd2                                       |     goto label_22;
                                                                 | label_155:
    0x0005da56 str.w r8, [r4, 0x18]                              |     __asm ("str.w r8, [r4, 0x18]");
    0x0005da5a b 0x5d95a                                         |     goto label_29;
                                                                 | label_162:
    0x0005da5c mov.w ip, 0                                       |     
    0x0005da60 mov r1, ip                                        |     r1 = ip;
    0x0005da62 b 0x5d6d4                                         |     goto label_30;
                                                                 | label_164:
    0x0005da64 ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x0005da66 mov r5, r7                                        |     r5 = r7;
                                                                 | label_33:
    0x0005da68 mov.w sl, 0                                       |     sl = 0;
                                                                 | label_34:
    0x0005da6c ldr r1, [r6, 0xc]                                 |     r1 = *((r6 + 0xc));
    0x0005da6e add.w r3, r6, 0xc                                 |     r3 = r6 + 0xc;
    0x0005da72 vld1.32 {d16}, [r3]                               |     __asm ("vld1.32 {d16}, [r3]");
    0x0005da76 ldrb r2, [r1]                                     |     r2 = *(r1);
    0x0005da78 cmp r2, 0xb1                                      |     
                                                                 |     if (r2 != 0xb1) {
    0x0005da7a beq 0x5daa4                                       |         
    0x0005da7c vmov.32 r2, d16[1]                                |         __asm ("vmov.32 r2, d16[1]");
    0x0005da80 ldrb r0, [r2]                                     |         r0 = *(r2);
    0x0005da82 cmp r0, 0xb1                                      |         
                                                                 |         if (r0 == 0xb1) {
    0x0005da84 beq 0x5daa4                                       |             goto label_173;
                                                                 |         }
    0x0005da86 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x0005da88 str r3, [sp, 0x40]                                |         var_40h = r3;
    0x0005da8a bl 0x27f10                                        |         fcn_00027f10 (r0, r1, r2);
    0x0005da8e ldrd r2, r1, [r6, 0xc]                            |         __asm ("ldrd r2, r1, [r6, 0xc]");
    0x0005da92 mov r4, r0                                        |         r4 = r0;
    0x0005da94 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x0005da96 bl 0x27f10                                        |         fcn_00027f10 (r0, r1, r2);
    0x0005da9a ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0005da9c cmp r4, r0                                        |         
    0x0005da9e vld1.32 {d16}, [r3]                               |         __asm ("vld1.32 {d16}, [r3]");
                                                                 |         if (r4 == r0) {
    0x0005daa2 beq 0x5daac                                       |             goto label_174;
                                                                 |         }
                                                                 |     }
                                                                 | label_173:
    0x0005daa4 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0005daa6 eor r2, r2, 0x400                                 |     r2 ^= 0x400;
    0x0005daaa str r2, [r6, 4]                                   |     *((r6 + 4)) = r2;
                                                                 | label_174:
    0x0005daac vrev64.32 d16, d16                                |     __asm ("vrev64.32 d16, d16");
    0x0005dab0 vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
    0x0005dab4 ldrb r2, [r6]                                     |     r2 = *(r6);
    0x0005dab6 cmp r2, 0x35                                      |     
                                                                 |     if (r2 >= 0x35) {
    0x0005dab8 bls 0x5dac6                                       |         
    0x0005daba subs r2, 0x36                                     |         r2 -= 0x36;
    0x0005dabc eor r2, r2, 2                                     |         r2 ^= 2;
    0x0005dac0 adds r2, 0x36                                     |         r2 += 0x36;
    0x0005dac2 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x0005dac4 strb r2, [r6]                                     |         *(r6) = r2;
                                                                 |     }
    0x0005dac6 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0005dac8 cmp r2, 0x31                                      |     
    0x0005daca ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0005dacc ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0005dace vldr d16, [sp, 0x70]                              |     __asm ("vldr d16, [sp, 0x70]");
    0x0005dad2 orr.w r1, r1, r3                                  |     r1 |= r3;
    0x0005dad6 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005dad8 orr.w r3, r3, r0                                  |     r3 |= r0;
    0x0005dadc add.w r0, r5, 0x14                                |     r0 = r5 + 0x14;
    0x0005dae0 vst1.32 {d16}, [r0]                               |     __asm ("vst1.32 {d16}, [r0]");
    0x0005dae4 strd r1, r3, [r5, 0x20]                           |     __asm ("strd r1, r3, [r5, 0x20]");
    0x0005dae8 it eq                                             |     
                                                                 |     if (r2 != 0x31) {
    0x0005daea moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0005daec strd r8, sb, [r5, 0x28]                           |     __asm ("strd r8, sb, [r5, 0x28]");
                                                                 |     if (r2 != 0x31) {
    0x0005daf0 beq 0x5db10                                       |         
    0x0005daf2 cmp r2, 0x32                                      |         
    0x0005daf4 it eq                                             |         
                                                                 |         if (r2 != 0x32) {
    0x0005daf6 moveq r3, 0x100                                   |             r3 = 0x100;
                                                                 |         }
                                                                 |         if (r2 == 0x32) {
    0x0005dafa beq 0x5db10                                       |             goto label_175;
                                                                 |         }
    0x0005dafc cmp r2, 0x2d                                      |         
    0x0005dafe ittte ne                                          |         
                                                                 |         if (r2 == 0x2d) {
    0x0005db00 subne r3, r2, 0x35                                |             r3 = r2 - 0x35;
                                                                 |         }
                                                                 |         if (r2 == 0x2d) {
    0x0005db04 movne r2, 2                                       |             r2 = 2;
                                                                 |         }
                                                                 |         if (r2 != 0x2d) {
    0x0005db06 lsleq r3, r2, r3                                  |             r3 = r2 << r3;
                                                                 |         }
                                                                 |         if (r2 == 0x2d) {
    0x0005db0a movs r3, 0x80                                     |             r3 = 0x80;
                                                                 |         }
    0x0005db0c it ne                                             |         
                                                                 |         if (r3 == 0x80) {
    0x0005db0e uxthne r3, r3                                     |             __asm ("uxthne r3, r3");
                                                                 |             goto label_175;
                                                                 |         }
                                                                 |     }
                                                                 | label_175:
    0x0005db10 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005db12 add r3, sl                                        |     r3 += sl;
    0x0005db14 ands r2, r3                                       |     r2 &= r3;
    0x0005db16 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005db18 strh r2, [r5, 0xc]                                |     *((r5 + 0xc)) = r2;
    0x0005db1a ldrb r5, [r3]                                     |     r5 = *(r3);
    0x0005db1c sub.w r3, r5, 0x2d                                |     r3 = r5 - 0x2d;
    0x0005db20 and r3, r3, 0xf7                                  |     r3 &= 0xf7;
    0x0005db24 b.w 0x5d138                                       |     goto label_26;
                                                                 | label_152:
    0x0005db28 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x0005db2a movs r5, 0                                        |     r5 = 0;
    0x0005db2c ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x0005db2e ldr r7, [sp, 0x20]                                |     r7 = x;
                                                                 |     do {
    0x0005db30 mov r3, r8                                        |         r3 = r8;
    0x0005db32 mov r2, r5                                        |         r2 = r5;
    0x0005db34 mov r0, r6                                        |         r0 = r6;
    0x0005db36 bl 0x2e850                                        |         fcn_0002e850 (r0, r1, r2, r3);
    0x0005db3a ldr r1, [r4, 0x10]                                |         r1 = *((r4 + 0x10));
    0x0005db3c mov sb, r0                                        |         sb = r0;
    0x0005db3e mov r3, r8                                        |         r3 = r8;
    0x0005db40 mov r2, r5                                        |         r2 = r5;
    0x0005db42 mov r0, r6                                        |         r0 = r6;
    0x0005db44 bl 0x2e850                                        |         fcn_0002e850 (r0, r1, r2, r3);
    0x0005db48 ldrb r1, [r4]                                     |         r1 = *(r4);
    0x0005db4a mov r3, r0                                        |         r3 = r0;
    0x0005db4c mov r2, sb                                        |         r2 = sb;
    0x0005db4e mov r0, r6                                        |         r0 = r6;
    0x0005db50 bl 0x20c10                                        |         r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005db54 mov r1, r0                                        |         r1 = r0;
                                                                 |         if (r0 != 0) {
    0x0005db56 cbz r0, 0x5db6a                                   |             
    0x0005db58 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x0005db5a ands r3, r3, 3                                    |             r3 &= 3;
                                                                 |             if (r3 == r3) {
    0x0005db5e beq 0x5db6a                                       |                 goto label_176;
                                                                 |             }
    0x0005db60 ldr r2, [r0, 4]                                   |             r2 = *((r0 + 4));
    0x0005db62 orrs r2, r3                                       |             r2 |= r3;
    0x0005db64 ldr r3, [r4, 0x24]                                |             r3 = *((r4 + 0x24));
    0x0005db66 str r2, [r0, 4]                                   |             *((r0 + 4)) = r2;
    0x0005db68 str r3, [r0, 0x24]                                |             *((r0 + 0x24)) = r3;
                                                                 |         }
                                                                 | label_176:
    0x0005db6a movw r2, 0x8001                                   |         r2 = 0x8001;
    0x0005db6e mov r0, fp                                        |         r0 = fp;
    0x0005db70 bl 0x1e248                                        |         fcn_0001e248 (r0, r1, r2, r3);
    0x0005db74 adds r5, 1                                        |         r5++;
    0x0005db76 mov r2, r0                                        |         r2 = r0;
    0x0005db78 mov r1, fp                                        |         r1 = fp;
    0x0005db7a mov r0, r7                                        |         r0 = r7;
    0x0005db7c bl 0x5caa4                                        |         fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005db80 cmp r5, r8                                        |         
                                                                 |         if (r5 == r8) {
    0x0005db82 beq 0x5db88                                       |             goto label_177;
                                                                 |         }
    0x0005db84 ldr r1, [r4, 0xc]                                 |         r1 = *((r4 + 0xc));
    0x0005db86 b 0x5db30                                         |         
                                                                 |     } while (1);
                                                                 | label_177:
    0x0005db88 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005db8c mov.w r1, 0x2000                                  |     r1 = 0x2000;
    0x0005db90 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005db92 add r3, r2                                        |     r3 += r2;
    0x0005db94 ldrh r2, [r3, 0xa]                                |     r2 = *((r3 + 0xa));
    0x0005db96 strh r1, [r3, 0xc]                                |     *((r3 + 0xc)) = r1;
    0x0005db98 orr r2, r2, 6                                     |     r2 |= 6;
    0x0005db9c strh r2, [r3, 0xa]                                |     *((r3 + 0xa)) = r2;
    0x0005db9e b.w 0x5cc56                                       |     goto label_31;
                                                                 | label_160:
    0x0005dba2 mov r1, r3                                        |     r1 = r3;
    0x0005dba4 mov.w ip, 1                                       |     
    0x0005dba8 b 0x5d6d4                                         |     goto label_30;
                                                                 | label_163:
    0x0005dbaa ldr r5, [sp, 0x44]                                |     r5 = var_44h;
    0x0005dbac b 0x5d742                                         |     goto label_32;
                                                                 | label_165:
    0x0005dbae mov r1, r0                                        |     r1 = r0;
    0x0005dbb0 movs r2, 3                                        |     r2 = 3;
    0x0005dbb2 mov r0, fp                                        |     r0 = fp;
    0x0005dbb4 bl 0x1e248                                        |     r0 = fcn_0001e248 (r0, r1, r2, r3);
    0x0005dbb8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005dbba beq.w 0x5cc66                                     |         goto label_1;
                                                                 |     }
    0x0005dbbe ldr.w r7, [fp, 0x18]                              |     r7 = *(arg_18h);
    0x0005dbc2 add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x0005dbc6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005dbc8 cmp.w sl, 0x2d                                    |     
    0x0005dbcc add.w r5, r7, r0, lsl 4                           |     r5 = r7 + (r0 << 4);
    0x0005dbd0 add r7, r3                                        |     r7 += r3;
    0x0005dbd2 ldrsh.w r2, [r7, 8]                               |     r2 = *((r7 + 8));
    0x0005dbd6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0005dbd8 strh r2, [r5, 8]                                  |     *((r5 + 8)) = r2;
    0x0005dbda str r3, [r5, 0x10]                                |     *((r5 + 0x10)) = r3;
    0x0005dbdc ldrb r2, [r7, 0xe]                                |     r2 = *((r7 + 0xe));
    0x0005dbde ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005dbe0 add.w r2, r2, 1                                   |     r2++;
    0x0005dbe4 strb r2, [r7, 0xe]                                |     *((r7 + 0xe)) = r2;
    0x0005dbe6 ittt eq                                           |     
                                                                 |     if (sl == 0x2d) {
    0x0005dbe8 ldrheq r2, [r5, 0xa]                              |         __asm ("ldrheq r2, [r5, 0xa]");
                                                                 |     }
                                                                 |     if (sl != 0x2d) {
    0x0005dbea orreq r2, r2, 0x800                               |         r2 |= 0x800;
                                                                 |     }
                                                                 |     if (sl == 0x2d) {
    0x0005dbee strh r2, [r5, 0xa]                                |         *((r5 + 0xa)) = r2;
                                                                 |     }
    0x0005dbf0 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0005dbf2 ldr r1, [r2, 0x50]                                |     r1 = *((r2 + 0x50));
    0x0005dbf4 ldrh r2, [r7, 0xa]                                |     r2 = *((r7 + 0xa));
    0x0005dbf6 lsls r3, r1, 0x18                                 |     r3 = r1 << 0x18;
    0x0005dbf8 orr r2, r2, 8                                     |     r2 |= 8;
    0x0005dbfc strh r2, [r7, 0xa]                                |     *((r7 + 0xa)) = r2;
                                                                 |     if (r3 < r1) {
    0x0005dbfe bmi.w 0x5da68                                     |         goto label_33;
                                                                 |     }
    0x0005dc02 ldrb r2, [r6]                                     |     r2 = *(r6);
    0x0005dc04 subs r2, 0x2d                                     |     r2 -= 0x2d;
    0x0005dc06 tst.w r2, 0xf7                                    |     
                                                                 |     if ((r2 & 0xf7) != 0) {
    0x0005dc0a bne.w 0x5da68                                     |         goto label_33;
                                                                 |     }
    0x0005dc0e ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x0005dc10 tst.w r1, 1                                       |     
    0x0005dc14 str r1, [sp, 0x48]                                |     var_48h = r1;
                                                                 |     if ((r1 & 1) != 0) {
    0x0005dc16 bne.w 0x5da68                                     |         goto label_33;
                                                                 |     }
    0x0005dc1a ldr.w sl, [r6, 0xc]                               |     sl = *((r6 + 0xc));
    0x0005dc1e mov r0, sl                                        |     r0 = sl;
    0x0005dc20 bl 0xd480                                         |     fcn_0000d480 (r0);
    0x0005dc24 ldr r3, [r6, 0x10]                                |     r3 = *((r6 + 0x10));
    0x0005dc26 mov r4, r0                                        |     r4 = r0;
    0x0005dc28 mov r0, r3                                        |     r0 = r3;
    0x0005dc2a str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0005dc2c bl 0xd480                                         |     r0 = fcn_0000d480 (r0);
    0x0005dc30 cmp r4, r0                                        |     
    0x0005dc32 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0005dc34 ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x0005dc36 mov r2, r0                                        |     r2 = r0;
                                                                 |     if (r4 == r0) {
    0x0005dc38 beq 0x5dc46                                       |         goto label_178;
                                                                 |     }
    0x0005dc3a cmp r4, 0x42                                      |     
                                                                 |     if (r4 < 0x42) {
    0x0005dc3c bls.w 0x5da68                                     |         goto label_33;
                                                                 |     }
    0x0005dc40 cmp r0, 0x42                                      |     
                                                                 |     if (r0 < 0x42) {
    0x0005dc42 bls.w 0x5da68                                     |         goto label_33;
                                                                 |     }
                                                                 | label_178:
    0x0005dc46 lsls r4, r1, 0x15                                 |     r4 = r1 << 0x15;
    0x0005dc48 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005dc4a itete mi                                          |     
                                                                 |     if (r4 >= r1) {
    0x0005dc4c movmi r1, r3                                      |         r1 = r3;
                                                                 |     }
                                                                 |     if (r4 < r1) {
    0x0005dc4e movpl r1, sl                                      |         r1 = sl;
                                                                 |     }
                                                                 |     if (r4 >= r1) {
    0x0005dc50 movmi r2, sl                                      |         r2 = sl;
                                                                 |     }
                                                                 |     if (r4 < r1) {
    0x0005dc52 movpl r2, r3                                      |         r2 = r3;
                                                                 |     }
    0x0005dc54 bl 0x27f10                                        |     fcn_00027f10 (r0, r1, r2);
    0x0005dc58 ldrd r1, r4, [r6, 0xc]                            |     __asm ("ldrd r1, r4, [r6, 0xc]");
                                                                 |     if (r0 == 0) {
    0x0005dc5c cbz r0, 0x5dc96                                   |         goto label_179;
                                                                 |     }
    0x0005dc5e ldr.w r2, [pc, 0x638]                             |     r2 = *(0x0005e298);
    0x0005dc62 ldr r0, [r0, 0xc]                                 |     r0 = *((r0 + 0xc));
    0x0005dc64 add r2, pc                                        |     r2 += pc;
    0x0005dc66 cmp r0, r2                                        |     
                                                                 |     if (r0 == r2) {
    0x0005dc68 beq 0x5dc96                                       |         goto label_179;
                                                                 |     }
    0x0005dc6a ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005dc6c bl 0x27e14                                        |     r0 = fcn_00027e14 (r0, r1);
    0x0005dc70 mov sl, r0                                        |     sl = r0;
    0x0005dc72 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005dc74 beq.w 0x5e5f4                                     |         goto label_180;
                                                                 |     }
                                                                 | label_83:
    0x0005dc78 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005dc7a mov r1, r4                                        |     r1 = r4;
    0x0005dc7c bl 0x27e14                                        |     r0 = fcn_00027e14 (r0, r1);
    0x0005dc80 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005dc82 beq.w 0x5e556                                     |         goto label_181;
                                                                 |     }
                                                                 | label_78:
    0x0005dc86 ldr r1, [r0]                                      |     r1 = *(r0);
    0x0005dc88 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x0005dc8c bl 0xa580                                         |     r0 = fcn_0000a580 (r0);
    0x0005dc90 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005dc92 bne.w 0x5da68                                     |         goto label_33;
                                                                 |     }
                                                                 | label_179:
    0x0005dc96 ldrh r2, [r7, 0xc]                                |     r2 = *((r7 + 0xc));
    0x0005dc98 mov.w sl, 0x800                                   |     sl = 0x800;
    0x0005dc9c orr r2, r2, 0x800                                 |     r2 |= 0x800;
    0x0005dca0 strh r2, [r7, 0xc]                                |     *((r7 + 0xc)) = r2;
    0x0005dca2 b 0x5da6c                                         |     goto label_34;
                                                                 | label_171:
    0x0005dca4 ldr.w r8, [fp, 0xc]                               |     r8 = *(arg_ch);
    0x0005dca8 ldr.w r2, [fp, 0x18]                              |     r2 = *(arg_18h);
    0x0005dcac cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x0005dcb0 ble.w 0x5d93e                                     |         goto label_35;
                                                                 |     }
    0x0005dcb4 str r4, [sp, 0x44]                                |     var_44h = r4;
    0x0005dcb6 mov lr, r3                                        |     lr = r3;
    0x0005dcb8 add.w ip, r2, 0x30                                |     
    0x0005dcbc mov r1, r3                                        |     r1 = r3;
    0x0005dcbe mov r4, r3                                        |     r4 = r3;
    0x0005dcc0 str.w sl, [sp, 0x30]                              |     __asm ("str.w sl, [var_30h]");
                                                                 | label_36:
    0x0005dcc4 ldr r3, [ip, -0x30]                               |     r3 = *((ip - 0x30));
    0x0005dcc8 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0005dcca subs r3, 0x2d                                     |     r3 -= 0x2d;
    0x0005dccc uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0005dcce cmp r3, 0xc                                       |     
                                                                 |     if (r3 > 0xc) {
    0x0005dcd0 bhi 0x5dd5e                                       |         goto label_182;
                                                                 |     }
    0x0005dcd2 movw r2, 0x1f31                                   |     r2 = 0x1f31;
    0x0005dcd6 lsr.w r3, r2, r3                                  |     r3 = r2 >> r3;
    0x0005dcda lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 >= r3) {
    0x0005dcdc bpl 0x5dd5e                                       |         goto label_182;
                                                                 |     }
                                                                 | label_38:
    0x0005dcde ldr sl, [ip, -0x1c]                               |     sl = *((ip - 0x1c));
    0x0005dce2 ldr.w r3, [r5, 0x200]                             |     r3 = *((r5 + 0x200));
    0x0005dce6 cmp sl, r3                                        |     
    0x0005dce8 it eq                                             |     
                                                                 |     if (sl != r3) {
    0x0005dcea orreq r1, r1, 1                                   |         r1 |= 1;
                                                                 |     }
                                                                 |     if (sl == r3) {
    0x0005dcee beq 0x5dd2e                                       |         goto label_37;
                                                                 |     }
    0x0005dcf0 ldr.w fp, [r5, 0x1fc]                             |     fp = *((r5 + 0x1fc));
    0x0005dcf4 cmp.w fp, 1                                       |     
                                                                 |     if (fp <= 1) {
    0x0005dcf8 ble 0x5dd2e                                       |         goto label_37;
                                                                 |     }
    0x0005dcfa add.w r2, r5, 0x200                               |     r2 = r5 + 0x200;
    0x0005dcfe movs r3, 1                                        |     r3 = 1;
    0x0005dd00 b 0x5dd08                                         |     
                                                                 |     while (sl != r0) {
    0x0005dd02 adds r3, 1                                        |         r3++;
    0x0005dd04 cmp r3, fp                                        |         
                                                                 |         if (r3 == fp) {
    0x0005dd06 beq 0x5dd2e                                       |             goto label_37;
                                                                 |         }
    0x0005dd08 ldr r0, [r2, 4]!                                  |         r0 = *((r2 += 4));
    0x0005dd0c cmp sl, r0                                        |         
    0x0005dd0e bne 0x5dd02                                       |         
                                                                 |     }
    0x0005dd10 mov.w sl, 1                                       |     sl = 1;
    0x0005dd14 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0005dd18 rsb.w r0, r3, 0x20                                |     r0 = 0x20 - r3;
    0x0005dd1c lsl.w r2, sl, r2                                  |     r2 = sl << r2;
    0x0005dd20 lsr.w r0, sl, r0                                  |     r0 = sl >> r0;
    0x0005dd24 lsl.w r3, sl, r3                                  |     r3 = sl << r3;
    0x0005dd28 orrs r2, r0                                       |     r2 |= r0;
    0x0005dd2a orrs r1, r3                                       |     r1 |= r3;
    0x0005dd2c orrs r4, r2                                       |     r4 |= r2;
                                                                 | label_37:
    0x0005dd2e add.w lr, lr, 1                                   |     lr++;
    0x0005dd32 add.w ip, ip, 0x30                                |     
    0x0005dd36 cmp lr, r8                                        |     
                                                                 |     if (lr != r8) {
    0x0005dd38 bne 0x5dcc4                                       |         goto label_36;
                                                                 |     }
    0x0005dd3a mov r3, r4                                        |     r3 = r4;
    0x0005dd3c ldr r4, [sp, 0x44]                                |     r4 = var_44h;
    0x0005dd3e ands r3, r7                                       |     r3 &= r7;
    0x0005dd40 ands r6, r1                                       |     r6 &= r1;
    0x0005dd42 mov r7, r3                                        |     r7 = r3;
    0x0005dd44 mov.w fp, 0                                       |     
    0x0005dd48 orrs.w r3, r6, r7                                 |     r3 = r6 | r7;
    0x0005dd4c ldr.w sl, [sp, 0x30]                              |     sl = var_30h;
    0x0005dd50 and r4, r4, 1                                     |     r4 &= 1;
    0x0005dd54 str.w fp, [sp, 0x30]                              |     __asm ("str.w fp, [var_30h]");
    0x0005dd58 it eq                                             |     
                                                                 |     if (r3 != r6) {
    0x0005dd5a moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x0005dd5c b 0x5d658                                         |     goto label_20;
                                                                 | label_182:
    0x0005dd5e ldrh r3, [ip, -0x24]                              |     r3 = *((ip - 0x24));
    0x0005dd62 cmp r3, 0x40                                      |     
                                                                 |     if (r3 != 0x40) {
    0x0005dd64 bne 0x5dd2e                                       |         goto label_37;
                                                                 |     }
    0x0005dd66 b 0x5dcde                                         |     goto label_38;
                                                                 | label_141:
    0x0005dd68 ldr.w r3, [sb, 0x2c]                              |     r3 = *((sb + 0x2c));
    0x0005dd6c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005dd6e beq.w 0x5d1ae                                     |         goto label_39;
                                                                 |     }
    0x0005dd72 ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x0005dd76 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0005dd78 bne.w 0x5d1ae                                     |         goto label_39;
                                                                 |     }
    0x0005dd7c cmp r5, 0x34                                      |     
    0x0005dd7e mov r3, sb                                        |     r3 = sb;
                                                                 |     if (r5 == 0x34) {
    0x0005dd80 beq.w 0x5e458                                     |         goto label_183;
                                                                 |     }
    0x0005dd84 rsb.w sl, sl, 0x46                                |     sl = 0x46 - sl;
    0x0005dd88 mov sb, r6                                        |     sb = r6;
    0x0005dd8a uxtb.w sl, sl                                     |     sl = (int8_t) sl;
    0x0005dd8e mov r4, sb                                        |     r4 = sb;
    0x0005dd90 mov r6, r3                                        |     r6 = r3;
    0x0005dd92 ldr.w sb, [sp, 0x28]                              |     sb = var_28h;
    0x0005dd96 str.w sl, [sp, 0x20]                              |     __asm ("str.w sl, [x]");
    0x0005dd9a ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0005dd9e b.w 0x5d1d8                                       |     goto label_40;
                                                                 | label_166:
    0x0005dda2 ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x0005dda4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005dda6 beq.w 0x5d80c                                     |         goto label_41;
                                                                 |     }
    0x0005ddaa ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x0005ddae cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0005ddb0 bne.w 0x5d80c                                     |         goto label_41;
                                                                 |     }
    0x0005ddb4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005ddb6 movs r5, 0                                        |     r5 = 0;
    0x0005ddb8 ldr.w r0, [pc, 0x4e0]                             |     r0 = *(0x0005e29c);
    0x0005ddbc ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0005ddbe add r0, pc                                        |     r0 += pc;
    0x0005ddc0 add.w ip, r3, -1                                  |     
    0x0005ddc4 ldr.w r3, [pc, 0x4d8]                             |     
    0x0005ddc8 add r3, pc                                        |     r3 = 0xbc06c;
    0x0005ddca add.w r7, r3, 0x9c0                               |     r7 = r3 + 0x9c0;
                                                                 | label_42:
    0x0005ddce ldr.w r1, [r7, r5, lsl 3]                         |     offset_0 = r5 << 3;
                                                                 |     r1 = *((r7 + offset_0));
    0x0005ddd2 mov r4, ip                                        |     r4 = ip;
    0x0005ddd4 subs r1, 1                                        |     r1--;
                                                                 |     do {
                                                                 | label_43:
    0x0005ddd6 ldrb r3, [r4, 1]!                                 |         r3 = *((r4 += 1));
    0x0005ddda ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x0005ddde cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0005dde0 beq 0x5ddfa                                       |             goto label_184;
                                                                 |         }
    0x0005dde2 add r3, r0                                        |         r3 += r0;
    0x0005dde4 add r2, r0                                        |         r2 += r0;
    0x0005dde6 ldrb.w lr, [r3, 0x140]                            |         
    0x0005ddea ldrb.w r3, [r2, 0x140]                            |         r3 = *((r2 + 0x140));
    0x0005ddee cmp lr, r3                                        |         
    0x0005ddf0 beq 0x5ddd6                                       |         
                                                                 |     } while (lr == r3);
    0x0005ddf2 adds r5, 1                                        |     r5++;
    0x0005ddf4 cmp r5, 4                                         |     
                                                                 |     if (r5 != 4) {
    0x0005ddf6 bne 0x5ddce                                       |         goto label_42;
                                                                 |     }
    0x0005ddf8 b 0x5d80c                                         |     goto label_41;
                                                                 | label_184:
    0x0005ddfa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005ddfc bne 0x5ddd6                                       |         goto label_43;
                                                                 |     }
    0x0005ddfe mov r8, r3                                        |     r8 = r3;
    0x0005de00 ldr.w r3, [pc, 0x4a0]                             |     
    0x0005de04 ldr.w sb, [sb, 8]                                 |     sb = *((sb + 8));
    0x0005de08 add r3, pc                                        |     r3 = 0xbc0b0;
    0x0005de0a add.w r3, r3, r5, lsl 3                           |     r3 += (r5 << 3);
    0x0005de0e mov r4, sb                                        |     r4 = sb;
    0x0005de10 ldr.w sb, [sp, 0x28]                              |     sb = var_28h;
    0x0005de14 ldrb.w sl, [r3, 0x9c4]                            |     sl = *((r3 + 0x9c4));
    0x0005de18 str.w sl, [sp, 0x20]                              |     __asm ("str.w sl, [x]");
    0x0005de1c ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0005de20 b.w 0x5d1d8                                       |     goto label_40;
                                                                 | label_158:
    0x0005de24 ldrd r8, r4, [sp, 0x54]                           |     __asm ("ldrd r8, r4, [var_54h]");
    0x0005de28 mov.w r3, 0x200                                   |     r3 = 0x200;
    0x0005de2c str.w fp, [sp, 0x54]                              |     __asm ("str.w fp, [var_54h]");
    0x0005de30 ldr.w fp, [sp, 0x40]                              |     fp = var_40h;
    0x0005de34 strd r6, r7, [r8, 0x1a0]                          |     __asm ("strd r6, r7, aav.0x000000ff");
    0x0005de38 strh r3, [r4, 0xc]                                |     *((r4 + 0xc)) = r3;
    0x0005de3a mov.w r3, -1                                      |     r3 = -1;
    0x0005de3e str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0005de40 orrs.w r3, r6, r7                                 |     r3 = r6 | r7;
                                                                 |     if (r3 != r6) {
    0x0005de44 beq 0x5de56                                       |         
    0x0005de46 movs r3, 1                                        |         r3 = 1;
    0x0005de48 strb.w r3, [fp, 9]                                |         *(arg_9h) = r3;
    0x0005de4c ldr.w r3, [r8, 0xc]                               |         r3 = *((r8 + 0xc));
    0x0005de50 cmp r3, 2                                         |         
                                                                 |         if (r3 == 2) {
    0x0005de52 beq.w 0x5e2c0                                     |             goto label_185;
                                                                 |         }
                                                                 |     }
                                                                 | label_62:
    0x0005de56 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0005de58 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0005de5a orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0005de5c beq.w 0x5d95a                                     |         goto label_29;
                                                                 |     }
    0x0005de60 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
                                                                 | label_51:
    0x0005de64 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x0005de66 mov.w r5, -1                                      |     r5 = -1;
    0x0005de6a ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x0005de6c movs r6, 2                                        |     r6 = 2;
    0x0005de6e mov.w sl, 1                                       |     sl = 1;
    0x0005de72 mov r4, r5                                        |     r4 = r5;
    0x0005de74 and r2, r2, 1                                     |     r2 &= 1;
    0x0005de78 str.w fp, [sp, 0x5c]                              |     __asm ("str.w fp, [var_5ch]");
    0x0005de7c str r2, [sp, 0x58]                                |     var_58h = r2;
                                                                 | label_44:
    0x0005de7e subs.w sb, r3, 1                                  |     sb = r3 - 1;
    0x0005de82 ldr.w r5, [r8, 0x18]                              |     r5 = *((r8 + 0x18));
                                                                 |     if (sb < r3) {
    0x0005de86 bmi.w 0x5dfe4                                     |         goto label_186;
                                                                 |     }
                                                                 | label_46:
    0x0005de8a ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x0005de8c ldrh r3, [r5, 0xa]                                |     r3 = *((r5 + 0xa));
    0x0005de8e cmp r0, r4                                        |     
    0x0005de90 bic r3, r3, 0x40                                  |     r3 = BIT_MASK (r3, 0x40);
    0x0005de94 strh r3, [r5, 0xa]                                |     *((r5 + 0xa)) = r3;
                                                                 |     if (r0 == r4) {
    0x0005de96 beq.w 0x5dfd6                                     |         goto label_187;
                                                                 |     }
    0x0005de9a ldr.w r3, [r7, 0x200]                             |     r3 = *((r7 + 0x200));
    0x0005de9e cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x0005dea0 beq.w 0x5e00c                                     |         goto label_188;
                                                                 |     }
    0x0005dea4 ldr.w ip, [r7, 0x1fc]                             |     ip = *((r7 + 0x1fc));
    0x0005dea8 cmp.w ip, 1                                       |     
                                                                 |     if (ip <= 1) {
    0x0005deac ble.w 0x5dfd6                                     |         goto label_187;
                                                                 |     }
    0x0005deb0 add.w r2, r7, 0x200                               |     r2 = r7 + 0x200;
    0x0005deb4 movs r3, 1                                        |     r3 = 1;
    0x0005deb6 b 0x5dec0                                         |     
                                                                 |     while (r0 != r1) {
    0x0005deb8 adds r3, 1                                        |         r3++;
    0x0005deba cmp ip, r3                                        |         
                                                                 |         if (ip == r3) {
    0x0005debc beq.w 0x5dfd6                                     |             goto label_187;
                                                                 |         }
    0x0005dec0 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0005dec4 cmp r0, r1                                        |         
    0x0005dec6 bne 0x5deb8                                       |         
                                                                 |     }
    0x0005dec8 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0005decc rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x0005ded0 lsr.w r1, sl, r1                                  |     r1 = sl >> r1;
    0x0005ded4 lsl.w r2, sl, r2                                  |     r2 = sl << r2;
    0x0005ded8 lsl.w r3, sl, r3                                  |     r3 = sl << r3;
    0x0005dedc orrs r2, r1                                       |     r2 |= r1;
    0x0005dede ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0005dee0 ands r2, r1                                       |     r2 &= r1;
    0x0005dee2 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x0005dee4 ands r3, r1                                       |     r3 &= r1;
                                                                 | label_49:
    0x0005dee6 orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0005dee8 beq 0x5dfd6                                       |         goto label_187;
                                                                 |     }
    0x0005deea mov r4, r5                                        |     r4 = r5;
    0x0005deec ldr r5, [r5, 0x18]                                |     r5 = *((r5 + 0x18));
    0x0005deee ldr r3, [r4], 0x30                                |     r3 = *(r4);
                                                                 |     r4 += 0x30;
    0x0005def2 mov fp, r0                                        |     
    0x0005def4 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0005def6 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 |     do {
    0x0005def8 ldr r3, [r4, -0x1c]                               |         r3 = *((r4 - 0x1c));
    0x0005defc cmp fp, r3                                        |         
                                                                 |         if (fp == r3) {
    0x0005defe beq 0x5df90                                       |             goto label_189;
                                                                 |         }
    0x0005df00 ldrh r3, [r4, -0x26]                              |         r3 = *((r4 - 0x26));
    0x0005df04 bic r3, r3, 0x40                                  |         r3 = BIT_MASK (r3, 0x40);
    0x0005df08 lsls r3, r3, 0x10                                 |         r3 <<= 0x10;
    0x0005df0a lsrs r3, r3, 0x10                                 |         r3 >>= 0x10;
                                                                 | label_45:
    0x0005df0c add.w sb, sb, -1                                  |         sb += -1;
    0x0005df10 strh r3, [r4, -0x26]                              |         *((r4 - 0x26)) = r3;
    0x0005df14 cmp.w sb, -1                                      |         
    0x0005df18 add.w r4, r4, 0x30                                |         r4 += 0x30;
    0x0005df1c bne 0x5def8                                       |         
                                                                 |     } while (sb != -1);
    0x0005df1e ldr.w r6, [r8, 0xc]                               |     r6 = *((r8 + 0xc));
    0x0005df22 ldr.w fp, [sp, 0x5c]                              |     fp = var_5ch;
    0x0005df26 ldr.w r5, [r8, 0x18]                              |     r5 = *((r8 + 0x18));
    0x0005df2a subs r6, 1                                        |     r6--;
                                                                 |     if (r6 >= 1) {
    0x0005df2c bpl 0x5e018                                       |         goto label_190;
                                                                 |     }
    0x0005df2e movs r3, 0                                        |     r3 = 0;
    0x0005df30 movs r1, 0x31                                     |     r1 = 0x31;
    0x0005df32 ldr r0, [sp, 0x50]                                |     r0 = var_50h;
    0x0005df34 mov r2, r3                                        |     r2 = r3;
    0x0005df36 bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005df3a mov r1, r0                                        |     r1 = r0;
    0x0005df3c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005df3e beq.w 0x5d95a                                     |         goto label_29;
                                                                 |     }
    0x0005df42 movs r7, 0                                        |     r7 = 0;
                                                                 | label_50:
    0x0005df44 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0005df46 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0005df48 ands r3, r3, 3                                    |     r3 &= 3;
                                                                 |     if (r3 != r3) {
    0x0005df4c beq 0x5df58                                       |         
    0x0005df4e ldr r2, [r2, 0x24]                                |         r2 = *((r2 + 0x24));
    0x0005df50 str r2, [r1, 0x24]                                |         *((r1 + 0x24)) = r2;
    0x0005df52 ldr r2, [r1, 4]                                   |         r2 = *((r1 + 4));
    0x0005df54 orrs r2, r3                                       |         r2 |= r3;
    0x0005df56 str r2, [r1, 4]                                   |         *((r1 + 4)) = r2;
                                                                 |     }
    0x0005df58 movs r2, 3                                        |     r2 = 3;
    0x0005df5a str r7, [r1, 0x14]                                |     *((r1 + 0x14)) = r7;
    0x0005df5c mov r0, fp                                        |     r0 = fp;
    0x0005df5e bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x0005df62 mov r1, fp                                        |     r1 = fp;
    0x0005df64 mov r2, r0                                        |     r2 = r0;
    0x0005df66 mov r5, r0                                        |     r5 = r0;
    0x0005df68 ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005df6a bl 0x5caa4                                        |     fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005df6e ldr.w r2, [fp, 0x18]                              |     r2 = *(arg_18h);
    0x0005df72 add.w r5, r5, r5, lsl 1                           |     r5 += (r5 << 1);
    0x0005df76 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0005df78 add.w r3, r2, r5, lsl 4                           |     r3 = r2 + (r5 << 4);
    0x0005df7c add r2, r1                                        |     r2 += r1;
    0x0005df7e ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0005df80 str r1, [r3, 0x10]                                |     *((r3 + 0x10)) = r1;
    0x0005df82 ldrsh.w r1, [r2, 8]                               |     r1 = *((r2 + 8));
    0x0005df86 strh r1, [r3, 8]                                  |     *((r3 + 8)) = r1;
    0x0005df88 ldrb r3, [r2, 0xe]                                |     r3 = *((r2 + 0xe));
    0x0005df8a adds r3, 1                                        |     r3++;
    0x0005df8c strb r3, [r2, 0xe]                                |     *((r2 + 0xe)) = r3;
    0x0005df8e b 0x5d95a                                         |     goto label_29;
                                                                 | label_189:
    0x0005df90 ldr r3, [r4, -0x18]                               |     r3 = *((r4 - 0x18));
    0x0005df94 cmp r3, r5                                        |     
    0x0005df96 beq 0x5dfa6                                       |     
                                                                 |     while (r3 != 0) {
                                                                 | label_47:
    0x0005df98 cmp r6, 1                                         |         
                                                                 |         if (r6 == 1) {
    0x0005df9a beq 0x5dfe4                                       |             goto label_186;
                                                                 |         }
    0x0005df9c ldr.w r3, [r8, 0xc]                               |         r3 = *((r8 + 0xc));
    0x0005dfa0 mov r4, fp                                        |         r4 = fp;
    0x0005dfa2 movs r6, 1                                        |         r6 = 1;
    0x0005dfa4 b 0x5de7e                                         |         goto label_44;
    0x0005dfa6 adds r3, r5, 2                                    |         r3 = r5 + 2;
    0x0005dfa8 ldr r2, [r4, -0x30]                               |         r2 = *((r4 - 0x30));
                                                                 |         if (r3 == r5) {
    0x0005dfac beq 0x5dfea                                       |             goto label_191;
                                                                 |         }
                                                                 | label_48:
    0x0005dfae ldr r0, [r2, 0x10]                                |         r0 = *((r2 + 0x10));
    0x0005dfb0 str r2, [sp, 0x40]                                |         var_40h = r2;
    0x0005dfb2 bl 0xd480                                         |         fcn_0000d480 (r0);
    0x0005dfb6 ldr r2, [sp, 0x40]                                |         r2 = var_40h;
    0x0005dfb8 mov r3, r0                                        |         r3 = r0;
    0x0005dfba str r3, [sp, 0x40]                                |         var_40h = r3;
    0x0005dfbc ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x0005dfbe bl 0xd480                                         |         fcn_0000d480 (r0);
    0x0005dfc2 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0005dfc4 cmp r3, 0                                         |         
    0x0005dfc6 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x0005dfc8 cmpne r0, r3                                      |             __asm ("cmpne r0, r3");
                                                                 |         }
    0x0005dfca bne 0x5df98                                       |         
                                                                 |     }
    0x0005dfcc ldrh r3, [r4, -0x26]                              |     r3 = *((r4 - 0x26));
    0x0005dfd0 orr r3, r3, 0x40                                  |     r3 |= 0x40;
    0x0005dfd4 b 0x5df0c                                         |     goto label_45;
                                                                 | label_187:
    0x0005dfd6 add.w sb, sb, -1                                  |     sb += -1;
    0x0005dfda adds r5, 0x30                                     |     r5 += 0x30;
    0x0005dfdc cmp.w sb, -1                                      |     
                                                                 |     if (sb != -1) {
    0x0005dfe0 bne.w 0x5de8a                                     |         goto label_46;
                                                                 |     }
                                                                 | label_186:
    0x0005dfe4 ldr.w fp, [sp, 0x5c]                              |     fp = var_5ch;
    0x0005dfe8 b 0x5d95a                                         |     goto label_29;
                                                                 | label_191:
    0x0005dfea ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x0005dfec ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005dfee cmp r3, 0                                         |     
    0x0005dff0 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x0005dff2 cmpne r1, 0                                       |         __asm ("cmpne r1, 0");
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0005dff4 beq 0x5e012                                       |         goto label_192;
                                                                 |     }
    0x0005dff6 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005dff8 mov.w r3, -1                                      |     r3 = -1;
    0x0005dffc ldr r0, [sp, 0x50]                                |     r0 = var_50h;
    0x0005dffe bl 0x3480c                                        |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x0005e002 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005e004 bne 0x5df98                                       |         goto label_47;
                                                                 |     }
    0x0005e006 ldr r2, [r4, -0x30]                               |     r2 = *((r4 - 0x30));
    0x0005e00a b 0x5dfae                                         |     goto label_48;
                                                                 | label_188:
    0x0005e00c ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0005e00e movs r2, 0                                        |     r2 = 0;
    0x0005e010 b 0x5dee6                                         |     goto label_49;
                                                                 | label_192:
    0x0005e012 cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x0005e014 bne 0x5df98                                       |         goto label_47;
                                                                 |     }
    0x0005e016 b 0x5dfae                                         |     goto label_48;
                                                                 | label_190:
    0x0005e018 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x0005e01a movs r2, 0                                        |     r2 = 0;
    0x0005e01c ldr.w r8, [sp, 0x34]                              |     r8 = var_34h;
    0x0005e020 adds r5, 0x30                                     |     r5 += 0x30;
    0x0005e022 mov r7, r2                                        |     r7 = r2;
                                                                 |     do {
    0x0005e024 ldrh r3, [r5, -0x26]                              |         r3 = *((r5 - 0x26));
    0x0005e028 lsls r0, r3, 0x19                                 |         r0 = r3 << 0x19;
                                                                 |         if (r0 < r3) {
    0x0005e02a bpl 0x5e052                                       |             
    0x0005e02c ldr r3, [r5, -0x30]                               |             r3 = *((r5 - 0x30));
    0x0005e030 ldr r2, [r3, 0x10]                                |             r2 = *((r3 + 0x10));
                                                                 |             if (r2 != 0) {
    0x0005e032 cbz r2, 0x5e042                                   |                 
    0x0005e034 movs r3, 0                                        |                 r3 = 0;
    0x0005e036 mov r1, r2                                        |                 r1 = r2;
    0x0005e038 mov r0, r8                                        |                 r0 = r8;
    0x0005e03a mov r2, r3                                        |                 r2 = r3;
    0x0005e03c bl 0x2dd00                                        |                 r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005e040 mov r2, r0                                        |                 r2 = r0;
                                                                 |             }
    0x0005e042 mov r1, r7                                        |             r1 = r7;
    0x0005e044 ldr r0, [r4]                                      |             r0 = *(r4);
    0x0005e046 bl 0x2bffc                                        |             fcn_0002bffc (r0, r1, r2);
    0x0005e04a ldr r3, [r5, -0x30]                               |             r3 = *((r5 - 0x30));
    0x0005e04e mov r7, r0                                        |             r7 = r0;
    0x0005e050 ldr r2, [r3, 0xc]                                 |             r2 = *((r3 + 0xc));
                                                                 |         }
    0x0005e052 subs r6, 1                                        |         r6--;
    0x0005e054 adds r5, 0x30                                     |         r5 += 0x30;
    0x0005e056 adds r1, r6, 1                                    |         r1 = r6 + 1;
    0x0005e058 bne 0x5e024                                       |         
                                                                 |     } while (r1 != r6);
                                                                 |     if (r2 != 0) {
    0x0005e05a cbz r2, 0x5e06a                                   |         
    0x0005e05c movs r3, 0                                        |         r3 = 0;
    0x0005e05e mov r1, r2                                        |         r1 = r2;
    0x0005e060 ldr r0, [sp, 0x34]                                |         r0 = var_34h;
    0x0005e062 mov r2, r3                                        |         r2 = r3;
    0x0005e064 bl 0x2dd00                                        |         r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005e068 mov r2, r0                                        |         r2 = r0;
                                                                 |     }
    0x0005e06a movs r1, 0x31                                     |     r1 = 0x31;
    0x0005e06c ldr r0, [sp, 0x50]                                |     r0 = var_50h;
    0x0005e06e movs r3, 0                                        |     r3 = 0;
    0x0005e070 bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005e074 mov r1, r0                                        |     r1 = r0;
    0x0005e076 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005e078 bne.w 0x5df44                                     |         goto label_50;
                                                                 |     }
    0x0005e07c cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0005e07e beq.w 0x5d95a                                     |         goto label_29;
                                                                 |     }
    0x0005e082 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0005e084 mov r1, r7                                        |     r1 = r7;
    0x0005e086 bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
    0x0005e08a b 0x5d95a                                         |     goto label_29;
                                                                 | label_156:
    0x0005e08c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005e08e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005e092 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005e094 bne.w 0x5d95a                                     |         goto label_29;
                                                                 |     }
                                                                 | label_157:
    0x0005e098 vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x0005e09c mov.w r3, 0x200                                   |     r3 = 0x200;
    0x0005e0a0 mov.w r2, -1                                      |     r2 = -1;
    0x0005e0a4 vstr d16, [r8, 0x1a0]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x0005e0a8 strh r3, [r4, 0xc]                                |     *((r4 + 0xc)) = r3;
    0x0005e0aa movs r3, 1                                        |     r3 = 1;
    0x0005e0ac str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0005e0ae strb.w r3, [fp, 9]                                |     *(arg_9h) = r3;
    0x0005e0b2 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x0005e0b6 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0005e0b8 beq.w 0x5e2bc                                     |         goto label_193;
                                                                 |     }
    0x0005e0bc str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0005e0be str r2, [sp, 0x30]                                |     var_30h = r2;
    0x0005e0c0 b 0x5de64                                         |     goto label_51;
                                                                 | label_161:
    0x0005e0c2 mov ip, r3                                        |     
    0x0005e0c4 mov r1, r3                                        |     r1 = r3;
    0x0005e0c6 b.w 0x5d6d4                                       |     goto label_30;
                                                                 | label_127:
    0x0005e0ca ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005e0cc ldr r3, [r3]                                      |     r3 = *(r3);
    0x0005e0ce ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005e0d2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005e0d4 beq.w 0x5e23e                                     |         goto label_194;
                                                                 |     }
    0x0005e0d8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005e0da ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005e0de cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005e0e0 beq.w 0x5e20a                                     |         goto label_61;
                                                                 |     }
    0x0005e0e4 ldr r7, [pc, 0x1c0]                               |     
    0x0005e0e6 add r7, pc                                        |     r7 = 0xbc392;
    0x0005e0e8 b.w 0x5d012                                       |     goto label_52;
                                                                 | label_120:
    0x0005e0ec add.w r8, r8, 2                                   |     r8 += 2;
    0x0005e0f0 b.w 0x5ce8a                                       |     goto label_53;
                                                                 | label_130:
    0x0005e0f4 movw r2, 0x103                                    |     r2 = 0x103;
    0x0005e0f8 mov r0, fp                                        |     r0 = fp;
    0x0005e0fa bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x0005e0fe mov r1, fp                                        |     r1 = fp;
    0x0005e100 mov r5, r0                                        |     r5 = r0;
    0x0005e102 mov r2, r0                                        |     r2 = r0;
    0x0005e104 ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005e106 bl 0x5caa4                                        |     fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005e10a b.w 0x5d07a                                       |     goto label_54;
                                                                 | label_117:
    0x0005e10e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0005e110 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0005e112 lsls r3, r3, 8                                    |     r3 <<= 8;
                                                                 |     if (r3 < r3) {
    0x0005e114 bmi.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005e118 ldrsh.w r8, [r5, 0x20]                            |     r8 = *((r5 + 0x20));
    0x0005e11c ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x0005e11e mov r1, r8                                        |     r1 = r8;
    0x0005e120 ldr.w r0, [r4, 0xe4]                              |     r0 = *((r4 + 0xe4));
    0x0005e124 bl 0x1f73c                                        |     fcn_0001f73c (r0, r1);
    0x0005e128 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x0005e12a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005e12c beq.w 0x5e4cc                                     |         goto label_195;
                                                                 |     }
    0x0005e130 blx 0x9bd8                                        |     r0 = fcn_00009bd8 ();
    0x0005e134 cmp r0, 3                                         |     
                                                                 |     if (r0 == 3) {
    0x0005e136 beq.w 0x5e526                                     |         goto label_196;
                                                                 |     }
    0x0005e13a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005e13c cmp.w r8, 0x1f                                    |     
    0x0005e140 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x0005e142 ldr.w r2, [r1, 0xd8]                              |     r2 = *((r1 + 0xd8));
                                                                 |     if (r8 <= 0x1f) {
    0x0005e146 ble.w 0x5e4ba                                     |         goto label_197;
                                                                 |     }
    0x0005e14a orr r2, r2, 0x80000000                            |     r2 |= 0x80000000;
    0x0005e14e str.w r2, [r1, 0xd8]                              |     __asm ("str.w r2, [r1, 0xd8]");
                                                                 | label_58:
    0x0005e152 movs r4, 0                                        |     r4 = 0;
    0x0005e154 mov sb, r4                                        |     sb = r4;
    0x0005e156 mov r5, r4                                        |     r5 = r4;
    0x0005e158 b.w 0x5cf9a                                       |     goto label_55;
                                                                 | label_149:
    0x0005e15c ldr.w r7, [fp, 0x18]                              |     r7 = *(arg_18h);
    0x0005e160 add.w r3, r0, r0, lsl 1                           |     r3 = r0 + (r0 << 1);
    0x0005e164 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005e166 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0005e16a add.w r3, r7, r3, lsl 4                           |     r3 = r7 + (r3 << 4);
    0x0005e16e add r7, r2                                        |     r7 += r2;
    0x0005e170 ldr r2, [r6, 0x1c]                                |     r2 = *((r6 + 0x1c));
    0x0005e172 vstr d16, [r3, 0x20]                              |     __asm ("vstr d16, [r3, 0x20]");
    0x0005e176 ldrd r0, r1, [r7, 0x28]                           |     __asm ("ldrd r0, r1, [r7, 0x28]");
    0x0005e17a str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0005e17c ldrsh.w r2, [r6, 0x20]                            |     r2 = *((r6 + 0x20));
    0x0005e180 str r2, [r3, 0x18]                                |     *((r3 + 0x18)) = r2;
    0x0005e182 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0005e184 str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0005e186 ldrsh.w r2, [r7, 8]                               |     r2 = *((r7 + 8));
    0x0005e18a strh r2, [r3, 8]                                  |     *((r3 + 8)) = r2;
    0x0005e18c movs r2, 4                                        |     r2 = 4;
    0x0005e18e strh r2, [r3, 0xc]                                |     *((r3 + 0xc)) = r2;
    0x0005e190 ldrh r2, [r7, 0xa]                                |     r2 = *((r7 + 0xa));
    0x0005e192 orr r2, r2, 8                                     |     r2 |= 8;
    0x0005e196 strh r2, [r7, 0xa]                                |     *((r7 + 0xa)) = r2;
    0x0005e198 ldrb r2, [r7, 0xe]                                |     r2 = *((r7 + 0xe));
    0x0005e19a adds r2, 1                                        |     r2++;
    0x0005e19c strb r2, [r7, 0xe]                                |     *((r7 + 0xe)) = r2;
    0x0005e19e strd r0, r1, [r3, 0x28]                           |     __asm ("strd r0, r1, [r3, 0x28]");
    0x0005e1a2 b.w 0x5d3fe                                       |     goto label_28;
                                                                 | label_114:
    0x0005e1a6 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0005e1a8 mov sl, r5                                        |     sl = r5;
    0x0005e1aa ldr.w sb, [r2, 0x14]                              |     sb = *((r2 + 0x14));
    0x0005e1ae b.w 0x5ce22                                       |     goto label_56;
                                                                 | label_119:
    0x0005e1b2 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0005e1b6 bne.w 0x5cec2                                     |         goto label_57;
                                                                 |     }
                                                                 | label_74:
    0x0005e1ba ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005e1bc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005e1be bne 0x5e152                                       |         goto label_58;
                                                                 |     }
    0x0005e1c0 b.w 0x5d3fe                                       |     goto label_28;
                                                                 | label_129:
    0x0005e1c4 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x0005e1c6 mov r1, r8                                        |     r1 = r8;
    0x0005e1c8 mov r2, r7                                        |     r2 = r7;
    0x0005e1ca mov r0, r5                                        |     r0 = r5;
    0x0005e1cc bl 0x1dd3c                                        |     fcn_0001dd3c (r0, r1, r2);
    0x0005e1d0 movs r1, 0x39                                     |     r1 = 0x39;
    0x0005e1d2 mov r2, r0                                        |     r2 = r0;
    0x0005e1d4 mov r3, sb                                        |     r3 = sb;
    0x0005e1d6 mov r0, r5                                        |     r0 = r5;
    0x0005e1d8 bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x0005e1dc mov r1, r0                                        |     r1 = r0;
    0x0005e1de cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005e1e0 beq.w 0x5e472                                     |         goto label_198;
                                                                 |     }
    0x0005e1e4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005e1e6 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005e1e8 ands r3, r3, 3                                    |     r3 &= 3;
                                                                 |     if (r3 != r3) {
    0x0005e1ec bne.w 0x5d052                                     |         goto label_59;
                                                                 |     }
                                                                 | label_70:
    0x0005e1f0 movw r2, 0x103                                    |     r2 = 0x103;
    0x0005e1f4 mov r0, fp                                        |     r0 = fp;
    0x0005e1f6 bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x0005e1fa mov r1, fp                                        |     r1 = fp;
    0x0005e1fc mov r5, r0                                        |     r5 = r0;
    0x0005e1fe mov r2, r0                                        |     r2 = r0;
    0x0005e200 ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005e202 bl 0x5caa4                                        |     fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
    0x0005e206 b.w 0x5d088                                       |     goto label_60;
                                                                 | label_61:
    0x0005e20a ldr r5, [r6, 8]                                   |     r5 = *((r6 + 8));
    0x0005e20c cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0005e20e beq.w 0x5e476                                     |         goto label_199;
                                                                 |     }
    0x0005e210 strh r2, [r6, 8]                                  |     *((r6 + 8)) = r2;
    0x0005e212 mov r0, r5                                        |     r0 = r5;
    0x0005e214 blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x0005e218 bic r3, r0, 0xc0000000                            |     r3 = BIT_MASK (r0, 0xc0000000);
    0x0005e21c subs r3, 1                                        |     r3--;
    0x0005e21e ldrb r2, [r5, r3]                                 |     r2 = *((r5 + r3));
    0x0005e220 add r3, r5                                        |     r3 += r5;
                                                                 | label_71:
    0x0005e222 ldr r1, [pc, 0x88]                                |     
    0x0005e224 cmp r2, 0x40                                      |     
    0x0005e226 ldr r7, [pc, 0x88]                                |     
    0x0005e228 it eq                                             |     
                                                                 |     if (r2 != 0x40) {
    0x0005e22a moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x0005e22c add r1, pc                                        |     r1 = 0xbc4de;
    0x0005e22e add r2, r1                                        |     r2 += r1;
    0x0005e230 add r7, pc                                        |     r7 = 0xbc4e6;
    0x0005e232 ldrb.w r2, [r2, 0x140]                            |     r2 = *((r2 + 0x140));
    0x0005e236 adds r2, 1                                        |     r2++;
    0x0005e238 strb r2, [r3]                                     |     *(r3) = r2;
    0x0005e23a b.w 0x5d012                                       |     goto label_52;
                                                                 | label_194:
    0x0005e23e ldrh r3, [r7, 0xa]                                |     r3 = *((r7 + 0xa));
    0x0005e240 ldr.w r2, [sb, 8]                                 |     r2 = *((sb + 8));
    0x0005e244 orr r3, r3, 0x400                                 |     r3 |= 0x400;
    0x0005e248 strh r3, [r7, 0xa]                                |     *((r7 + 0xa)) = r3;
    0x0005e24a ldrb r3, [r2]                                     |     r3 = *(r2);
                                                                 |     if (r3 == 0) {
    0x0005e24c cbz r3, 0x5e27a                                   |         goto label_200;
                                                                 |     }
    0x0005e24e ldr r5, [pc, 0x64]                                |     
    0x0005e250 ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x0005e252 add r5, pc                                        |     r5 = 0xbc50c;
                                                                 |     do {
    0x0005e254 adds r7, r5, r3                                   |         r7 = r5 + r3;
    0x0005e256 ldrb.w r0, [r7, 0x40]                             |         r0 = *((r7 + 0x40));
    0x0005e25a ldrb.w r7, [r7, 0x140]                            |         r7 = *((r7 + 0x140));
    0x0005e25e and r0, r0, 0x20                                  |         r0 &= 0x20;
    0x0005e262 bic.w r3, r3, r0                                  |         r3 = BIT_MASK (r3, r0);
    0x0005e266 strb r3, [r2]                                     |         *(r2) = r3;
    0x0005e268 ldr r3, [r6, 8]                                   |         r3 = *((r6 + 8));
    0x0005e26a strb r7, [r3, r1]                                 |         *((r3 + r1)) = r7;
    0x0005e26c adds r1, 1                                        |         r1++;
    0x0005e26e ldr.w r2, [sb, 8]                                 |         r2 = *((sb + 8));
    0x0005e272 ldrb r3, [r2, r1]                                 |         r3 = *((r2 + r1));
    0x0005e274 add r2, r1                                        |         r2 += r1;
    0x0005e276 cmp r3, 0                                         |         
    0x0005e278 bne 0x5e254                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_200:
    0x0005e27a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0005e27c ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0005e280 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005e282 beq 0x5e20a                                       |         goto label_61;
                                                                 |     }
    0x0005e284 ldr r7, [pc, 0x30]                                |     
    0x0005e286 add r7, pc                                        |     r7 = 0xbc542;
    0x0005e288 b.w 0x5d012                                       |     goto label_52;
                                                                 | label_193:
    0x0005e2bc str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0005e2be str r2, [sp, 0x30]                                |     var_30h = r2;
                                                                 | label_185:
    0x0005e2c0 ldr.w ip, [r8, 0x18]                              |     ip = *((r8 + 0x18));
    0x0005e2c4 ldrh.w r3, [ip, 0xc]                              |     r3 = *((ip + 0xc));
    0x0005e2c8 cmp.w r3, 0x400                                   |     
                                                                 |     if (r3 != 0x400) {
    0x0005e2cc bne.w 0x5e5ee                                     |         goto label_201;
                                                                 |     }
    0x0005e2d0 movs r3, 1                                        |     r3 = 1;
    0x0005e2d2 movs r4, 0                                        |     r4 = 0;
                                                                 | label_63:
    0x0005e2d4 ldr.w r2, [ip, 0x18]                              |     r2 = *((ip + 0x18));
    0x0005e2d8 ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x0005e2da cmp r4, r1                                        |     
                                                                 |     if (r4 >= r1) {
    0x0005e2dc bge.w 0x5de56                                     |         goto label_62;
                                                                 |     }
    0x0005e2e0 ldr r6, [r2, 0x18]                                |     r6 = *((r2 + 0x18));
    0x0005e2e2 add.w r2, r4, r4, lsl 1                           |     r2 = r4 + (r4 << 1);
    0x0005e2e6 adds.w r6, r6, r2, lsl 4                          |     r6 += (r2 << 4);
                                                                 |     if (r6 == r6) {
    0x0005e2ea beq.w 0x5de56                                     |         goto label_62;
                                                                 |     }
    0x0005e2ee mov r4, r3                                        |     r4 = r3;
                                                                 | label_82:
    0x0005e2f0 ldrh.w r1, [ip, 0x3c]                             |     r1 = *((ip + 0x3c));
    0x0005e2f4 cmp.w r1, 0x400                                   |     
    0x0005e2f8 itt eq                                            |     
                                                                 |     if (r1 != 0x400) {
    0x0005e2fa moveq sl, 1                                       |         sl = 1;
                                                                 |     }
                                                                 |     if (r1 == 0x400) {
    0x0005e2fe movs r3, 0                                        |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0005e300 beq.w 0x5e406                                     |         goto label_202;
                                                                 |     }
    0x0005e304 ldrh.w r2, [ip, 0x3a]                             |     r2 = *((ip + 0x3a));
    0x0005e308 ldrh r3, [r6, 0xa]                                |     r3 = *((r6 + 0xa));
    0x0005e30a orrs r3, r2                                       |     r3 |= r2;
    0x0005e30c ldrh r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x0005e30e lsls r5, r3, 0x18                                 |     r5 = r3 << 0x18;
                                                                 |     if (r5 < r3) {
    0x0005e310 bmi 0x5e3f4                                       |         goto label_64;
                                                                 |     }
    0x0005e312 add.w r5, ip, 0x30                                |     r5 = ip + 0x30;
    0x0005e316 orr.w r7, r2, r1                                  |     r7 = r2 | r1;
    0x0005e31a mov.w sb, 2                                       |     sb = 2;
    0x0005e31e mov.w sl, 1                                       |     sl = 1;
                                                                 | label_66:
    0x0005e322 tst.w r2, 0x3e                                    |     
                                                                 |     if ((r2 & 0x3e) == 0) {
    0x0005e326 beq 0x5e3e6                                       |         goto label_65;
                                                                 |     }
    0x0005e328 tst.w r1, 0x3e                                    |     
                                                                 |     if ((r1 & 0x3e) == 0) {
    0x0005e32c beq 0x5e3e6                                       |         goto label_65;
                                                                 |     }
    0x0005e32e movw r3, 0xffe5                                   |     r3 = 0xffe5;
    0x0005e332 ands r3, r7                                       |     r3 &= r7;
                                                                 |     if (r3 != 0) {
    0x0005e334 cbz r3, 0x5e340                                   |         
    0x0005e336 movw r3, 0xffd9                                   |         r3 = 0xffd9;
    0x0005e33a ands r3, r7                                       |         r3 &= r7;
    0x0005e33c cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005e33e bne 0x5e3e6                                       |             goto label_65;
                                                                 |         }
                                                                 |     }
    0x0005e340 ldr r3, [r6]                                      |     r3 = *(r6);
    0x0005e342 ldr.w lr, [r5]                                    |     
    0x0005e346 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x0005e348 ldr.w r2, [lr, 0xc]                               |     r2 = *((lr + 0xc));
    0x0005e34c cmp r2, 0                                         |     
    0x0005e34e it ne                                             |     
                                                                 |     if (r2 != 0) {
    0x0005e350 cmpne r1, 0                                       |         __asm ("cmpne r1, 0");
                                                                 |     }
    0x0005e352 ite eq                                            |     
                                                                 |     if (r2 != 0) {
    0x0005e354 moveq r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x0005e356 movne r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x0005e358 beq 0x5e434                                       |         goto label_203;
                                                                 |     }
    0x0005e35a mov.w r3, -1                                      |     r3 = -1;
    0x0005e35e bl 0x3480c                                        |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x0005e362 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005e364 bne 0x5e3e2                                       |         goto label_68;
                                                                 |     }
    0x0005e366 ldr.w lr, [r5]                                    |     
    0x0005e36a ldr r3, [r6]                                      |     r3 = *(r6);
                                                                 | label_67:
    0x0005e36c ldr.w r2, [lr, 0x10]                              |     r2 = *((lr + 0x10));
    0x0005e370 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0005e372 cmp r2, 0                                         |     
    0x0005e374 it ne                                             |     
                                                                 |     if (r2 != 0) {
    0x0005e376 cmpne r1, 0                                       |         __asm ("cmpne r1, 0");
                                                                 |     }
    0x0005e378 ite eq                                            |     
                                                                 |     if (r2 != 0) {
    0x0005e37a moveq r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x0005e37c movne r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x0005e37e beq 0x5e43a                                       |         goto label_204;
                                                                 |     }
    0x0005e380 mov.w r3, -1                                      |     r3 = -1;
    0x0005e384 bl 0x3480c                                        |     r0 = fcn_0003480c (r0, r1, r2, r3);
                                                                 |     if (r0 != 0) {
    0x0005e388 cbnz r0, 0x5e3e2                                  |         goto label_68;
                                                                 |     }
    0x0005e38a subs r2, r7, 1                                    |     r2 = r7 - 1;
    0x0005e38c ldr r3, [r6]                                      |     r3 = *(r6);
    0x0005e38e tst r2, r7                                        |     
                                                                 |     if ((r2 & r7) != 0) {
    0x0005e390 beq 0x5e39c                                       |         
    0x0005e392 tst.w r7, 0x18                                    |         
    0x0005e396 ite ne                                            |         
                                                                 |         if ((r7 & 0x18) == 0) {
    0x0005e398 movne r7, 8                                       |             r7 = 8;
                                                                 |         }
                                                                 |         if ((r7 & 0x18) == 0) {
    0x0005e39a moveq r7, 0x20                                    |             r7 = 0x20;
                                                                 |             goto label_205;
                                                                 |         }
                                                                 |     }
                                                                 | label_205:
    0x0005e39c ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x0005e3a0 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0005e3a2 ldr r0, [r2]                                      |     r0 = *(r2);
                                                                 |     if (r3 == 0) {
    0x0005e3a4 cbz r3, 0x5e3e2                                   |         goto label_68;
                                                                 |     }
                                                                 | label_69:
    0x0005e3a6 mov r1, r3                                        |     r1 = r3;
    0x0005e3a8 movs r3, 0                                        |     r3 = 0;
    0x0005e3aa mov r2, r3                                        |     r2 = r3;
    0x0005e3ac bl 0x2dd00                                        |     r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x0005e3b0 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r0 == 0) {
    0x0005e3b2 cbz r0, 0x5e3e2                                   |         goto label_68;
                                                                 |     }
    0x0005e3b4 cmp r7, 2                                         |     
    0x0005e3b6 mov.w r2, 0x35                                    |     r2 = 0x35;
                                                                 |     if (r7 == 2) {
    0x0005e3ba beq 0x5e3ce                                       |         goto label_206;
                                                                 |     }
    0x0005e3bc movs r5, 2                                        |     r5 = 2;
                                                                 |     do {
    0x0005e3be sub.w r3, r2, 0x34                                |         r3 = r2 - 0x34;
    0x0005e3c2 adds r2, 1                                        |         r2++;
    0x0005e3c4 lsl.w r3, r5, r3                                  |         r3 = r5 << r3;
    0x0005e3c8 cmp r7, r3                                        |         
    0x0005e3ca bne 0x5e3be                                       |         
                                                                 |     } while (r7 != r3);
    0x0005e3cc uxtb r2, r2                                       |     r2 = (int8_t) r2;
                                                                 | label_206:
    0x0005e3ce strb r2, [r1]                                     |     *(r1) = r2;
    0x0005e3d0 mov r0, fp                                        |     r0 = fp;
    0x0005e3d2 movs r2, 3                                        |     r2 = 3;
    0x0005e3d4 bl 0x1e248                                        |     fcn_0001e248 (r0, r1, r2, r3);
    0x0005e3d8 mov r1, fp                                        |     r1 = fp;
    0x0005e3da mov r2, r0                                        |     r2 = r0;
    0x0005e3dc ldr r0, [sp, 0x20]                                |     r0 = x;
    0x0005e3de bl 0x5caa4                                        |     fcn_0005caa4 (r0, r1, r2, r3, r4, r5, r6);
                                                                 | label_68:
    0x0005e3e2 ldr.w ip, [r8, 0x18]                              |     ip = *((r8 + 0x18));
                                                                 | label_65:
    0x0005e3e6 ldrh.w r2, [ip, 0x3c]                             |     r2 = *((ip + 0x3c));
    0x0005e3ea mov r3, sl                                        |     r3 = sl;
    0x0005e3ec mov sl, sb                                        |     sl = sb;
    0x0005e3ee cmp.w r2, 0x400                                   |     
                                                                 |     if (r2 == 0x400) {
    0x0005e3f2 beq 0x5e406                                       |         goto label_202;
                                                                 |     }
                                                                 | label_64:
    0x0005e3f4 ldrh.w r3, [ip, 0xc]                              |     r3 = *((ip + 0xc));
    0x0005e3f8 cmp.w r3, 0x400                                   |     
    0x0005e3fc it eq                                             |     
                                                                 |     if (r3 == 0x400) {
    0x0005e3fe addeq r3, r4, 1                                   |         r3 = r4 + 1;
                                                                 |         goto label_207;
                                                                 |     }
                                                                 |     if (r3 == 0x400) {
                                                                 | label_207:
    0x0005e400 beq.w 0x5e2d4                                     |         goto label_63;
                                                                 |     }
    0x0005e404 b 0x5de56                                         |     goto label_62;
                                                                 | label_202:
    0x0005e406 ldr.w r2, [ip, 0x48]                              |     r2 = *((ip + 0x48));
    0x0005e40a ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x0005e40c cmp r1, r3                                        |     
                                                                 |     if (r1 <= r3) {
    0x0005e40e ble 0x5e3f4                                       |         goto label_64;
                                                                 |     }
    0x0005e410 ldr r5, [r2, 0x18]                                |     r5 = *((r2 + 0x18));
    0x0005e412 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x0005e416 adds.w r5, r5, r3, lsl 4                          |     r5 += (r3 << 4);
                                                                 |     if (r5 == r5) {
    0x0005e41a beq 0x5e3f4                                       |         goto label_64;
                                                                 |     }
    0x0005e41c ldrh r2, [r5, 0xa]                                |     r2 = *((r5 + 0xa));
    0x0005e41e add.w sb, sl, 1                                   |     sb = sl + 1;
    0x0005e422 ldrh r3, [r6, 0xa]                                |     r3 = *((r6 + 0xa));
    0x0005e424 ldrh r1, [r5, 0xc]                                |     r1 = *((r5 + 0xc));
    0x0005e426 orrs r3, r2                                       |     r3 |= r2;
    0x0005e428 ldrh r2, [r6, 0xc]                                |     r2 = *((r6 + 0xc));
    0x0005e42a lsls r7, r3, 0x18                                 |     r7 = r3 << 0x18;
                                                                 |     if (r7 < r3) {
    0x0005e42c bmi 0x5e3e6                                       |         goto label_65;
                                                                 |     }
    0x0005e42e orr.w r7, r2, r1                                  |     r7 = r2 | r1;
    0x0005e432 b 0x5e322                                         |     goto label_66;
                                                                 | label_203:
    0x0005e434 cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x0005e436 bne 0x5e3e6                                       |         goto label_65;
                                                                 |     }
    0x0005e438 b 0x5e36c                                         |     goto label_67;
                                                                 | label_204:
    0x0005e43a cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x0005e43c bne 0x5e3e2                                       |         goto label_68;
                                                                 |     }
    0x0005e43e ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x0005e442 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0005e444 ldr r0, [r2]                                      |     r0 = *(r2);
    0x0005e446 subs r2, r7, 1                                    |     r2 = r7 - 1;
    0x0005e448 tst r2, r7                                        |     
                                                                 |     if ((r2 & r7) == 0) {
    0x0005e44a beq 0x5e3a6                                       |         goto label_69;
                                                                 |     }
    0x0005e44c tst.w r7, 0x18                                    |     
    0x0005e450 ite ne                                            |     
                                                                 |     if ((r7 & 0x18) == 0) {
    0x0005e452 movne r7, 8                                       |         r7 = 8;
                                                                 |     }
                                                                 |     if ((r7 & 0x18) != 0) {
    0x0005e454 moveq r7, 0x20                                    |         r7 = 0x20;
                                                                 |     }
    0x0005e456 b 0x5e3a6                                         |     goto label_69;
                                                                 | label_183:
    0x0005e458 mov sb, r6                                        |     sb = r6;
    0x0005e45a mov.w sl, 0x44                                    |     sl = 0x44;
    0x0005e45e mov r4, sb                                        |     r4 = sb;
    0x0005e460 str.w sl, [sp, 0x20]                              |     __asm ("str.w sl, [x]");
    0x0005e464 ldr.w sb, [sp, 0x28]                              |     sb = var_28h;
    0x0005e468 mov r6, r3                                        |     r6 = r3;
    0x0005e46a ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0005e46e b.w 0x5d1d8                                       |     goto label_40;
                                                                 | label_198:
    0x0005e472 mov r1, r8                                        |     r1 = r8;
    0x0005e474 b 0x5e1f0                                         |     goto label_70;
                                                                 | label_199:
    0x0005e476 mvn r3, 0xff                                      |     r3 = ~0xff;
    0x0005e47a ldrb.w r2, [r3, 0xff]                             |     r2 = *((r3 + 0xff));
    0x0005e47e mov.w r3, -1                                      |     r3 = -1;
    0x0005e482 b 0x5e222                                         |     goto label_71;
                                                                 | label_128:
    0x0005e484 mvn r3, 0xff                                      |     r3 = ~0xff;
    0x0005e488 ldrb.w r2, [r3, 0xff]                             |     r2 = *((r3 + 0xff));
    0x0005e48c mov.w r3, -1                                      |     r3 = -1;
    0x0005e490 b.w 0x5d004                                       |     goto label_72;
                                                                 | label_121:
    0x0005e494 cmp sl, sb                                        |     
                                                                 |     if (sl != sb) {
    0x0005e496 bne.w 0x5ced8                                     |         goto label_73;
                                                                 |     }
    0x0005e49a b 0x5e1ba                                         |     goto label_74;
                                                                 | label_123:
    0x0005e49c ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0005e49e mov r1, sb                                        |     r1 = sb;
    0x0005e4a0 bl 0x16c0c                                        |     fcn_00016c0c (r0, r1);
    0x0005e4a4 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005e4a6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005e4a8 beq.w 0x5d3fe                                     |         goto label_28;
                                                                 |     }
    0x0005e4ac ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0005e4ae bl 0x1874c                                        |     fcn_0001874c (r0);
    0x0005e4b2 b.w 0x5d3fe                                       |     goto label_28;
                                                                 | label_104:
    0x0005e4b6 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_197:
    0x0005e4ba add.w r8, r8, -1                                  |     r8 += -1;
    0x0005e4be movs r3, 1                                        |     r3 = 1;
    0x0005e4c0 lsl.w r3, r3, r8                                  |     r3 <<= r8;
    0x0005e4c4 orrs r3, r2                                       |     r3 |= r2;
    0x0005e4c6 str.w r3, [r1, 0xd8]                              |     __asm ("str.w r3, [r1, 0xd8]");
    0x0005e4ca b 0x5e152                                         |     goto label_58;
                                                                 | label_195:
    0x0005e4cc ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x0005e4ce cmp.w r8, 0x1f                                    |     
    0x0005e4d2 ldr.w r2, [r1, 0xd8]                              |     r2 = *((r1 + 0xd8));
                                                                 |     if (r8 > 0x1f) {
    0x0005e4d6 ble 0x5e4e4                                       |         
    0x0005e4d8 orr r2, r2, 0x80000000                            |         r2 |= 0x80000000;
    0x0005e4dc str.w r2, [r1, 0xd8]                              |         __asm ("str.w r2, [r1, 0xd8]");
    0x0005e4e0 b.w 0x5d3fe                                       |         goto label_28;
                                                                 |     }
    0x0005e4e4 add.w r8, r8, -1                                  |     r8 += -1;
    0x0005e4e8 movs r3, 1                                        |     r3 = 1;
    0x0005e4ea lsl.w r3, r3, r8                                  |     r3 <<= r8;
    0x0005e4ee orrs r3, r2                                       |     r3 |= r2;
    0x0005e4f0 str.w r3, [r1, 0xd8]                              |     __asm ("str.w r3, [r1, 0xd8]");
    0x0005e4f4 b.w 0x5d3fe                                       |     goto label_28;
                                                                 | label_122:
    0x0005e4f8 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0005e4fa bl 0xd480                                         |     r0 = fcn_0000d480 (r0);
    0x0005e4fe cmp r0, 0x42                                      |     
                                                                 |     if (r0 != 0x42) {
    0x0005e500 bne.w 0x5cf48                                     |         goto label_75;
                                                                 |     }
    0x0005e504 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0005e506 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0005e508 tst.w r3, 0x3000000                               |     
                                                                 |     if ((r3 & 0x3000000) != 0) {
    0x0005e50c bne.w 0x5cf8c                                     |         goto label_76;
                                                                 |     }
    0x0005e510 ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x0005e512 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005e514 beq.w 0x5cf8c                                     |         goto label_76;
                                                                 |     }
    0x0005e518 ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x0005e51c cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0005e51e bne.w 0x5cf8c                                     |         goto label_76;
                                                                 |     }
    0x0005e522 b.w 0x5cf48                                       |     goto label_75;
                                                                 | label_196:
    0x0005e526 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0005e528 blx 0x9688                                        |     fcn_00009688 ();
    0x0005e52c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005e52e cmp.w r8, 0x1f                                    |     
    0x0005e532 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
                                                                 |     if (r8 <= 0x1f) {
    0x0005e534 ble 0x5e600                                       |         goto label_208;
                                                                 |     }
    0x0005e536 ldr.w r3, [r2, 0xd8]                              |     r3 = *((r2 + 0xd8));
    0x0005e53a orr r3, r3, 0x80000000                            |     r3 |= 0x80000000;
                                                                 | label_84:
    0x0005e53e str.w r3, [r2, 0xd8]                              |     __asm ("str.w r3, [r2, 0xd8]");
    0x0005e542 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005e544 beq.w 0x5e152                                     |         goto label_58;
                                                                 |     }
    0x0005e548 ldrb.w sb, [r0]                                   |     sb = *(r0);
    0x0005e54c cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0005e550 bne.w 0x5ce76                                     |         goto label_77;
                                                                 |     }
    0x0005e554 b 0x5e152                                         |     goto label_58;
                                                                 | label_181:
    0x0005e556 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005e558 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0005e55a ldr r0, [r2, 8]                                   |     r0 = *((r2 + 8));
    0x0005e55c b.w 0x5dc86                                       |     goto label_78;
                                                                 | label_118:
    0x0005e560 mov r2, r8                                        |     r2 = r8;
    0x0005e562 b.w 0x5cebe                                       |     goto label_79;
                                                                 | label_126:
    0x0005e566 mov r6, sb                                        |     r6 = sb;
    0x0005e568 b.w 0x5cfdc                                       |     goto label_80;
                                                                 | label_124:
    0x0005e56c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005e56e ldrsh.w r2, [r5, 0x20]                            |     r2 = *((r5 + 0x20));
    0x0005e572 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x0005e574 cmp r2, 0x1f                                      |     
    0x0005e576 itt le                                            |     
                                                                 |     if (r2 > 0x1f) {
    0x0005e578 addle r2, r2, -1                                  |         r2 += -1;
                                                                 |     }
                                                                 |     if (r2 <= 0x1f) {
    0x0005e57c movs r1, 1                                        |         r1 = 1;
                                                                 |     }
    0x0005e57e ldr.w r3, [r6, 0xd8]                              |     r3 = *((r6 + 0xd8));
    0x0005e582 itet le                                           |     
                                                                 |     if (r1 > 1) {
    0x0005e584 lslle r2, r1, r2                                  |         r2 = r1 << r2;
                                                                 |     }
                                                                 |     if (r1 > 1) {
    0x0005e588 orrle r3, r3, 0x80000000                          |         r3 |= 0x80000000;
                                                                 |     }
                                                                 |     if (r1 <= 1) {
    0x0005e58c orrs r3, r2                                       |         r3 |= r2;
                                                                 |     }
    0x0005e58e str.w r3, [r6, 0xd8]                              |     __asm ("str.w r3, [r6, 0xd8]");
    0x0005e592 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0005e594 beq.w 0x5cf94                                     |         goto label_81;
                                                                 |     }
    0x0005e598 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x0005e59a ldrb r3, [r3, 1]                                  |     r3 = *((r3 + 1));
    0x0005e59c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005e59e beq.w 0x5cf94                                     |         goto label_81;
                                                                 |     }
    0x0005e5a2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005e5a4 ldrb r3, [r3, 0x13]                               |     r3 = *((r3 + 0x13));
    0x0005e5a6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005e5a8 beq 0x5e61c                                       |         goto label_209;
                                                                 |     }
    0x0005e5aa ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0005e5ac subs r3, 1                                        |     r3--;
    0x0005e5ae uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0005e5b0 strb r3, [r2, 0x13]                               |     *((r2 + 0x13)) = r3;
    0x0005e5b2 adds r3, 0x26                                     |     r3 += 0x26;
    0x0005e5b4 ldr.w r8, [r2, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r8 = *((r2 + offset_1));
                                                                 | label_86:
    0x0005e5b8 mov r2, r8                                        |     r2 = r8;
    0x0005e5ba ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005e5bc mov r1, r5                                        |     r1 = r5;
    0x0005e5be bl 0x5959c                                        |     fcn_0005959c (r0, r1, r2, r3);
    0x0005e5c2 ldr r3, [r6]                                      |     r3 = *(r6);
    0x0005e5c4 ldr r2, [r6, 0x6c]                                |     r2 = *((r6 + 0x6c));
    0x0005e5c6 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 != 0) {
    0x0005e5ca cbnz r3, 0x5e614                                  |         goto label_210;
                                                                 |     }
    0x0005e5cc ldr r3, [r6, 0x68]                                |     r3 = *((r6 + 0x68));
    0x0005e5ce subs r2, 1                                        |     r2--;
    0x0005e5d0 movs r1, 0x14                                     |     r1 = 0x14;
    0x0005e5d2 mla r3, r1, r2, r3                                |     __asm ("mla r3, r1, r2, r3");
                                                                 | label_85:
    0x0005e5d6 movs r2, 0                                        |     r2 = 0;
    0x0005e5d8 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x0005e5da cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0005e5de beq.w 0x5cf94                                     |         goto label_81;
                                                                 |     }
    0x0005e5e2 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0005e5e4 mov r1, r8                                        |     r1 = r8;
    0x0005e5e6 bl 0xf624                                         |     fcn_0000f624 (r0, r1);
    0x0005e5ea b.w 0x5cf94                                       |     goto label_81;
                                                                 | label_201:
    0x0005e5ee mov r6, ip                                        |     r6 = ip;
    0x0005e5f0 movs r4, 1                                        |     r4 = 1;
    0x0005e5f2 b 0x5e2f0                                         |     goto label_82;
                                                                 | label_180:
    0x0005e5f4 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005e5f6 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0005e5f8 ldr.w sl, [r2, 8]                                 |     sl = *((r2 + 8));
    0x0005e5fc b.w 0x5dc78                                       |     goto label_83;
                                                                 | label_208:
    0x0005e600 ldr.w r1, [r2, 0xd8]                              |     r1 = *((r2 + 0xd8));
    0x0005e604 add.w r3, r8, -1                                  |     r3 = r8 + -1;
    0x0005e608 mov.w ip, 1                                       |     
    0x0005e60c lsl.w r3, ip, r3                                  |     r3 = ip << r3;
    0x0005e610 orrs r3, r1                                       |     r3 |= r1;
    0x0005e612 b 0x5e53e                                         |     goto label_84;
                                                                 | label_210:
    0x0005e614 ldr r3, [pc, 0x20]                                |     
    0x0005e616 add r3, pc                                        |     r3 = 0xbcc52;
    0x0005e618 adds r3, 4                                        |     r3 += 4;
    0x0005e61a b 0x5e5d6                                         |     goto label_85;
                                                                 | label_209:
    0x0005e61c ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0005e61e ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x0005e620 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0005e624 str.w r8, [r2, 0x2c]                              |     __asm ("str.w r8, [r2, 0x2c]");
    0x0005e628 b 0x5e5b8                                         |     goto label_86;
                                                                 | label_116:
    0x0005e62a movs r3, 0                                        |     r3 = 0;
    0x0005e62c ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0005e62e udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | label_168:
    0x0005e630 movs r3, 0                                        |     r3 = 0;
    0x0005e632 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0005e634 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5e63c).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5e7c4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0005e7c4 ()                                      | void fcn_0005e7c4 (int16_t arg_1h, int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_20h;
                                                                 |     int32_t var_20h_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0005e7c4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0005e7c8 sub sp, 0x2c                                      |     
    0x0005e7ca ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x0005e7cc mov sl, r2                                        |     sl = r2;
    0x0005e7ce ldr.w fp, [sp, 0x50]                              |     fp = *(arg_50h);
    0x0005e7d2 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0005e7d4 str r1, [sp, 0x10]                                |     var_10h = r1;
    0x0005e7d6 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0005e7d8 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0005e7da beq.w 0x5ebd8                                     |         goto label_19;
                                                                 |     }
                                                                 | label_12:
    0x0005e7de ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x0005e7e0 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0005e7e2 beq.w 0x5e900                                     |         goto label_20;
                                                                 |     }
    0x0005e7e6 ldr.w r3, [pc, 0x480]                             |     r3 = *(0x0005ec68);
    0x0005e7ea add r3, pc                                        |     r3 += pc;
    0x0005e7ec add.w r3, r3, 0x130                               |     r3 += 0x130;
    0x0005e7f0 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_2:
    0x0005e7f2 ldrb.w r6, [r5, 0x60]                             |     r6 = *((r5 + 0x60));
    0x0005e7f6 movs r7, 0                                        |     r7 = 0;
    0x0005e7f8 ldr.w sb, [r5, 0x2c]                              |     sb = *((r5 + 0x2c));
    0x0005e7fc cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005e7fe bne 0x5e872                                       |         goto label_21;
                                                                 |     }
    0x0005e800 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x0005e802 ldr r7, [r3, 0x14]                                |     r7 = *((r3 + 0x14));
                                                                 |     if (r7 == 0) {
    0x0005e804 cbz r7, 0x5e872                                   |         goto label_21;
                                                                 |     }
    0x0005e806 ldr r7, [r7]                                      |     r7 = *(r7);
    0x0005e808 cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x0005e80a ble 0x5e872                                       |         goto label_21;
                                                                 |     }
    0x0005e80c mov r8, r6                                        |     r8 = r6;
    0x0005e80e b 0x5e844                                         |     
                                                                 |     while (r6 != 1) {
                                                                 | label_0:
    0x0005e810 ldrd r2, r1, [r4, 0x6c]                           |         __asm ("ldrd r2, r1, [r4, 0x6c]");
    0x0005e814 add r3, r6                                        |         r3 += r6;
    0x0005e816 cmp r2, r1                                        |         
    0x0005e818 add.w r1, r2, 1                                   |         r1 = r2 + 1;
    0x0005e81c add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |         if (r2 >= r1) {
    0x0005e820 bge 0x5e906                                       |             goto label_22;
                                                                 |         }
    0x0005e822 ldr r0, [r4, 0x68]                                |         r0 = *((r4 + 0x68));
    0x0005e824 mov.w lr, 0x5e                                    |         lr = 0x5e;
    0x0005e828 str r1, [r4, 0x6c]                                |         *((r4 + 0x6c)) = r1;
    0x0005e82a add.w r1, r0, r2, lsl 2                           |         r1 = r0 + (r2 << 2);
    0x0005e82e strd r3, ip, [r1, 8]                              |         __asm ("strd r3, ip, [r1, 8]");
    0x0005e832 str.w sl, [r1, 4]                                 |         __asm ("str.w sl, [r1, 4]");
    0x0005e836 str.w r8, [r1, 0x10]                              |         __asm ("str.w r8, [r1, 0x10]");
    0x0005e83a str.w lr, [r0, r2, lsl 2]                         |         __asm ("str.w lr, [r0, r2, lsl 2]");
                                                                 | label_3:
    0x0005e83e adds r6, 1                                        |         r6++;
    0x0005e840 cmp r7, r6                                        |         
                                                                 |         if (r7 == r6) {
    0x0005e842 beq 0x5e872                                       |             goto label_21;
                                                                 |         }
                                                                 | label_1:
    0x0005e844 cmp r6, 1                                         |         
    0x0005e846 ldr r3, [r5, 0x50]                                |         r3 = *((r5 + 0x50));
    0x0005e848 add.w ip, r6, fp                                  |         
    0x0005e84c bne 0x5e810                                       |         
                                                                 |     }
    0x0005e84e ldr.w r2, [sb, 0x20]                              |     r2 = *((sb + 0x20));
    0x0005e852 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0005e854 cmp r2, r1                                        |     
                                                                 |     if (r2 != r1) {
    0x0005e856 bne 0x5e810                                       |         goto label_0;
                                                                 |     }
    0x0005e858 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0005e85a add.w r1, fp, 1                                   |     r1 += arg_1h;
    0x0005e85e adds r3, 1                                        |     r3++;
    0x0005e860 mov r0, r4                                        |     r0 = r4;
    0x0005e862 adds r6, 1                                        |     r6++;
    0x0005e864 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x0005e866 str r1, [sp]                                      |     *(sp) = r1;
    0x0005e868 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x0005e86a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005e86e cmp r7, r6                                        |     
                                                                 |     if (r7 != r6) {
    0x0005e870 bne 0x5e844                                       |         goto label_1;
                                                                 |     }
                                                                 | label_21:
    0x0005e872 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005e874 ldr r3, [r3, 0x58]                                |     r3 = *((r3 + 0x58));
    0x0005e876 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005e878 bne 0x5e916                                       |         goto label_23;
                                                                 |     }
    0x0005e87a ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x0005e87e lsls r1, r2, 0x13                                 |     r1 = r2 << 0x13;
                                                                 |     if (r1 >= r2) {
    0x0005e880 bpl 0x5e916                                       |         goto label_23;
                                                                 |     }
    0x0005e882 ldrb r2, [r5, 0x11]                               |     r2 = *((r5 + 0x11));
    0x0005e884 cmp r2, 0x5a                                      |     
                                                                 |     if (r2 == 0x5a) {
    0x0005e886 beq 0x5e916                                       |         goto label_23;
                                                                 |     }
    0x0005e888 ldrd r6, r2, [r4, 0x6c]                           |     __asm ("ldrd r6, r2, [r4, 0x6c]");
    0x0005e88c cmp r6, r2                                        |     
                                                                 |     if (r6 >= r2) {
    0x0005e88e bge.w 0x5ec48                                     |         goto label_24;
                                                                 |     }
    0x0005e892 ldr r0, [r4, 0x68]                                |     r0 = *((r4 + 0x68));
    0x0005e894 add.w r2, r6, r6, lsl 2                           |     r2 = r6 + (r6 << 2);
    0x0005e898 adds r1, r6, 1                                    |     r1 = r6 + 1;
    0x0005e89a str r1, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r1;
    0x0005e89c movs r7, 0x32                                     |     r7 = 0x32;
    0x0005e89e add.w r1, r0, r2, lsl 2                           |     r1 = r0 + (r2 << 2);
    0x0005e8a2 strd fp, r3, [r1, 4]                              |     __asm ("strd fp, r3, [r1, 4]");
    0x0005e8a6 strd r3, r3, [r1, 0xc]                            |     __asm ("strd r3, r3, [r1, 0xc]");
    0x0005e8aa str.w r7, [r0, r2, lsl 2]                         |     __asm ("str.w r7, [r0, r2, lsl 2]");
                                                                 | label_17:
    0x0005e8ae ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x0005e8b0 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0005e8b2 beq.w 0x5eb5a                                     |         goto label_25;
                                                                 |     }
    0x0005e8b6 movs r3, 1                                        |     r3 = 1;
    0x0005e8b8 ldr r2, [r5, 0x3c]                                |     r2 = *((r5 + 0x3c));
    0x0005e8ba movs r1, 0x16                                     |     r1 = 0x16;
    0x0005e8bc str r3, [sp, 4]                                   |     var_4h = r3;
    0x0005e8be mov r0, r4                                        |     r0 = r4;
    0x0005e8c0 movs r3, 0                                        |     r3 = 0;
    0x0005e8c2 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0005e8c6 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0005e8ca movs r3, 0                                        |     r3 = 0;
    0x0005e8cc ldr r2, [r5, 0x3c]                                |     r2 = *((r5 + 0x3c));
    0x0005e8ce movs r1, 0x82                                     |     r1 = 0x82;
    0x0005e8d0 str r3, [sp]                                      |     *(sp) = r3;
    0x0005e8d2 mov r0, r4                                        |     r0 = r4;
    0x0005e8d4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005e8d8 ldr r1, [r4]                                      |     r1 = *(r4);
    0x0005e8da ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x0005e8dc ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
    0x0005e8e0 subs r3, r2, 2                                    |     r3 = r2 - 2;
    0x0005e8e2 it mi                                             |     
                                                                 |     if (r3 >= r2) {
    0x0005e8e4 addmi r3, r2, -1                                  |         r3 = r2 + -1;
                                                                 |     }
    0x0005e8e8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005e8ea beq.w 0x5ec14                                     |         goto label_26;
                                                                 |     }
    0x0005e8ee ldr r3, [pc, 0x37c]                               |     
    0x0005e8f0 add r3, pc                                        |     r3 = 0xbd562;
    0x0005e8f2 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x0005e8f4 adds r3, 4                                        |     r3 += 4;
                                                                 | label_10:
    0x0005e8f6 ldr r5, [r5, 0x24]                                |     r5 = *((r5 + 0x24));
    0x0005e8f8 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0005e8fa cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0005e8fc bne.w 0x5e7f2                                     |         goto label_2;
                                                                 |     }
                                                                 | label_20:
    0x0005e900 add sp, 0x2c                                      |     
    0x0005e902 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_22:
    0x0005e906 mov r2, sl                                        |     r2 = sl;
    0x0005e908 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x0005e90a mov r0, r4                                        |     r0 = r4;
    0x0005e90c str.w ip, [sp]                                    |     __asm ("str.w ip, [sp]");
    0x0005e910 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005e914 b 0x5e83e                                         |     goto label_3;
                                                                 | label_23:
    0x0005e916 ldr r6, [r5, 0x40]                                |     r6 = *((r5 + 0x40));
    0x0005e918 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005e91a bne 0x5ea14                                       |         goto label_27;
                                                                 |     }
    0x0005e91c ldr r3, [pc, 0x350]                               |     
    0x0005e91e ldr.w r2, [sb, 0x10]                              |     r2 = *((sb + 0x10));
    0x0005e922 add r3, pc                                        |     r3 = 0xbd596;
    0x0005e924 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0005e926 beq 0x5ea06                                       |         
    0x0005e928 ldr r3, [r5, 0x28]                                |         r3 = *((r5 + 0x28));
    0x0005e92a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005e92c beq 0x5e9a0                                       |             
    0x0005e92e ldr r3, [sp, 0x14]                                |             r3 = var_14h;
    0x0005e930 ldrb r3, [r3, 0x13]                               |             r3 = *((r3 + 0x13));
    0x0005e932 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0005e934 beq.w 0x5eac4                                     |                 goto label_28;
                                                                 |             }
    0x0005e938 ldr r2, [sp, 0x14]                                |             r2 = var_14h;
    0x0005e93a subs r3, 1                                        |             r3--;
    0x0005e93c uxtb r3, r3                                       |             r3 = (int8_t) r3;
    0x0005e93e strb r3, [r2, 0x13]                               |             *((r2 + 0x13)) = r3;
    0x0005e940 adds r3, 0x26                                     |             r3 += 0x26;
    0x0005e942 ldr.w r8, [r2, r3, lsl 2]                         |             offset_0 = r3 << 2;
                                                                 |             r8 = *((r2 + offset_0));
                                                                 | label_8:
    0x0005e946 ldr r3, [r5, 0x50]                                |             r3 = *((r5 + 0x50));
    0x0005e948 mov r2, sl                                        |             r2 = sl;
    0x0005e94a movs r1, 0x5e                                     |             r1 = 0x5e;
    0x0005e94c mov r0, r4                                        |             r0 = r4;
    0x0005e94e str.w r8, [sp]                                    |             __asm ("str.w r8, [sp]");
    0x0005e952 add r3, r7                                        |             r3 += r7;
    0x0005e954 bl 0x29ac4                                        |             fcn_00029ac4 (r0, r1, r2, r3);
    0x0005e958 ldrd r6, r3, [r4, 0x6c]                           |             __asm ("ldrd r6, r3, [r4, 0x6c]");
    0x0005e95c cmp r6, r3                                        |             
                                                                 |             if (r6 >= r3) {
    0x0005e95e bge.w 0x5ebc4                                     |                 goto label_29;
                                                                 |             }
    0x0005e962 ldr r2, [r4, 0x68]                                |             r2 = *((r4 + 0x68));
    0x0005e964 add.w r3, r6, r6, lsl 2                           |             r3 = r6 + (r6 << 2);
    0x0005e968 adds r0, r6, 1                                    |             r0 = r6 + 1;
    0x0005e96a str r0, [r4, 0x6c]                                |             *((r4 + 0x6c)) = r0;
    0x0005e96c movs r1, 0                                        |             r1 = 0;
    0x0005e96e mov.w ip, 1                                       |             
    0x0005e972 movs r0, 0x10                                     |             r0 = 0x10;
    0x0005e974 add.w lr, r2, r3, lsl 2                           |             lr = r2 + (r3 << 2);
    0x0005e978 str.w ip, [lr, 0xc]                               |             __asm ("str.w ip, [lr, 0xc]");
    0x0005e97c strd r8, r1, [lr, 4]                              |             __asm ("strd r8, r1, [lr, 4]");
    0x0005e980 str.w r1, [lr, 0x10]                              |             __asm ("str.w r1, [lr, 0x10]");
    0x0005e984 str.w r0, [r2, r3, lsl 2]                         |             __asm ("str.w r0, [r2, r3, lsl 2]");
                                                                 | label_11:
    0x0005e988 cmp.w r8, 0                                       |             
                                                                 |             if (r8 == 0) {
    0x0005e98c beq 0x5e9a0                                       |                 goto label_30;
                                                                 |             }
    0x0005e98e ldr r1, [sp, 0x14]                                |             r1 = var_14h;
    0x0005e990 ldrb r3, [r1, 0x13]                               |             r3 = *((r1 + 0x13));
    0x0005e992 cmp r3, 7                                         |             
    0x0005e994 itttt ls                                          |             
                                                                 |             if (r3 > 7) {
    0x0005e996 addls r2, r3, 1                                   |                 r2 = r3 + 1;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x0005e998 addls r3, 0x26                                    |                 r3 += 0x26;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x0005e99a strbls r2, [r1, 0x13]                             |                 *((r1 + 0x13)) = r2;
                                                                 |             }
                                                                 |             if (r3 <= 7) {
    0x0005e99c strls r8, [r1, r3, lsl 2]                         |                 offset_1 = r3 << 2;
                                                                 |                 *((r1 + offset_1)) = r8;
                                                                 |                 goto label_30;
                                                                 |             }
                                                                 |         }
                                                                 | label_30:
    0x0005e9a0 ldrb.w r3, [r5, 0x60]                             |         r3 = *((r5 + 0x60));
    0x0005e9a4 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005e9a6 bne.w 0x5eada                                     |             goto label_31;
                                                                 |         }
    0x0005e9aa str.w fp, [sp, 0x1c]                              |         __asm ("str.w fp, [x]");
                                                                 | label_9:
    0x0005e9ae ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x0005e9b2 lsls r2, r3, 0x1a                                 |         r2 = r3 << 0x1a;
                                                                 |         if (r2 < r3) {
    0x0005e9b4 bmi 0x5ea6e                                       |             goto label_32;
                                                                 |         }
                                                                 | label_7:
    0x0005e9b6 ldr r3, [r5, 0x34]                                |         r3 = *((r5 + 0x34));
    0x0005e9b8 mov r0, r4                                        |         r0 = r4;
    0x0005e9ba str r3, [sp]                                      |         *(sp) = r3;
    0x0005e9bc ldrd r2, r3, [sp, 0x18]                           |         __asm ("ldrd r2, r3, [var_18h]");
    0x0005e9c0 rsb.w r1, r2, 0xa2                                |         r1 = 0xa2 - r2;
    0x0005e9c4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005e9c8 ldr r0, [r4]                                      |         r0 = *(r4);
    0x0005e9ca ldrb.w r3, [r0, 0x57]                             |         r3 = *((r0 + 0x57));
    0x0005e9ce cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005e9d0 bne 0x5ea60                                       |             goto label_33;
                                                                 |         }
    0x0005e9d2 ldrd r1, r3, [r4, 0x68]                           |         __asm ("ldrd r1, r3, [r4, 0x68]");
    0x0005e9d6 movs r0, 0xf9                                     |         r0 = 0xf9;
    0x0005e9d8 add.w r2, r3, r3, lsl 2                           |         r2 = r3 + (r3 << 2);
    0x0005e9dc lsls r2, r2, 2                                    |         r2 <<= 2;
    0x0005e9de subs r2, 0x14                                     |         r2 -= 0x14;
    0x0005e9e0 add r1, r2                                        |         r1 += r2;
    0x0005e9e2 strb r0, [r1, 1]                                  |         *((r1 + 1)) = r0;
    0x0005e9e4 str.w sb, [r1, 0x10]                              |         __asm ("str.w sb, [r1, 0x10]");
                                                                 | label_6:
    0x0005e9e8 cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x0005e9ea ble 0x5e9fc                                       |             
    0x0005e9ec ldr r2, [r4, 0x68]                                |             r2 = *((r4 + 0x68));
    0x0005e9ee add.w r1, r3, r3, lsl 2                           |             r1 = r3 + (r3 << 2);
    0x0005e9f2 add.w r2, r2, r1, lsl 2                           |             r2 += (r1 << 2);
    0x0005e9f6 uxtb r1, r7                                       |             r1 = (int8_t) r7;
    0x0005e9f8 strh r1, [r2, -0x12]                              |             *((r2 - 0x12)) = r1;
                                                                 |         }
    0x0005e9fc ldrb.w r2, [r5, 0x60]                             |         r2 = *((r5 + 0x60));
                                                                 |         if (r2 != 0) {
    0x0005ea00 cbnz r2, 0x5ea48                                  |             goto label_34;
                                                                 |         }
                                                                 | label_5:
    0x0005ea02 cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x0005ea04 bne 0x5ea2a                                       |             goto label_35;
                                                                 |         }
                                                                 |     }
                                                                 | label_4:
    0x0005ea06 ldr r5, [r5, 0x24]                                |     r5 = *((r5 + 0x24));
    0x0005ea08 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0005ea0a bne.w 0x5e7f2                                     |         goto label_2;
                                                                 |     }
    0x0005ea0e add sp, 0x2c                                      |     
    0x0005ea10 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_27:
    0x0005ea14 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0005ea16 adds r2, r6, 1                                    |     r2 = r6 + 1;
    0x0005ea18 movs r3, 0                                        |     r3 = 0;
    0x0005ea1a mov r0, r4                                        |     r0 = r4;
    0x0005ea1c str r3, [sp]                                      |     *(sp) = r3;
    0x0005ea1e movs r3, 1                                        |     r3 = 1;
    0x0005ea20 subs r2, r2, r1                                   |     r2 -= r1;
    0x0005ea22 movs r1, 0x56                                     |     r1 = 0x56;
    0x0005ea24 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ea28 b 0x5ea06                                         |     goto label_4;
                                                                 | label_35:
    0x0005ea2a ldr r2, [r4]                                      |     r2 = *(r4);
    0x0005ea2c it lt                                             |     
                                                                 |     if (r1 >= 0x56) {
    0x0005ea2e addlt r6, r3, -1                                  |         r6 = r3 + -1;
                                                                 |     }
    0x0005ea32 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x0005ea36 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005ea38 bne 0x5ead2                                       |         goto label_36;
                                                                 |     }
    0x0005ea3a ldr r2, [r4, 0x68]                                |     r2 = *((r4 + 0x68));
    0x0005ea3c add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x0005ea40 add.w r2, r2, r6, lsl 2                           |     r2 += (r6 << 2);
                                                                 |     do {
    0x0005ea44 str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
    0x0005ea46 b 0x5ea06                                         |         goto label_4;
                                                                 | label_34:
    0x0005ea48 cmp r7, 1                                         |         
                                                                 |         if (r7 == 1) {
    0x0005ea4a beq.w 0x5ec2a                                     |             goto label_37;
                                                                 |         }
    0x0005ea4e ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x0005ea50 ldr r2, [r1, 0x1c]                                |         r2 = *((r1 + 0x1c));
    0x0005ea52 cmp r7, r2                                        |         
    0x0005ea54 itttt gt                                          |         
                                                                 |         if (r7 <= r2) {
    0x0005ea56 movgt r2, r1                                      |             r2 = r1;
                                                                 |         }
                                                                 |         if (r7 <= r2) {
    0x0005ea58 ldrgt r1, [sp, 0x1c]                              |             r1 = x;
                                                                 |         }
                                                                 |         if (r7 <= r2) {
    0x0005ea5a strgt r7, [r2, 0x1c]                              |             *((r2 + 0x1c)) = r7;
                                                                 |         }
                                                                 |         if (r7 <= r2) {
    0x0005ea5c strgt r1, [r2, 0x20]                              |             *((r2 + 0x20)) = r1;
                                                                 |         }
    0x0005ea5e b 0x5ea02                                         |         goto label_5;
                                                                 | label_33:
    0x0005ea60 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x0005ea64 lsls r3, r3, 0x1b                                 |         r3 <<= 0x1b;
                                                                 |         if (r3 < r3) {
    0x0005ea66 bmi.w 0x5ebe8                                     |             goto label_38;
                                                                 |         }
                                                                 | label_13:
    0x0005ea6a ldr r3, [r4, 0x6c]                                |         r3 = *((r4 + 0x6c));
    0x0005ea6c b 0x5e9e8                                         |         goto label_6;
                                                                 | label_32:
    0x0005ea6e ldr r3, [r5, 0x48]                                |         r3 = *((r5 + 0x48));
    0x0005ea70 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0005ea72 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0005ea74 ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x0005ea76 bl 0x27e14                                        |         r0 = fcn_00027e14 (r0, r1);
    0x0005ea7a mov r8, r0                                        |         r8 = r0;
    0x0005ea7c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0005ea7e beq.w 0x5ebf0                                     |             goto label_39;
                                                                 |         }
    0x0005ea82 ldrd r1, r3, [r4, 0x6c]                           |         __asm ("ldrd r1, r3, [r4, 0x6c]");
    0x0005ea86 cmp r1, r3                                        |         
                                                                 |         if (r1 >= r3) {
    0x0005ea88 bge.w 0x5ec02                                     |             goto label_40;
                                                                 |         }
                                                                 | label_14:
    0x0005ea8c ldr r3, [r4, 0x68]                                |         r3 = *((r4 + 0x68));
    0x0005ea8e add.w r2, r1, r1, lsl 2                           |         r2 = r1 + (r1 << 2);
    0x0005ea92 add.w ip, r1, 1                                   |         
    0x0005ea96 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x0005ea9a str.w ip, [r4, 0x6c]                              |         __asm ("str.w ip, [r4, 0x6c]");
    0x0005ea9e mov.w ip, 0x55                                    |         
    0x0005eaa2 str.w ip, [r3, r2, lsl 2]                         |         __asm ("str.w ip, [r3, r2, lsl 2]");
    0x0005eaa6 movs r0, 0                                        |         r0 = 0;
    0x0005eaa8 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x0005eaac adds r2, r3, 4                                    |         r2 = r3 + 4;
    0x0005eaae vst1.32 {d16}, [r2]                               |         __asm ("vst1.32 {d16}, [r2]");
    0x0005eab2 strd r0, r0, [r3, 0xc]                            |         __asm ("strd r0, r0, [r3, 0xc]");
                                                                 | label_15:
    0x0005eab6 mov r2, r8                                        |         r2 = r8;
    0x0005eab8 mvn r3, 1                                         |         r3 = ~1;
    0x0005eabc mov r0, r4                                        |         r0 = r4;
    0x0005eabe bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
    0x0005eac2 b 0x5e9b6                                         |         goto label_7;
                                                                 | label_28:
    0x0005eac4 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x0005eac6 ldr r3, [r2, 0x2c]                                |         r3 = *((r2 + 0x2c));
    0x0005eac8 add.w r8, r3, 1                                   |         r8 = r3 + 1;
    0x0005eacc str.w r8, [r2, 0x2c]                              |         __asm ("str.w r8, [r2, 0x2c]");
    0x0005ead0 b 0x5e946                                         |         goto label_8;
                                                                 | label_36:
    0x0005ead2 ldr r2, [pc, 0x1a0]                               |         
    0x0005ead4 add r2, pc                                        |         r2 = 0xbd74e;
    0x0005ead6 adds r2, 4                                        |         r2 += 4;
    0x0005ead8 b 0x5ea44                                         |         
                                                                 |     } while (1);
                                                                 | label_31:
    0x0005eada ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x0005eadc ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005eade ldr.w r8, [r4, 0x6c]                              |     r8 = *((r4 + 0x6c));
    0x0005eae2 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0005eae4 ldr r7, [r3]                                      |     r7 = *(r3);
    0x0005eae6 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0005eae8 mov r1, r7                                        |     r1 = r7;
    0x0005eaea bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x0005eaee ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0005eaf0 mov r2, r0                                        |     r2 = r0;
    0x0005eaf2 str r0, [sp, 0x1c]                                |     x = r0;
    0x0005eaf4 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005eaf6 mov r1, r3                                        |     r1 = r3;
    0x0005eaf8 movs r3, 0                                        |     r3 = 0;
    0x0005eafa str r3, [sp]                                      |     *(sp) = r3;
    0x0005eafc bl 0x5e63c                                        |     fcn_0005e63c (r0, r1, r2, r3, r4);
    0x0005eb00 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x0005eb02 cmp r8, r2                                        |     
                                                                 |     if (r8 >= r2) {
    0x0005eb04 bge.w 0x5e9ae                                     |         goto label_9;
                                                                 |     }
    0x0005eb08 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0005eb0a add.w lr, r2, -1                                  |     lr = r2 + -1;
    0x0005eb0e ldr.w ip, [pc, 0x168]                             |     
    0x0005eb12 strd r6, r5, [sp, 0x20]                           |     __asm ("strd r6, r5, [var_20h]");
    0x0005eb16 ldrb.w r0, [r3, 0x57]                             |     r0 = *((r3 + 0x57));
    0x0005eb1a ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x0005eb1c add ip, pc                                        |     ip = 0xbd79a;
    0x0005eb1e add.w ip, ip, 4                                   |     
                                                                 |     do {
    0x0005eb22 cmp.w r8, 0                                       |         
    0x0005eb26 mov r3, ip                                        |         r3 = ip;
    0x0005eb28 ite ge                                            |         
                                                                 |         if (r8 < 0) {
    0x0005eb2a movge r1, r8                                      |             r1 = r8;
                                                                 |         }
                                                                 |         if (r8 >= 0) {
    0x0005eb2c movlt r1, lr                                      |             r1 = lr;
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x0005eb2e cbnz r0, 0x5eb3a                                  |             
    0x0005eb30 ldr r3, [r4, 0x68]                                |             r3 = *((r4 + 0x68));
    0x0005eb32 add.w r1, r1, r1, lsl 2                           |             r1 += (r1 << 2);
    0x0005eb36 add.w r3, r3, r1, lsl 2                           |             r3 += (r1 << 2);
                                                                 |         }
    0x0005eb3a ldrb r1, [r3]                                     |         r1 = *(r3);
    0x0005eb3c add.w r8, r8, 1                                   |         r8++;
    0x0005eb40 cmp r1, 0x5e                                      |         
                                                                 |         if (r1 == 0x5e) {
    0x0005eb42 bne 0x5eb50                                       |             
    0x0005eb44 ldr r1, [r5, 0x30]                                |             r1 = *((r5 + 0x30));
    0x0005eb46 ldr r6, [r3, 4]                                   |             r6 = *((r3 + 4));
    0x0005eb48 cmp r6, r1                                        |             
    0x0005eb4a it eq                                             |             
                                                                 |             if (r6 == r1) {
    0x0005eb4c streq sl, [r3, 4]                                 |                 *((r3 + 4)) = sl;
                                                                 |                 goto label_41;
                                                                 |             }
                                                                 |         }
                                                                 | label_41:
    0x0005eb50 cmp r2, r8                                        |         
    0x0005eb52 bne 0x5eb22                                       |         
                                                                 |     } while (r2 != r8);
    0x0005eb54 ldrd r6, r5, [sp, 0x20]                           |     __asm ("ldrd r6, r5, [var_20h]");
    0x0005eb58 b 0x5e9ae                                         |     goto label_9;
                                                                 | label_25:
    0x0005eb5a ldr r2, [r5, 0x40]                                |     r2 = *((r5 + 0x40));
    0x0005eb5c movs r3, 1                                        |     r3 = 1;
    0x0005eb5e movs r1, 0x56                                     |     r1 = 0x56;
    0x0005eb60 str r7, [sp]                                      |     *(sp) = r7;
    0x0005eb62 mov r0, r4                                        |     r0 = r4;
    0x0005eb64 adds r2, 1                                        |     r2++;
    0x0005eb66 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005eb6a ldr r3, [r5, 0x40]                                |     r3 = *((r5 + 0x40));
    0x0005eb6c mov r2, fp                                        |     r2 = fp;
    0x0005eb6e movs r1, 0x51                                     |     r1 = 0x51;
    0x0005eb70 str r7, [sp]                                      |     *(sp) = r7;
    0x0005eb72 mov r0, r4                                        |     r0 = r4;
    0x0005eb74 str r7, [sp, 0x18]                                |     var_18h = r7;
    0x0005eb76 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005eb7a ldr r2, [r5, 0x40]                                |     r2 = *((r5 + 0x40));
    0x0005eb7c movs r3, 2                                        |     r3 = 2;
    0x0005eb7e movs r1, 0x61                                     |     r1 = 0x61;
    0x0005eb80 mov r0, r4                                        |     r0 = r4;
    0x0005eb82 adds r7, r2, r3                                   |     r7 = r2 + r3;
    0x0005eb84 str r7, [sp]                                      |     *(sp) = r7;
    0x0005eb86 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005eb8a ldr r3, [r5, 0x40]                                |     r3 = *((r5 + 0x40));
    0x0005eb8c movs r1, 0x8a                                     |     r1 = 0x8a;
    0x0005eb8e ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x0005eb90 mov r0, r4                                        |     r0 = r4;
    0x0005eb92 ldr r2, [r5, 0x3c]                                |     r2 = *((r5 + 0x3c));
    0x0005eb94 adds r3, 2                                        |     r3 += 2;
    0x0005eb96 str r7, [sp]                                      |     *(sp) = r7;
    0x0005eb98 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005eb9c ldr r3, [r4]                                      |     r3 = *(r4);
    0x0005eb9e cmp r6, 0                                         |     
    0x0005eba0 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x0005eba2 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r6 < 0) {
    0x0005eba6 blt 0x5ebb6                                       |         goto label_42;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0005eba8 cbnz r3, 0x5ebbc                                  |         goto label_43;
                                                                 |     }
                                                                 |     do {
    0x0005ebaa ldr r3, [r4, 0x68]                                |         r3 = *((r4 + 0x68));
                                                                 | label_16:
    0x0005ebac add.w r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
    0x0005ebb0 add.w r3, r3, r6, lsl 2                           |         r3 += (r6 << 2);
    0x0005ebb4 b 0x5e8f6                                         |         goto label_10;
                                                                 | label_42:
    0x0005ebb6 subs r6, r2, 1                                    |         r6 = r2 - 1;
    0x0005ebb8 cmp r3, 0                                         |         
    0x0005ebba beq 0x5ebaa                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_43:
    0x0005ebbc ldr r3, [pc, 0xbc]                                |     
    0x0005ebbe add r3, pc                                        |     r3 = 0xbd83e;
    0x0005ebc0 adds r3, 4                                        |     r3 += 4;
    0x0005ebc2 b 0x5e8f6                                         |     goto label_10;
                                                                 | label_29:
    0x0005ebc4 movs r3, 1                                        |     r3 = 1;
    0x0005ebc6 mov r2, r8                                        |     r2 = r8;
    0x0005ebc8 str r3, [sp]                                      |     *(sp) = r3;
    0x0005ebca movs r1, 0x10                                     |     r1 = 0x10;
    0x0005ebcc movs r3, 0                                        |     r3 = 0;
    0x0005ebce mov r0, r4                                        |     r0 = r4;
    0x0005ebd0 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005ebd4 mov r6, r0                                        |     r6 = r0;
    0x0005ebd6 b 0x5e988                                         |     goto label_11;
                                                                 | label_19:
    0x0005ebd8 ldr r3, [r0, 0x74]                                |     r3 = *((r0 + 0x74));
    0x0005ebda cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005ebdc beq 0x5ec58                                       |         goto label_44;
                                                                 |     }
                                                                 | label_18:
    0x0005ebde ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005ebe0 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x0005ebe4 mov r4, r0                                        |     r4 = r0;
    0x0005ebe6 b 0x5e7de                                         |     goto label_12;
                                                                 | label_38:
    0x0005ebe8 mov r1, sb                                        |     r1 = sb;
    0x0005ebea bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0005ebee b 0x5ea6a                                         |     goto label_13;
                                                                 | label_39:
    0x0005ebf0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005ebf2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0005ebf4 ldr.w r8, [r3, 8]                                 |     r8 = *((r3 + 8));
    0x0005ebf8 ldrd r1, r3, [r4, 0x6c]                           |     __asm ("ldrd r1, r3, [r4, 0x6c]");
    0x0005ebfc cmp r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x0005ebfe blt.w 0x5ea8c                                     |         goto label_14;
                                                                 |     }
                                                                 | label_40:
    0x0005ec02 movs r3, 0                                        |     r3 = 0;
    0x0005ec04 movs r1, 0x55                                     |     r1 = 0x55;
    0x0005ec06 mov r2, r3                                        |     r2 = r3;
    0x0005ec08 mov r0, r4                                        |     r0 = r4;
    0x0005ec0a str r3, [sp]                                      |     *(sp) = r3;
    0x0005ec0c bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005ec10 mov r1, r0                                        |     r1 = r0;
    0x0005ec12 b 0x5eab6                                         |     goto label_15;
                                                                 | label_26:
    0x0005ec14 add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x0005ec18 ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x0005ec1a cmp r6, 0                                         |     
    0x0005ec1c it lt                                             |     
                                                                 |     if (r6 >= 0) {
    0x0005ec1e addlt r6, r2, -1                                  |         r6 = r2 + -1;
                                                                 |     }
    0x0005ec22 add.w r1, r3, r1, lsl 2                           |     r1 = r3 + (r1 << 2);
    0x0005ec26 str r2, [r1, 8]                                   |     *((r1 + 8)) = r2;
    0x0005ec28 b 0x5ebac                                         |     goto label_16;
                                                                 | label_37:
    0x0005ec2a ldr r0, [sp, 0x1c]                                |     r0 = x;
    0x0005ec2c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005ec2e beq.w 0x5ea02                                     |         goto label_5;
                                                                 |     }
    0x0005ec32 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0005ec34 ldrb r2, [r7, 0x13]                               |     r2 = *((r7 + 0x13));
    0x0005ec36 cmp r2, 7                                         |     
                                                                 |     if (r2 > 7) {
    0x0005ec38 bhi.w 0x5ea02                                     |         goto label_5;
                                                                 |     }
    0x0005ec3c adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x0005ec3e adds r2, 0x26                                     |     r2 += 0x26;
    0x0005ec40 strb r1, [r7, 0x13]                               |     *((r7 + 0x13)) = r1;
    0x0005ec42 str.w r0, [r7, r2, lsl 2]                         |     __asm ("str.w r0, [r7, r2, lsl 2]");
    0x0005ec46 b 0x5ea02                                         |     goto label_5;
                                                                 | label_24:
    0x0005ec48 mov r2, fp                                        |     r2 = fp;
    0x0005ec4a movs r1, 0x32                                     |     r1 = 0x32;
    0x0005ec4c mov r0, r4                                        |     r0 = r4;
    0x0005ec4e str r3, [sp]                                      |     *(sp) = r3;
    0x0005ec50 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005ec54 mov r6, r0                                        |     r6 = r0;
    0x0005ec56 b 0x5e8ae                                         |     goto label_17;
                                                                 | label_44:
    0x0005ec58 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0005ec5a mov r2, r0                                        |     r2 = r0;
    0x0005ec5c ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x0005ec5e lsls r0, r3, 0x1c                                 |     r0 = r3 << 0x1c;
    0x0005ec60 itt pl                                            |     
                                                                 |     if (r0 < r3) {
    0x0005ec62 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r0 < r3) {
    0x0005ec64 strbpl r3, [r2, 0x17]                             |         *((r2 + 0x17)) = r3;
                                                                 |     }
    0x0005ec66 b 0x5ebde                                         |     goto label_18;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5ec80 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0005ec80 ()                                          | void fcn_0005ec80 (int16_t arg_0h, int16_t arg_ch, int16_t arg_68h, int16_t arg_6ch, int16_t arg1) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     r0 = arg1;
    0x0005ec80 ldr r3, [r0, 4]                                       |     r3 = *((r0 + 4));
    0x0005ec82 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005ec86 sub sp, 0x34                                          |     
    0x0005ec88 ldr.w fp, [r0, 8]                                     |     fp = *((r0 + 8));
    0x0005ec8c mov r7, r0                                            |     r7 = r0;
    0x0005ec8e str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0005ec90 ldr r3, [r3, 0x58]                                    |     r3 = *((r3 + 0x58));
    0x0005ec92 ldr.w r8, [r0]                                        |     r8 = *(r0);
    0x0005ec96 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005ec98 bne.w 0x5ef60                                         |         goto label_20;
                                                                     |     }
    0x0005ec9c ldr.w r3, [pc, 0x670]                                 |     
    0x0005eca0 ldr.w r1, [pc, 0x670]                                 |     
    0x0005eca4 ldr.w sl, [sp, 0x14]                                  |     sl = var_14h;
    0x0005eca8 add r3, pc                                            |     
    0x0005ecaa str r0, [sp, 0x2c]                                    |     var_2ch = r0;
    0x0005ecac add.w r3, r3, 0x130                                   |     r3 = 0xbe0ec;
    0x0005ecb0 add r1, pc                                            |     r1 = 0xbdfc8;
    0x0005ecb2 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0005ecb4 mov r4, sl                                            |     r4 = sl;
    0x0005ecb6 ldr.w r3, [pc, 0x660]                                 |     
    0x0005ecba str r1, [sp, 0x20]                                    |     var_20h = r1;
    0x0005ecbc add r3, pc                                            |     r3 = 0xbdfda;
    0x0005ecbe str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0005ecc0 add.w r3, r1, 0x130                                   |     r3 = r1 + 0x130;
    0x0005ecc4 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0005ecc6 add.w r3, r1, 0x13c                                   |     r3 = r1 + 0x13c;
    0x0005ecca str r3, [sp, 0x10]                                    |     var_10h = r3;
                                                                     |     do {
    0x0005eccc ldr r5, [r4, 0x2c]                                    |         r5 = *((r4 + 0x2c));
    0x0005ecce ldrd r2, r1, [sp, 0xc]                                |         __asm ("ldrd r2, r1, [var_10h]");
    0x0005ecd2 ldr r3, [r5, 0x20]                                    |         r3 = *((r5 + 0x20));
    0x0005ecd4 cmp r3, r1                                            |         
    0x0005ecd6 it ne                                                 |         
                                                                     |         if (r3 != r1) {
    0x0005ecd8 cmpne r3, r2                                          |             __asm ("cmpne r3, r2");
                                                                     |         }
                                                                     |         if (r3 != r1) {
    0x0005ecda bne 0x5edb8                                           |             goto label_21;
                                                                     |         }
    0x0005ecdc ldr.w r7, [r8, 0x38]                                  |         r7 = *((r8 + 0x38));
    0x0005ece0 ldrb.w r3, [r8, 0x13]                                 |         r3 = *((r8 + 0x13));
    0x0005ece4 ldr.w sb, [r4, 0x3c]                                  |         sb = *((r4 + 0x3c));
    0x0005ece8 add.w sl, r7, -1                                      |         sl = r7 + -1;
    0x0005ecec str.w sl, [r8, 0x38]                                  |         __asm ("str.w sl, [r8, 0x38]");
    0x0005ecf0 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0005ecf2 beq.w 0x5ef14                                         |             goto label_22;
                                                                     |         }
    0x0005ecf6 subs r3, 1                                            |         r3--;
    0x0005ecf8 uxtb r3, r3                                           |         r3 = (int8_t) r3;
    0x0005ecfa strb.w r3, [r8, 0x13]                                 |         *((r8 + 0x13)) = r3;
    0x0005ecfe adds r3, 0x26                                         |         r3 += 0x26;
    0x0005ed00 ldr.w r6, [r8, r3, lsl 2]                             |         offset_0 = r3 << 2;
                                                                     |         r6 = *((r8 + offset_0));
                                                                     | label_3:
    0x0005ed04 movs r2, 0                                            |         r2 = 0;
    0x0005ed06 ldr r3, [r4, 0x38]                                    |         r3 = *((r4 + 0x38));
    0x0005ed08 movs r1, 0x4b                                         |         r1 = 0x4b;
    0x0005ed0a str r2, [sp]                                          |         *(sp) = r2;
    0x0005ed0c mov r0, fp                                            |         r0 = fp;
    0x0005ed0e bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ed12 ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0005ed14 ldr r3, [r5, 0x20]                                    |         r3 = *((r5 + 0x20));
    0x0005ed16 cmp r3, r2                                            |         
    0x0005ed18 mov.w r2, 0                                           |         r2 = 0;
                                                                     |         if (r3 == r2) {
    0x0005ed1c beq.w 0x5ef20                                         |             goto label_23;
                                                                     |         }
    0x0005ed20 str r2, [sp]                                          |         *(sp) = r2;
    0x0005ed22 mov r3, r6                                            |         r3 = r6;
    0x0005ed24 movs r2, 1                                            |         r2 = 1;
    0x0005ed26 movs r1, 0x47                                         |         r1 = 0x47;
    0x0005ed28 mov r0, fp                                            |         r0 = fp;
    0x0005ed2a bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_4:
    0x0005ed2e ldr r3, [r4, 0x40]                                    |         r3 = *((r4 + 0x40));
    0x0005ed30 mov r2, r6                                            |         r2 = r6;
    0x0005ed32 movs r1, 0x6a                                         |         r1 = 0x6a;
    0x0005ed34 mov r0, fp                                            |         r0 = fp;
    0x0005ed36 str r6, [sp]                                          |         *(sp) = r6;
    0x0005ed38 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ed3c ldr r2, [r4, 0x40]                                    |         r2 = *((r4 + 0x40));
    0x0005ed3e mov r3, sl                                            |         r3 = sl;
    0x0005ed40 movs r1, 0x36                                         |         r1 = 0x36;
    0x0005ed42 mov r0, fp                                            |         r0 = fp;
    0x0005ed44 str r6, [sp]                                          |         *(sp) = r6;
    0x0005ed46 adds r2, 1                                            |         r2++;
    0x0005ed48 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ed4c movs r3, 0                                            |         r3 = 0;
    0x0005ed4e mov r2, sb                                            |         r2 = sb;
    0x0005ed50 movs r1, 0x1d                                         |         r1 = 0x1d;
    0x0005ed52 mov r0, fp                                            |         r0 = fp;
    0x0005ed54 str r6, [sp]                                          |         *(sp) = r6;
    0x0005ed56 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ed5a ldr r1, [r4, 0x38]                                    |         r1 = *((r4 + 0x38));
    0x0005ed5c mov r2, sb                                            |         r2 = sb;
    0x0005ed5e ldr r3, [r4, 0x50]                                    |         r3 = *((r4 + 0x50));
    0x0005ed60 mov r0, fp                                            |         r0 = fp;
    0x0005ed62 str r1, [sp]                                          |         *(sp) = r1;
    0x0005ed64 movs r1, 0x5e                                         |         r1 = 0x5e;
    0x0005ed66 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ed6a ldr.w r0, [fp, 0xc]                                   |         r0 = *(arg_ch);
    0x0005ed6e ldrd r3, r2, [r0, 0x38]                               |         __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0005ed72 cmn r2, r3                                            |         
                                                                     |         if (r2 < r3) {
    0x0005ed74 bmi.w 0x5ef3e                                         |             goto label_24;
                                                                     |         }
    0x0005ed78 ldr r3, [r0, 0x40]                                    |         r3 = *((r0 + 0x40));
    0x0005ed7a lsls r7, r7, 2                                        |         r7 <<= 2;
    0x0005ed7c ldr.w r2, [fp, 0x6c]                                  |         r2 = *(arg_6ch);
    0x0005ed80 rsbs r7, r7, 0                                        |         r7 -= ;
    0x0005ed82 str r2, [r3, r7]                                      |         *((r3 + r7)) = r2;
                                                                     |         if (r6 != 0) {
                                                                     | label_1:
    0x0005ed84 cbz r6, 0x5ed9a                                       |             
    0x0005ed86 ldrb.w r3, [r8, 0x13]                                 |             r3 = *((r8 + 0x13));
    0x0005ed8a cmp r3, 7                                             |             
    0x0005ed8c itttt ls                                              |             
                                                                     |             if (r3 > 7) {
    0x0005ed8e addls r2, r3, 1                                       |                 r2 = r3 + 1;
                                                                     |             }
                                                                     |             if (r3 > 7) {
    0x0005ed90 addls r3, 0x26                                        |                 r3 += 0x26;
                                                                     |             }
                                                                     |             if (r3 > 7) {
    0x0005ed92 strbls r2, [r8, 0x13]                                 |                 *((r8 + 0x13)) = r2;
                                                                     |             }
                                                                     |             if (r3 > 7) {
    0x0005ed96 str.w r6, [r8, r3, lsl 2]                             |                 __asm ("str.w r6, [r8, r3, lsl 2]");
                                                                     |                 goto label_0;
                                                                     |             }
                                                                     |         }
                                                                     | label_0:
    0x0005ed9a ldr r4, [r4, 0x24]                                    |         r4 = *((r4 + 0x24));
    0x0005ed9c cmp r4, 0                                             |         
    0x0005ed9e bne 0x5eccc                                           |         
                                                                     |     } while (r4 != 0);
    0x0005eda0 ldr r7, [sp, 0x2c]                                    |     r7 = var_2ch;
                                                                     | label_7:
    0x0005eda2 movs r1, 0                                            |     r1 = 0;
    0x0005eda4 ldrd r3, r2, [r7, 0xc]                                |     __asm ("ldrd r3, r2, [r7, 0xc]");
    0x0005eda8 mov r0, fp                                            |     r0 = fp;
    0x0005edaa str r1, [sp]                                          |     *(sp) = r1;
    0x0005edac movs r1, 9                                            |     r1 = 9;
    0x0005edae bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005edb2 add sp, 0x34                                          |     
    0x0005edb4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_21:
    0x0005edb8 ldr r1, [sp, 0x20]                                    |     r1 = var_20h;
    0x0005edba add.w r2, r1, 0x150                                   |     r2 = r1 + 0x150;
    0x0005edbe add.w r1, r1, 0x148                                   |     r1 += 0x148;
    0x0005edc2 cmp r3, r1                                            |     
    0x0005edc4 it ne                                                 |     
                                                                     |     if (r3 == r1) {
    0x0005edc6 cmpne r3, r2                                          |         __asm ("cmpne r3, r2");
                                                                     |         goto label_25;
                                                                     |     }
                                                                     |     if (r3 != r1) {
                                                                     | label_25:
    0x0005edc8 bne 0x5ed9a                                           |         goto label_0;
                                                                     |     }
    0x0005edca ldr r3, [r4, 0x48]                                    |     r3 = *((r4 + 0x48));
    0x0005edcc ldr.w sl, [r8, 0x38]                                  |     sl = *((r8 + 0x38));
    0x0005edd0 ldr r2, [r4, 0x3c]                                    |     r2 = *((r4 + 0x3c));
    0x0005edd2 ldr r3, [r3, 0x14]                                    |     r3 = *((r3 + 0x14));
    0x0005edd4 add.w r7, sl, -1                                      |     r7 = sl + -1;
    0x0005edd8 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0005edda ldr.w sb, [r3]                                        |     sb = *(r3);
    0x0005edde ldrb.w r3, [r8, 0x13]                                 |     r3 = *((r8 + 0x13));
    0x0005ede2 str.w r7, [r8, 0x38]                                  |     __asm ("str.w r7, [r8, 0x38]");
    0x0005ede6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ede8 beq.w 0x5ef48                                         |         goto label_26;
                                                                     |     }
    0x0005edec subs r3, 1                                            |     r3--;
    0x0005edee uxtb r3, r3                                           |     r3 = (int8_t) r3;
    0x0005edf0 strb.w r3, [r8, 0x13]                                 |     *((r8 + 0x13)) = r3;
    0x0005edf4 adds r3, 0x26                                         |     r3 += 0x26;
    0x0005edf6 ldr.w r6, [r8, r3, lsl 2]                             |     offset_1 = r3 << 2;
                                                                     |     r6 = *((r8 + offset_1));
                                                                     | label_5:
    0x0005edfa ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0005edfc cmp.w sb, 2                                           |     
    0x0005ee00 ldr r3, [r3, 0x30]                                    |     r3 = *((r3 + 0x30));
    0x0005ee02 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0005ee04 ldr r3, [r4, 0x38]                                    |     r3 = *((r4 + 0x38));
                                                                     |     if (sb > 2) {
    0x0005ee06 bgt 0x5ee8c                                           |         goto label_27;
                                                                     |     }
    0x0005ee08 movs r1, 0                                            |     r1 = 0;
    0x0005ee0a mov r0, fp                                            |     r0 = fp;
    0x0005ee0c mov r2, r1                                            |     r2 = r1;
    0x0005ee0e str r1, [sp]                                          |     *(sp) = r1;
    0x0005ee10 movs r1, 0x4b                                         |     r1 = 0x4b;
    0x0005ee12 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ee16 movs r1, 0                                            |     r1 = 0;
    0x0005ee18 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0005ee1a str r1, [sp]                                          |     *(sp) = r1;
    0x0005ee1c mov r3, r6                                            |     r3 = r6;
    0x0005ee1e movs r1, 0x87                                         |     r1 = 0x87;
    0x0005ee20 mov r0, fp                                            |     r0 = fp;
    0x0005ee22 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ee26 cmp.w sb, 2                                           |     
                                                                     |     if (sb == 2) {
    0x0005ee2a beq 0x5eeb0                                           |         goto label_28;
                                                                     |     }
    0x0005ee2c movs r3, 0                                            |     r3 = 0;
    0x0005ee2e ldr r2, [r5, 0x20]                                    |     r2 = *((r5 + 0x20));
    0x0005ee30 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ee32 movs r1, 0x56                                         |     r1 = 0x56;
    0x0005ee34 ldr.w r3, [pc, 0x4e4]                                 |     r3 = *(0x0005f31c);
    0x0005ee38 mov r0, fp                                            |     r0 = fp;
    0x0005ee3a add r3, pc                                            |     r3 += pc;
    0x0005ee3c add.w r3, r3, 0x148                                   |     r3 += 0x148;
    0x0005ee40 cmp r2, r3                                            |     
    0x0005ee42 ite ne                                                |     
                                                                     |     if (r2 == r3) {
    0x0005ee44 movne r3, -1                                          |         r3 = -1;
                                                                     |     }
                                                                     |     if (r2 == r3) {
    0x0005ee48 movs r3, 1                                            |         r3 = 1;
                                                                     |     }
    0x0005ee4a mov r2, r6                                            |     r2 = r6;
    0x0005ee4c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                     |     do {
                                                                     | label_2:
    0x0005ee50 ldr r5, [sp, 0x24]                                    |         r5 = var_24h;
    0x0005ee52 mov r3, r7                                            |         r3 = r7;
    0x0005ee54 movs r1, 0x1d                                         |         r1 = 0x1d;
    0x0005ee56 mov r0, fp                                            |         r0 = fp;
    0x0005ee58 str r6, [sp]                                          |         *(sp) = r6;
    0x0005ee5a mov r2, r5                                            |         r2 = r5;
    0x0005ee5c bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ee60 ldr r1, [r4, 0x38]                                    |         r1 = *((r4 + 0x38));
    0x0005ee62 mov r2, r5                                            |         r2 = r5;
    0x0005ee64 ldr r3, [r4, 0x50]                                    |         r3 = *((r4 + 0x50));
    0x0005ee66 mov r0, fp                                            |         r0 = fp;
    0x0005ee68 str r1, [sp]                                          |         *(sp) = r1;
    0x0005ee6a movs r1, 0x5e                                         |         r1 = 0x5e;
    0x0005ee6c bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ee70 ldr.w r0, [fp, 0xc]                                   |         r0 = *(arg_ch);
    0x0005ee74 ldrd r3, r2, [r0, 0x38]                               |         __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0005ee78 cmn r2, r3                                            |         
                                                                     |         if (r2 < r3) {
    0x0005ee7a bmi 0x5ef54                                           |             goto label_29;
                                                                     |         }
    0x0005ee7c ldr r2, [r0, 0x40]                                    |         r2 = *((r0 + 0x40));
    0x0005ee7e lsl.w r3, sl, 2                                       |         r3 = sl << 2;
    0x0005ee82 ldr.w r1, [fp, 0x6c]                                  |         r1 = *(arg_6ch);
    0x0005ee86 rsbs r3, r3, 0                                        |         r3 -= ;
    0x0005ee88 str r1, [r2, r3]                                      |         *((r2 + r3)) = r1;
    0x0005ee8a b 0x5ed84                                             |         goto label_1;
                                                                     | label_27:
    0x0005ee8c ldr r2, [r4, 0x50]                                    |         r2 = *((r4 + 0x50));
    0x0005ee8e movs r1, 0x5e                                         |         r1 = 0x5e;
    0x0005ee90 ldr.w sb, [sp, 0x18]                                  |         sb = var_18h;
    0x0005ee94 mov r0, fp                                            |         r0 = fp;
    0x0005ee96 str r3, [sp]                                          |         *(sp) = r3;
    0x0005ee98 adds r3, r2, 2                                        |         r3 = r2 + 2;
    0x0005ee9a mov r2, sb                                            |         r2 = sb;
    0x0005ee9c bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005eea0 movs r3, 0                                            |         r3 = 0;
    0x0005eea2 mov r2, sb                                            |         r2 = sb;
    0x0005eea4 str r3, [sp]                                          |         *(sp) = r3;
    0x0005eea6 movs r1, 0x87                                         |         r1 = 0x87;
    0x0005eea8 mov r3, r6                                            |         r3 = r6;
    0x0005eeaa mov r0, fp                                            |         r0 = fp;
    0x0005eeac bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_28:
    0x0005eeb0 ldr r2, [sp, 0x28]                                    |         r2 = var_28h;
    0x0005eeb2 ldrb.w r3, [r8, 0x13]                                 |         r3 = *((r8 + 0x13));
    0x0005eeb6 ldr r1, [r5, 0x20]                                    |         r1 = *((r5 + 0x20));
    0x0005eeb8 add.w r2, r2, 0x148                                   |         r2 += 0x148;
    0x0005eebc cmp r1, r2                                            |         
    0x0005eebe ite ne                                                |         
                                                                     |         if (r1 == r2) {
    0x0005eec0 movne sb, 0x6b                                        |             sb = 0x6b;
                                                                     |         }
                                                                     |         if (r1 == r2) {
    0x0005eec4 mov.w sb, 0x6a                                        |             sb = 0x6a;
                                                                     |         }
    0x0005eec8 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0005eeca beq.w 0x5f1c4                                         |             goto label_30;
                                                                     |         }
    0x0005eece subs r3, 1                                            |         r3--;
    0x0005eed0 uxtb r3, r3                                           |         r3 = (int8_t) r3;
    0x0005eed2 strb.w r3, [r8, 0x13]                                 |         *((r8 + 0x13)) = r3;
    0x0005eed6 adds r3, 0x26                                         |         r3 += 0x26;
    0x0005eed8 ldr.w r5, [r8, r3, lsl 2]                             |         offset_2 = r3 << 2;
                                                                     |         r5 = *((r8 + offset_2));
                                                                     | label_8:
    0x0005eedc ldr r3, [r4, 0x50]                                    |         r3 = *((r4 + 0x50));
    0x0005eede movs r1, 0x5e                                         |         r1 = 0x5e;
    0x0005eee0 ldr r2, [sp, 0x18]                                    |         r2 = var_18h;
    0x0005eee2 mov r0, fp                                            |         r0 = fp;
    0x0005eee4 str r5, [sp]                                          |         *(sp) = r5;
    0x0005eee6 adds r3, 1                                            |         r3++;
    0x0005eee8 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005eeec mov r1, sb                                            |         r1 = sb;
    0x0005eeee mov r3, r6                                            |         r3 = r6;
    0x0005eef0 mov r2, r5                                            |         r2 = r5;
    0x0005eef2 mov r0, fp                                            |         r0 = fp;
    0x0005eef4 str r6, [sp]                                          |         *(sp) = r6;
    0x0005eef6 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005eefa cmp r5, 0                                             |         
    0x0005eefc beq 0x5ee50                                           |         
                                                                     |     } while (r5 == 0);
    0x0005eefe ldrb.w r3, [r8, 0x13]                                 |     r3 = *((r8 + 0x13));
    0x0005ef02 cmp r3, 7                                             |     
    0x0005ef04 itttt ls                                              |     
                                                                     |     if (r3 > 7) {
    0x0005ef06 addls r2, r3, 1                                       |         r2 = r3 + 1;
                                                                     |     }
                                                                     |     if (r3 > 7) {
    0x0005ef08 addls r3, 0x26                                        |         r3 += 0x26;
                                                                     |     }
                                                                     |     if (r3 > 7) {
    0x0005ef0a strbls r2, [r8, 0x13]                                 |         *((r8 + 0x13)) = r2;
                                                                     |     }
                                                                     |     if (r3 <= 7) {
    0x0005ef0e str.w r5, [r8, r3, lsl 2]                             |         __asm ("str.w r5, [r8, r3, lsl 2]");
                                                                     |     }
    0x0005ef12 b 0x5ee50                                             |     goto label_2;
                                                                     | label_22:
    0x0005ef14 ldr.w r6, [r8, 0x2c]                                  |     r6 = *((r8 + 0x2c));
    0x0005ef18 adds r6, 1                                            |     r6++;
    0x0005ef1a str.w r6, [r8, 0x2c]                                  |     __asm ("str.w r6, [r8, 0x2c]");
    0x0005ef1e b 0x5ed04                                             |     goto label_3;
                                                                     | label_23:
    0x0005ef20 ldr r3, [r4, 0x50]                                    |     r3 = *((r4 + 0x50));
    0x0005ef22 movs r1, 0x5e                                         |     r1 = 0x5e;
    0x0005ef24 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0005ef26 mov r0, fp                                            |     r0 = fp;
    0x0005ef28 adds r3, 1                                            |     r3++;
    0x0005ef2a ldr r2, [r2, 0x30]                                    |     r2 = *((r2 + 0x30));
    0x0005ef2c str r6, [sp]                                          |     *(sp) = r6;
    0x0005ef2e bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005ef32 movs r2, 2                                            |     r2 = 2;
    0x0005ef34 mov r1, r6                                            |     r1 = r6;
    0x0005ef36 mov r0, r8                                            |     r0 = r8;
    0x0005ef38 bl 0x2b50c                                            |     fcn_0002b50c (r0, r1, r2);
    0x0005ef3c b 0x5ed2e                                             |     goto label_4;
                                                                     | label_24:
    0x0005ef3e rsbs r2, r7, 0                                        |     r2 = r7 - ;
    0x0005ef40 mov r1, fp                                            |     r1 = fp;
    0x0005ef42 bl 0x2bed8                                            |     fcn_0002bed8 (r0, r1, r2);
    0x0005ef46 b 0x5ed84                                             |     goto label_1;
                                                                     | label_26:
    0x0005ef48 ldr.w r6, [r8, 0x2c]                                  |     r6 = *((r8 + 0x2c));
    0x0005ef4c adds r6, 1                                            |     r6++;
    0x0005ef4e str.w r6, [r8, 0x2c]                                  |     __asm ("str.w r6, [r8, 0x2c]");
    0x0005ef52 b 0x5edfa                                             |     goto label_5;
                                                                     | label_29:
    0x0005ef54 rsb.w r2, sl, 0                                       |     r2 = sl - ;
    0x0005ef58 mov r1, fp                                            |     r1 = fp;
    0x0005ef5a bl 0x2bed8                                            |     fcn_0002bed8 (r0, r1, r2);
    0x0005ef5e b 0x5ed84                                             |     goto label_1;
                                                                     | label_20:
    0x0005ef60 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0005ef62 ldr.w sl, [r3, 0x3c]                                  |     sl = *((r3 + 0x3c));
    0x0005ef66 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0005ef68 mov sb, r3                                            |     sb = r3;
                                                                     |     if (r3 != 0) {
    0x0005ef6a cbz r3, 0x5ef70                                       |         
    0x0005ef6c ldr.w sb, [r3]                                        |         sb = *(r3);
                                                                     |     }
    0x0005ef70 ldr.w r2, [r8, 0x38]                                  |     r2 = *((r8 + 0x38));
    0x0005ef74 ldrb.w r3, [r8, 0x13]                                 |     r3 = *((r8 + 0x13));
    0x0005ef78 subs r1, r2, 2                                        |     r1 = r2 - 2;
    0x0005ef7a str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0005ef7c subs r2, 1                                            |     r2--;
    0x0005ef7e str r1, [sp, 0x18]                                    |     var_18h = r1;
    0x0005ef80 str.w r1, [r8, 0x38]                                  |     __asm ("str.w r1, [r8, 0x38]");
    0x0005ef84 str r2, [sp, 0x28]                                    |     var_28h = r2;
    0x0005ef86 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ef88 beq.w 0x5f1da                                         |         goto label_31;
                                                                     |     }
    0x0005ef8c subs r2, r3, 1                                        |     r2 = r3 - 1;
    0x0005ef8e uxtb r2, r2                                           |     r2 = (int8_t) r2;
    0x0005ef90 add.w r1, r2, 0x26                                    |     r1 = r2 + 0x26;
    0x0005ef94 strb.w r2, [r8, 0x13]                                 |     *((r8 + 0x13)) = r2;
    0x0005ef98 ldr.w r1, [r8, r1, lsl 2]                             |     offset_3 = r1 << 2;
                                                                     |     r1 = *((r8 + offset_3));
    0x0005ef9c str r1, [sp, 0x10]                                    |     var_10h = r1;
    0x0005ef9e cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005efa0 beq.w 0x5f308                                         |         goto label_32;
                                                                     |     }
    0x0005efa4 subs r3, 2                                            |     r3 -= 2;
    0x0005efa6 uxtb r3, r3                                           |     r3 = (int8_t) r3;
    0x0005efa8 strb.w r3, [r8, 0x13]                                 |     *((r8 + 0x13)) = r3;
    0x0005efac adds r3, 0x26                                         |     r3 += 0x26;
    0x0005efae ldr.w r3, [r8, r3, lsl 2]                             |     offset_4 = r3 << 2;
                                                                     |     r3 = *((r8 + offset_4));
    0x0005efb2 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0005efb4 cmp.w sb, 0                                           |     
                                                                     |     if (sb != 0) {
    0x0005efb8 bne.w 0x5f1f2                                         |         goto label_33;
                                                                     |     }
                                                                     | label_9:
    0x0005efbc str.w sb, [sp, 0x2c]                                  |     __asm ("str.w sb, [var_2ch]");
    0x0005efc0 str.w sb, [sp, 0x20]                                  |     __asm ("str.w sb, [var_20h]");
                                                                     | label_10:
    0x0005efc4 ldr r4, [sp, 0x14]                                    |     r4 = var_14h;
    0x0005efc6 movs r5, 0                                            |     r5 = 0;
    0x0005efc8 movs r1, 0x87                                         |     r1 = 0x87;
    0x0005efca mov r0, fp                                            |     r0 = fp;
    0x0005efcc movs r6, 0x4b                                         |     r6 = 0x4b;
    0x0005efce ldr r3, [r4, 0x30]                                    |     r3 = *((r4 + 0x30));
    0x0005efd0 str r5, [sp]                                          |     *(sp) = r5;
    0x0005efd2 mov r2, r3                                            |     r2 = r3;
    0x0005efd4 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0005efd6 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0005efd8 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005efdc ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0005efde ldr r2, [r4, 0x30]                                    |     r2 = *((r4 + 0x30));
    0x0005efe0 ldrd r0, r1, [r7]                                     |     __asm ("ldrd r0, r1, [r7]");
    0x0005efe4 bl 0x29e4c                                            |     fcn_00029e4c (r0, r1, r2, r3);
    0x0005efe8 b 0x5f006                                             |     
                                                                     |     while (r2 < r1) {
    0x0005efea ldr.w r0, [fp, 0x68]                                  |         r0 = *(arg_68h);
    0x0005efee str.w r1, [fp, 0x6c]                                  |         __asm ("str.w r1, [arg_6ch]");
    0x0005eff2 add.w r1, r0, r2, lsl 2                               |         r1 = r0 + (r2 << 2);
    0x0005eff6 strd r3, r5, [r1, 8]                                  |         __asm ("strd r3, r5, [r1, 8]");
    0x0005effa str r5, [r1, 0x10]                                    |         *((r1 + 0x10)) = r5;
    0x0005effc str.w r6, [r0, r2, lsl 2]                             |         __asm ("str.w r6, [r0, r2, lsl 2]");
    0x0005f000 ldr r4, [r4, 0x24]                                    |         r4 = *((r4 + 0x24));
    0x0005f002 str r5, [r1, 4]                                       |         *((r1 + 4)) = r5;
                                                                     |         if (r4 == 0) {
    0x0005f004 cbz r4, 0x5f02a                                       |             goto label_34;
                                                                     |         }
                                                                     | label_6:
    0x0005f006 ldrd r2, r1, [fp, 0x6c]                               |         __asm ("ldrd r2, r1, [arg_6ch]");
    0x0005f00a ldr r3, [r4, 0x34]                                    |         r3 = *((r4 + 0x34));
    0x0005f00c cmp r2, r1                                            |         
    0x0005f00e add.w r1, r2, 1                                       |         r1 = r2 + 1;
    0x0005f012 add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0005f016 blt 0x5efea                                           |         
                                                                     |     }
    0x0005f018 movs r2, 0                                            |     r2 = 0;
    0x0005f01a movs r1, 0x4b                                         |     r1 = 0x4b;
    0x0005f01c mov r0, fp                                            |     r0 = fp;
    0x0005f01e str r5, [sp]                                          |     *(sp) = r5;
    0x0005f020 bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005f024 ldr r4, [r4, 0x24]                                    |     r4 = *((r4 + 0x24));
    0x0005f026 cmp r4, 0                                             |     
                                                                     |     if (r4 != 0) {
    0x0005f028 bne 0x5f006                                           |         goto label_6;
                                                                     |     }
                                                                     | label_34:
    0x0005f02a ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0005f02c mov r2, sl                                            |     r2 = sl;
    0x0005f02e movs r1, 0x16                                         |     r1 = 0x16;
    0x0005f030 mov r0, fp                                            |     r0 = fp;
    0x0005f032 ldr r3, [r5, 0x58]                                    |     r3 = *((r5 + 0x58));
    0x0005f034 str r3, [sp]                                          |     *(sp) = r3;
    0x0005f036 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0005f038 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f03c ldr.w r2, [fp, 0x6c]                                  |     r2 = *(arg_6ch);
    0x0005f040 movs r1, 0x87                                         |     r1 = 0x87;
    0x0005f042 ldr r6, [sp, 0xc]                                     |     r6 = var_ch;
    0x0005f044 mov r0, fp                                            |     r0 = fp;
    0x0005f046 str r4, [sp]                                          |     *(sp) = r4;
    0x0005f048 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0005f04a mov r2, sl                                            |     r2 = sl;
    0x0005f04c mov r3, r6                                            |     r3 = r6;
    0x0005f04e bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f052 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0005f054 movs r1, 0x36                                         |     r1 = 0x36;
    0x0005f056 ldr r2, [r5, 0x5c]                                    |     r2 = *((r5 + 0x5c));
    0x0005f058 mov r0, fp                                            |     r0 = fp;
    0x0005f05a str r6, [sp]                                          |     *(sp) = r6;
    0x0005f05c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f060 ldrb r3, [r5, 0x14]                                   |     r3 = *((r5 + 0x14));
    0x0005f062 cmp r3, 0x55                                          |     
                                                                     |     if (r3 == 0x55) {
    0x0005f064 beq.w 0x5f242                                         |         goto label_35;
                                                                     |     }
    0x0005f068 cmp r3, 0x42                                          |     
                                                                     |     if (r3 != 0x42) {
    0x0005f06a beq 0x5f10c                                           |         
    0x0005f06c ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0005f06e ldr r5, [r2, 0xc]                                     |         r5 = *((r2 + 0xc));
    0x0005f070 cmp r5, 0                                             |         
                                                                     |         if (r5 == 0) {
    0x0005f072 beq.w 0x5f22e                                         |             goto label_36;
                                                                     |         }
    0x0005f076 mov r1, r5                                            |         r1 = r5;
    0x0005f078 mov r3, r4                                            |         r3 = r4;
    0x0005f07a mov r2, r4                                            |         r2 = r4;
    0x0005f07c mov r0, r8                                            |         r0 = r8;
    0x0005f07e bl 0x28128                                            |         fcn_00028128 (r0, r1, r2, r3);
    0x0005f082 ldr r3, [sp, 0x14]                                    |         r3 = var_14h;
    0x0005f084 mov r5, r0                                            |         r5 = r0;
    0x0005f086 ldrb r3, [r3, 0x14]                                   |         r3 = *((r3 + 0x14));
    0x0005f088 cmp r3, 0x5e                                          |         
                                                                     |         if (r3 == 0x5e) {
    0x0005f08a beq.w 0x5f25c                                         |             goto label_37;
                                                                     |         }
                                                                     | label_15:
    0x0005f08e cmp r5, 0                                             |         
                                                                     |         if (r5 == 0) {
    0x0005f090 beq.w 0x5f2f8                                         |             goto label_38;
                                                                     |         }
    0x0005f094 ldr r6, [sp, 0x2c]                                    |         r6 = var_2ch;
    0x0005f096 mov r2, sl                                            |         r2 = sl;
    0x0005f098 ldrd r0, r1, [r7]                                     |         __asm ("ldrd r0, r1, [r7]");
    0x0005f09c mov r3, r6                                            |         r3 = r6;
    0x0005f09e bl 0x29e4c                                            |         fcn_00029e4c (r0, r1, r2, r3);
    0x0005f0a2 ldr r3, [sp, 0x20]                                    |         r3 = var_20h;
    0x0005f0a4 mov r2, r6                                            |         r2 = r6;
    0x0005f0a6 movs r1, 0x5a                                         |         r1 = 0x5a;
    0x0005f0a8 mov r0, fp                                            |         r0 = fp;
    0x0005f0aa str.w sb, [sp]                                        |         __asm ("str.w sb, [sp]");
    0x0005f0ae bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f0b2 ldr.w r3, [fp]                                        |         r3 = *(fp);
    0x0005f0b6 ldrb.w r2, [r3, 0x57]                                 |         r2 = *((r3 + 0x57));
    0x0005f0ba cmp r2, 0                                             |         
                                                                     |         if (r2 != 0) {
    0x0005f0bc bne.w 0x5f28e                                         |             goto label_39;
                                                                     |         }
    0x0005f0c0 ldrd r1, r2, [fp, 0x68]                               |         __asm ("ldrd r1, r2, [arg_68h]");
    0x0005f0c4 movs r0, 0xf8                                         |         r0 = 0xf8;
    0x0005f0c6 add.w r3, r2, r2, lsl 2                               |         r3 = r2 + (r2 << 2);
    0x0005f0ca lsls r3, r3, 2                                        |         r3 <<= 2;
    0x0005f0cc subs r3, 0x14                                         |         r3 -= 0x14;
    0x0005f0ce add r1, r3                                            |         r1 += r3;
    0x0005f0d0 strb r0, [r1, 1]                                      |         *((r1 + 1)) = r0;
    0x0005f0d2 str r5, [r1, 0x10]                                    |         *((r1 + 0x10)) = r5;
                                                                     | label_16:
    0x0005f0d4 adds r2, 1                                            |         r2++;
    0x0005f0d6 ldr r3, [sp, 0x28]                                    |         r3 = var_28h;
    0x0005f0d8 movs r1, 0xd                                          |         r1 = 0xd;
    0x0005f0da mov r0, fp                                            |         r0 = fp;
    0x0005f0dc str r2, [sp]                                          |         *(sp) = r2;
    0x0005f0de bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_18:
    0x0005f0e2 cmp r4, 0                                             |         
                                                                     |         if (r4 == 0) {
    0x0005f0e4 beq 0x5f10c                                           |             goto label_13;
                                                                     |         }
    0x0005f0e6 ldr.w r3, [fp]                                        |         r3 = *(fp);
    0x0005f0ea ldr.w r2, [fp, 0x6c]                                  |         r2 = *(arg_6ch);
    0x0005f0ee ldrb.w r3, [r3, 0x57]                                 |         r3 = *((r3 + 0x57));
    0x0005f0f2 it lt                                                 |         
                                                                     |         if (r4 >= 0) {
    0x0005f0f4 addlt r4, r2, -1                                      |             r4 = r2 + -1;
                                                                     |         }
    0x0005f0f8 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0005f0fa bne.w 0x5f254                                         |             goto label_40;
                                                                     |         }
    0x0005f0fe ldr.w r3, [fp, 0x68]                                  |         r3 = *(arg_68h);
    0x0005f102 add.w r4, r4, r4, lsl 2                               |         r4 += (r4 << 2);
    0x0005f106 add.w r3, r3, r4, lsl 2                               |         r3 += (r4 << 2);
                                                                     | label_14:
    0x0005f10a str r2, [r3, 8]                                       |         *((r3 + 8)) = r2;
                                                                     |     }
                                                                     | label_13:
    0x0005f10c ldr r3, [r7, 0x14]                                    |     r3 = *((r7 + 0x14));
    0x0005f10e mov r2, sl                                            |     r2 = sl;
    0x0005f110 ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0005f112 str r3, [sp]                                          |     *(sp) = r3;
    0x0005f114 movs r3, 0                                            |     r3 = 0;
    0x0005f116 ldr r0, [r7]                                          |     r0 = *(r7);
    0x0005f118 bl 0x5e7c4                                            |     fcn_0005e7c4 (r0, r1, r2, r3, r4, r5);
    0x0005f11c ldr.w r0, [fp, 0xc]                                   |     r0 = *(arg_ch);
    0x0005f120 ldrd r3, r2, [r0, 0x38]                               |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0005f124 cmn r2, r3                                            |     
                                                                     |     if (r2 < r3) {
    0x0005f126 bmi 0x5f222                                           |         goto label_41;
                                                                     |     }
    0x0005f128 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005f12a ldr r2, [r0, 0x40]                                    |     r2 = *((r0 + 0x40));
    0x0005f12c ldr.w r1, [fp, 0x6c]                                  |     r1 = *(arg_6ch);
    0x0005f130 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0005f132 rsbs r3, r3, 0                                        |     r3 -= ;
    0x0005f134 str r1, [r2, r3]                                      |     *((r2 + r3)) = r1;
                                                                     | label_12:
    0x0005f136 ldr r4, [sp, 0x1c]                                    |     r4 = var_1ch;
    0x0005f138 movs r3, 0                                            |     r3 = 0;
    0x0005f13a mov r2, sl                                            |     r2 = sl;
    0x0005f13c movs r1, 0x26                                         |     r1 = 0x26;
    0x0005f13e str r3, [sp]                                          |     *(sp) = r3;
    0x0005f140 mov r0, fp                                            |     r0 = fp;
    0x0005f142 mov r3, r4                                            |     r3 = r4;
    0x0005f144 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f148 ldr.w r1, [fp]                                        |     r1 = *(fp);
    0x0005f14c subs r3, r4, 1                                        |     r3 = r4 - 1;
    0x0005f14e ldr.w r2, [fp, 0x6c]                                  |     r2 = *(arg_6ch);
    0x0005f152 ldrb.w r1, [r1, 0x57]                                 |     r1 = *((r1 + 0x57));
    0x0005f156 it mi                                                 |     
                                                                     |     if (r3 >= r4) {
    0x0005f158 addmi r3, r2, -1                                      |         r3 = r2 + -1;
                                                                     |     }
    0x0005f15c cmp r1, 0                                             |     
                                                                     |     if (r1 != 0) {
    0x0005f15e bne 0x5f1d0                                           |         goto label_42;
                                                                     |     }
    0x0005f160 add.w r1, r3, r3, lsl 2                               |     r1 = r3 + (r3 << 2);
    0x0005f164 ldr.w r3, [fp, 0x68]                                  |     r3 = *(arg_68h);
    0x0005f168 add.w r1, r3, r1, lsl 2                               |     r1 = r3 + (r1 << 2);
    0x0005f16c str r2, [r1, 8]                                       |     *((r1 + 8)) = r2;
    0x0005f16e ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0005f170 adds r6, r1, 1                                        |     r6 = r1 + 1;
    0x0005f172 it mi                                                 |     
                                                                     |     if (r6 >= r1) {
    0x0005f174 addmi r6, r2, -1                                      |         r6 = r2 + -1;
                                                                     |     }
    0x0005f178 add.w r6, r6, r6, lsl 2                               |     r6 += (r6 << 2);
    0x0005f17c add.w r3, r3, r6, lsl 2                               |     r3 += (r6 << 2);
                                                                     |     do {
    0x0005f180 ldr r1, [sp, 0xc]                                     |         r1 = var_ch;
    0x0005f182 str r2, [r3, 8]                                       |         *((r3 + 8)) = r2;
                                                                     |         if (r1 != 0) {
    0x0005f184 cbz r1, 0x5f19a                                       |             
    0x0005f186 ldrb.w r3, [r8, 0x13]                                 |             r3 = *((r8 + 0x13));
    0x0005f18a cmp r3, 7                                             |             
                                                                     |             if (r3 > 7) {
    0x0005f18c bhi 0x5f1b2                                           |                 goto label_43;
                                                                     |             }
    0x0005f18e adds r2, r3, 1                                        |             r2 = r3 + 1;
    0x0005f190 adds r3, 0x26                                         |             r3 += 0x26;
    0x0005f192 strb.w r2, [r8, 0x13]                                 |             *((r8 + 0x13)) = r2;
    0x0005f196 str.w r1, [r8, r3, lsl 2]                             |             __asm ("str.w r1, [r8, r3, lsl 2]");
                                                                     |         }
    0x0005f19a ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
                                                                     |         if (r1 != 0) {
    0x0005f19c cbz r1, 0x5f1b2                                       |             
    0x0005f19e ldrb.w r3, [r8, 0x13]                                 |             r3 = *((r8 + 0x13));
    0x0005f1a2 cmp r3, 7                                             |             
    0x0005f1a4 itttt ls                                              |             
                                                                     |             if (r3 > 7) {
    0x0005f1a6 addls r2, r3, 1                                       |                 r2 = r3 + 1;
                                                                     |             }
                                                                     |             if (r3 > 7) {
    0x0005f1a8 addls r3, 0x26                                        |                 r3 += 0x26;
                                                                     |             }
                                                                     |             if (r3 > 7) {
    0x0005f1aa strbls r2, [r8, 0x13]                                 |                 *((r8 + 0x13)) = r2;
                                                                     |             }
                                                                     |             if (r3 > 7) {
    0x0005f1ae str.w r1, [r8, r3, lsl 2]                             |                 __asm ("str.w r1, [r8, r3, lsl 2]");
                                                                     |                 goto label_43;
                                                                     |             }
                                                                     |         }
                                                                     | label_43:
    0x0005f1b2 cmp.w sb, 0                                           |         
                                                                     |         if (sb != 0) {
    0x0005f1b6 bne 0x5f208                                           |             goto label_44;
                                                                     |         }
                                                                     | label_11:
    0x0005f1b8 ldrd r0, r1, [r7]                                     |         __asm ("ldrd r0, r1, [r7]");
    0x0005f1bc movs r2, 1                                            |         r2 = 1;
    0x0005f1be bl 0x29c40                                            |         fcn_00029c40 (r0, r1, r2);
    0x0005f1c2 b 0x5eda2                                             |         goto label_7;
                                                                     | label_30:
    0x0005f1c4 ldr.w r5, [r8, 0x2c]                                  |         r5 = *((r8 + 0x2c));
    0x0005f1c8 adds r5, 1                                            |         r5++;
    0x0005f1ca str.w r5, [r8, 0x2c]                                  |         __asm ("str.w r5, [r8, 0x2c]");
    0x0005f1ce b 0x5eedc                                             |         goto label_8;
                                                                     | label_42:
    0x0005f1d0 ldr r3, [pc, 0x14c]                                   |         
    0x0005f1d2 add r3, pc                                            |         r3 = 0xbe4f6;
    0x0005f1d4 str r2, [r3, 0xc]                                     |         *((r3 + 0xc)) = r2;
    0x0005f1d6 adds r3, 4                                            |         r3 += 4;
    0x0005f1d8 b 0x5f180                                             |         
                                                                     |     } while (1);
                                                                     | label_31:
    0x0005f1da ldr.w r3, [r8, 0x2c]                                  |     r3 = *((r8 + 0x2c));
    0x0005f1de adds r3, 1                                            |     r3++;
    0x0005f1e0 str r3, [sp, 0x10]                                    |     var_10h = r3;
                                                                     | label_19:
    0x0005f1e2 adds r3, 1                                            |     r3++;
    0x0005f1e4 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0005f1e6 str.w r3, [r8, 0x2c]                                  |     __asm ("str.w r3, [r8, 0x2c]");
    0x0005f1ea cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0005f1ee beq.w 0x5efbc                                         |         goto label_9;
                                                                     |     }
                                                                     | label_33:
    0x0005f1f2 mov r1, sb                                            |     r1 = sb;
    0x0005f1f4 mov r0, r8                                            |     r0 = r8;
    0x0005f1f6 bl 0xf638                                             |     fcn_0000f638 (r0, r1);
    0x0005f1fa mov r1, sb                                            |     r1 = sb;
    0x0005f1fc str r0, [sp, 0x20]                                    |     var_20h = r0;
    0x0005f1fe mov r0, r8                                            |     r0 = r8;
    0x0005f200 bl 0xf638                                             |     fcn_0000f638 (r0, r1);
    0x0005f204 str r0, [sp, 0x2c]                                    |     var_2ch = r0;
    0x0005f206 b 0x5efc4                                             |     goto label_10;
                                                                     | label_44:
    0x0005f208 cmp.w sb, 1                                           |     
                                                                     |     if (sb == 1) {
    0x0005f20c beq 0x5f29a                                           |         goto label_45;
                                                                     |     }
    0x0005f20e ldr.w r3, [r8, 0x1c]                                  |     r3 = *((r8 + 0x1c));
    0x0005f212 cmp sb, r3                                            |     
                                                                     |     if (sb <= r3) {
    0x0005f214 ble 0x5f1b8                                           |         goto label_11;
                                                                     |     }
    0x0005f216 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0005f218 str.w sb, [r8, 0x1c]                                  |     __asm ("str.w sb, [r8, 0x1c]");
    0x0005f21c str.w r3, [r8, 0x20]                                  |     __asm ("str.w r3, [r8, 0x20]");
    0x0005f220 b 0x5f1b8                                             |     goto label_11;
                                                                     | label_41:
    0x0005f222 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005f224 mov r1, fp                                            |     r1 = fp;
    0x0005f226 rsbs r2, r3, 0                                        |     r2 = r3 - ;
    0x0005f228 bl 0x2bed8                                            |     fcn_0002bed8 (r0, r1, r2);
    0x0005f22c b 0x5f136                                             |     goto label_12;
                                                                     | label_36:
    0x0005f22e cmp r3, 0x5e                                          |     
                                                                     |     if (r3 != 0x5e) {
    0x0005f230 beq 0x5f25c                                           |         
    0x0005f232 ldr r3, [sp, 0x28]                                    |         r3 = var_28h;
    0x0005f234 mov r2, r4                                            |         r2 = r4;
    0x0005f236 movs r1, 8                                            |         r1 = 8;
    0x0005f238 mov r0, fp                                            |         r0 = fp;
    0x0005f23a str r4, [sp]                                          |         *(sp) = r4;
    0x0005f23c bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f240 b 0x5f10c                                             |         goto label_13;
                                                                     | label_35:
    0x0005f242 ldr r2, [sp, 0xc]                                     |         r2 = var_ch;
    0x0005f244 movs r1, 0x35                                         |         r1 = 0x35;
    0x0005f246 ldr r3, [sp, 0x28]                                    |         r3 = var_28h;
    0x0005f248 mov r0, fp                                            |         r0 = fp;
    0x0005f24a str r2, [sp]                                          |         *(sp) = r2;
    0x0005f24c ldr r2, [sp, 0x10]                                    |         r2 = var_10h;
    0x0005f24e bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f252 b 0x5f10c                                             |         goto label_13;
                                                                     | label_40:
    0x0005f254 ldr r3, [pc, 0xcc]                                    |         
    0x0005f256 add r3, pc                                            |         r3 = 0xbe57e;
    0x0005f258 adds r3, 4                                            |         r3 += 4;
    0x0005f25a b 0x5f10a                                             |         goto label_14;
                                                                     |     }
                                                                     | label_37:
    0x0005f25c ldrd r4, r3, [fp, 0x6c]                               |     __asm ("ldrd r4, r3, [arg_6ch]");
    0x0005f260 cmp r4, r3                                            |     
                                                                     |     if (r4 >= r3) {
    0x0005f262 bge 0x5f2d0                                           |         goto label_46;
                                                                     |     }
    0x0005f264 add.w r3, r4, r4, lsl 2                               |     r3 = r4 + (r4 << 2);
    0x0005f268 ldr.w r1, [fp, 0x68]                                  |     r1 = *(arg_68h);
    0x0005f26c ldr r6, [sp, 0x10]                                    |     r6 = var_10h;
    0x0005f26e adds r2, r4, 1                                        |     r2 = r4 + 1;
    0x0005f270 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0005f272 str.w r2, [fp, 0x6c]                                  |     __asm ("str.w r2, [arg_6ch]");
    0x0005f276 movs r0, 0                                            |     r0 = 0;
    0x0005f278 adds r2, r1, r3                                       |     r2 = r1 + r3;
    0x0005f27a mov.w ip, 0x35                                        |     
    0x0005f27e strd r6, r0, [r2, 4]                                  |     __asm ("strd r6, r0, [r2, 4]");
    0x0005f282 str r0, [r2, 0x10]                                    |     *((r2 + 0x10)) = r0;
    0x0005f284 ldr r0, [sp, 0xc]                                     |     r0 = var_ch;
    0x0005f286 str r0, [r2, 0xc]                                     |     *((r2 + 0xc)) = r0;
    0x0005f288 str.w ip, [r1, r3]                                    |     __asm ("str.w ip, [r1, r3]");
    0x0005f28c b 0x5f08e                                             |     goto label_15;
                                                                     | label_39:
    0x0005f28e ldr.w r3, [r3, 0x210]                                 |     r3 = *((r3 + 0x210));
                                                                     |     if (r3 == 0) {
    0x0005f292 cbz r3, 0x5f2e4                                       |         goto label_47;
                                                                     |     }
                                                                     | label_17:
    0x0005f294 ldr.w r2, [fp, 0x6c]                                  |     r2 = *(arg_6ch);
    0x0005f298 b 0x5f0d4                                             |     goto label_16;
                                                                     | label_45:
    0x0005f29a ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
                                                                     |     if (r1 == 0) {
    0x0005f29c cbz r1, 0x5f2b2                                       |         goto label_48;
                                                                     |     }
    0x0005f29e ldrb.w r3, [r8, 0x13]                                 |     r3 = *((r8 + 0x13));
    0x0005f2a2 cmp r3, 7                                             |     
                                                                     |     if (r3 > 7) {
    0x0005f2a4 bhi 0x5f1b8                                           |         goto label_11;
                                                                     |     }
    0x0005f2a6 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0005f2a8 adds r3, 0x26                                         |     r3 += 0x26;
    0x0005f2aa strb.w r2, [r8, 0x13]                                 |     *((r8 + 0x13)) = r2;
    0x0005f2ae str.w r1, [r8, r3, lsl 2]                             |     __asm ("str.w r1, [r8, r3, lsl 2]");
                                                                     | label_48:
    0x0005f2b2 ldr r1, [sp, 0x20]                                    |     r1 = var_20h;
    0x0005f2b4 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0005f2b6 beq.w 0x5f1b8                                         |         goto label_11;
                                                                     |     }
    0x0005f2ba ldrb.w r3, [r8, 0x13]                                 |     r3 = *((r8 + 0x13));
    0x0005f2be cmp r3, 7                                             |     
    0x0005f2c0 itttt ls                                              |     
                                                                     |     if (r3 > 7) {
    0x0005f2c2 addls r2, r3, 1                                       |         r2 = r3 + 1;
                                                                     |     }
                                                                     |     if (r3 > 7) {
    0x0005f2c4 addls r3, 0x26                                        |         r3 += 0x26;
                                                                     |     }
                                                                     |     if (r3 > 7) {
    0x0005f2c6 strbls r2, [r8, 0x13]                                 |         *((r8 + 0x13)) = r2;
                                                                     |     }
                                                                     |     if (r3 <= 7) {
    0x0005f2ca str.w r1, [r8, r3, lsl 2]                             |         __asm ("str.w r1, [r8, r3, lsl 2]");
                                                                     |     }
    0x0005f2ce b 0x5f1b8                                             |     goto label_11;
                                                                     | label_46:
    0x0005f2d0 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0005f2d2 movs r1, 0x35                                         |     r1 = 0x35;
    0x0005f2d4 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0005f2d6 mov r0, fp                                            |     r0 = fp;
    0x0005f2d8 str r3, [sp]                                          |     *(sp) = r3;
    0x0005f2da movs r3, 0                                            |     r3 = 0;
    0x0005f2dc bl 0x29a7c                                            |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005f2e0 mov r4, r0                                            |     r4 = r0;
    0x0005f2e2 b 0x5f08e                                             |     goto label_15;
                                                                     | label_47:
    0x0005f2e4 ldr r3, [r5]                                          |     r3 = *(r5);
    0x0005f2e6 subs r3, 1                                            |     r3--;
    0x0005f2e8 str r3, [r5]                                          |     *(r5) = r3;
    0x0005f2ea cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005f2ec bne 0x5f294                                           |         goto label_17;
                                                                     |     }
    0x0005f2ee ldr r0, [r5, 0xc]                                     |     r0 = *((r5 + 0xc));
    0x0005f2f0 mov r1, r5                                            |     r1 = r5;
    0x0005f2f2 bl 0x137d0                                            |     fcn_000137d0 (r0, r1);
    0x0005f2f6 b 0x5f294                                             |     goto label_17;
                                                                     | label_38:
    0x0005f2f8 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005f2fa mov r2, r5                                            |     r2 = r5;
    0x0005f2fc movs r1, 8                                            |     r1 = 8;
    0x0005f2fe mov r0, fp                                            |     r0 = fp;
    0x0005f300 str r5, [sp]                                          |     *(sp) = r5;
    0x0005f302 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f306 b 0x5f0e2                                             |     goto label_18;
                                                                     | label_32:
    0x0005f308 ldr.w r3, [r8, 0x2c]                                  |     r3 = *((r8 + 0x2c));
    0x0005f30c b 0x5f1e2                                             |     goto label_19;
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5f7ac */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0005f7ac ()                                          | void fcn_0005f7ac (int16_t arg_1h, int16_t arg_6h, int16_t arg_10h, int16_t arg_50h, arithmetic x, int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0005f7ac push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005f7b0 mov r5, r1                                            |     r5 = r1;
    0x0005f7b2 ldr r1, [r1]                                          |     r1 = *(r1);
    0x0005f7b4 sub sp, 0x2c                                          |     
    0x0005f7b6 mov r4, r0                                            |     r4 = r0;
    0x0005f7b8 mov fp, r3                                            |     
    0x0005f7ba ldrb.w r8, [r5, 0x20]                                 |     r8 = *((r5 + 0x20));
    0x0005f7be str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x0005f7c0 ldr r2, [r1]                                          |     r2 = *(r1);
    0x0005f7c2 and r8, r8, 1                                         |     r8 &= 1;
    0x0005f7c6 ldr.w sl, [sp, 0x58]                                  |     sl = *(arg_58h);
    0x0005f7ca eor r0, r8, 1                                         |     r0 = r8 ^ 1;
    0x0005f7ce ldr r3, [sp, 0x50]                                    |     r3 = *(arg_50h);
    0x0005f7d0 str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0005f7d2 adds r2, r0, r2                                       |     r2 = r0 + r2;
    0x0005f7d4 str r0, [sp, 0x1c]                                    |     var_1ch = r0;
    0x0005f7d6 sub.w sb, fp, sl                                      |     sb = fp - sl;
    0x0005f7da ldr r0, [sp, 0x54]                                    |     r0 = *(x);
    0x0005f7dc ldr r6, [r4, 8]                                       |     r6 = *((r4 + 8));
    0x0005f7de add r2, r0                                            |     r2 += r0;
    0x0005f7e0 str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0005f7e2 ldr r2, [r5, 4]                                       |     r2 = *((r5 + 4));
    0x0005f7e4 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0005f7e6 cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x0005f7ea bne 0x5f7f8                                           |         
    0x0005f7ec ldr r2, [r4, 0x2c]                                    |         r2 = *((r4 + 0x2c));
    0x0005f7ee ldr r0, [sp, 0xc]                                     |         r0 = var_ch;
    0x0005f7f0 add.w sb, r2, 1                                       |         sb = r2 + 1;
    0x0005f7f4 add r2, r0                                            |         r2 += r0;
    0x0005f7f6 str r2, [r4, 0x2c]                                    |         *((r4 + 0x2c)) = r2;
                                                                     |     }
    0x0005f7f8 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0005f7fa ldr r7, [r2, 0xc]                                     |     r7 = *((r2 + 0xc));
    0x0005f7fc cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0005f7fe beq 0x5f8dc                                           |         goto label_12;
                                                                     |     }
    0x0005f800 adds r7, 1                                            |     r7++;
                                                                     |     do {
    0x0005f802 ldr r2, [r4, 0x38]                                    |         r2 = *((r4 + 0x38));
    0x0005f804 cmp r3, 0                                             |         
    0x0005f806 mov r0, r4                                            |         r0 = r4;
    0x0005f808 add.w r2, r2, -1                                      |         r2 += -1;
    0x0005f80c str r2, [r4, 0x38]                                    |         *((r4 + 0x38)) = r2;
    0x0005f80e str r2, [r5, 0x18]                                    |         *((r5 + 0x18)) = r2;
    0x0005f810 ite ne                                                |         
                                                                     |         if (r3 == 0) {
    0x0005f812 movne r2, 5                                           |             r2 = 5;
                                                                     |         }
                                                                     |         if (r3 != 0) {
    0x0005f814 moveq r2, 1                                           |             r2 = 1;
                                                                     |         }
    0x0005f816 str r2, [sp]                                          |         *(sp) = r2;
    0x0005f818 mov r2, sb                                            |         r2 = sb;
    0x0005f81a bl 0x5e63c                                            |         fcn_0005e63c (r0, r1, r2, r3, r4);
    0x0005f81e cmp.w r8, 0                                           |         
                                                                     |         if (r8 == 0) {
    0x0005f822 beq.w 0x5f97e                                         |             goto label_13;
                                                                     |         }
                                                                     | label_1:
    0x0005f826 ldr r2, [sp, 0x54]                                    |         r2 = *(x);
    0x0005f828 clz r3, sl                                            |         r3 &= sl;
    0x0005f82c lsrs r3, r3, 5                                        |         r3 >>= 5;
    0x0005f82e cmp r2, 0                                             |         
    0x0005f830 it le                                                 |         
                                                                     |         if (r2 > 0) {
    0x0005f832 movle r3, 0                                           |             r3 = 0;
                                                                     |         }
    0x0005f834 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0005f836 bne.w 0x5f966                                         |             goto label_14;
                                                                     |         }
                                                                     | label_0:
    0x0005f83a ldr r3, [sp, 8]                                       |         r3 = var_8h;
    0x0005f83c cmp r3, 0                                             |         
                                                                     |         if (r3 > 0) {
    0x0005f83e bgt 0x5f8e2                                           |             goto label_15;
                                                                     |         }
    0x0005f840 add.w r8, sb, r3                                      |         r8 = sb + r3;
    0x0005f844 cmp r7, 0                                             |         
                                                                     |         if (r7 != 0) {
    0x0005f846 bne.w 0x5fafe                                         |             goto label_16;
                                                                     |         }
                                                                     | label_6:
    0x0005f84a ldr r3, [r4, 0x2c]                                    |         r3 = *((r4 + 0x2c));
    0x0005f84c ldr.w sl, [r5, 4]                                     |         sl = *((r5 + 4));
    0x0005f850 ldr.w fp, [r4, 8]                                     |         fp = *((r4 + 8));
    0x0005f854 adds r3, 1                                            |         r3++;
    0x0005f856 mov r2, r3                                            |         r2 = r3;
    0x0005f858 str r3, [sp, 0x14]                                    |         var_14h = r3;
    0x0005f85a ldr r3, [r5, 0x24]                                    |         r3 = *((r5 + 0x24));
    0x0005f85c str r2, [r4, 0x2c]                                    |         *((r4 + 0x2c)) = r2;
                                                                     |         if (r3 != 0) {
    0x0005f85e cbz r3, 0x5f872                                       |             
    0x0005f860 ldr r2, [sp, 0x10]                                    |             r2 = var_10h;
    0x0005f862 mov r0, r4                                            |             r0 = r4;
    0x0005f864 ldr r1, [r2, 0x1c]                                    |             r1 = *((r2 + 0x1c));
    0x0005f866 ldr r2, [r3]                                          |             r2 = *(r3);
    0x0005f868 ldrb r3, [r3, 4]                                      |             r3 = *((r3 + 4));
    0x0005f86a str r3, [sp]                                          |             *(sp) = r3;
    0x0005f86c movs r3, 0                                            |             r3 = 0;
    0x0005f86e bl 0x5e63c                                            |             fcn_0005e63c (r0, r1, r2, r3, r4);
                                                                     |         }
    0x0005f872 ldr r1, [sp, 0x14]                                    |         r1 = var_14h;
    0x0005f874 add.w r2, sb, sl                                      |         r2 = sb + sl;
    0x0005f878 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0005f87a mov r0, fp                                            |         r0 = fp;
    0x0005f87c str r1, [sp]                                          |         *(sp) = r1;
    0x0005f87e movs r1, 0x61                                         |         r1 = 0x61;
    0x0005f880 sub.w r3, r3, sl                                      |         r3 -= sl;
    0x0005f884 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_5:
    0x0005f888 ldrd r2, r3, [sp, 8]                                  |         __asm ("ldrd r2, r3, [var_ch]");
    0x0005f88c mov r0, r6                                            |         r0 = r6;
    0x0005f88e subs r3, r3, r2                                       |         r3 -= r2;
    0x0005f890 strd r8, r3, [sp]                                     |         __asm ("strd r8, r3, [sp]");
    0x0005f894 ldrb.w r1, [r5, 0x20]                                 |         r1 = *((r5 + 0x20));
    0x0005f898 ldr r2, [r5, 8]                                       |         r2 = *((r5 + 8));
    0x0005f89a ldr r3, [sp, 0x14]                                    |         r3 = var_14h;
    0x0005f89c and r1, r1, 1                                         |         r1 &= 1;
    0x0005f8a0 subs r1, 0x76                                         |         r1 -= 0x76;
    0x0005f8a2 uxtb r1, r1                                           |         r1 = (int8_t) r1;
    0x0005f8a4 bl 0x2a744                                            |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                     |         if (r7 != 0) {
    0x0005f8a8 cbz r7, 0x5f8d6                                       |             
    0x0005f8aa ldr r2, [r5, 0x1c]                                    |             r2 = *((r5 + 0x1c));
    0x0005f8ac cmp r2, 0                                             |             
                                                                     |             if (r2 == 0) {
    0x0005f8ae beq.w 0x5fafa                                         |                 goto label_17;
                                                                     |             }
                                                                     | label_4:
    0x0005f8b2 ldr r3, [r6]                                          |             r3 = *(r6);
    0x0005f8b4 cmp r7, 0                                             |             
    0x0005f8b6 it lt                                                 |             
                                                                     |             if (r7 >= 0) {
    0x0005f8b8 ldrlt r7, [r6, 0x6c]                                  |                 r7 = *((r6 + 0x6c));
                                                                     |             }
    0x0005f8ba ldrb.w r3, [r3, 0x57]                                 |             r3 = *((r3 + 0x57));
    0x0005f8be it lt                                                 |             
                                                                     |             if (r7 >= 0) {
    0x0005f8c0 addlt r7, r7, -1                                      |                 r7 += -1;
                                                                     |             }
    0x0005f8c4 cmp r3, 0                                             |             
                                                                     |             if (r3 != 0) {
    0x0005f8c6 bne.w 0x5faf2                                         |                 goto label_18;
                                                                     |             }
    0x0005f8ca ldr r3, [r6, 0x68]                                    |             r3 = *((r6 + 0x68));
    0x0005f8cc add.w r7, r7, r7, lsl 2                               |             r7 += (r7 << 2);
    0x0005f8d0 add.w r3, r3, r7, lsl 2                               |             r3 += (r7 << 2);
                                                                     | label_3:
    0x0005f8d4 str r2, [r3, 8]                                       |             *((r3 + 8)) = r2;
                                                                     |         }
                                                                     | label_2:
    0x0005f8d6 add sp, 0x2c                                          |         
    0x0005f8d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_12:
    0x0005f8dc ldr r2, [sp, 0x10]                                    |         r2 = var_10h;
    0x0005f8de ldr r7, [r2, 8]                                       |         r7 = *((r2 + 8));
    0x0005f8e0 b 0x5f802                                             |         
                                                                     |     } while (1);
                                                                     | label_15:
    0x0005f8e2 ldr r3, [r4, 0x2c]                                    |     r3 = *((r4 + 0x2c));
    0x0005f8e4 ldr.w sl, [r5, 4]                                     |     sl = *((r5 + 4));
    0x0005f8e8 ldr.w fp, [r4, 8]                                     |     fp = *((r4 + 8));
    0x0005f8ec adds r3, 1                                            |     r3++;
    0x0005f8ee mov r2, r3                                            |     r2 = r3;
    0x0005f8f0 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0005f8f2 ldr r3, [r5, 0x24]                                    |     r3 = *((r5 + 0x24));
    0x0005f8f4 str r2, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r2;
                                                                     |     if (r3 != 0) {
    0x0005f8f6 cbz r3, 0x5f90a                                       |         
    0x0005f8f8 ldr r2, [r3]                                          |         r2 = *(r3);
    0x0005f8fa mov r0, r4                                            |         r0 = r4;
    0x0005f8fc ldrb r3, [r3, 4]                                      |         r3 = *((r3 + 4));
    0x0005f8fe str r3, [sp]                                          |         *(sp) = r3;
    0x0005f900 ldr r3, [sp, 0x10]                                    |         r3 = var_10h;
    0x0005f902 ldr r1, [r3, 0x1c]                                    |         r1 = *((r3 + 0x1c));
    0x0005f904 movs r3, 0                                            |         r3 = 0;
    0x0005f906 bl 0x5e63c                                            |         fcn_0005e63c (r0, r1, r2, r3, r4);
                                                                     |     }
    0x0005f90a ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0005f90c add.w r2, sb, sl                                      |     r2 = sb + sl;
    0x0005f910 mov r0, fp                                            |     r0 = fp;
    0x0005f912 movs r1, 0x61                                         |     r1 = 0x61;
    0x0005f914 str r3, [sp]                                          |     *(sp) = r3;
    0x0005f916 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0005f918 sub.w r3, r3, sl                                      |     r3 -= sl;
    0x0005f91c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f920 ldr r3, [r4, 0x2c]                                    |     r3 = *((r4 + 0x2c));
    0x0005f922 ldr.w fp, [r5, 4]                                     |     fp = *((r5 + 4));
    0x0005f926 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0005f928 add r3, fp                                            |     r3 += fp;
    0x0005f92a str r2, [sp, 0x20]                                    |     var_20h = r2;
    0x0005f92c str r3, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r3;
    0x0005f92e ldrd sl, r3, [r6, 0x6c]                               |     __asm ("ldrd sl, r3, [r6, 0x6c]");
    0x0005f932 cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0005f936 bne 0x5f992                                           |         
    0x0005f938 ldr r2, [sp, 0x18]                                    |         r2 = var_18h;
    0x0005f93a cmp sl, r3                                            |         
    0x0005f93c add r2, sb                                            |         r2 += sb;
                                                                     |         if (sl >= r3) {
    0x0005f93e bge.w 0x5fb88                                         |             goto label_19;
                                                                     |         }
    0x0005f942 add.w r3, sl, sl, lsl 2                               |         r3 = sl + (sl << 2);
    0x0005f946 ldr r0, [r6, 0x68]                                    |         r0 = *((r6 + 0x68));
    0x0005f948 add.w r1, sl, 1                                       |         r1 = sl + 1;
    0x0005f94c lsls r3, r3, 2                                        |         r3 <<= 2;
    0x0005f94e str r1, [r6, 0x6c]                                    |         *((r6 + 0x6c)) = r1;
    0x0005f950 mov.w ip, 0x10                                        |         
    0x0005f954 adds r1, r0, r3                                       |         r1 = r0 + r3;
    0x0005f956 strd r2, r8, [r1, 4]                                  |         __asm ("strd r2, r8, [r1, 4]");
    0x0005f95a strd r8, r8, [r1, 0xc]                                |         __asm ("strd r8, r8, [r1, 0xc]");
    0x0005f95e str.w ip, [r0, r3]                                    |         __asm ("str.w ip, [r0, r3]");
    0x0005f962 mov r3, fp                                            |         r3 = fp;
    0x0005f964 b 0x5f9c2                                             |         goto label_11;
                                                                     | label_14:
    0x0005f966 ldr r3, [sp, 0x54]                                    |         r3 = *(x);
    0x0005f968 mov r2, fp                                            |         r2 = fp;
    0x0005f96a ldr r1, [sp, 0x1c]                                    |         r1 = var_1ch;
    0x0005f96c str r3, [sp]                                          |         *(sp) = r3;
    0x0005f96e ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0005f970 ldr r0, [r4, 8]                                       |         r0 = *((r4 + 8));
    0x0005f972 add r3, sb                                            |         r3 += sb;
    0x0005f974 add r3, r1                                            |         r3 += r1;
    0x0005f976 movs r1, 0x4f                                         |         r1 = 0x4f;
    0x0005f978 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f97c b 0x5f83a                                             |         goto label_0;
                                                                     | label_13:
    0x0005f97e ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0005f980 movs r1, 0x7e                                         |         r1 = 0x7e;
    0x0005f982 str.w r8, [sp]                                        |         __asm ("str.w r8, [sp]");
    0x0005f986 mov r0, r6                                            |         r0 = r6;
    0x0005f988 ldr r2, [r5, 8]                                       |         r2 = *((r5 + 8));
    0x0005f98a add r3, sb                                            |         r3 += sb;
    0x0005f98c bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f990 b 0x5f826                                             |         goto label_1;
                                                                     |     }
    0x0005f992 cmp sl, r3                                            |     
    0x0005f994 ldr.w lr, [r5, 8]                                     |     
                                                                     |     if (sl >= r3) {
    0x0005f998 bge.w 0x5fb9c                                         |         goto label_20;
                                                                     |     }
    0x0005f99c add.w r1, sl, sl, lsl 2                               |     r1 = sl + (sl << 2);
    0x0005f9a0 ldr.w ip, [r6, 0x68]                                  |     ip = *((r6 + 0x68));
    0x0005f9a4 add.w r0, sl, 1                                       |     r0 = sl + 1;
    0x0005f9a8 lsls r1, r1, 2                                        |     r1 <<= 2;
    0x0005f9aa str r0, [r6, 0x6c]                                    |     *((r6 + 0x6c)) = r0;
    0x0005f9ac movs r2, 0                                            |     r2 = 0;
    0x0005f9ae add.w r0, ip, r1                                      |     r0 = ip + r1;
    0x0005f9b2 mov r3, fp                                            |     r3 = fp;
    0x0005f9b4 strd lr, r2, [r0, 4]                                  |     __asm ("strd lr, r2, [r0, 4]");
    0x0005f9b8 strd r2, r2, [r0, 0xc]                                |     __asm ("strd r2, r2, [r0, 0xc]");
    0x0005f9bc movs r2, 0x78                                         |     r2 = 0x78;
    0x0005f9be str.w r2, [ip, r1]                                    |     __asm ("str.w r2, [ip, r1]");
                                                                     | label_11:
    0x0005f9c2 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0005f9c4 movs r1, 0x5a                                         |     r1 = 0x5a;
    0x0005f9c6 str r3, [sp]                                          |     *(sp) = r3;
    0x0005f9c8 mov r0, r6                                            |     r0 = r6;
    0x0005f9ca mov r3, sb                                            |     r3 = sb;
    0x0005f9cc bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005f9d0 ldr r3, [r5, 0x14]                                    |     r3 = *((r5 + 0x14));
    0x0005f9d2 ldr r2, [r6]                                          |     r2 = *(r6);
    0x0005f9d4 cmp r3, 0                                             |     
    0x0005f9d6 ldrb.w r2, [r2, 0x57]                                 |     r2 = *((r2 + 0x57));
    0x0005f9da itt lt                                                |     
                                                                     |     if (r3 >= 0) {
    0x0005f9dc ldrlt r3, [r6, 0x6c]                                  |         r3 = *((r6 + 0x6c));
                                                                     |     }
                                                                     |     if (r3 >= 0) {
    0x0005f9de addlt r3, r3, -1                                      |         r3 += -1;
                                                                     |     }
    0x0005f9e2 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0005f9e4 bne.w 0x5fb5c                                         |         goto label_21;
                                                                     |     }
    0x0005f9e8 ldr r2, [r6, 0x68]                                    |     r2 = *((r6 + 0x68));
    0x0005f9ea add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0005f9ee add.w r3, r2, r3, lsl 2                               |     r3 = r2 + (r3 << 2);
    0x0005f9f2 str r3, [sp, 0x24]                                    |     var_24h = r3;
                                                                     | label_7:
    0x0005f9f4 ldr r3, [r4]                                          |     r3 = *(r4);
    0x0005f9f6 ldrb.w r8, [r3, 0x57]                                 |     r8 = *((r3 + 0x57));
    0x0005f9fa cmp.w r8, 0                                           |     
                                                                     |     if (r8 != 0) {
    0x0005f9fe bne.w 0x5f8d6                                         |         goto label_2;
                                                                     |     }
    0x0005fa02 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0005fa04 mov r1, r8                                            |     r1 = r8;
    0x0005fa06 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0005fa08 sub.w r3, r3, fp                                      |     r3 -= fp;
    0x0005fa0c add r3, r2                                            |     r3 += r2;
    0x0005fa0e ldr r2, [sp, 0x54]                                    |     r2 = *(x);
    0x0005fa10 add r3, r2                                            |     r3 += r2;
    0x0005fa12 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0005fa14 ldr.w fp, [r2, 0x10]                                  |     fp = *((r2 + 0x10));
    0x0005fa18 str r3, [r2, 8]                                       |     *((r2 + 8)) = r3;
    0x0005fa1a ldr.w r0, [fp, 0x10]                                  |     r0 = *(arg_10h);
    0x0005fa1e ldrh.w r2, [fp, 6]                                    |     r2 = *(arg_6h);
    0x0005fa22 blx 0x97d4                                            |     fcn_000097d4 ();
    0x0005fa26 mov r2, fp                                            |     r2 = fp;
    0x0005fa28 mvn r3, 7                                             |     r3 = ~7;
    0x0005fa2c mov.w r1, -1                                          |     r1 = -1;
    0x0005fa30 mov r0, r6                                            |     r0 = r6;
    0x0005fa32 bl 0x1ec70                                            |     fcn_0001ec70 (r0, r1, r2);
    0x0005fa36 ldrh.w r2, [fp, 6]                                    |     r2 = *(arg_6h);
    0x0005fa3a mov r0, r4                                            |     r0 = r4;
    0x0005fa3c ldrh.w r3, [fp, 8]                                    |     r3 = *(arg_58h);
    0x0005fa40 ldr r1, [r5]                                          |     r1 = *(r5);
    0x0005fa42 subs r3, r3, r2                                       |     r3 -= r2;
    0x0005fa44 ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0005fa46 subs r3, 1                                            |     r3--;
    0x0005fa48 bl 0x28128                                            |     fcn_00028128 (r0, r1, r2, r3);
    0x0005fa4c ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0005fa4e mov r3, r8                                            |     r3 = r8;
    0x0005fa50 ldr.w fp, [r6, 0x6c]                                  |     fp = *((r6 + 0x6c));
    0x0005fa54 movs r1, 0xd                                          |     r1 = 0xd;
    0x0005fa56 str r0, [r2, 0x10]                                    |     *((r2 + 0x10)) = r0;
    0x0005fa58 mov r0, r6                                            |     r0 = r6;
    0x0005fa5a add.w r2, fp, 1                                       |     r2 += arg_1h;
    0x0005fa5e str r2, [sp]                                          |     *(sp) = r2;
    0x0005fa60 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005fa64 str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0005fa68 movs r1, 9                                            |     r1 = 9;
    0x0005fa6a ldr r3, [r4, 0x38]                                    |     r3 = *((r4 + 0x38));
    0x0005fa6c mov r0, r6                                            |     r0 = r6;
    0x0005fa6e ldr r2, [r4, 0x2c]                                    |     r2 = *((r4 + 0x2c));
    0x0005fa70 subs r3, 1                                            |     r3--;
    0x0005fa72 adds r2, 1                                            |     r2++;
    0x0005fa74 str r3, [r4, 0x38]                                    |     *((r4 + 0x38)) = r3;
    0x0005fa76 str r3, [r5, 0x10]                                    |     *((r5 + 0x10)) = r3;
    0x0005fa78 str r2, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r2;
    0x0005fa7a str r2, [r5, 0xc]                                     |     *((r5 + 0xc)) = r2;
    0x0005fa7c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005fa80 str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0005fa84 mov r3, r8                                            |     r3 = r8;
    0x0005fa86 ldr r2, [r5, 8]                                       |     r2 = *((r5 + 8));
    0x0005fa88 movs r1, 0x92                                         |     r1 = 0x92;
    0x0005fa8a mov r0, r6                                            |     r0 = r6;
    0x0005fa8c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005fa90 cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0005fa92 bne 0x5fb76                                           |         goto label_22;
                                                                     |     }
                                                                     | label_10:
    0x0005fa94 ldr r3, [r6]                                          |     r3 = *(r6);
    0x0005fa96 cmp.w sl, 0                                           |     
    0x0005fa9a ldr r1, [r6, 0x6c]                                    |     r1 = *((r6 + 0x6c));
    0x0005fa9c ldrb.w r3, [r3, 0x57]                                 |     r3 = *((r3 + 0x57));
    0x0005faa0 it lt                                                 |     
                                                                     |     if (sl >= 0) {
    0x0005faa2 addlt sl, r1, -1                                      |         sl = r1 + -1;
                                                                     |     }
    0x0005faa6 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005faa8 bne 0x5fb6e                                           |         goto label_23;
                                                                     |     }
    0x0005faaa ldr r2, [r6, 0x68]                                    |     r2 = *((r6 + 0x68));
    0x0005faac add.w r3, sl, sl, lsl 2                               |     r3 = sl + (sl << 2);
    0x0005fab0 add.w r3, r2, r3, lsl 2                               |     r3 = r2 + (r3 << 2);
                                                                     | label_9:
    0x0005fab4 ldr r2, [r5, 4]                                       |     r2 = *((r5 + 4));
    0x0005fab6 str r1, [r3, 8]                                       |     *((r3 + 8)) = r1;
    0x0005fab8 movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0005faba ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0005fabc str r2, [sp]                                          |     *(sp) = r2;
    0x0005fabe mov r2, sb                                            |     r2 = sb;
    0x0005fac0 ldr r0, [r4, 8]                                       |     r0 = *((r4 + 8));
    0x0005fac2 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005fac6 ldr r2, [r6]                                          |     r2 = *(r6);
    0x0005fac8 cmp.w fp, 0                                           |     
    0x0005facc ldr r3, [r6, 0x6c]                                    |     r3 = *((r6 + 0x6c));
    0x0005face ldrb.w r2, [r2, 0x57]                                 |     r2 = *((r2 + 0x57));
    0x0005fad2 it lt                                                 |     
                                                                     |     if (fp >= 0) {
    0x0005fad4 addlt fp, r3, -1                                      |         
                                                                     |     }
    0x0005fad8 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0005fada bne 0x5fb66                                           |         goto label_24;
                                                                     |     }
    0x0005fadc ldr r2, [r6, 0x68]                                    |     r2 = *((r6 + 0x68));
    0x0005fade add.w sl, fp, fp, lsl 2                               |     sl = fp + (fp << 2);
    0x0005fae2 add.w r2, r2, sl, lsl 2                               |     r2 += (sl << 2);
                                                                     | label_8:
    0x0005fae6 str r3, [r2, 8]                                       |     *((r2 + 8)) = r3;
                                                                     |     if (r7 == 0) {
    0x0005fae8 cbnz r7, 0x5fb04                                      |         
    0x0005faea ldr r3, [sp, 8]                                       |         r3 = var_8h;
    0x0005faec add.w r8, sb, r3                                      |         r8 = sb + r3;
    0x0005faf0 b 0x5fb52                                             |         goto label_25;
                                                                     | label_18:
    0x0005faf2 ldr r3, [pc, 0xbc]                                    |         
    0x0005faf4 add r3, pc                                            |         r3 = 0xbf6aa;
    0x0005faf6 adds r3, 4                                            |         r3 += 4;
    0x0005faf8 b 0x5f8d4                                             |         goto label_3;
                                                                     | label_17:
    0x0005fafa ldr r2, [r6, 0x6c]                                    |         r2 = *((r6 + 0x6c));
    0x0005fafc b 0x5f8b2                                             |         goto label_4;
                                                                     | label_16:
    0x0005fafe ldr r3, [r6, 0x6c]                                    |         r3 = *((r6 + 0x6c));
    0x0005fb00 movs r2, 0                                            |         r2 = 0;
    0x0005fb02 str r2, [sp, 0x14]                                    |         var_14h = r2;
                                                                     |     }
    0x0005fb04 ldr.w sl, [r5, 8]                                     |     sl = *((r5 + 8));
    0x0005fb08 mov r2, r7                                            |     r2 = r7;
    0x0005fb0a movs r7, 0                                            |     r7 = 0;
    0x0005fb0c adds r3, 4                                            |     r3 += 4;
    0x0005fb0e movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0005fb10 str r7, [sp]                                          |     *(sp) = r7;
    0x0005fb12 mov r0, r6                                            |     r0 = r6;
    0x0005fb14 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005fb18 mov r3, r7                                            |     r3 = r7;
    0x0005fb1a mov r2, sl                                            |     r2 = sl;
    0x0005fb1c movs r1, 0x1f                                         |     r1 = 0x1f;
    0x0005fb1e str r7, [sp]                                          |     *(sp) = r7;
    0x0005fb20 mov r0, r6                                            |     r0 = r6;
    0x0005fb22 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005fb26 ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0005fb28 movs r1, 0x27                                         |     r1 = 0x27;
    0x0005fb2a ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0005fb2c mov r0, r6                                            |     r0 = r6;
    0x0005fb2e add.w r8, sb, r2                                      |     r8 = sb + r2;
    0x0005fb32 subs r3, r3, r2                                       |     r3 -= r2;
    0x0005fb34 str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0005fb38 mov r2, sl                                            |     r2 = sl;
    0x0005fb3a str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005fb3c mov r3, r7                                            |     r3 = r7;
    0x0005fb3e bl 0x2a744                                            |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0005fb42 mov r3, r7                                            |     r3 = r7;
    0x0005fb44 str r7, [sp]                                          |     *(sp) = r7;
    0x0005fb46 mov r2, sl                                            |     r2 = sl;
    0x0005fb48 mov r7, r0                                            |     r7 = r0;
    0x0005fb4a movs r1, 0x82                                         |     r1 = 0x82;
    0x0005fb4c mov r0, r6                                            |     r0 = r6;
    0x0005fb4e bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_25:
    0x0005fb52 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0005fb54 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005fb56 bne.w 0x5f888                                         |         goto label_5;
                                                                     |     }
    0x0005fb5a b 0x5f84a                                             |     goto label_6;
                                                                     | label_21:
    0x0005fb5c ldr r3, [pc, 0x54]                                    |     
    0x0005fb5e add r3, pc                                            |     r3 = 0xbf716;
    0x0005fb60 adds r3, 4                                            |     r3 += 4;
    0x0005fb62 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0005fb64 b 0x5f9f4                                             |     goto label_7;
                                                                     | label_24:
    0x0005fb66 ldr r2, [pc, 0x50]                                    |     
    0x0005fb68 add r2, pc                                            |     r2 = 0xbf726;
    0x0005fb6a adds r2, 4                                            |     r2 += 4;
    0x0005fb6c b 0x5fae6                                             |     goto label_8;
                                                                     | label_23:
    0x0005fb6e ldr r3, [pc, 0x4c]                                    |     
    0x0005fb70 add r3, pc                                            |     r3 = 0xbf732;
    0x0005fb72 adds r3, 4                                            |     r3 += 4;
    0x0005fb74 b 0x5fab4                                             |     goto label_9;
                                                                     | label_22:
    0x0005fb76 str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0005fb7a mov r2, r7                                            |     r2 = r7;
    0x0005fb7c ldr r3, [r5, 0x18]                                    |     r3 = *((r5 + 0x18));
    0x0005fb7e movs r1, 0x10                                         |     r1 = 0x10;
    0x0005fb80 mov r0, r6                                            |     r0 = r6;
    0x0005fb82 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0005fb86 b 0x5fa94                                             |     goto label_10;
                                                                     | label_19:
    0x0005fb88 mov r3, r8                                            |     r3 = r8;
    0x0005fb8a movs r1, 0x10                                         |     r1 = 0x10;
    0x0005fb8c mov r0, r6                                            |     r0 = r6;
    0x0005fb8e str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0005fb92 bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005fb96 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0005fb98 mov sl, r0                                            |     sl = r0;
    0x0005fb9a b 0x5f9c2                                             |     goto label_11;
                                                                     | label_20:
    0x0005fb9c movs r3, 0                                            |     r3 = 0;
    0x0005fb9e mov r2, lr                                            |     r2 = lr;
    0x0005fba0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005fba2 movs r1, 0x78                                         |     r1 = 0x78;
    0x0005fba4 mov r0, r6                                            |     r0 = r6;
    0x0005fba6 bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0005fbaa ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0005fbac mov sl, r0                                            |     sl = r0;
    0x0005fbae b 0x5f9c2                                             |     goto label_11;
                                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5fbc0).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x60534).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x60fc4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00060fc4 ()                                      | void fcn_00060fc4 (int16_t arg_48h, int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00060fc4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00060fc8 sub sp, 0x24                                      |     
    0x00060fca str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00060fcc mov r7, r0                                        |     r7 = r0;
    0x00060fce mov r5, r1                                        |     r5 = r1;
    0x00060fd0 ldrd r4, r3, [sp, 0x48]                           |     __asm ("ldrd r4, r3, [arg_48h]");
    0x00060fd4 ldr.w r8, [sp, 0x50]                              |     r8 = *(arg_50h);
    0x00060fd8 ldr.w sl, [r0, 8]                                 |     sl = *((r0 + 8));
    0x00060fdc str r2, [sp, 8]                                   |     var_8h = r2;
    0x00060fde cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00060fe0 beq.w 0x61106                                     |         goto label_8;
                                                                 |     }
    0x00060fe4 ldr r1, [r1, 0x24]                                |     r1 = *((r1 + 0x24));
    0x00060fe6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00060fe8 beq.w 0x61104                                     |         goto label_9;
                                                                 |     }
    0x00060fec ldr r2, [r0, 0x38]                                |     r2 = *((r0 + 0x38));
    0x00060fee movs r6, 1                                        |     r6 = 1;
    0x00060ff0 subs r2, 1                                        |     r2--;
    0x00060ff2 str r2, [r0, 0x38]                                |     *((r0 + 0x38)) = r2;
    0x00060ff4 str r2, [r3]                                      |     *(r3) = r2;
    0x00060ff6 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00060ff8 adds r2, 1                                        |     r2++;
    0x00060ffa str r2, [r0, 0x34]                                |     *((r0 + 0x34)) = r2;
    0x00060ffc ldr r2, [r3]                                      |     r2 = *(r3);
    0x00060ffe bl 0x60f70                                        |     fcn_00060f70 (r0, r1, r2);
    0x00061002 movs r3, 0                                        |     r3 = 0;
    0x00061004 mov r8, r3                                        |     r8 = r3;
    0x00061006 str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
                                                                 |     if (r4 != 0) {
                                                                 | label_2:
    0x00061008 cbz r4, 0x61014                                   |         
    0x0006100a ldrb.w r3, [r5, 0x37]                             |         r3 = *((r5 + 0x37));
    0x0006100e lsls r0, r3, 0x1c                                 |         r0 = r3 << 0x1c;
                                                                 |         if (r0 < r3) {
    0x00061010 bmi.w 0x61126                                     |             goto label_10;
                                                                 |         }
                                                                 |     }
    0x00061014 ldrh.w sb, [r5, 0x34]                             |     sb = *((r5 + 0x34));
                                                                 | label_4:
    0x00061018 mov r1, sb                                        |     r1 = sb;
    0x0006101a mov r0, r7                                        |     r0 = r7;
    0x0006101c bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x00061020 ldr r3, [sp, 0x54]                                |     r3 = *(arg_54h);
    0x00061022 mov fp, r0                                        |     
    0x00061024 cmp r0, r3                                        |     
    0x00061026 it ne                                             |     
                                                                 |     if (r0 == r3) {
    0x00061028 orrne r6, r6, 1                                   |         r6 |= 1;
                                                                 |     }
    0x0006102c cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0006102e beq.w 0x6115a                                     |         goto label_11;
                                                                 |     }
    0x00061032 mov.w r8, 0                                       |     r8 = 0;
    0x00061036 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0006103a beq.w 0x6116e                                     |         goto label_12;
                                                                 |     }
                                                                 | label_6:
    0x0006103e ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00061040 movs r4, 0                                        |     r4 = 0;
    0x00061042 mov r6, r8                                        |     r6 = r8;
    0x00061044 adds r3, 1                                        |     r3++;
    0x00061046 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00061048 b 0x61050                                         |     
                                                                 |     while (r1 != 0) {
                                                                 | label_0:
    0x0006104a adds r4, 1                                        |         r4++;
    0x0006104c cmp sb, r4                                        |         
                                                                 |         if (sb == r4) {
    0x0006104e beq 0x610e8                                       |             goto label_13;
                                                                 |         }
                                                                 | label_1:
    0x00061050 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x00061052 lsl.w r8, r4, 1                                   |         r8 = r4 << 1;
    0x00061056 ldrsh.w r3, [r3, r4, lsl 1]                       |         offset_0 = r4 << 1;
                                                                 |         r3 = *((r3 + offset_0));
                                                                 |         if (r6 == 0) {
    0x0006105a cbz r6, 0x61076                                   |             goto label_14;
                                                                 |         }
    0x0006105c ldr r2, [r6, 4]                                   |         r2 = *((r6 + 4));
    0x0006105e ldrsh.w r2, [r2, r4, lsl 1]                       |         offset_1 = r4 << 1;
                                                                 |         r2 = *((r2 + offset_1));
    0x00061062 subs r1, r2, r3                                   |         r1 = r2 - r3;
    0x00061064 adds r2, 2                                        |         r2 += 2;
    0x00061066 clz r1, r1                                        |         r1 &= r1;
    0x0006106a lsr.w r1, r1, 5                                   |         r1 >>= 5;
    0x0006106e it eq                                             |         
                                                                 |         if (r2 != 2) {
    0x00061070 moveq r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x00061072 cmp r1, 0                                         |         
    0x00061074 bne 0x6104a                                       |         
                                                                 |     }
                                                                 | label_14:
    0x00061076 adds r1, r3, 2                                    |     r1 = r3 + 2;
    0x00061078 add.w r2, fp, r4                                  |     r2 = fp + r4;
                                                                 |     if (r1 == r3) {
    0x0006107c beq 0x6110e                                       |         goto label_15;
                                                                 |     }
    0x0006107e str r2, [sp]                                      |     *(sp) = r2;
    0x00061080 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x00061082 ldr r1, [r5, 0xc]                                 |     r1 = *((r5 + 0xc));
    0x00061084 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00061086 bl 0x5b0d4                                        |     fcn_0005b0d4 (r0, r1, r2, r3, r4);
                                                                 | label_3:
    0x0006108a ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0006108c ldrsh.w r3, [r3, r8]                              |     r3 = *((r3 + r8));
    0x00061090 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00061092 blt 0x6104a                                       |         goto label_0;
                                                                 |     }
    0x00061094 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x00061098 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0006109a ble 0x6104a                                       |         goto label_0;
                                                                 |     }
    0x0006109c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x000610a0 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000610a2 sub.w r8, r3, 0x14                                |     r8 = r3 - 0x14;
    0x000610a6 ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x000610aa ldrb.w r2, [r3, r8]                               |     r2 = *((r3 + r8));
    0x000610ae add.w r1, r3, r8                                  |     r1 = r3 + r8;
    0x000610b2 str r1, [sp, 0x10]                                |     var_10h = r1;
    0x000610b4 cmp r2, 0x57                                      |     
                                                                 |     if (r2 != 0x57) {
    0x000610b6 bne 0x6104a                                       |         goto label_0;
                                                                 |     }
    0x000610b8 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x000610bc str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000610be ldrb.w r3, [r0, 0x57]                             |     r3 = *((r0 + 0x57));
    0x000610c2 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000610c4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000610c6 bne 0x6104a                                       |         goto label_0;
                                                                 |     }
    0x000610c8 ldr r2, [r1, 0x10]                                |     r2 = *((r1 + 0x10));
    0x000610ca adds r4, 1                                        |     r4++;
    0x000610cc ldrsb.w r1, [r1, 1]                               |     r1 = *((r1 + 1));
    0x000610d0 bl 0x187b8                                        |     fcn_000187b8 (r0);
    0x000610d4 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x000610d6 cmp sb, r4                                        |     
    0x000610d8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000610da str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x000610dc mov.w r2, 0xb8                                    |     r2 = 0xb8;
    0x000610e0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000610e2 strh.w r2, [r3, r8]                               |     *((r3 + r8)) = r2;
                                                                 |     if (sb != r4) {
    0x000610e6 bne 0x61050                                       |         goto label_1;
                                                                 |     }
                                                                 | label_13:
    0x000610e8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 != 0) {
    0x000610ea cbnz r3, 0x6112c                                  |         goto label_16;
                                                                 |     }
    0x000610ec cmp.w sb, 1                                       |     
                                                                 |     if (sb == 1) {
    0x000610f0 beq 0x61142                                       |         goto label_17;
                                                                 |     }
                                                                 |     do {
                                                                 | label_7:
    0x000610f2 ldr r3, [r7, 0x1c]                                |         r3 = *((r7 + 0x1c));
    0x000610f4 cmp sb, r3                                        |         
    0x000610f6 it gt                                             |         
                                                                 |         if (sb > r3) {
    0x000610f8 strdgt sb, fp, [r7, 0x1c]                         |             __asm ("strdgt sb, fp, [r7, 0x1c]");
                                                                 |         }
                                                                 | label_5:
    0x000610fc mov r0, fp                                        |         r0 = fp;
    0x000610fe add sp, 0x24                                      |         
    0x00061100 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_9:
    0x00061104 str r1, [r3]                                      |         *(r3) = r1;
                                                                 | label_8:
    0x00061106 clz r6, r8                                        |         r6 &= r8;
    0x0006110a lsrs r6, r6, 5                                    |         r6 >>= 5;
    0x0006110c b 0x61008                                         |         goto label_2;
                                                                 | label_15:
    0x0006110e ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00061110 mov r0, r7                                        |         r0 = r7;
    0x00061112 str r3, [r7, 0x34]                                |         *((r7 + 0x34)) = r3;
    0x00061114 ldr r3, [r5, 0x28]                                |         r3 = *((r5 + 0x28));
    0x00061116 add.w r3, r3, r4, lsl 4                           |         r3 += (r4 << 4);
    0x0006111a ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x0006111c bl 0x5af40                                        |         fcn_0005af40 (r0, r1, r2);
    0x00061120 movs r3, 0                                        |         r3 = 0;
    0x00061122 str r3, [r7, 0x34]                                |         *((r7 + 0x34)) = r3;
    0x00061124 b 0x6108a                                         |         goto label_3;
                                                                 | label_10:
    0x00061126 ldrh.w sb, [r5, 0x32]                             |         sb = *((r5 + 0x32));
    0x0006112a b 0x61018                                         |         goto label_4;
                                                                 | label_16:
    0x0006112c ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0006112e mov r0, sl                                        |         r0 = sl;
    0x00061130 mov r2, fp                                        |         r2 = fp;
    0x00061132 movs r1, 0x61                                     |         r1 = 0x61;
    0x00061134 str r3, [sp]                                      |         *(sp) = r3;
    0x00061136 mov r3, sb                                        |         r3 = sb;
    0x00061138 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006113c cmp.w sb, 1                                       |         
    0x00061140 bne 0x610f2                                       |         
                                                                 |     } while (sb != 1);
                                                                 | label_17:
    0x00061142 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00061146 beq 0x610fc                                       |         goto label_5;
                                                                 |     }
    0x00061148 ldrb r3, [r7, 0x13]                               |     r3 = *((r7 + 0x13));
    0x0006114a cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x0006114c bhi 0x610fc                                       |         goto label_5;
                                                                 |     }
    0x0006114e adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00061150 adds r3, 0x26                                     |     r3 += 0x26;
    0x00061152 strb r1, [r7, 0x13]                               |     *((r7 + 0x13)) = r1;
    0x00061154 str.w fp, [r7, r3, lsl 2]                         |     __asm ("str.w fp, [r7, r3, lsl 2]");
    0x00061158 b 0x610fc                                         |     goto label_5;
                                                                 | label_11:
    0x0006115a ldr.w r3, [r8, 0x24]                              |     r3 = *((r8 + 0x24));
    0x0006115e cmp r3, 0                                         |     
    0x00061160 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00061162 movne r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x00061166 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0006116a bne.w 0x6103e                                     |         goto label_6;
                                                                 |     }
                                                                 | label_12:
    0x0006116e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00061170 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061172 beq 0x610f2                                       |         goto label_7;
                                                                 |     }
    0x00061174 str r3, [sp]                                      |     *(sp) = r3;
    0x00061176 mov r0, sl                                        |     r0 = sl;
    0x00061178 mov r3, sb                                        |     r3 = sb;
    0x0006117a mov r2, fp                                        |     r2 = fp;
    0x0006117c movs r1, 0x61                                     |     r1 = 0x61;
    0x0006117e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061182 b 0x610f2                                         |     goto label_7;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x61184 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00061184 ()                                      | void fcn_00061184 (int16_t arg_1h, int16_t arg1, uint32_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int16_t var_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;
    0x00061184 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00061188 sub sp, 0x2c                                      |     
    0x0006118a str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0006118c mov r7, r1                                        |     r7 = r1;
    0x0006118e mov r5, r0                                        |     r5 = r0;
    0x00061190 ldr.w r2, [pc, 0x484]                             |     
    0x00061194 ldr.w r3, [pc, 0x484]                             |     r3 = *(0x6161c);
    0x00061198 ldr.w r8, [r0, 0x28]                              |     r8 = *((r0 + 0x28));
    0x0006119c add r2, pc                                        |     r2 = 0xc27b8;
    0x0006119e ldr.w sb, [r1, 0xc]                               |     sb = *(arg_1hxc);
    0x000611a2 ldr r3, [r2, r3]                                  |     
    0x000611a4 ldr r1, [r1, 0x18]                                |     r1 = *(arg_1hx18);
    0x000611a6 add.w r2, r8, 2                                   |     r2 = r8 + 2;
    0x000611aa ldr r3, [r3]                                      |     r3 = *(0xc27b8);
    0x000611ac str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000611ae mov.w r3, 0                                       |     r3 = 0;
    0x000611b2 ldr r3, [r0]                                      |     r3 = *(r0);
    0x000611b4 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x000611b6 str r2, [r0, 0x28]                                |     *((r0 + 0x28)) = r2;
    0x000611b8 cmp r1, 0                                         |     
                                                                 |     if (arg_1h == ) {
    0x000611ba beq.w 0x615f4                                     |         goto label_17;
                                                                 |     }
    0x000611be ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x000611c0 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x000611c2 beq.w 0x6157e                                     |         goto label_18;
                                                                 |     }
    0x000611c6 adds r3, 0x10                                     |     r3 += 0x10;
    0x000611c8 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x000611ca ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x000611cc mov r0, r3                                        |         r0 = r3;
    0x000611ce adds r4, 1                                        |         r4++;
    0x000611d0 adds r3, 0x10                                     |         r3 += 0x10;
    0x000611d2 cmp r1, r2                                        |         
    0x000611d4 bne 0x611ca                                       |         
                                                                 |     } while (r1 != r2);
    0x000611d6 ldr r3, [r0]                                      |     r3 = *(r0);
    0x000611d8 movs r1, 0x1b                                     |     r1 = 0x1b;
    0x000611da mov r0, r5                                        |     r0 = r5;
    0x000611dc str r3, [sp]                                      |     *(sp) = r3;
    0x000611de movs r3, 0                                        |     r3 = 0;
    0x000611e0 ldr r2, [r7]                                      |     r2 = *(r7);
    0x000611e2 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x000611e6 cbz r0, 0x61208                                   |     
                                                                 |     while (1) {
                                                                 | label_4:
    0x000611e8 ldr.w r2, [pc, 0x434]                             |         
    0x000611ec ldr.w r3, [pc, 0x42c]                             |         r3 = *(0x6161c);
    0x000611f0 add r2, pc                                        |         r2 = 0xc2814;
    0x000611f2 ldr r3, [r2, r3]                                  |         r3 = *(0xc2814);
    0x000611f4 ldr r2, [r3]                                      |         r2 = *(0xc2814);
    0x000611f6 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x000611f8 eors r2, r3                                       |         r2 ^= r3;
    0x000611fa mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000611fe bne.w 0x61608                                     |             goto label_19;
                                                                 |         }
    0x00061202 add sp, 0x2c                                      |         
    0x00061204 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00061208 cmp r4, 1                                         |         
                                                                 |         if (r4 != 1) {
    0x0006120a beq 0x61226                                       |             
    0x0006120c ldr.w r2, [sb, 0x14]                              |             r2 = *((sb + 0x14));
    0x00061210 lsls r6, r4, 4                                    |             r6 = r4 << 4;
    0x00061212 ldr.w r1, [sb]                                    |             r1 = *(sb);
                                                                 | label_11:
    0x00061216 ldr r3, [r5]                                      |             r3 = *(r5);
    0x00061218 ldr r3, [r3, 0x10]                                |             r3 = *((r3 + 0x10));
    0x0006121a add r3, r6                                        |             r3 += r6;
    0x0006121c ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x0006121e ldrb r3, [r3, 9]                                  |             r3 = *((r3 + 9));
    0x00061220 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00061222 bne.w 0x614ba                                     |                 goto label_20;
                                                                 |             }
                                                                 |         }
                                                                 | label_5:
    0x00061226 ldr r6, [r5, 8]                                   |         r6 = *((r5 + 8));
    0x00061228 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0006122a beq.w 0x614a6                                     |             goto label_21;
                                                                 |         }
                                                                 | label_3:
    0x0006122e ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00061230 mov r1, r7                                        |         r1 = r7;
    0x00061232 mov r0, r5                                        |         r0 = r5;
    0x00061234 cmp r3, 0                                         |         
    0x00061236 ite lt                                            |         
                                                                 |         if (r3 >= 0) {
    0x00061238 ldrlt r3, [r7, 0x2c]                              |             r3 = *((r7 + 0x2c));
                                                                 |         }
                                                                 |         if (r3 < 0) {
    0x0006123a ldrge r3, [sp, 0x14]                              |             r3 = var_14h;
                                                                 |         }
    0x0006123c str r3, [sp, 0x18]                                |         var_18h = r3;
    0x0006123e bl 0x27d1c                                        |         fcn_00027d1c (r0, r1);
    0x00061242 ldr.w sl, [r5, 0x28]                              |         sl = *((r5 + 0x28));
    0x00061246 mov fp, r0                                        |         
    0x00061248 ldrh r2, [r7, 0x32]                               |         r2 = *((r7 + 0x32));
    0x0006124a add.w r3, sl, 1                                   |         r3 = sl + 1;
    0x0006124e str r3, [r5, 0x28]                                |         *((r5 + 0x28)) = r3;
                                                                 |         if (r0 != 0) {
    0x00061250 cbz r0, 0x61258                                   |             
    0x00061252 ldr r3, [r0]                                      |             r3 = *(r0);
    0x00061254 adds r3, 1                                        |             r3++;
    0x00061256 str r3, [r0]                                      |             *(r0) = r3;
                                                                 |         }
    0x00061258 mvn r3, 7                                         |         r3 = ~7;
    0x0006125c movs r1, 0x77                                     |         r1 = 0x77;
    0x0006125e strd r2, fp, [sp]                                 |         __asm ("strd r2, fp, [sp]");
    0x00061262 mov r0, r6                                        |         r0 = r6;
    0x00061264 mov r2, sl                                        |         r2 = sl;
    0x00061266 str r3, [sp, 8]                                   |         var_8h = r3;
    0x00061268 movs r3, 0                                        |         r3 = 0;
    0x0006126a bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006126e movs r2, 0x70                                     |         r2 = 0x70;
    0x00061270 mov r3, sb                                        |         r3 = sb;
    0x00061272 str r2, [sp]                                      |         *(sp) = r2;
    0x00061274 mov r1, r8                                        |         r1 = r8;
    0x00061276 mov r2, r4                                        |         r2 = r4;
    0x00061278 mov r0, r5                                        |         r0 = r5;
    0x0006127a bl 0x2bad8                                        |         fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x0006127e ldrd sb, r3, [r6, 0x6c]                           |         __asm ("ldrd sb, r3, [r6, 0x6c]");
    0x00061282 cmp sb, r3                                        |         
                                                                 |         if (sb >= r3) {
    0x00061284 bge.w 0x615b8                                     |             goto label_22;
                                                                 |         }
    0x00061288 add.w r3, sb, sb, lsl 2                           |         r3 = sb + (sb << 2);
    0x0006128c ldr r0, [r6, 0x68]                                |         r0 = *((r6 + 0x68));
    0x0006128e add.w r2, sb, 1                                   |         r2 = sb + 1;
    0x00061292 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00061294 str r2, [r6, 0x6c]                                |         *((r6 + 0x6c)) = r2;
    0x00061296 movs r1, 0                                        |         r1 = 0;
    0x00061298 str r2, [sp, 0x1c]                                |         var_1ch = r2;
    0x0006129a mov.w ip, 0x23                                    |         
    0x0006129e adds r2, r0, r3                                   |         r2 = r0 + r3;
    0x000612a0 strd r8, r1, [r2, 4]                              |         __asm ("strd r8, r1, [r2, 4]");
    0x000612a4 strd r1, r1, [r2, 0xc]                            |         __asm ("strd r1, r1, [r2, 0xc]");
    0x000612a8 str.w ip, [r0, r3]                                |         __asm ("str.w ip, [r0, r3]");
                                                                 | label_13:
    0x000612ac ldrb r3, [r5, 0x13]                               |         r3 = *((r5 + 0x13));
    0x000612ae cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000612b0 beq.w 0x614d6                                     |             goto label_23;
                                                                 |         }
    0x000612b4 subs r3, 1                                        |         r3--;
    0x000612b6 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x000612b8 strb r3, [r5, 0x13]                               |         *((r5 + 0x13)) = r3;
    0x000612ba adds r3, 0x26                                     |         r3 += 0x26;
    0x000612bc ldr.w r3, [r5, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r3 = *((r5 + offset_0));
    0x000612c0 str r3, [sp, 0x10]                                |         var_10h = r3;
                                                                 | label_7:
    0x000612c2 ldr r3, [r5, 0x74]                                |         r3 = *((r5 + 0x74));
    0x000612c4 movs r2, 1                                        |         r2 = 1;
    0x000612c6 mov r1, r7                                        |         r1 = r7;
    0x000612c8 mov r0, r5                                        |         r0 = r5;
    0x000612ca cmp r3, 0                                         |         
    0x000612cc it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x000612ce moveq r3, r5                                      |             r3 = r5;
                                                                 |         }
    0x000612d0 strb r2, [r3, 0x14]                               |         *((r3 + 0x14)) = r2;
    0x000612d2 movs r3, 0                                        |         r3 = 0;
    0x000612d4 strd r3, r3, [sp, 8]                              |         __asm ("strd r3, r3, [var_8h]");
    0x000612d8 mov r2, r8                                        |         r2 = r8;
    0x000612da str r3, [sp]                                      |         *(sp) = r3;
    0x000612dc add r3, sp, 0x20                                  |         r3 += var_20h;
    0x000612de str r3, [sp, 4]                                   |         var_4h = r3;
    0x000612e0 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000612e2 bl 0x60fc4                                        |         fcn_00060fc4 (r0, r1, r2, r3, r4, r5, r6);
    0x000612e6 movs r2, 0                                        |         r2 = 0;
    0x000612e8 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000612ea str r2, [sp]                                      |         *(sp) = r2;
    0x000612ec movs r1, 0x8b                                     |         r1 = 0x8b;
    0x000612ee mov r2, sl                                        |         r2 = sl;
    0x000612f0 mov r0, r6                                        |         r0 = r6;
    0x000612f2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000612f6 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x000612f8 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x000612fa bne.w 0x614e0                                     |             goto label_24;
                                                                 |         }
                                                                 | label_8:
    0x000612fe movs r2, 0                                        |         r2 = 0;
    0x00061300 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00061302 str r2, [sp]                                      |         *(sp) = r2;
    0x00061304 movs r1, 0x26                                     |         r1 = 0x26;
    0x00061306 mov r2, r8                                        |         r2 = r8;
    0x00061308 mov r0, r6                                        |         r0 = r6;
    0x0006130a bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006130e ldr r3, [r6]                                      |         r3 = *(r6);
    0x00061310 cmp.w sb, 0                                       |         
    0x00061314 ldr r2, [r6, 0x6c]                                |         r2 = *((r6 + 0x6c));
    0x00061316 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
    0x0006131a it lt                                             |         
                                                                 |         if (sb >= 0) {
    0x0006131c addlt sb, r2, -1                                  |             sb = r2 + -1;
                                                                 |         }
    0x00061320 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00061322 bne.w 0x61460                                     |             goto label_25;
                                                                 |         }
    0x00061326 ldr r3, [r6, 0x68]                                |         r3 = *((r6 + 0x68));
    0x00061328 add.w sb, sb, sb, lsl 2                           |         sb += (sb << 2);
    0x0006132c add.w r3, r3, sb, lsl 2                           |         r3 += (sb << 2);
    0x00061330 add.w sb, r8, 1                                   |         sb = r8 + 1;
    0x00061334 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00061336 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00061338 cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x0006133a blt.w 0x61474                                     |             goto label_26;
                                                                 |         }
                                                                 | label_0:
    0x0006133e mvn r2, 7                                         |         r2 = ~7;
    0x00061342 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00061344 str r2, [sp, 8]                                   |         var_8h = r2;
    0x00061346 movs r1, 0x71                                     |         r1 = 0x71;
    0x00061348 mov r2, sb                                        |         r2 = sb;
    0x0006134a mov r0, r6                                        |         r0 = r6;
    0x0006134c strd r4, fp, [sp]                                 |         __asm ("strd r4, fp, [sp]");
    0x00061350 bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00061354 movs r2, 0x11                                     |         r2 = 0x11;
                                                                 | label_1:
    0x00061356 ldr r4, [r6, 0x6c]                                |         r4 = *((r6 + 0x6c));
    0x00061358 cmp r4, 0                                         |         
    0x0006135a itttt gt                                          |         
                                                                 |         if (r4 <= 0) {
    0x0006135c ldrgt r3, [r6, 0x68]                              |             r3 = *((r6 + 0x68));
                                                                 |         }
                                                                 |         if (r4 <= 0) {
    0x0006135e addgt r1, r4, r4, lsl 2                           |             r1 = r4 + (r4 << 2);
                                                                 |         }
                                                                 |         if (r4 <= 0) {
    0x00061362 addgt r3, r3, r1, lsl 2                           |             r3 += (r1 << 2);
                                                                 |         }
                                                                 |         if (r4 > 0) {
    0x00061366 strh r2, [r3, -0x12]                              |             *((r3 - 0x12)) = r2;
                                                                 |         }
    0x0006136a ldr r3, [r6, 0x70]                                |         r3 = *((r6 + 0x70));
    0x0006136c cmp r4, r3                                        |         
                                                                 |         if (r4 >= r3) {
    0x0006136e bge.w 0x615a2                                     |             goto label_27;
                                                                 |         }
    0x00061372 add.w r3, r4, r4, lsl 2                           |         r3 = r4 + (r4 << 2);
    0x00061376 ldr r0, [r6, 0x68]                                |         r0 = *((r6 + 0x68));
    0x00061378 movs r1, 0                                        |         r1 = 0;
    0x0006137a lsls r3, r3, 2                                    |         r3 <<= 2;
    0x0006137c add.w fp, r4, 1                                   |         
    0x00061380 mov.w ip, 0x21                                    |         
    0x00061384 str.w fp, [r6, 0x6c]                              |         __asm ("str.w fp, [r6, 0x6c]");
    0x00061388 adds r2, r0, r3                                   |         r2 = r0 + r3;
    0x0006138a strd sl, r1, [r2, 4]                              |         __asm ("strd sl, r1, [r2, 4]");
    0x0006138e strd r1, r1, [r2, 0xc]                            |         __asm ("strd r1, r1, [r2, 0xc]");
    0x00061392 str.w ip, [r0, r3]                                |         __asm ("str.w ip, [r0, r3]");
                                                                 | label_12:
    0x00061396 ldrb.w r3, [r7, 0x36]                             |         r3 = *((r7 + 0x36));
    0x0006139a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0006139c bne.w 0x61508                                     |             goto label_28;
                                                                 |         }
    0x000613a0 ldr r3, [r5, 0x74]                                |         r3 = *((r5 + 0x74));
    0x000613a2 movs r2, 1                                        |         r2 = 1;
    0x000613a4 cmp r3, 0                                         |         
    0x000613a6 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x000613a8 moveq r3, r5                                      |             r3 = r5;
                                                                 |         }
    0x000613aa strb r2, [r3, 0x15]                               |         *((r3 + 0x15)) = r2;
                                                                 | label_10:
    0x000613ac ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000613ae mov r2, sl                                        |         r2 = sl;
    0x000613b0 movs r1, 0x85                                     |         r1 = 0x85;
    0x000613b2 mov r0, r6                                        |         r0 = r6;
    0x000613b4 str.w sb, [sp]                                    |         __asm ("str.w sb, [sp]");
    0x000613b8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000613bc ldrb.w r3, [r7, 0x38]                             |         r3 = *((r7 + 0x38));
    0x000613c0 ands r3, r3, 2                                    |         r3 &= 2;
                                                                 |         if (r3 == r3) {
    0x000613c4 beq.w 0x614fa                                     |             goto label_29;
                                                                 |         }
                                                                 | label_9:
    0x000613c8 movs r3, 0                                        |         r3 = 0;
    0x000613ca mov r2, sb                                        |         r2 = sb;
    0x000613cc str r3, [sp]                                      |         *(sp) = r3;
    0x000613ce movs r1, 0x8a                                     |         r1 = 0x8a;
    0x000613d0 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000613d2 mov r0, r6                                        |         r0 = r6;
    0x000613d4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000613d8 ldr r3, [r6, 0x6c]                                |         r3 = *((r6 + 0x6c));
    0x000613da cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x000613dc ble 0x613ee                                       |             
    0x000613de ldr r2, [r6, 0x68]                                |             r2 = *((r6 + 0x68));
    0x000613e0 add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x000613e4 add.w r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
    0x000613e8 movs r3, 0x10                                     |             r3 = 0x10;
    0x000613ea strh r3, [r2, -0x12]                              |             *((r2 - 0x12)) = r3;
                                                                 |         }
    0x000613ee ldr r1, [sp, 0x10]                                |         r1 = var_10h;
                                                                 |         if (r1 != 0) {
    0x000613f0 cbz r1, 0x61402                                   |             
    0x000613f2 ldrb r3, [r5, 0x13]                               |             r3 = *((r5 + 0x13));
    0x000613f4 cmp r3, 7                                         |             
    0x000613f6 itttt ls                                          |             
                                                                 |             if (r3 > 7) {
    0x000613f8 addls r2, r3, 1                                   |                 r2 = r3 + 1;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x000613fa addls r3, 0x26                                    |                 r3 += 0x26;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x000613fc strbls r2, [r5, 0x13]                             |                 *((r5 + 0x13)) = r2;
                                                                 |             }
                                                                 |             if (r3 <= 7) {
    0x000613fe strls r1, [r5, r3, lsl 2]                         |                 offset_1 = r3 << 2;
                                                                 |                 *((r5 + offset_1)) = r1;
                                                                 |                 goto label_30;
                                                                 |             }
                                                                 |         }
                                                                 | label_30:
    0x00061402 movs r2, 0                                        |         r2 = 0;
    0x00061404 mov r3, fp                                        |         r3 = fp;
    0x00061406 str r2, [sp]                                      |         *(sp) = r2;
    0x00061408 movs r1, 0x24                                     |         r1 = 0x24;
    0x0006140a mov r2, sl                                        |         r2 = sl;
    0x0006140c mov r0, r6                                        |         r0 = r6;
    0x0006140e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00061412 ldr r3, [r6]                                      |         r3 = *(r6);
    0x00061414 cmp r4, 0                                         |         
    0x00061416 ldr r2, [r6, 0x6c]                                |         r2 = *((r6 + 0x6c));
    0x00061418 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
    0x0006141c it lt                                             |         
                                                                 |         if (r4 >= 0) {
    0x0006141e addlt r4, r2, -1                                  |             r4 = r2 + -1;
                                                                 |         }
    0x00061422 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00061424 bne 0x6149e                                       |             goto label_31;
                                                                 |         }
    0x00061426 ldr r3, [r6, 0x68]                                |         r3 = *((r6 + 0x68));
    0x00061428 add.w r4, r4, r4, lsl 2                           |         r4 += (r4 << 2);
    0x0006142c add.w r3, r3, r4, lsl 2                           |         r3 += (r4 << 2);
                                                                 | label_2:
    0x00061430 movs r4, 0                                        |         r4 = 0;
    0x00061432 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00061434 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00061436 mov r2, r8                                        |         r2 = r8;
    0x00061438 mov r3, r4                                        |         r3 = r4;
    0x0006143a mov r0, r6                                        |         r0 = r6;
    0x0006143c str r4, [sp]                                      |         *(sp) = r4;
    0x0006143e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00061442 mov r3, r4                                        |         r3 = r4;
    0x00061444 mov r2, sb                                        |         r2 = sb;
    0x00061446 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00061448 mov r0, r6                                        |         r0 = r6;
    0x0006144a str r4, [sp]                                      |         *(sp) = r4;
    0x0006144c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00061450 mov r3, r4                                        |         r3 = r4;
    0x00061452 mov r2, sl                                        |         r2 = sl;
    0x00061454 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00061456 mov r0, r6                                        |         r0 = r6;
    0x00061458 str r4, [sp]                                      |         *(sp) = r4;
    0x0006145a bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006145e b 0x611e8                                         |         
                                                                 |     }
                                                                 | label_25:
    0x00061460 ldr r3, [pc, 0x1c0]                               |     
    0x00061462 add.w sb, r8, 1                                   |     sb = r8 + 1;
    0x00061466 add r3, pc                                        |     r3 = 0xc2a8e;
    0x00061468 adds r3, 4                                        |     r3 += 4;
    0x0006146a str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0006146c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0006146e cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00061470 bge.w 0x6133e                                     |         goto label_0;
                                                                 |     }
                                                                 | label_26:
    0x00061474 movs r3, 0                                        |     r3 = 0;
    0x00061476 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00061478 movs r1, 0x91                                     |     r1 = 0x91;
    0x0006147a str r3, [sp]                                      |     *(sp) = r3;
    0x0006147c mov r0, r6                                        |     r0 = r6;
    0x0006147e mov r3, r4                                        |     r3 = r4;
    0x00061480 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061484 mvn r2, 7                                         |     r2 = ~7;
    0x00061488 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0006148a str r2, [sp, 8]                                   |     var_8h = r2;
    0x0006148c movs r1, 0x71                                     |     r1 = 0x71;
    0x0006148e mov r2, sb                                        |     r2 = sb;
    0x00061490 mov r0, r6                                        |     r0 = r6;
    0x00061492 strd r4, fp, [sp]                                 |     __asm ("strd r4, fp, [sp]");
    0x00061496 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006149a movs r2, 1                                        |     r2 = 1;
    0x0006149c b 0x61356                                         |     goto label_1;
                                                                 | label_31:
    0x0006149e ldr r3, [pc, 0x188]                               |     
    0x000614a0 add r3, pc                                        |     r3 = 0xc2ace;
    0x000614a2 adds r3, 4                                        |     r3 += 4;
    0x000614a4 b 0x61430                                         |     goto label_2;
                                                                 | label_21:
    0x000614a6 ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
                                                                 |     if (r3 == 0) {
    0x000614a8 cbz r3, 0x614c8                                   |         goto label_32;
                                                                 |     }
                                                                 | label_6:
    0x000614aa mov r0, r5                                        |     r0 = r5;
    0x000614ac bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x000614b0 mov r6, r0                                        |     r6 = r0;
    0x000614b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000614b4 bne.w 0x6122e                                     |         goto label_3;
                                                                 |     }
    0x000614b8 b 0x611e8                                         |     goto label_4;
                                                                 | label_20:
    0x000614ba str r1, [sp]                                      |     *(sp) = r1;
    0x000614bc movs r3, 1                                        |     r3 = 1;
    0x000614be mov r1, r4                                        |     r1 = r4;
    0x000614c0 mov r0, r5                                        |     r0 = r5;
    0x000614c2 bl 0x2ba0c                                        |     fcn_0002ba0c (r0, r1, r2, r3, r4);
    0x000614c6 b 0x61226                                         |     goto label_5;
                                                                 | label_32:
    0x000614c8 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000614ca ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x000614cc lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x000614ce itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x000614d0 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x000614d2 strbpl r3, [r5, 0x17]                             |         *((r5 + 0x17)) = r3;
                                                                 |     }
    0x000614d4 b 0x614aa                                         |     goto label_6;
                                                                 | label_23:
    0x000614d6 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x000614d8 adds r3, 1                                        |     r3++;
    0x000614da str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000614dc str r3, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r3;
    0x000614de b 0x612c2                                         |     goto label_7;
                                                                 | label_24:
    0x000614e0 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x000614e2 mvn.w ip, r2                                      |     
    0x000614e6 ldr r0, [r1, 0xc]                                 |     r0 = *((r1 + 0xc));
    0x000614e8 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x000614ec cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x000614ee bmi 0x615d6                                       |         goto label_33;
                                                                 |     }
    0x000614f0 ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x000614f2 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x000614f4 str.w r1, [r3, ip, lsl 2]                         |     __asm ("str.w r1, [r3, ip, lsl 2]");
    0x000614f8 b 0x612fe                                         |     goto label_8;
                                                                 | label_29:
    0x000614fa mov r2, sb                                        |     r2 = sb;
    0x000614fc movs r1, 0x89                                     |     r1 = 0x89;
    0x000614fe mov r0, r6                                        |     r0 = r6;
    0x00061500 str r3, [sp]                                      |     *(sp) = r3;
    0x00061502 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061506 b 0x613c8                                         |     goto label_9;
                                                                 | label_28:
    0x00061508 ldr r3, [r6, 0x70]                                |     r3 = *((r6 + 0x70));
    0x0006150a cmp fp, r3                                        |     
                                                                 |     if (fp >= r3) {
    0x0006150c bge 0x615de                                       |         goto label_34;
                                                                 |     }
    0x0006150e add.w r1, fp, 1                                   |     r1 += arg_1h;
    0x00061512 add.w r2, fp, fp, lsl 2                           |     r2 = fp + (fp << 2);
    0x00061516 str r1, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r1;
    0x00061518 mov r3, fp                                        |     r3 = fp;
    0x0006151a mov fp, r1                                        |     
    0x0006151c ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x0006151e lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00061520 ldr r0, [r6, 0x68]                                |     r0 = *((r6 + 0x68));
    0x00061522 vldr d16, [pc, 0xec]                              |     __asm ("vldr d16, aav.0x000000ff");
    0x00061526 mov.w lr, 8                                       |     lr = 8;
    0x0006152a add r1, r2                                        |     r1 += r2;
    0x0006152c add.w ip, r1, 4                                   |     
    0x00061530 str.w lr, [r0, r2]                                |     __asm ("str.w lr, [r0, r2]");
    0x00061534 movs r2, 0                                        |     r2 = 0;
    0x00061536 vst1.32 {d16}, [ip]                               |     __asm ("vst1.32 {d16}, [ip]");
    0x0006153a strd r2, r2, [r1, 0xc]                            |     __asm ("strd r2, r2, [r1, 0xc]");
                                                                 | label_15:
    0x0006153e ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00061540 movs r1, 0x84                                     |     r1 = 0x84;
    0x00061542 mov r0, r6                                        |     r0 = r6;
    0x00061544 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00061546 str r2, [sp]                                      |     *(sp) = r2;
    0x00061548 ldrh r2, [r7, 0x32]                               |     r2 = *((r7 + 0x32));
    0x0006154a str r2, [sp, 4]                                   |     var_4h = r2;
    0x0006154c mov r2, sl                                        |     r2 = sl;
    0x0006154e bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00061552 mov r2, r7                                        |     r2 = r7;
    0x00061554 movs r1, 2                                        |     r1 = 2;
    0x00061556 mov r0, r5                                        |     r0 = r5;
    0x00061558 bl 0x2ac98                                        |     fcn_0002ac98 (r0, r1, r2, r3, r4);
    0x0006155c ldr r2, [r6]                                      |     r2 = *(r6);
    0x0006155e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00061560 ldr r1, [r6, 0x6c]                                |     r1 = *((r6 + 0x6c));
    0x00061562 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00061566 cmp r3, 0                                         |     
    0x00061568 it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x0006156a addlt r3, r1, -1                                  |         r3 = r1 + -1;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x0006156e cbnz r2, 0x615ce                                  |         goto label_35;
                                                                 |     }
    0x00061570 ldr r2, [r6, 0x68]                                |     r2 = *((r6 + 0x68));
    0x00061572 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00061576 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
                                                                 | label_14:
    0x0006157a str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
    0x0006157c b 0x613ac                                         |     goto label_10;
                                                                 | label_18:
    0x0006157e movs r6, 0                                        |     r6 = 0;
    0x00061580 mov r4, r6                                        |     r4 = r6;
                                                                 | label_16:
    0x00061582 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00061584 movs r1, 0x1b                                     |     r1 = 0x1b;
    0x00061586 mov r0, r5                                        |     r0 = r5;
    0x00061588 str r3, [sp]                                      |     *(sp) = r3;
    0x0006158a movs r3, 0                                        |     r3 = 0;
    0x0006158c ldr r2, [r7]                                      |     r2 = *(r7);
    0x0006158e bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00061592 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00061594 bne.w 0x611e8                                     |         goto label_4;
                                                                 |     }
    0x00061598 ldr.w r2, [sb, 0x14]                              |     r2 = *((sb + 0x14));
    0x0006159c ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x000615a0 b 0x61216                                         |     goto label_11;
                                                                 | label_27:
    0x000615a2 movs r3, 0                                        |     r3 = 0;
    0x000615a4 mov r2, sl                                        |     r2 = sl;
    0x000615a6 movs r1, 0x21                                     |     r1 = 0x21;
    0x000615a8 mov r0, r6                                        |     r0 = r6;
    0x000615aa str r3, [sp]                                      |     *(sp) = r3;
    0x000615ac bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000615b0 ldr.w fp, [r6, 0x6c]                              |     fp = *((r6 + 0x6c));
    0x000615b4 mov r4, r0                                        |     r4 = r0;
    0x000615b6 b 0x61396                                         |     goto label_12;
                                                                 | label_22:
    0x000615b8 movs r3, 0                                        |     r3 = 0;
    0x000615ba mov r2, r8                                        |     r2 = r8;
    0x000615bc str r3, [sp]                                      |     *(sp) = r3;
    0x000615be movs r1, 0x23                                     |     r1 = 0x23;
    0x000615c0 mov r0, r6                                        |     r0 = r6;
    0x000615c2 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000615c6 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000615c8 mov sb, r0                                        |     sb = r0;
    0x000615ca str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000615cc b 0x612ac                                         |     goto label_13;
                                                                 | label_35:
    0x000615ce ldr r3, [pc, 0x5c]                                |     
    0x000615d0 add r3, pc                                        |     r3 = 0xc2c02;
    0x000615d2 adds r3, 4                                        |     r3 += 4;
    0x000615d4 b 0x6157a                                         |     goto label_14;
                                                                 | label_33:
    0x000615d6 mov r2, ip                                        |     r2 = ip;
    0x000615d8 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000615dc b 0x612fe                                         |     goto label_8;
                                                                 | label_34:
    0x000615de movs r2, 0                                        |     r2 = 0;
    0x000615e0 movs r3, 1                                        |     r3 = 1;
    0x000615e2 movs r1, 8                                        |     r1 = 8;
    0x000615e4 mov r0, r6                                        |     r0 = r6;
    0x000615e6 str r2, [sp]                                      |     *(sp) = r2;
    0x000615e8 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000615ec ldr.w fp, [r6, 0x6c]                              |     fp = *((r6 + 0x6c));
    0x000615f0 mov r3, r0                                        |     r3 = r0;
    0x000615f2 b 0x6153e                                         |     goto label_15;
                                                                 | label_17:
    0x000615f4 movs r6, 0                                        |     r6 = 0;
    0x000615f6 mov.w r4, 0x8000                                  |     r4 = 0x8000;
    0x000615fa sub.w r3, r3, 0x80000                             |     r3 -= 0x80000;
    0x000615fe movt r6, 0xfff8                                   |     r6 = (r6 & 0xFFFF) | 0xfff80000;
    0x00061602 movt r4, 0xffff                                   |     r4 = (r4 & 0xFFFF) | 0xffff0000;
    0x00061606 b 0x61582                                         |     goto label_16;
                                                                 | label_19:
    0x00061608 blx 0x9b44                                        |     fcn_00009b44 ();
    0x0006160c nop.w                                             |     
    0x00061610 movs r0, r0                                       |     
    0x00061612 movs r0, r0                                       |     
    0x00061614 movs r1, r0                                       |     r1 = r0;
    0x00061616 movs r0, r0                                       |     
    0x00061618 vld4.8 {d16, d17, d18, d19}, [r4], r3             |     __asm ("vld4.8 {d16, d17, d18, d19}, [r4], r3");
    0x0006161c lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0006161e movs r0, r0                                       |     
    0x00061620 ldrsb.w r0, [r0, r3]                              |     r0 = *((r0 + r3));
    0x00061624 adds r6, r7, r3                                   |     r6 = r7 + r3;
    0x00061626 movs r4, r0                                       |     r4 = r0;
    0x00061628 adds r4, r0, r3                                   |     r4 = r0 + r3;
    0x0006162a movs r4, r0                                       |     r4 = r0;
    0x0006162c asrs r4, r2, 0x1e                                 |     r4 = r2 >> 0x1e;
    0x0006162e movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x61780 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00061780 ()                                      | void fcn_00061780 (int16_t arg_13h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_80h, int16_t arg_88h, arithmetic arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_38h_2;
                                                                 |     int16_t var_40h_2;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_54h_2;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_c4h;
                                                                 |     int16_t var_1ach;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int32_t var_8h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int16_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_1f0h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h_2;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00061780 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00061784 mov fp, r0                                        |     
    0x00061786 ldr.w r0, [pc, 0x754]                             |     r0 = *(0x00061edc);
    0x0006178a sub sp, 0x5c                                      |     
    0x0006178c mov r5, r2                                        |     r5 = r2;
    0x0006178e ldr.w r3, [pc, 0x750]                             |     
    0x00061792 add r0, pc                                        |     r0 += pc;
    0x00061794 ldr r2, [sp, 0x88]                                |     r2 = *(arg_88h);
    0x00061796 ldr r3, [r0, r3]                                  |     r3 = *((r0 + r3));
    0x00061798 ldr r3, [r3]                                      |     r3 = *(0x61ee2);
    0x0006179a str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0006179c mov.w r3, 0                                       |     r3 = 0;
    0x000617a0 ldrd r3, r4, [sp, 0x80]                           |     __asm ("ldrd r3, r4, [arg_80h]");
    0x000617a4 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x000617a6 str r1, [sp, 0x38]                                |     var_38h = r1;
    0x000617a8 strd r3, r4, [sp, 0x10]                           |     __asm ("strd r3, r4, [var_10h]");
    0x000617ac ldr.w r3, [fp, 8]                                 |     r3 = *(arg_88h);
    0x000617b0 ldr r2, [r3, 0x6c]                                |     r2 = *((r3 + 0x6c));
    0x000617b2 str r3, [sp, 0x24]                                |     x = r3;
    0x000617b4 ldr r3, [r3, 0x70]                                |     r3 = *((r3 + 0x70));
    0x000617b6 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x000617b8 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x000617ba bge.w 0x61e5c                                     |         goto label_23;
                                                                 |     }
    0x000617be ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000617c0 movs r1, 0                                        |     r1 = 0;
    0x000617c2 ldr r4, [sp, 0x24]                                |     r4 = x;
    0x000617c4 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000617c8 add.w r2, r0, r0, lsl 2                           |     r2 = r0 + (r0 << 2);
    0x000617cc ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x000617ce adds r0, 1                                        |     r0++;
    0x000617d0 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x000617d2 str r0, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r0;
    0x000617d4 movs r0, 0xe                                      |     r0 = 0xe;
    0x000617d6 str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x000617d8 add r3, r2                                        |     r3 += r2;
    0x000617da adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x000617dc vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x000617e0 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_14:
    0x000617e4 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000617e6 ldr r7, [r3, 0xc]                                 |     r7 = *((r3 + 0xc));
    0x000617e8 ldr r4, [r3, 0x18]                                |     r4 = *((r3 + 0x18));
    0x000617ea ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x000617ec add.w r7, r7, r7, lsl 1                           |     r7 += (r7 << 1);
    0x000617f0 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000617f2 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000617f4 add.w r7, r4, r7, lsl 4                           |     r7 = r4 + (r7 << 4);
    0x000617f8 cmp r4, r7                                        |     
    0x000617fa ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x000617fc str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 |     if (r4 >= r7) {
    0x000617fe bhs.w 0x61eca                                     |         goto label_24;
                                                                 |     }
    0x00061802 ldr.w r3, [pc, 0x6e0]                             |     r3 = *(0x00061ee4);
    0x00061806 str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [var_28h]");
    0x0006180a add r3, pc                                        |     r3 += pc;
    0x0006180c str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0006180e movs r3, 0                                        |     r3 = 0;
    0x00061810 mov sb, r3                                        |     sb = r3;
    0x00061812 mov sl, r3                                        |     sl = r3;
    0x00061814 mov fp, r3                                        |     
    0x00061816 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00061818 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     do {
    0x0006181a ldrh r3, [r4, 0xa]                                |         r3 = *((r4 + 0xa));
    0x0006181c ands r6, r3, 2                                    |         r6 = r3 & 2;
                                                                 |         if (r6 == r3) {
    0x00061820 beq.w 0x61bdc                                     |             goto label_25;
                                                                 |         }
                                                                 | label_2:
    0x00061824 ldrd r2, r3, [sp, 0x10]                           |         __asm ("ldrd r2, r3, [var_10h]");
    0x00061828 mov r1, r5                                        |         r1 = r5;
    0x0006182a mov r0, r4                                        |         r0 = r4;
    0x0006182c bl 0x15464                                        |         r0 = fcn_00015464 (r0, r1);
                                                                 |         if (r0 != 0) {
    0x00061830 cbz r0, 0x61876                                   |             
    0x00061832 ldr r3, [r4, 0x18]                                |             r3 = *((r4 + 0x18));
    0x00061834 cmp r3, 0x3f                                      |             
    0x00061836 itt gt                                            |             
                                                                 |             if (r3 <= 0x3f) {
    0x00061838 movgt r8, 0                                       |                 r8 = 0;
                                                                 |             }
                                                                 |             if (r3 > 0x3f) {
    0x0006183c mov.w r6, -0x80000000                             |                 r6 = -0x80000000;
                                                                 |             }
                                                                 |             if (r3 <= 0x3f) {
    0x00061840 bgt 0x6185a                                       |                 
    0x00061842 movs r1, 1                                        |                 r1 = 1;
    0x00061844 sub.w r6, r3, 0x20                                |                 r6 = r3 - 0x20;
    0x00061848 rsb.w r2, r3, 0x20                                |                 r2 = 0x20 - r3;
    0x0006184c lsl.w r6, r1, r6                                  |                 r6 = r1 << r6;
    0x00061850 lsr.w r2, r1, r2                                  |                 r2 = r1 >> r2;
    0x00061854 lsl.w r8, r1, r3                                  |                 r8 = r1 << r3;
    0x00061858 orrs r6, r2                                       |                 r6 |= r2;
                                                                 |             }
    0x0006185a cmp.w sb, 0                                       |             
                                                                 |             if (sb == 0) {
    0x0006185e beq.w 0x61c46                                     |                 goto label_26;
                                                                 |             }
                                                                 | label_4:
    0x00061862 and.w r3, r8, sl                                  |             r3 = r8 & sl;
    0x00061866 and.w r2, r6, fp                                  |             r2 = r6 & fp;
    0x0006186a orrs r3, r2                                       |             r3 |= r2;
    0x0006186c it ne                                             |             
                                                                 |             if (r3 == r2) {
    0x0006186e movne sb, 1                                       |                 sb = 1;
                                                                 |             }
                                                                 |             if (r3 == r2) {
    0x00061872 beq.w 0x61c12                                     |                 goto label_27;
                                                                 |             }
                                                                 |         }
                                                                 | label_3:
    0x00061876 adds r4, 0x30                                     |         r4 += 0x30;
    0x00061878 cmp r7, r4                                        |         
    0x0006187a bhi 0x6181a                                       |         
                                                                 |     } while (r7 > r4);
    0x0006187c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0006187e mov r2, fp                                        |     r2 = fp;
    0x00061880 ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x00061884 mvns r4, r2                                       |     r4 = ~r2;
    0x00061886 mvn.w ip, sl                                      |     
    0x0006188a orr r4, r4, 0x80000000                            |     r4 |= 0x80000000;
    0x0006188e uxth r2, r3                                       |     r2 = (int16_t) r3;
                                                                 | label_22:
    0x00061890 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00061892 ldr r1, [r5, 0x34]                                |     r1 = *((r5 + 0x34));
    0x00061894 strh r2, [r6, 0x2c]                               |     *((r6 + 0x2c)) = r2;
    0x00061896 strh r2, [r6, 0x18]                               |     *((r6 + 0x18)) = r2;
    0x00061898 ands r4, r1                                       |     r4 &= r1;
    0x0006189a ldr r2, [r5, 0x30]                                |     r2 = *((r5 + 0x30));
    0x0006189c and.w sb, r2, ip                                  |     sb = r2 & ip;
    0x000618a0 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x000618a2 ldrsh.w r0, [r2, 0x22]                            |     r0 = *((r2 + 0x22));
    0x000618a6 movw r2, 0x4241                                   |     r2 = 0x4241;
    0x000618aa str r2, [r6, 0x28]                                |     *((r6 + 0x28)) = r2;
    0x000618ac cmp r0, 0x3f                                      |     
    0x000618ae mov r2, r0                                        |     r2 = r0;
    0x000618b0 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x000618b2 it ge                                             |     
                                                                 |     if (r0 < 0x3f) {
    0x000618b4 movge r0, 0x3f                                    |         r0 = 0x3f;
                                                                 |     }
    0x000618b6 cmp r2, 0                                         |     
    0x000618b8 mov sl, r0                                        |     sl = r0;
                                                                 |     if (r2 <= 0) {
    0x000618ba ble 0x618e2                                       |         goto label_28;
                                                                 |     }
    0x000618bc movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x000618be rsb.w r6, r2, 0x20                                |         r6 = 0x20 - r2;
    0x000618c2 lsr.w r0, sb, r2                                  |         r0 = sb >> r2;
    0x000618c6 lsl.w r6, r4, r6                                  |         r6 = r4 << r6;
    0x000618ca orrs r0, r6                                       |         r0 |= r6;
    0x000618cc sub.w r6, r2, 0x20                                |         r6 = r2 - 0x20;
    0x000618d0 lsr.w r6, r4, r6                                  |         r6 = r4 >> r6;
    0x000618d4 adds r2, 1                                        |         r2++;
    0x000618d6 orrs r0, r6                                       |         r0 |= r6;
    0x000618d8 lsls r6, r0, 0x1f                                 |         r6 = r0 << 0x1f;
    0x000618da it mi                                             |         
                                                                 |         if (r6 >= r0) {
    0x000618dc addmi r3, 1                                       |             r3++;
                                                                 |         }
    0x000618de cmp sl, r2                                        |         
    0x000618e0 bne 0x618be                                       |         
                                                                 |     } while (sl != r2);
                                                                 | label_28:
    0x000618e2 cmp r1, 0                                         |     
    0x000618e4 ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x000618e8 ittt lt                                           |     
                                                                 |     if (r1 >= 0) {
    0x000618ea ldrlt r2, [sp, 0x28]                              |         r2 = var_28h;
                                                                 |     }
                                                                 |     if (r1 >= 0) {
    0x000618ec sublt r2, 0x3f                                    |         r2 -= 0x3f;
                                                                 |     }
                                                                 |     if (r1 >= 0) {
    0x000618ee addlt r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
    0x000618f0 movs r2, 0                                        |     r2 = 0;
    0x000618f2 adds r3, 1                                        |     r3++;
    0x000618f4 sxth r1, r3                                       |     __asm ("sxth r1, r3");
    0x000618f6 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x000618f8 add r3, sp, 0x50                                  |     r3 += var_50h;
    0x000618fa bl 0x1f0c4                                        |     fcn_0001f0c4 (r0, r1, r2, r3);
    0x000618fe str r0, [sp, 0x20]                                |     var_20h = r0;
    0x00061900 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00061902 beq.w 0x61cb0                                     |         goto label_17;
                                                                 |     }
    0x00061906 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00061908 str r0, [r3, 0x20]                                |     *((r3 + 0x20)) = r0;
    0x0006190a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006190c str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x0006190e ldr.w r3, [pc, 0x5d8]                             |     r3 = *(0x00061ee8);
    0x00061912 add r3, pc                                        |     r3 += pc;
    0x00061914 str r3, [r0]                                      |     *(r0) = r3;
    0x00061916 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00061918 ldr r6, [r3, 0x18]                                |     r6 = *((r3 + 0x18));
    0x0006191a cmp r7, r6                                        |     
                                                                 |     if (r7 < r6) {
    0x0006191c bls.w 0x61e8e                                     |         goto label_29;
                                                                 |     }
    0x00061920 mov.w ip, 0                                       |     
    0x00061924 str.w sl, [sp, 0x44]                              |     __asm ("str.w sl, [var_44h]");
    0x00061928 str.w sb, [sp, 0x48]                              |     __asm ("str.w sb, [var_48h_2]");
    0x0006192c mov r8, ip                                        |     r8 = ip;
    0x0006192e str r4, [sp, 0x4c]                                |     var_4ch = r4;
    0x00061930 mov sl, ip                                        |     sl = ip;
    0x00061932 mov sb, ip                                        |     sb = ip;
    0x00061934 mov r4, r0                                        |     r4 = r0;
    0x00061936 b 0x6193e                                         |     
                                                                 |     while (r0 == 0) {
                                                                 | label_0:
    0x00061938 adds r6, 0x30                                     |         r6 += 0x30;
    0x0006193a cmp r7, r6                                        |         
                                                                 |         if (r7 < r6) {
    0x0006193c bls 0x619be                                       |             goto label_30;
                                                                 |         }
                                                                 | label_1:
    0x0006193e ldrd r2, r3, [sp, 0x10]                           |         __asm ("ldrd r2, r3, [var_10h]");
    0x00061942 mov r1, r5                                        |         r1 = r5;
    0x00061944 mov r0, r6                                        |         r0 = r6;
    0x00061946 bl 0x15464                                        |         r0 = fcn_00015464 (r0, r1);
    0x0006194a cmp r0, 0                                         |         
    0x0006194c beq 0x61938                                       |         
                                                                 |     }
    0x0006194e ldr r1, [r6, 0x18]                                |     r1 = *((r6 + 0x18));
    0x00061950 cmp r1, 0x3f                                      |     
    0x00061952 itt gt                                            |     
                                                                 |     if (r1 <= 0x3f) {
    0x00061954 movgt r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r1 <= 0x3f) {
    0x00061956 movgt r2, -0x80000000                             |         r2 = -0x80000000;
                                                                 |     }
                                                                 |     if (r1 <= 0x3f) {
    0x0006195a bgt 0x61972                                       |         
    0x0006195c movs r0, 1                                        |         r0 = 1;
    0x0006195e sub.w r2, r1, 0x20                                |         r2 = r1 - 0x20;
    0x00061962 rsb.w r3, r1, 0x20                                |         r3 = 0x20 - r1;
    0x00061966 lsl.w r2, r0, r2                                  |         r2 = r0 << r2;
    0x0006196a lsr.w r3, r0, r3                                  |         r3 = r0 >> r3;
    0x0006196e lsls r0, r1                                       |         r0 <<= r1;
    0x00061970 orrs r2, r3                                       |         r2 |= r3;
                                                                 |     }
    0x00061972 and.w r3, r0, sb                                  |     r3 = r0 & sb;
    0x00061976 and.w ip, r2, sl                                  |     
    0x0006197a orrs.w r3, r3, ip                                 |     r3 |= ip;
                                                                 |     if (r3 != r3) {
    0x0006197e bne 0x61938                                       |         goto label_0;
                                                                 |     }
    0x00061980 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00061982 orr.w sl, r2, sl                                  |     sl = r2 | sl;
    0x00061986 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00061988 orr.w sb, r0, sb                                  |     sb = r0 | sb;
    0x0006198c strh.w r1, [r2, r8, lsl 1]                        |     offset_0 = r8 << 1;
                                                                 |     *((r2 + offset_0)) = r1;
    0x00061990 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00061992 ldrd r1, r3, [r3, 0xc]                            |     __asm ("ldrd r1, r3, [r3, 0xc]");
    0x00061996 lsls r0, r2, 0x15                                 |     r0 = r2 << 0x15;
    0x00061998 mov r0, fp                                        |     r0 = fp;
    0x0006199a itet mi                                           |     
                                                                 |     if (r0 >= r2) {
    0x0006199c movmi r2, r1                                      |         r2 = r1;
                                                                 |     }
                                                                 |     if (r0 < r2) {
    0x0006199e movpl r2, r3                                      |         r2 = r3;
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x000619a0 movmi r1, r3                                      |         r1 = r3;
                                                                 |     }
    0x000619a2 bl 0x27f10                                        |     r0 = fcn_00027f10 (r0, r1, r2);
    0x000619a6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000619a8 beq.w 0x61e3e                                     |         goto label_31;
                                                                 |     }
    0x000619ac ldr r3, [r0]                                      |     r3 = *(r0);
                                                                 | label_12:
    0x000619ae ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x000619b0 adds r6, 0x30                                     |     r6 += 0x30;
    0x000619b2 cmp r7, r6                                        |     
    0x000619b4 str.w r3, [r2, r8, lsl 2]                         |     __asm ("str.w r3, [r2, r8, lsl 2]");
    0x000619b8 add.w r8, r8, 1                                   |     r8++;
                                                                 |     if (r7 > r6) {
    0x000619bc bhi 0x6193e                                       |         goto label_1;
                                                                 |     }
                                                                 | label_30:
    0x000619be ldrd sl, sb, [sp, 0x44]                           |     __asm ("ldrd sl, sb, [var_44h]");
    0x000619c2 lsl.w r7, r8, 1                                   |     r7 = r8 << 1;
    0x000619c6 ldr r4, [sp, 0x4c]                                |     r4 = var_4ch;
    0x000619c8 lsl.w r1, r8, 2                                   |     r1 = r8 << 2;
                                                                 | label_19:
    0x000619cc ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000619ce ldr r6, [r3, 4]                                   |     r6 = *((r3 + 4));
    0x000619d0 ldr r0, [r3, 0x20]                                |     r0 = *((r3 + 0x20));
    0x000619d2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000619d4 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000619d6 ble 0x61a1e                                       |         goto label_32;
                                                                 |     }
    0x000619d8 ldr.w r7, [pc, 0x510]                             |     r7 = *(0x00061eec);
    0x000619dc movs r3, 0                                        |     r3 = 0;
    0x000619de add r7, pc                                        |     r7 += pc;
    0x000619e0 addw r7, r7, 0xeec                                |     __asm ("addw r7, r7, aav.0x000000ff");
                                                                 |     do {
    0x000619e4 rsb.w r1, r3, 0x20                                |         r1 = 0x20 - r3;
    0x000619e8 lsr.w r2, sb, r3                                  |         r2 = sb >> r3;
    0x000619ec lsl.w r1, r4, r1                                  |         r1 = r4 << r1;
    0x000619f0 orrs r2, r1                                       |         r2 |= r1;
    0x000619f2 sub.w r1, r3, 0x20                                |         r1 = r3 - 0x20;
    0x000619f6 lsr.w r1, r4, r1                                  |         r1 = r4 >> r1;
    0x000619fa orrs r2, r1                                       |         r2 |= r1;
    0x000619fc lsls r2, r2, 0x1f                                 |         r2 <<= 0x1f;
    0x000619fe it mi                                             |         
                                                                 |         if (r2 < r2) {
    0x00061a00 strhmi r3, [r6, r8, lsl 1]                        |             __asm ("strhmi r3, [r6, r8, lsl 1]");
                                                                 |         }
    0x00061a04 add.w r3, r3, 1                                   |         r3++;
    0x00061a08 itt mi                                            |         
                                                                 |         if (r2 >= r2) {
    0x00061a0a strmi r7, [r0, r8, lsl 2]                         |             offset_1 = r8 << 2;
                                                                 |             *((r0 + offset_1)) = r7;
                                                                 |         }
                                                                 |         if (r2 < r2) {
    0x00061a0e add.w r8, r8, 1                                   |             r8++;
                                                                 |         }
    0x00061a12 cmp sl, r3                                        |         
    0x00061a14 bne 0x619e4                                       |         
                                                                 |     } while (sl != r3);
    0x00061a16 lsl.w r7, r8, 1                                   |     r7 = r8 << 1;
    0x00061a1a lsl.w r1, r8, 2                                   |     r1 = r8 << 2;
                                                                 | label_32:
    0x00061a1e ldr r3, [r5, 0x34]                                |     r3 = *((r5 + 0x34));
    0x00061a20 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00061a22 blt.w 0x61d6e                                     |         goto label_33;
                                                                 |     }
                                                                 | label_8:
    0x00061a26 ldr.w r4, [pc, 0x4c8]                             |     r4 = *(0x00061ef0);
    0x00061a2a movw ip, 0xffff                                   |     ip = 0xffff;
    0x00061a2e ldr.w r2, [fp, 0x28]                              |     r2 = *(arg_28h);
    0x00061a32 strh.w ip, [r6, r7]                               |     *((r6 + r7)) = ip;
    0x00061a36 add r4, pc                                        |     r4 += pc;
    0x00061a38 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00061a3a addw r4, r4, 0xeec                                |     __asm ("addw r4, r4, aav.0x000000ff");
    0x00061a3e adds r5, r2, 1                                    |     r5 = r2 + 1;
    0x00061a40 str r4, [r0, r1]                                  |     *((r0 + r1)) = r4;
    0x00061a42 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00061a44 str.w r5, [fp, 0x28]                              |     __asm ("str.w r5, [arg_28h]");
    0x00061a48 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061a4a str r2, [r1, 8]                                   |     *((r1 + 8)) = r2;
    0x00061a4c movs r1, 0                                        |     r1 = 0;
    0x00061a4e str r1, [sp]                                      |     *(sp) = r1;
    0x00061a50 movs r1, 0x74                                     |     r1 = 0x74;
    0x00061a52 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061a56 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00061a58 mov r0, fp                                        |     r0 = fp;
    0x00061a5a bl 0x27dcc                                        |     fcn_00027dcc (r0, r1);
    0x00061a5e ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00061a62 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00061a64 ands r3, r3, 0x80000                              |     r3 &= 0x80000;
                                                                 |     if (r3 == r3) {
    0x00061a68 beq.w 0x61db2                                     |         goto label_34;
                                                                 |     }
                                                                 | label_9:
    0x00061a6c ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00061a6e ldr r3, [r3]                                      |     r3 = *(r3);
    0x00061a70 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00061a72 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00061a74 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00061a76 ldrb.w r3, [r3, 0x3c]                             |     r3 = *((r3 + 0x3c));
    0x00061a7a lsl.w sl, r3, 6                                   |     sl = r3 << 6;
    0x00061a7e ldr r3, [sp, 0x24]                                |     r3 = x;
    0x00061a80 add r2, sl                                        |     r2 += sl;
    0x00061a82 ldrd r5, r1, [r3, 0x6c]                           |     __asm ("ldrd r5, r1, [r3, 0x6c]");
    0x00061a86 ldrb.w r3, [r2, 0x2d]                             |     r3 = *((r2 + 0x2d));
    0x00061a8a ands r3, r3, 0x20                                 |     r3 &= 0x20;
                                                                 |     if (r3 != r3) {
    0x00061a8e bne.w 0x61cde                                     |         goto label_35;
                                                                 |     }
    0x00061a92 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00061a94 cmp r5, r1                                        |     
    0x00061a96 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
                                                                 |     if (r5 >= r1) {
    0x00061a98 bge.w 0x61e96                                     |         goto label_36;
                                                                 |     }
    0x00061a9c ldr r4, [sp, 0x24]                                |     r4 = x;
    0x00061a9e add.w r1, r5, r5, lsl 2                           |     r1 = r5 + (r5 << 2);
    0x00061aa2 adds r0, r5, 1                                    |     r0 = r5 + 1;
    0x00061aa4 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x00061aa6 ldr r6, [r4, 0x68]                                |     r6 = *((r4 + 0x68));
    0x00061aa8 str r0, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r0;
    0x00061aaa mov r4, r5                                        |     r4 = r5;
    0x00061aac mov r5, r3                                        |     r5 = r3;
    0x00061aae adds r0, r6, r1                                   |     r0 = r6 + r1;
    0x00061ab0 strd r2, r3, [r0, 4]                              |     __asm ("strd r2, r3, [r0, 4]");
    0x00061ab4 strd r3, r3, [r0, 0xc]                            |     __asm ("strd r3, r3, [r0, 0xc]");
    0x00061ab8 movs r3, 0x23                                     |     r3 = 0x23;
    0x00061aba str r3, [r6, r1]                                  |     *((r6 + r1)) = r3;
                                                                 | label_20:
    0x00061abc ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00061abe cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00061ac0 beq.w 0x61d54                                     |         goto label_37;
                                                                 |     }
                                                                 | label_5:
    0x00061ac4 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00061ac8 mov r0, fp                                        |     r0 = fp;
    0x00061aca subs r3, 1                                        |     r3--;
    0x00061acc mov r2, r3                                        |     r2 = r3;
    0x00061ace str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00061ad0 str.w r3, [fp, 0x38]                              |     __asm ("str.w r3, [arg_38h]");
    0x00061ad4 movs r3, 0x10                                     |     r3 = 0x10;
    0x00061ad6 bl 0x59230                                        |     fcn_00059230 (r0, r1, r2, r3);
    0x00061ada ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00061adc ldr r3, [r2, 0x28]                                |     r3 = *((r2 + 0x28));
    0x00061ade orr r3, r3, 0x20000                               |     r3 |= 0x20000;
    0x00061ae2 str r3, [r2, 0x28]                                |     *((r2 + 0x28)) = r3;
    0x00061ae4 ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x00061ae8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061aea beq.w 0x61d62                                     |         goto label_38;
                                                                 |     }
                                                                 | label_6:
    0x00061aee subs r3, 1                                        |     r3--;
    0x00061af0 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00061af2 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x00061af6 adds r3, 0x26                                     |     r3 += 0x26;
    0x00061af8 ldr.w r6, [fp, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r6 = *((fp + offset_2));
                                                                 | label_7:
    0x00061afc ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x00061afe mov.w sb, 0                                       |     sb = 0;
    0x00061b02 strd sb, sb, [sp, 8]                              |     __asm ("strd sb, sb, [var_8h]");
    0x00061b06 mov r3, r6                                        |     r3 = r6;
    0x00061b08 strd sb, sb, [sp]                                 |     __asm ("strd sb, sb, [sp]");
    0x00061b0c mov r0, fp                                        |     r0 = fp;
    0x00061b0e ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x00061b10 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00061b12 bl 0x60fc4                                        |     fcn_00060fc4 (r0, r1, r2, r3, r4, r5, r6);
    0x00061b16 ldr r2, [r7, 0x34]                                |     r2 = *((r7 + 0x34));
    0x00061b18 str r0, [sp, 0x20]                                |     var_20h = r0;
    0x00061b1a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00061b1c bne.w 0x61e48                                     |         goto label_39;
                                                                 |     }
                                                                 | label_13:
    0x00061b20 movs r3, 0                                        |     r3 = 0;
    0x00061b22 ldr r7, [sp, 0x24]                                |     r7 = x;
    0x00061b24 str r3, [sp]                                      |     *(sp) = r3;
    0x00061b26 movs r1, 0x8a                                     |     r1 = 0x8a;
    0x00061b28 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00061b2a mov r0, r7                                        |     r0 = r7;
    0x00061b2c ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00061b2e mov r3, r6                                        |     r3 = r6;
    0x00061b30 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061b34 ldr r3, [r7, 0x6c]                                |     r3 = *((r7 + 0x6c));
    0x00061b36 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00061b38 ble 0x61b4a                                       |         
    0x00061b3a ldr r2, [r7, 0x68]                                |         r2 = *((r7 + 0x68));
    0x00061b3c add.w r1, r3, r3, lsl 2                           |         r1 = r3 + (r3 << 2);
    0x00061b40 add.w r2, r2, r1, lsl 2                           |         r2 += (r1 << 2);
    0x00061b44 movs r1, 0x10                                     |         r1 = 0x10;
    0x00061b46 strh r1, [r2, -0x12]                              |         *((r2 - 0x12)) = r1;
                                                                 |     }
    0x00061b4a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
                                                                 |     if (r2 != 0) {
    0x00061b4c cbz r2, 0x61b66                                   |         
    0x00061b4e ldr r1, [sp, 0x24]                                |         r1 = x;
    0x00061b50 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00061b52 ldr r0, [r1, 0xc]                                 |         r0 = *((r1 + 0xc));
    0x00061b54 mvns r2, r2                                       |         r2 = ~r2;
    0x00061b56 ldrd r1, r7, [r0, 0x38]                           |         __asm ("ldrd r1, r7, [r0, 0x38]");
    0x00061b5a cmn r7, r1                                        |         
                                                                 |         if (r7 < r1) {
    0x00061b5c bmi.w 0x61e86                                     |             goto label_40;
                                                                 |         }
    0x00061b60 ldr r1, [r0, 0x40]                                |         r1 = *((r0 + 0x40));
    0x00061b62 str.w r3, [r1, r2, lsl 2]                         |         __asm ("str.w r3, [r1, r2, lsl 2]");
                                                                 |     }
                                                                 | label_18:
    0x00061b66 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00061b68 add r3, sl                                        |     r3 += sl;
    0x00061b6a ldrb.w r1, [r3, 0x2d]                             |     r1 = *((r3 + 0x2d));
    0x00061b6e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00061b70 ands r1, r1, 0x20                                 |     r1 &= 0x20;
    0x00061b74 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
                                                                 |     if (r1 == r1) {
    0x00061b76 beq 0x61c60                                       |         goto label_41;
                                                                 |     }
    0x00061b78 cmp r5, 0                                         |     
    0x00061b7a ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061b7c it lt                                             |     
                                                                 |     if (r5 >= 0) {
    0x00061b7e ldrlt r2, [sp, 0x24]                              |         r2 = x;
                                                                 |     }
    0x00061b80 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00061b82 it lt                                             |     
                                                                 |     if (r5 >= 0) {
    0x00061b84 ldrlt r5, [r2, 0x6c]                              |         r5 = *((r2 + 0x6c));
                                                                 |     }
    0x00061b86 ldr r2, [r0]                                      |     r2 = *(r0);
    0x00061b88 add r1, r8                                        |     r1 += r8;
    0x00061b8a it lt                                             |     
                                                                 |     if (r5 >= 0) {
    0x00061b8c addlt r5, r5, -1                                  |         r5 += -1;
                                                                 |     }
    0x00061b90 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00061b94 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00061b96 bne.w 0x61e78                                     |         goto label_42;
                                                                 |     }
    0x00061b9a ldr r2, [r0, 0x68]                                |     r2 = *((r0 + 0x68));
    0x00061b9c add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x00061ba0 add.w r2, r2, r5, lsl 2                           |     r2 += (r5 << 2);
                                                                 | label_16:
    0x00061ba4 str r1, [r2, 8]                                   |     *((r2 + 8)) = r1;
    0x00061ba6 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00061ba8 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00061baa ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x00061bac add r1, sl                                        |     r1 += sl;
    0x00061bae add.w r5, r1, 0x28                                |     r5 = r1 + 0x28;
    0x00061bb2 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00061bb4 ldr r2, [r1, 0x28]                                |     r2 = *((r1 + 0x28));
    0x00061bb6 str r2, [sp]                                      |     *(sp) = r2;
    0x00061bb8 mov r2, r4                                        |     r2 = r4;
    0x00061bba ldr.w r1, [fp, 8]                                 |     r1 = *(arg_88h);
    0x00061bbe ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x00061bc2 bl 0x108a4                                        |     fcn_000108a4 (r0, r1, r2, r3, r4, r5);
    0x00061bc6 ldr r7, [sp, 0x24]                                |     r7 = x;
    0x00061bc8 mov r1, r4                                        |     r1 = r4;
    0x00061bca mov r0, r7                                        |     r0 = r7;
    0x00061bcc bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00061bd0 ldrb r3, [r5, 5]                                  |     r3 = *((r5 + 5));
    0x00061bd2 ldr r1, [r7, 0x6c]                                |     r1 = *((r7 + 0x6c));
    0x00061bd4 bfc r3, 5, 1                                      |     value_3 = BIT_MASK (1, );
                                                                 |     value_3 = ~value_3;
                                                                 |     r3 &= value_3;
    0x00061bd8 strb r3, [r5, 5]                                  |     *((r5 + 5)) = r3;
    0x00061bda b 0x61c86                                         |     goto label_43;
                                                                 | label_25:
    0x00061bdc ldr.w r8, [r4]                                    |     r8 = *(r4);
    0x00061be0 mov r1, r5                                        |     r1 = r5;
    0x00061be2 mov r0, r8                                        |     r0 = r8;
    0x00061be4 bl 0x2d44c                                        |     r0 = fcn_0002d44c (r0, r1);
    0x00061be8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00061bea beq.w 0x61824                                     |         goto label_2;
                                                                 |     }
    0x00061bee cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00061bf2 beq 0x61c04                                       |         
    0x00061bf4 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00061bf6 mov r1, r8                                        |         r1 = r8;
    0x00061bf8 mov r2, r6                                        |         r2 = r6;
    0x00061bfa ldr r0, [r3]                                      |         r0 = *(r3);
    0x00061bfc mov r3, r6                                        |         r3 = r6;
    0x00061bfe bl 0x2dd00                                        |         r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x00061c02 mov r8, r0                                        |         r8 = r0;
                                                                 |     }
    0x00061c04 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00061c06 mov r2, r8                                        |     r2 = r8;
    0x00061c08 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00061c0a bl 0x2c1c4                                        |     fcn_0002c1c4 (r0, r1, r2, r3);
    0x00061c0e str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00061c10 b 0x61824                                         |     goto label_2;
                                                                 | label_27:
    0x00061c12 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00061c14 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00061c16 add.w sb, r3, 1                                   |     sb = r3 + 1;
    0x00061c1a ldr r0, [r1]                                      |     r0 = *(r1);
    0x00061c1c mov r2, sb                                        |     r2 = sb;
    0x00061c1e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00061c20 bl 0x1d8cc                                        |     r0 = fcn_0001d8cc (r0, r1, r2);
    0x00061c24 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00061c26 bne.w 0x61e80                                     |         goto label_44;
                                                                 |     }
    0x00061c2a ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00061c2c orr.w sl, r8, sl                                  |     sl = r8 | sl;
    0x00061c30 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00061c32 orr.w fp, r6, fp                                  |     
    0x00061c36 str.w sb, [sp, 0x20]                              |     __asm ("str.w sb, [var_20h]");
    0x00061c3a mov.w sb, 1                                       |     sb = 1;
    0x00061c3c lsrs r1, r0, 4                                    |     r1 = r0 >> 4;
    0x00061c3e ldr r3, [r1, 0x34]                                |     r3 = *((r1 + 0x34));
    0x00061c40 str.w r4, [r3, r2, lsl 2]                         |     __asm ("str.w r4, [r3, r2, lsl 2]");
    0x00061c44 b 0x61876                                         |     goto label_3;
                                                                 | label_26:
    0x00061c46 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x00061c48 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00061c4c mov.w r0, 0x11c                                   |     r0 = 0x11c;
    0x00061c50 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x00061c52 ldr.w r3, [r2, r3, lsl 2]                         |     offset_4 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_4));
    0x00061c56 ldr r2, [r1]                                      |     r2 = *(r1);
    0x00061c58 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00061c5a blx 0x9f00                                        |     fcn_00009f00 ();
    0x00061c5e b 0x61862                                         |     goto label_4;
                                                                 | label_41:
    0x00061c60 ldr r5, [sp, 0x24]                                |     r5 = x;
    0x00061c62 mov r2, r3                                        |     r2 = r3;
    0x00061c64 str r1, [sp]                                      |     *(sp) = r1;
    0x00061c66 adds r3, r4, 1                                    |     r3 = r4 + 1;
    0x00061c68 movs r1, 0x26                                     |     r1 = 0x26;
    0x00061c6a mov r0, r5                                        |     r0 = r5;
    0x00061c6c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061c70 ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00061c72 cmp r1, 0                                         |     
                                                                 |     if (r1 > 0) {
    0x00061c74 ble 0x61c86                                       |         
    0x00061c76 ldr r3, [r5, 0x68]                                |         r3 = *((r5 + 0x68));
    0x00061c78 add.w r2, r1, r1, lsl 2                           |         r2 = r1 + (r1 << 2);
    0x00061c7c add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00061c80 movs r2, 3                                        |         r2 = 3;
    0x00061c82 strh r2, [r3, -0x12]                              |         *((r3 - 0x12)) = r2;
                                                                 |     }
                                                                 | label_43:
    0x00061c86 ldr r3, [sp, 0x24]                                |     r3 = x;
    0x00061c88 cmp r4, 0                                         |     
    0x00061c8a it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00061c8c addlt r4, r1, -1                                  |         r4 = r1 + -1;
                                                                 |     }
    0x00061c90 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00061c92 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00061c96 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061c98 beq.w 0x61dea                                     |         goto label_45;
                                                                 |     }
    0x00061c9c ldr r2, [pc, 0x254]                               |     
    0x00061c9e add r2, pc                                        |     r2 = 0xc3b96;
    0x00061ca0 str r1, [r2, 0xc]                                 |     *((r2 + 0xc)) = r1;
    0x00061ca2 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00061ca4 bne.w 0x61e6e                                     |         goto label_46;
                                                                 |     }
                                                                 | label_10:
    0x00061ca8 ldr r3, [pc, 0x24c]                               |     
    0x00061caa add r3, pc                                        |     r3 = 0xc3ba6;
    0x00061cac adds r3, 4                                        |     r3 += 4;
                                                                 | label_11:
    0x00061cae str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
                                                                 | label_17:
    0x00061cb0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00061cb2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00061cb4 beq.w 0x61dd0                                     |         goto label_47;
                                                                 |     }
    0x00061cb8 ldr r2, [pc, 0x240]                               |     
    0x00061cba ldr r3, [pc, 0x224]                               |     r3 = *(0x61ee2);
    0x00061cbc add r2, pc                                        |     r2 = 0xc3bbc;
    0x00061cbe ldr r3, [r2, r3]                                  |     r3 = *(0xc3bbc);
    0x00061cc0 ldr r2, [r3]                                      |     r2 = *(0xc3bbc);
    0x00061cc2 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00061cc4 eors r2, r3                                       |     r2 ^= r3;
    0x00061cc6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00061cca bne.w 0x61ed8                                     |         goto label_48;
                                                                 |     }
    0x00061cce ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x00061cd2 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00061cd4 add sp, 0x5c                                      |     
    0x00061cd6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00061cda b.w 0x16c0c                                       |     void (*0x16c0c)() ();
                                                                 | label_35:
    0x00061cde cmp r5, r1                                        |     
    0x00061ce0 ldr r6, [r2, 0x24]                                |     r6 = *((r2 + 0x24));
                                                                 |     if (r5 >= r1) {
    0x00061ce2 bge.w 0x61eb8                                     |         goto label_49;
                                                                 |     }
    0x00061ce6 ldr r4, [sp, 0x24]                                |     r4 = x;
    0x00061ce8 add.w r2, r5, r5, lsl 2                           |     r2 = r5 + (r5 << 2);
    0x00061cec adds r0, r5, 1                                    |     r0 = r5 + 1;
    0x00061cee vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00061cf2 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00061cf4 movs r1, 0                                        |     r1 = 0;
    0x00061cf6 ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x00061cf8 str r0, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r0;
    0x00061cfa movs r0, 0x47                                     |     r0 = 0x47;
    0x00061cfc str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00061cfe add r3, r2                                        |     r3 += r2;
    0x00061d00 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00061d02 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00061d06 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_21:
    0x00061d0a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00061d0c mov r2, r6                                        |     r2 = r6;
    0x00061d0e ldr r4, [sp, 0x24]                                |     r4 = x;
    0x00061d10 movs r1, 0xa                                      |     r1 = 0xa;
    0x00061d12 add r3, sl                                        |     r3 += sl;
    0x00061d14 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00061d16 mov r0, r4                                        |     r0 = r4;
    0x00061d18 str r3, [sp]                                      |     *(sp) = r3;
    0x00061d1a movs r3, 0                                        |     r3 = 0;
    0x00061d1c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061d20 ldrd r4, r3, [r4, 0x6c]                           |     __asm ("ldrd r4, r3, [r4, 0x6c]");
    0x00061d24 cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x00061d26 bge.w 0x61ea6                                     |         goto label_50;
                                                                 |     }
    0x00061d2a ldr r7, [sp, 0x24]                                |     r7 = x;
    0x00061d2c add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x00061d30 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00061d32 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00061d34 movs r1, 0                                        |     r1 = 0;
    0x00061d36 ldr r0, [r7, 0x68]                                |     r0 = *((r7 + 0x68));
    0x00061d38 mov.w ip, 0xb                                     |     
    0x00061d3c str r2, [r7, 0x6c]                                |     *((r7 + 0x6c)) = r2;
    0x00061d3e adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x00061d40 strd r6, r1, [r2, 4]                              |     __asm ("strd r6, r1, [r2, 4]");
    0x00061d44 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x00061d48 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00061d4a str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
    0x00061d4e cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00061d50 bne.w 0x61ac4                                     |         goto label_5;
                                                                 |     }
                                                                 | label_37:
    0x00061d54 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00061d56 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00061d58 ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x00061d5c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00061d5e bne.w 0x61aee                                     |         goto label_6;
                                                                 |     }
                                                                 | label_38:
    0x00061d62 ldr.w r6, [fp, 0x2c]                              |     r6 = *(arg_2ch);
    0x00061d66 adds r6, 1                                        |     r6++;
    0x00061d68 str.w r6, [fp, 0x2c]                              |     __asm ("str.w r6, [arg_2ch]");
    0x00061d6c b 0x61afc                                         |     goto label_7;
                                                                 | label_33:
    0x00061d6e ldr r4, [sp, 0x34]                                |     r4 = var_34h;
    0x00061d70 ldrsh.w r3, [r4, 0x22]                            |     r3 = *((r4 + 0x22));
    0x00061d74 cmp r3, 0x3f                                      |     
                                                                 |     if (r3 <= 0x3f) {
    0x00061d76 ble.w 0x61a26                                     |         goto label_8;
                                                                 |     }
    0x00061d7a ldr r5, [pc, 0x184]                               |     
    0x00061d7c add.w r1, r6, r8, lsl 1                           |     r1 = r6 + (r8 << 1);
    0x00061d80 add.w r2, r0, r8, lsl 2                           |     r2 = r0 + (r8 << 2);
    0x00061d84 movs r3, 0x3f                                     |     r3 = 0x3f;
    0x00061d86 mov ip, r4                                        |     
    0x00061d88 add r5, pc                                        |     r5 = 0xc3c8e;
    0x00061d8a addw r5, r5, 0xeec                                |     __asm ("addw r5, r5, aav.0x000000ff");
                                                                 |     do {
    0x00061d8e strh r3, [r1], 2                                  |         *(r1) = r3;
                                                                 |         r1 += 2;
    0x00061d92 mov r7, r3                                        |         r7 = r3;
    0x00061d94 ldrsh.w r4, [ip, 0x22]                            |         r4 = *((ip + 0x22));
    0x00061d98 adds r3, 1                                        |         r3++;
    0x00061d9a str r5, [r2], 4                                   |         *(r2) = r5;
                                                                 |         r2 += 4;
    0x00061d9e cmp r4, r3                                        |         
    0x00061da0 bgt 0x61d8e                                       |         
                                                                 |     } while (r4 > r3);
    0x00061da2 sub.w r8, r8, 0x3e                                |     r8 -= 0x3e;
    0x00061da6 add r8, r7                                        |     r8 += r7;
    0x00061da8 lsl.w r7, r8, 1                                   |     r7 = r8 << 1;
    0x00061dac lsl.w r1, r8, 2                                   |     r1 = r8 << 2;
    0x00061db0 b 0x61a26                                         |     goto label_8;
                                                                 | label_34:
    0x00061db2 str r3, [sp]                                      |     *(sp) = r3;
    0x00061db4 movs r1, 0x4d                                     |     r1 = 0x4d;
    0x00061db6 ldr.w r3, [fp, 0x2c]                              |     r3 = *(arg_2ch);
    0x00061dba ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00061dbc ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061dbe adds r3, 1                                        |     r3++;
    0x00061dc0 str.w r3, [fp, 0x2c]                              |     __asm ("str.w r3, [arg_2ch]");
    0x00061dc4 str r3, [r2, 0x34]                                |     *((r2 + 0x34)) = r3;
    0x00061dc6 movw r2, 0x2710                                   |     r2 = 0x2710;
    0x00061dca bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00061dce b 0x61a6c                                         |     goto label_9;
                                                                 | label_47:
    0x00061dd0 ldr r2, [pc, 0x130]                               |     
    0x00061dd2 ldr r3, [pc, 0x10c]                               |     r3 = *(0x61ee2);
    0x00061dd4 add r2, pc                                        |     r2 = 0xc3cdc;
    0x00061dd6 ldr r3, [r2, r3]                                  |     r3 = *(0xc3cdc);
    0x00061dd8 ldr r2, [r3]                                      |     r2 = *(0xc3cdc);
    0x00061dda ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00061ddc eors r2, r3                                       |     r2 ^= r3;
    0x00061dde mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00061de2 bne 0x61ed8                                       |         goto label_48;
                                                                 |     }
    0x00061de4 add sp, 0x5c                                      |     
    0x00061de6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_45:
    0x00061dea ldr r2, [sp, 0x24]                                |     r2 = x;
    0x00061dec add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00061df0 ldr r2, [r2, 0x68]                                |     r2 = *((r2 + 0x68));
    0x00061df2 add.w r4, r2, r4, lsl 2                           |     r4 = r2 + (r4 << 2);
    0x00061df6 str r1, [r4, 8]                                   |     *((r4 + 8)) = r1;
                                                                 |     if (r6 == 0) {
    0x00061df8 cbz r6, 0x61e26                                   |         goto label_51;
                                                                 |     }
    0x00061dfa ldrb.w r0, [fp, 0x13]                             |     r0 = *(arg_13h);
    0x00061dfe cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x00061e00 bhi 0x61e26                                       |         goto label_51;
                                                                 |     }
                                                                 | label_15:
    0x00061e02 adds r2, r0, 1                                    |     r2 = r0 + 1;
    0x00061e04 adds r0, 0x26                                     |     r0 += 0x26;
    0x00061e06 strb.w r2, [fp, 0x13]                             |     *(arg_13h) = r2;
    0x00061e0a ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00061e0c str.w r6, [fp, r0, lsl 2]                         |     __asm ("str.w r6, [fp, r0, lsl 2]");
    0x00061e10 cmp r2, 0                                         |     
    0x00061e12 itt lt                                            |     
                                                                 |     if (r2 >= 0) {
    0x00061e14 addlt r2, r1, -1                                  |         r2 = r1 + -1;
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x00061e18 str r2, [sp, 0x40]                                |         var_40h = r2;
                                                                 |     }
    0x00061e1a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00061e1c bne.w 0x61ca8                                     |         goto label_10;
                                                                 |     }
    0x00061e20 ldr r3, [sp, 0x24]                                |     r3 = x;
    0x00061e22 ldr r2, [r3, 0x68]                                |     r2 = *((r3 + 0x68));
    0x00061e24 b 0x61e32                                         |     goto label_52;
                                                                 | label_51:
    0x00061e26 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00061e28 cmp r3, 0                                         |     
    0x00061e2a itt lt                                            |     
                                                                 |     if (r3 >= 0) {
    0x00061e2c addlt r3, r1, -1                                  |         r3 = r1 + -1;
                                                                 |     }
                                                                 |     if (r3 < 0) {
    0x00061e30 str r3, [sp, 0x40]                                |         var_40h = r3;
                                                                 |     }
                                                                 | label_52:
    0x00061e32 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00061e34 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00061e38 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x00061e3c b 0x61cae                                         |     goto label_11;
                                                                 | label_31:
    0x00061e3e ldr r3, [pc, 0xc8]                                |     
    0x00061e40 add r3, pc                                        |     r3 = 0xc3d4e;
    0x00061e42 addw r3, r3, 0xeec                                |     __asm ("addw r3, r3, aav.0x000000ff");
    0x00061e46 b 0x619ae                                         |     goto label_12;
                                                                 | label_39:
    0x00061e48 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00061e4a movs r1, 0xb4                                     |     r1 = 0xb4;
    0x00061e4c ldrh r3, [r3, 0x18]                               |     r3 = *((r3 + 0x18));
    0x00061e4e str r0, [sp]                                      |     *(sp) = r0;
    0x00061e50 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061e52 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00061e54 mov r3, sb                                        |     r3 = sb;
    0x00061e56 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00061e5a b 0x61b20                                         |     goto label_13;
                                                                 | label_23:
    0x00061e5c movs r3, 0                                        |     r3 = 0;
    0x00061e5e ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061e60 mov r2, r3                                        |     r2 = r3;
    0x00061e62 movs r1, 0xe                                      |     r1 = 0xe;
    0x00061e64 str r3, [sp]                                      |     *(sp) = r3;
    0x00061e66 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00061e6a str r0, [sp, 0x40]                                |     var_40h = r0;
    0x00061e6c b 0x617e4                                         |     goto label_14;
                                                                 | label_46:
    0x00061e6e ldrb.w r0, [fp, 0x13]                             |     r0 = *(arg_13h);
    0x00061e72 cmp r0, 7                                         |     
                                                                 |     if (r0 < 7) {
    0x00061e74 bls 0x61e02                                       |         goto label_15;
                                                                 |     }
    0x00061e76 b 0x61ca8                                         |     goto label_10;
                                                                 | label_42:
    0x00061e78 ldr r2, [pc, 0x90]                                |     
    0x00061e7a add r2, pc                                        |     r2 = 0xc3d8a;
    0x00061e7c adds r2, 4                                        |     r2 += 4;
    0x00061e7e b 0x61ba4                                         |     goto label_16;
                                                                 | label_44:
    0x00061e80 ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x00061e84 b 0x61cb0                                         |     goto label_17;
                                                                 | label_40:
    0x00061e86 ldr r1, [sp, 0x24]                                |     r1 = x;
    0x00061e88 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00061e8c b 0x61b66                                         |     goto label_18;
                                                                 | label_29:
    0x00061e8e movs r1, 0                                        |     r1 = 0;
    0x00061e90 mov r7, r1                                        |     r7 = r1;
    0x00061e92 mov r8, r1                                        |     r8 = r1;
    0x00061e94 b 0x619cc                                         |     goto label_19;
                                                                 | label_36:
    0x00061e96 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061e98 movs r1, 0x23                                     |     r1 = 0x23;
    0x00061e9a str r3, [sp]                                      |     *(sp) = r3;
    0x00061e9c mov r5, r3                                        |     r5 = r3;
    0x00061e9e bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00061ea2 mov r4, r0                                        |     r4 = r0;
    0x00061ea4 b 0x61abc                                         |     goto label_20;
                                                                 | label_50:
    0x00061ea6 movs r3, 0                                        |     r3 = 0;
    0x00061ea8 ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061eaa mov r2, r6                                        |     r2 = r6;
    0x00061eac movs r1, 0xb                                      |     r1 = 0xb;
    0x00061eae str r3, [sp]                                      |     *(sp) = r3;
    0x00061eb0 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00061eb4 mov r4, r0                                        |     r4 = r0;
    0x00061eb6 b 0x61abc                                         |     goto label_20;
                                                                 | label_49:
    0x00061eb8 movs r3, 0                                        |     r3 = 0;
    0x00061eba ldr r0, [sp, 0x24]                                |     r0 = x;
    0x00061ebc mov r2, r3                                        |     r2 = r3;
    0x00061ebe movs r1, 0x47                                     |     r1 = 0x47;
    0x00061ec0 str r3, [sp]                                      |     *(sp) = r3;
    0x00061ec2 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00061ec6 mov r5, r0                                        |     r5 = r0;
    0x00061ec8 b 0x61d0a                                         |     goto label_21;
                                                                 | label_24:
    0x00061eca movs r2, 0                                        |     r2 = 0;
    0x00061ecc mov.w ip, -1                                      |     
    0x00061ed0 mov r4, ip                                        |     r4 = ip;
    0x00061ed2 mov r3, r2                                        |     r3 = r2;
    0x00061ed4 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00061ed6 b 0x61890                                         |     goto label_22;
                                                                 | label_48:
    0x00061ed8 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00061edc bfi r0, lr, 0, 4                                  |     value_5 = BIT_MASK (0, 4);
                                                                 |     value_6 = lr & value_5;
                                                                 |     value_5 = ~value_5;
                                                                 |     r0 &= value_5;
                                                                 |     r0 |= value_6;
    0x00061ee0 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00061ee2 movs r0, r0                                       |     
    0x00061ee4 lsls r6, r0, 0xe                                  |     r6 = r0 << 0xe;
    0x00061ee6 movs r3, r0                                       |     r3 = r0;
    0x00061ee8 lsls r2, r3, 0xa                                  |     r2 = r3 << 0xa;
    0x00061eea movs r3, r0                                       |     r3 = r0;
    0x00061eec strh r6, [r6, r4]                                 |     *((r6 + r4)) = r6;
    0x00061eee movs r3, r0                                       |     r3 = r0;
    0x00061ef0 strh r6, [r3, r3]                                 |     *((r3 + r3)) = r6;
    0x00061ef2 movs r3, r0                                       |     r3 = r0;
    0x00061ef4 asrs r6, r0, 3                                    |     r6 = r0 >> 3;
    0x00061ef6 movs r4, r0                                       |     r4 = r0;
    0x00061ef8 asrs r2, r7, 2                                    |     r2 = r7 >> 2;
    0x00061efa movs r4, r0                                       |     r4 = r0;
    0x00061efc cdp p0, 4, c0, c4, c3, 0                          |     __asm ("cdp p0, 4, c0, c4, c3, 0");
    0x00061f00 ldr r7, [pc, 0x230]                               |     r7 = *(0x62134);
    0x00061f02 movs r3, r0                                       |     r3 = r0;
    0x00061f04 stc p0, c0, [ip, -0xc]!                           |     __asm ("stc p0, c0, [ip, -0xc]!");
    0x00061f08 ldr r6, [pc, 0x350]                               |     r6 = *(0x6225c);
    0x00061f0a movs r3, r0                                       |     r3 = r0;
    0x00061f0c lsrs r2, r5, 0x1b                                 |     r2 = r5 >> 0x1b;
    0x00061f0e movs r4, r0                                       |     r4 = r0;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x61f10).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x65224 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00065224 ()                                      | void fcn_00065224 (int16_t arg_4h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int32_t var_28h_2;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_74h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00065224 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00065228 sub sp, 0x7c                                      |     
    0x0006522a mov r6, r2                                        |     r6 = r2;
    0x0006522c str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0006522e mov sb, r1                                        |     sb = r1;
    0x00065230 mov sl, r0                                        |     sl = r0;
    0x00065232 ldr r2, [pc, 0x300]                               |     
    0x00065234 movs r1, 1                                        |     r1 = 1;
    0x00065236 ldr r3, [pc, 0x300]                               |     r3 = *(0x6553a);
    0x00065238 ldr r7, [r0, 4]                                   |     r7 = *((r0 + 4));
    0x0006523a add r2, pc                                        |     r2 = 0xca774;
    0x0006523c ldr r4, [r6, 0x38]                                |     r4 = *((r6 + 0x38));
    0x0006523e ldr r3, [r2, r3]                                  |     
    0x00065240 ldr.w r8, [r0]                                    |     r8 = *(r0);
    0x00065244 ldr r2, [pc, 0x2f4]                               |     
    0x00065246 ldr r3, [r3]                                      |     r3 = *(0xca774);
    0x00065248 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x0006524a mov.w r3, 0                                       |     r3 = 0;
    0x0006524e ldrb.w r3, [r6, 0x3c]                             |     r3 = *((r6 + 0x3c));
    0x00065252 str r4, [sp, 0x10]                                |     var_10h = r4;
    0x00065254 mov r0, r8                                        |     r0 = r8;
    0x00065256 ldr r4, [r6, 0x50]                                |     r4 = *((r6 + 0x50));
    0x00065258 add r2, pc                                        |     r2 = 0xca798;
    0x0006525a ldr.w r5, [r8, 8]                                 |     r5 = *((r8 + 8));
    0x0006525e lsls r6, r3, 6                                    |     r6 = r3 << 6;
    0x00065260 add.w r3, r7, r3, lsl 6                           |     r3 = r7 + (r3 << 6);
    0x00065264 str r7, [sp, 0x14]                                |     var_14h = r7;
    0x00065266 adds r3, 8                                        |     r3 += 8;
    0x00065268 str r4, [sp, 0x24]                                |     var_24h = r4;
    0x0006526a str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0006526c adds r3, r7, r6                                   |     r3 = r7 + r6;
    0x0006526e ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00065270 str r6, [sp, 0x18]                                |     var_18h = r6;
    0x00065272 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00065274 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00065278 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0006527c beq.w 0x65522                                     |         goto label_3;
                                                                 |     }
    0x00065280 add.w r4, sb, sb, lsl 1                           |     r4 = sb + (sb << 1);
    0x00065284 mov.w fp, 0                                       |     
    0x00065288 mov r6, sl                                        |     r6 = sl;
    0x0006528a add.w sb, sl, r4, lsl 5                           |     sb = sl + (r4 << 5);
    0x0006528e mov r7, fp                                        |     r7 = fp;
    0x00065290 mov r4, fp                                        |     r4 = fp;
    0x00065292 b 0x6529a                                         |     
                                                                 |     while (r2 == 0) {
    0x00065294 adds r6, 0x60                                     |         r6 += 0x60;
    0x00065296 cmp sb, r6                                        |         
                                                                 |         if (sb == r6) {
    0x00065298 beq 0x652d2                                       |             goto label_2;
                                                                 |         }
                                                                 | label_0:
    0x0006529a ldr.w r3, [r6, 0x350]                             |         r3 = *((r6 + 0x350));
    0x0006529e mov r0, r5                                        |         r0 = r5;
    0x000652a0 ldr.w r2, [r6, 0x304]                             |         r2 = *((r6 + 0x304));
    0x000652a4 ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x000652a6 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000652a8 str r4, [sp]                                      |         *(sp) = r4;
    0x000652aa orr.w fp, fp, r1                                  |         
    0x000652ae movs r1, 0x88                                     |         r1 = 0x88;
    0x000652b0 orrs r7, r3                                       |         r7 |= r3;
    0x000652b2 movs r3, 0                                        |         r3 = 0;
    0x000652b4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000652b8 ldr.w r2, [r6, 0x308]                             |         r2 = *((r6 + 0x308));
    0x000652bc cmp r2, 0                                         |         
    0x000652be beq 0x65294                                       |         
                                                                 |     }
    0x000652c0 movs r3, 0                                        |     r3 = 0;
    0x000652c2 movs r1, 0x88                                     |     r1 = 0x88;
    0x000652c4 mov r0, r5                                        |     r0 = r5;
    0x000652c6 adds r6, 0x60                                     |     r6 += 0x60;
    0x000652c8 str r4, [sp]                                      |     *(sp) = r4;
    0x000652ca bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000652ce cmp sb, r6                                        |     
                                                                 |     if (sb != r6) {
    0x000652d0 bne 0x6529a                                       |         goto label_0;
                                                                 |     }
                                                                 | label_2:
    0x000652d2 ldrd r3, r2, [sp, 0x14]                           |     __asm ("ldrd r3, r2, [var_14h]");
    0x000652d6 add r3, r2                                        |     r3 += r2;
    0x000652d8 ldrb.w sb, [r3, 0x2c]                             |     sb = *((r3 + 0x2c));
    0x000652dc ands sb, sb, 0x40                                 |     sb &= 0x40;
    0x000652e0 it ne                                             |     
                                                                 |     if (sb == sb) {
    0x000652e2 movne sb, 0                                       |         sb = 0;
                                                                 |     }
                                                                 |     if (sb != sb) {
    0x000652e6 bne 0x65362                                       |         goto label_4;
                                                                 |     }
    0x000652e8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000652ea ldr.w r0, [sl, 0x64]                              |     r0 = *((sl + 0x64));
    0x000652ee ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x000652f0 cmp r0, 0                                         |     
    0x000652f2 orr.w r4, fp, r3                                  |     r4 = fp | r3;
    0x000652f6 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000652f8 orr.w r7, r7, r3                                  |     r7 |= r3;
                                                                 |     if (r0 <= 0) {
    0x000652fc ble 0x65362                                       |         goto label_4;
                                                                 |     }
    0x000652fe mvns r3, r7                                       |     r3 = ~r7;
    0x00065300 movw fp, 0x8002                                   |     
    0x00065304 str r5, [sp, 0x24]                                |     var_24h = r5;
    0x00065306 mov r6, sb                                        |     r6 = sb;
    0x00065308 mvns r4, r4                                       |     r4 = ~r4;
    0x0006530a movt fp, 0xffff                                   |     fp = 0xffff8002;
    0x0006530e mov r7, sb                                        |     r7 = sb;
    0x00065310 mov r5, r3                                        |     r5 = r3;
                                                                 |     do {
    0x00065312 ldr.w r3, [sl, 0x70]                              |         r3 = *((sl + 0x70));
    0x00065316 add r3, r6                                        |         r3 += r6;
    0x00065318 ldrh r2, [r3, 0xa]                                |         r2 = *((r3 + 0xa));
    0x0006531a tst.w fp, r2                                      |         
                                                                 |         if ((fp & r2) != 0) {
    0x0006531e beq 0x65328                                       |             
    0x00065320 ldrh r2, [r3, 0xc]                                |             r2 = *((r3 + 0xc));
    0x00065322 cmp.w r2, 0x2000                                  |             
    0x00065324 ldrsh r0, [r0, r4]                                |             r0 = *((r0 + r4));
                                                                 |             if (r2 != 0x2000) {
    0x00065326 bne 0x65360                                       |                 goto label_5;
                                                                 |             }
                                                                 |         }
    0x00065328 ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x0006532a ldr r1, [r3, 0x2c]                                |         r1 = *((r3 + 0x2c));
    0x0006532c ands r2, r4                                       |         r2 &= r4;
    0x0006532e ands r1, r5                                       |         r1 &= r5;
    0x00065330 orrs r2, r1                                       |         r2 |= r1;
                                                                 |         if (r2 == r1) {
    0x00065332 bne 0x65358                                       |             
    0x00065334 ldr r1, [r3]                                      |             r1 = *(r3);
    0x00065336 ldr r3, [r1, 4]                                   |             r3 = *((r1 + 4));
    0x00065338 ands r3, r3, 3                                    |             r3 &= 3;
                                                                 |             if (r3 != r3) {
    0x0006533c bne 0x65358                                       |                 goto label_6;
                                                                 |             }
    0x0006533e mov r2, r3                                        |             r2 = r3;
    0x00065340 ldr.w r0, [r8]                                    |             r0 = *(r8);
    0x00065344 bl 0x2dd00                                        |             fcn_0002dd00 (r0, r1, r2, r3);
    0x00065348 mov r1, sb                                        |             r1 = sb;
    0x0006534a mov r2, r0                                        |             r2 = r0;
    0x0006534c mov r0, r8                                        |             r0 = r8;
    0x0006534e bl 0x2c1c4                                        |             r0 = fcn_0002c1c4 (r0, r1, r2, r3);
    0x00065352 mov sb, r0                                        |             sb = r0;
    0x00065354 ldr.w r0, [sl, 0x64]                              |             r0 = *((sl + 0x64));
                                                                 |         }
                                                                 | label_6:
    0x00065358 adds r7, 1                                        |         r7++;
    0x0006535a adds r6, 0x30                                     |         r6 += 0x30;
    0x0006535c cmp r0, r7                                        |         
    0x0006535e bgt 0x65312                                       |         
                                                                 |     } while (r0 > r7);
                                                                 | label_5:
    0x00065360 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
                                                                 | label_4:
    0x00065362 ldr.w ip, [sp, 0x1c]                              |     ip = var_1ch;
    0x00065366 add r6, sp, 0x30                                  |     r6 += var_30h;
    0x00065368 movs r3, 1                                        |     r3 = 1;
    0x0006536a strd r3, r3, [sp, 0x28]                           |     __asm ("strd r3, r3, [var_28h]");
    0x0006536e add.w r7, ip, 0x40                                |     r7 = ip + 0x40;
                                                                 |     do {
    0x00065372 ldr.w r0, [ip]                                    |         r0 = *(ip);
    0x00065376 add.w ip, ip, 0x10                                |         
    0x0006537a ldr r1, [ip, -0xc]                                |         r1 = *((ip - 0xc));
    0x0006537e mov r4, r6                                        |         r4 = r6;
    0x00065380 ldr r2, [ip, -0x8]                                |         r2 = *((ip - 0x8));
    0x00065384 adds r6, 0x10                                     |         r6 += 0x10;
    0x00065386 ldr r3, [ip, -0x4]                                |         r3 = *((ip - 0x4));
    0x0006538a cmp ip, r7                                        |         
    0x0006538c stm r4!, {r0, r1, r2, r3}                         |         *(r4!) = r0;
                                                                 |         *((r4! + 4)) = r1;
                                                                 |         *((r4! + 8)) = r2;
                                                                 |         *((r4! + 12)) = r3;
    0x0006538e bne 0x65372                                       |         
                                                                 |     } while (ip != r7);
    0x00065390 movs r3, 0                                        |     r3 = 0;
    0x00065392 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x00065394 mov r0, r8                                        |     r0 = r8;
    0x00065396 strb.w r3, [sp, 0x54]                             |     var_54h = r3;
    0x0006539a ldrb.w r2, [r8, 0x1a]                             |     r2 = *((r8 + 0x1a));
    0x0006539e adds r2, 1                                        |     r2++;
    0x000653a0 strb.w r2, [r8, 0x1a]                             |     *((r8 + 0x1a)) = r2;
    0x000653a4 mov.w r2, 0x1000                                  |     r2 = 0x1000;
    0x000653a8 str r2, [sp, 8]                                   |     var_8h = r2;
    0x000653aa mov r2, sb                                        |     r2 = sb;
    0x000653ac str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000653ae strd r3, r3, [sp]                                 |     __asm ("strd r3, r3, [sp]");
    0x000653b2 bl 0x61f10                                        |     r0 = fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x000653b6 mov r7, r0                                        |     r7 = r0;
    0x000653b8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000653ba beq 0x654b0                                       |         goto label_7;
                                                                 |     }
    0x000653bc ldrd r3, r2, [sp, 0x14]                           |     __asm ("ldrd r3, r2, [var_14h]");
    0x000653c0 ldr.w r6, [r8, 0x2c]                              |     r6 = *((r8 + 0x2c));
    0x000653c4 ldr r0, [r0, 0x20]                                |     r0 = *((r0 + 0x20));
    0x000653c6 add r3, r2                                        |     r3 += r2;
    0x000653c8 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000653ca ldr r1, [r3, 0x18]                                |     r1 = *((r3 + 0x18));
    0x000653cc adds r6, 1                                        |     r6++;
    0x000653ce str r0, [sp, 0x14]                                |     var_14h = r0;
    0x000653d0 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x000653d2 ldr r3, [r1, 0x1c]                                |     r3 = *((r1 + 0x1c));
    0x000653d4 str.w r6, [r8, 0x2c]                              |     __asm ("str.w r6, [r8, 0x2c]");
    0x000653d8 ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 == r3) {
    0x000653dc beq 0x65442                                       |         goto label_8;
                                                                 |     }
    0x000653de ldr.w fp, [r1, 8]                                 |     fp = *((r1 + 8));
    0x000653e2 mov r0, fp                                        |     r0 = fp;
    0x000653e4 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x000653e8 bne 0x653f4                                       |         goto label_9;
                                                                 |     }
    0x000653ea b 0x6552c                                         |     goto label_10;
                                                                 |     do {
    0x000653ec ldr r0, [r0, 0x14]                                |         r0 = *((r0 + 0x14));
    0x000653ee cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000653f0 beq.w 0x6552c                                     |             goto label_10;
                                                                 |         }
                                                                 | label_9:
    0x000653f4 ldrb.w r3, [r0, 0x37]                             |         r3 = *((r0 + 0x37));
    0x000653f8 and r3, r3, 3                                     |         r3 &= 3;
    0x000653fc cmp r3, 2                                         |         
    0x000653fe bne 0x653ec                                       |         
                                                                 |     } while (r3 != 2);
    0x00065400 ldrh.w sl, [r0, 0x32]                             |     sl = *((r0 + 0x32));
    0x00065404 mov fp, r0                                        |     
    0x00065406 add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x0006540a add r3, r6                                        |     r3 += r6;
    0x0006540c str.w r3, [r8, 0x2c]                              |     __asm ("str.w r3, [r8, 0x2c]");
    0x00065410 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00065414 beq 0x65452                                       |         goto label_11;
                                                                 |     }
    0x00065416 strd sb, r8, [sp, 0x18]                           |     __asm ("strd sb, r8, [var_1ch]");
    0x0006541a movs r4, 0                                        |     r4 = 0;
    0x0006541c mov r8, r2                                        |     r8 = r2;
    0x0006541e mov sb, r1                                        |     sb = r1;
                                                                 |     do {
    0x00065420 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
    0x00065424 adds r2, r6, r4                                   |         r2 = r6 + r4;
    0x00065426 mov r1, sb                                        |         r1 = sb;
    0x00065428 mov r0, r5                                        |         r0 = r5;
    0x0006542a ldrsh.w r3, [r3, r4, lsl 1]                       |         offset_0 = r4 << 1;
                                                                 |         r3 = *((r3 + offset_0));
    0x0006542e adds r4, 1                                        |         r4++;
    0x00065430 str r2, [sp]                                      |         *(sp) = r2;
    0x00065432 mov r2, r8                                        |         r2 = r8;
    0x00065434 bl 0x5b0d4                                        |         fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x00065438 cmp sl, r4                                        |         
    0x0006543a bne 0x65420                                       |         
                                                                 |     } while (sl != r4);
    0x0006543c ldrd sb, r8, [sp, 0x18]                           |     __asm ("ldrd sb, r8, [var_1ch]");
    0x00065440 b 0x65452                                         |     goto label_11;
                                                                 | label_8:
    0x00065442 mov.w sl, 1                                       |     sl = 1;
    0x00065446 str r3, [sp]                                      |     *(sp) = r3;
    0x00065448 movs r1, 0x87                                     |     r1 = 0x87;
    0x0006544a mov r3, r6                                        |     r3 = r6;
    0x0006544c mov r0, r5                                        |     r0 = r5;
    0x0006544e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_11:
    0x00065452 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00065454 movs r1, 0x3f                                     |     r1 = 0x3f;
    0x00065456 mov r0, r5                                        |     r0 = r5;
    0x00065458 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0006545a movs r3, 0                                        |     r3 = 0;
    0x0006545c strd r6, sl, [sp]                                 |     __asm ("strd r6, sl, [sp]");
    0x00065460 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00065464 ldrd r2, r3, [sp, 0x10]                           |     __asm ("ldrd r2, r3, [var_10h]");
    0x00065468 mov r4, r0                                        |     r4 = r0;
    0x0006546a movs r1, 0x1c                                     |     r1 = 0x1c;
    0x0006546c mov r0, r5                                        |     r0 = r5;
    0x0006546e ldr r2, [r2]                                      |     r2 = *(r2);
    0x00065470 strd r6, sl, [sp]                                 |     __asm ("strd r6, sl, [sp]");
    0x00065474 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00065478 ldr r3, [r5]                                      |     r3 = *(r5);
    0x0006547a cmp r4, 0                                         |     
    0x0006547c ldr r2, [r5, 0x6c]                                |     r2 = *((r5 + 0x6c));
    0x0006547e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00065482 it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00065484 addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x00065488 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006548a bne 0x6551a                                       |         goto label_12;
                                                                 |     }
    0x0006548c ldr r3, [r5, 0x68]                                |     r3 = *((r5 + 0x68));
    0x0006548e add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00065492 add.w r3, r3, r4, lsl 2                           |     r3 += (r4 << 2);
                                                                 | label_1:
    0x00065496 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00065498 movs r1, 0                                        |     r1 = 0;
    0x0006549a ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0006549c mov r0, r5                                        |     r0 = r5;
    0x0006549e ldrd r2, r3, [r2, 8]                              |     __asm ("ldrd r2, r3, [r2, 8]");
    0x000654a0 movs r3, 2                                        |     r3 = 2;
    0x000654a2 str r1, [sp]                                      |     *(sp) = r1;
    0x000654a4 movs r1, 9                                        |     r1 = 9;
    0x000654a6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000654aa mov r0, r7                                        |     r0 = r7;
    0x000654ac bl 0x6554c                                        |     fcn_0006554c (r0, r1);
                                                                 | label_7:
    0x000654b0 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x000654b4 beq 0x654c0                                       |         
    0x000654b6 ldr.w r0, [r8]                                    |         r0 = *(r8);
    0x000654ba mov r1, sb                                        |         r1 = sb;
    0x000654bc bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
                                                                 |     }
    0x000654c0 ldr.w r3, [r8, 0xdc]                              |     r3 = *((r8 + 0xdc));
    0x000654c4 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x000654c8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000654ca beq 0x654ea                                       |         goto label_13;
                                                                 |     }
    0x000654cc ldr r1, [r2]                                      |     r1 = *(r2);
    0x000654ce it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x000654d0 ldrlt r3, [r2, 0x6c]                              |         r3 = *((r2 + 0x6c));
                                                                 |     }
    0x000654d2 ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
    0x000654d6 it lt                                             |     
                                                                 |     if (r3 >= 0) {
    0x000654d8 addlt r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x000654dc cbnz r1, 0x65512                                  |         goto label_14;
                                                                 |     }
    0x000654de ldr r2, [r2, 0x68]                                |     r2 = *((r2 + 0x68));
    0x000654e0 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x000654e4 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
                                                                 |     do {
    0x000654e8 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
                                                                 | label_13:
    0x000654ea ldrb.w r2, [r8, 0x1a]                             |         r2 = *((r8 + 0x1a));
    0x000654ee str.w r3, [r8, 0xdc]                              |         __asm ("str.w r3, [r8, 0xdc]");
    0x000654f2 subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x000654f4 ldr r2, [pc, 0x48]                                |         
    0x000654f6 strb.w r3, [r8, 0x1a]                             |         *((r8 + 0x1a)) = r3;
    0x000654fa ldr r3, [pc, 0x3c]                                |         r3 = *(0x6553a);
    0x000654fc add r2, pc                                        |         r2 = 0xcaa40;
    0x000654fe ldr r3, [r2, r3]                                  |         r3 = *(0xcaa40);
    0x00065500 ldr r2, [r3]                                      |         r2 = *(0xcaa40);
    0x00065502 ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x00065504 eors r2, r3                                       |         r2 ^= r3;
    0x00065506 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0006550a bne 0x65528                                       |             goto label_15;
                                                                 |         }
    0x0006550c add sp, 0x7c                                      |         
    0x0006550e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_14:
    0x00065512 ldr r3, [pc, 0x30]                                |         
    0x00065514 add r3, pc                                        |         r3 = 0xcaa5e;
    0x00065516 adds r3, 4                                        |         r3 += 4;
    0x00065518 b 0x654e8                                         |         
                                                                 |     } while (1);
                                                                 | label_12:
    0x0006551a ldr r3, [pc, 0x2c]                                |     
    0x0006551c add r3, pc                                        |     r3 = 0xcaa6a;
    0x0006551e adds r3, 4                                        |     r3 += 4;
    0x00065520 b 0x65496                                         |     goto label_1;
                                                                 | label_3:
    0x00065522 mov fp, sb                                        |     
    0x00065524 mov r7, sb                                        |     r7 = sb;
    0x00065526 b 0x652d2                                         |     goto label_2;
                                                                 | label_15:
    0x00065528 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_10:
    0x0006552c movs r3, 0                                        |     r3 = 0;
    0x0006552e ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x00065530 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x6554c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0006554c ()                                      | void fcn_0006554c (int16_t arg1, uint32_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int32_t var_2ch_2;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0006554c push {r0, r1, fp, sp, lr}                         |     
    0x00065550 ldr r7, [pc, 0x3c0]                               |     r7 = *(0x65914);
    0x00065552 sub sp, 0x3c                                      |     
    0x00065554 ldrb.w r4, [r0, 0x30]                             |     r4 = *((r0 + 0x30));
    0x00065558 mov sb, r0                                        |     sb = r0;
    0x0006555a ldr.w sl, [r3, 8]                                 |     sl = *((r3 + 8));
    0x0006555e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00065560 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00065562 ldr.w fp, [r0, 4]                                 |     fp = *((r0 + 4));
    0x00065566 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00065568 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x0006556c str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006556e cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00065570 beq.w 0x65e04                                     |         goto label_39;
                                                                 |     }
    0x00065574 ldr.w r3, [pc, 0x8d4]                             |     
    0x00065578 add.w r8, r4, -1                                  |     r8 = r4 + -1;
    0x0006557c ldr.w r2, [pc, 0x8d0]                             |     r2 = *(0x00065e50);
    0x00065580 add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x00065584 str.w fp, [sp, 0x24]                              |     __asm ("str.w fp, [var_24h]");
    0x00065588 add r3, pc                                        |     r3 = 0xcb3d8;
    0x0006558a add.w r4, r0, r4, lsl 5                           |     r4 = r0 + (r4 << 5);
    0x0006558e add r2, pc                                        |     r2 += pc;
    0x00065590 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00065592 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00065594 adds r3, 4                                        |     r3 += 4;
    0x00065596 movs r2, 0                                        |     r2 = 0;
    0x00065598 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0006559a mov fp, r2                                        |     
    0x0006559c b 0x65664                                         |     
                                                                 |     while (r3 != 0xb8) {
    0x0006559e ldrb.w r3, [sb, 0x33]                             |         r3 = *((sb + 0x33));
    0x000655a2 cmp r3, 2                                         |         
                                                                 |         if (r3 == 2) {
    0x000655a4 beq.w 0x6595a                                     |             goto label_40;
                                                                 |         }
                                                                 | label_6:
    0x000655a8 movs r5, 0                                        |         r5 = 0;
                                                                 | label_7:
    0x000655aa ldr.w r2, [r4, 0x2b8]                             |         r2 = *((r4 + 0x2b8));
    0x000655ae cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x000655b0 bne.w 0x65a5a                                     |             goto label_41;
                                                                 |         }
                                                                 | label_8:
    0x000655b4 ldrb.w r0, [r4, 0x2de]                            |         r0 = *((r4 + 0x2de));
    0x000655b8 ldrd r2, r3, [r4, 0x2e0]                          |         __asm ("ldrd r2, r3, aav.0x000000ff");
    0x000655bc ldrb.w r1, [r4, 0x2dd]                            |         r1 = *((r4 + 0x2dd));
    0x000655c0 str r0, [sp]                                      |         *(sp) = r0;
    0x000655c2 mov r0, sl                                        |         r0 = sl;
    0x000655c4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000655c8 ldr.w r3, [sl, 0x6c]                              |         r3 = *((sl + 0x6c));
    0x000655cc cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x000655ce ble 0x655e4                                       |             
    0x000655d0 ldr.w r2, [sl, 0x68]                              |             r2 = *((sl + 0x68));
    0x000655d4 add.w r1, r3, r3, lsl 2                           |             r1 = r3 + (r3 << 2);
    0x000655d8 add.w r2, r2, r1, lsl 2                           |             r2 += (r1 << 2);
    0x000655dc ldrb.w r1, [r4, 0x2df]                            |             r1 = *((r4 + 0x2df));
    0x000655e0 strh r1, [r2, -0x12]                              |             *((r2 - 0x12)) = r1;
                                                                 |         }
    0x000655e4 ldr.w r2, [r4, 0x2c4]                             |         r2 = *((r4 + 0x2c4));
    0x000655e8 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x000655ea bne.w 0x659fa                                     |             goto label_42;
                                                                 |         }
    0x000655ee cmp r5, 0                                         |         
    0x000655f0 ldr.w r0, [sl, 0xc]                               |         r0 = *((sl + 0xc));
                                                                 |         if (r5 != 0) {
    0x000655f4 bne.w 0x65a34                                     |             goto label_43;
                                                                 |         }
                                                                 | label_0:
    0x000655f8 ldr r3, [r7, 0x28]                                |         r3 = *((r7 + 0x28));
    0x000655fa lsls r5, r3, 0x14                                 |         r5 = r3 << 0x14;
                                                                 |         if (r5 < r3) {
    0x000655fc bpl 0x65608                                       |             
    0x000655fe ldr.w r3, [r4, 0x2e8]                             |             r3 = *((r4 + 0x2e8));
    0x00065602 cmp r3, 0                                         |             
                                                                 |             if (r3 > 0) {
    0x00065604 bgt.w 0x65b10                                     |                 goto label_44;
                                                                 |             }
                                                                 |         }
                                                                 | label_22:
    0x00065608 ldrd r3, r1, [r0, 0x38]                           |         __asm ("ldrd r3, r1, [r0, 0x38]");
    0x0006560c ldr.w r2, [r4, 0x2ac]                             |         r2 = *((r4 + 0x2ac));
    0x00065610 cmn r1, r3                                        |         
    0x00065612 mvn.w r2, r2                                      |         r2 = ~r2;
                                                                 |         if (r1 < r3) {
    0x00065616 bmi.w 0x65952                                     |             goto label_45;
                                                                 |         }
    0x0006561a ldr r3, [r0, 0x40]                                |         r3 = *((r0 + 0x40));
    0x0006561c ldr.w r1, [sl, 0x6c]                              |         r1 = *((sl + 0x6c));
    0x00065620 str.w r1, [r3, r2, lsl 2]                         |         __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_5:
    0x00065624 ldr.w r3, [r4, 0x2d8]                             |         r3 = *((r4 + 0x2d8));
                                                                 |         if (r3 != 0) {
    0x00065628 cbz r3, 0x6563a                                   |             
    0x0006562a ldr r2, [r3, 8]                                   |             r2 = *((r3 + 8));
    0x0006562c movs r3, 1                                        |             r3 = 1;
    0x0006562e str r3, [sp]                                      |             *(sp) = r3;
    0x00065630 movs r1, 0x43                                     |             r1 = 0x43;
    0x00065632 movs r3, 0                                        |             r3 = 0;
    0x00065634 mov r0, sl                                        |             r0 = sl;
    0x00065636 bl 0x29ac4                                        |             fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |         }
    0x0006563a ldr.w r3, [r4, 0x2b4]                             |         r3 = *((r4 + 0x2b4));
    0x0006563e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00065640 bne.w 0x658e4                                     |             goto label_46;
                                                                 |         }
                                                                 | label_4:
    0x00065644 ldr.w r3, [r4, 0x2d0]                             |         r3 = *((r4 + 0x2d0));
    0x00065648 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0006564a bne.w 0x658d0                                     |             goto label_47;
                                                                 |         }
                                                                 | label_3:
    0x0006564e ldr.w r2, [r4, 0x2a0]                             |         r2 = *((r4 + 0x2a0));
    0x00065652 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00065654 bne 0x656da                                       |             goto label_48;
                                                                 |         }
    0x00065656 add.w r8, r8, -1                                  |         r8 += -1;
    0x0006565a subs r4, 0x60                                     |         r4 -= 0x60;
    0x0006565c cmp.w r8, -1                                      |         
                                                                 |         if (r8 == -1) {
    0x00065660 beq.w 0x657d8                                     |             goto label_49;
                                                                 |         }
                                                                 | label_1:
    0x00065664 ldr.w r5, [r4, 0x2d8]                             |         r5 = *((r4 + 0x2d8));
                                                                 |         if (r5 != 0) {
    0x00065668 cbz r5, 0x656a8                                   |             
    0x0006566a ldr.w r0, [sl, 0xc]                               |             r0 = *((sl + 0xc));
    0x0006566e ldr.w r2, [r4, 0x2b8]                             |             r2 = *((r4 + 0x2b8));
    0x00065672 ldrd r3, r1, [r0, 0x38]                           |             __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00065676 mvns r2, r2                                       |             r2 = ~r2;
    0x00065678 cmn r1, r3                                        |             
                                                                 |             if (r1 < r3) {
    0x0006567a bmi.w 0x65a90                                     |                 goto label_50;
                                                                 |             }
    0x0006567e ldr r3, [r0, 0x40]                                |             r3 = *((r0 + 0x40));
    0x00065680 ldr.w r1, [sl, 0x6c]                              |             r1 = *((sl + 0x6c));
    0x00065684 str.w r1, [r3, r2, lsl 2]                         |             __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_13:
    0x00065688 ldr.w r1, [sl, 0x6c]                              |             r1 = *((sl + 0x6c));
    0x0006568c movs r0, 0                                        |             r0 = 0;
    0x0006568e ldrd r2, r3, [r5, 8]                              |             __asm ("ldrd r2, r3, [r5, 8]");
    0x00065692 add.w fp, fp, 1                                   |             
    0x00065696 str.w r0, [r4, 0x2b8]                             |             __asm ("str.w r0, aav.0x000000ff");
    0x0006569a mov r0, sl                                        |             r0 = sl;
    0x0006569c str r1, [r5, 0x10]                                |             *((r5 + 0x10)) = r1;
    0x0006569e movs r1, 1                                        |             r1 = 1;
    0x000656a0 str r1, [sp]                                      |             *(sp) = r1;
    0x000656a2 movs r1, 0x43                                     |             r1 = 0x43;
    0x000656a4 bl 0x29ac4                                        |             fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |         }
    0x000656a8 ldrb.w r3, [r4, 0x2dd]                            |         r3 = *((r4 + 0x2dd));
    0x000656ac ldr.w r7, [r4, 0x2f0]                             |         r7 = *((r4 + 0x2f0));
    0x000656b0 cmp r3, 0xb8                                      |         
    0x000656b2 bne.w 0x6559e                                     |         
                                                                 |     }
    0x000656b6 ldr.w r2, [r4, 0x2b8]                             |     r2 = *((r4 + 0x2b8));
    0x000656ba ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x000656be cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000656c0 beq 0x655f8                                       |         goto label_0;
                                                                 |     }
    0x000656c2 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x000656c6 mvns r2, r2                                       |     r2 = ~r2;
    0x000656c8 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x000656ca bmi.w 0x65dc2                                     |         goto label_51;
                                                                 |     }
    0x000656ce ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x000656d2 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x000656d4 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x000656d8 b 0x655f8                                         |     goto label_0;
                                                                 | label_48:
    0x000656da ldrd r5, r3, [sl, 0x6c]                           |     __asm ("ldrd r5, r3, [sl, 0x6c]");
    0x000656de ldr r6, [r7, 0x28]                                |     r6 = *((r7 + 0x28));
    0x000656e0 cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x000656e2 bge.w 0x65cfe                                     |         goto label_52;
                                                                 |     }
    0x000656e6 ldr.w r0, [sl, 0x68]                              |     r0 = *((sl + 0x68));
    0x000656ea add.w r3, r5, r5, lsl 2                           |     r3 = r5 + (r5 << 2);
    0x000656ee adds r7, r5, 1                                    |     r7 = r5 + 1;
    0x000656f0 str.w r7, [sl, 0x6c]                              |     __asm ("str.w r7, [sl, 0x6c]");
    0x000656f4 movs r1, 0                                        |     r1 = 0;
    0x000656f6 movs r7, 0x31                                     |     r7 = 0x31;
    0x000656f8 add.w ip, r0, r3, lsl 2                           |     
    0x000656fc strd r2, r1, [ip, 4]                              |     __asm ("strd r2, r1, [ip, 4]");
    0x00065700 strd r1, r1, [ip, 0xc]                            |     __asm ("strd r1, r1, [ip, 0xc]");
    0x00065704 str.w r7, [r0, r3, lsl 2]                         |     __asm ("str.w r7, [r0, r3, lsl 2]");
                                                                 | label_26:
    0x00065708 ands r3, r6, 0x40                                 |     r3 = r6 & 0x40;
                                                                 |     if (r3 == r6) {
    0x0006570c beq.w 0x65b00                                     |         goto label_53;
                                                                 |     }
                                                                 | label_19:
    0x00065710 lsls r1, r6, 0x16                                 |     r1 = r6 << 0x16;
    0x00065712 and r3, r6, 0x2000                                |     r3 = r6 & 0x2000;
                                                                 |     if (r1 < r6) {
    0x00065716 bmi.w 0x65a7e                                     |         goto label_54;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0006571a cbz r3, 0x65768                                   |         goto label_55;
                                                                 |     }
    0x0006571c ldr.w r6, [r4, 0x2e8]                             |     r6 = *((r4 + 0x2e8));
                                                                 |     if (r6 == 0) {
    0x00065720 cbz r6, 0x65768                                   |         goto label_55;
                                                                 |     }
                                                                 | label_11:
    0x00065722 ldr r0, [r6, 0x18]                                |     r0 = *((r6 + 0x18));
    0x00065724 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00065726 beq.w 0x65e3a                                     |         goto label_56;
                                                                 |     }
    0x0006572a ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0006572c movs r1, 0                                        |     r1 = 0;
    0x0006572e ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00065730 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00065732 cmp r0, r2                                        |     
                                                                 |     if (r0 == r2) {
    0x00065734 beq 0x65740                                       |         goto label_38;
                                                                 |     }
                                                                 |     do {
    0x00065736 ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
    0x00065738 adds r3, 0x10                                     |         r3 += 0x10;
    0x0006573a adds r1, 1                                        |         r1++;
    0x0006573c cmp r0, r2                                        |         
    0x0006573e bne 0x65736                                       |         
                                                                 |     } while (r0 != r2);
                                                                 | label_38:
    0x00065740 ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x00065742 mov r0, sl                                        |     r0 = sl;
    0x00065744 ldr.w r2, [r4, 0x2a8]                             |     r2 = *((r4 + 0x2a8));
    0x00065748 str r1, [sp]                                      |     *(sp) = r1;
    0x0006574a movs r1, 0x65                                     |     r1 = 0x65;
    0x0006574c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00065750 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00065752 mov r1, r6                                        |     r1 = r6;
    0x00065754 bl 0x27dcc                                        |     fcn_00027dcc (r0, r1);
                                                                 | label_10:
    0x00065758 movs r3, 0                                        |     r3 = 0;
    0x0006575a ldr.w r2, [r4, 0x2a8]                             |     r2 = *((r4 + 0x2a8));
    0x0006575e movs r1, 0x88                                     |     r1 = 0x88;
    0x00065760 mov r0, sl                                        |     r0 = sl;
    0x00065762 str r3, [sp]                                      |     *(sp) = r3;
    0x00065764 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_55:
    0x00065768 ldrb.w r2, [r4, 0x2dd]                            |     r2 = *((r4 + 0x2dd));
    0x0006576c ldr.w r3, [r4, 0x2bc]                             |     r3 = *((r4 + 0x2bc));
    0x00065770 cmp r2, 0x43                                      |     
                                                                 |     if (r2 == 0x43) {
    0x00065772 beq.w 0x65aae                                     |         goto label_57;
                                                                 |     }
    0x00065776 ldrd r2, r1, [sl, 0x6c]                           |     __asm ("ldrd r2, r1, [sl, 0x6c]");
    0x0006577a cmp r2, r1                                        |     
                                                                 |     if (r2 >= r1) {
    0x0006577c bge.w 0x65d52                                     |         goto label_58;
                                                                 |     }
    0x00065780 ldr.w r6, [sl, 0x68]                              |     r6 = *((sl + 0x68));
    0x00065784 add.w r7, r2, r2, lsl 2                           |     r7 = r2 + (r2 << 2);
    0x00065788 movs r0, 0                                        |     r0 = 0;
    0x0006578a adds r2, 1                                        |     r2++;
    0x0006578c mov.w ip, 8                                       |     
    0x00065790 str.w r2, [sl, 0x6c]                              |     __asm ("str.w r2, [sl, 0x6c]");
    0x00065794 add.w r1, r6, r7, lsl 2                           |     r1 = r6 + (r7 << 2);
    0x00065798 strd r3, r0, [r1, 8]                              |     __asm ("strd r3, r0, [r1, 8]");
    0x0006579c str r0, [r1, 0x10]                                |     *((r1 + 0x10)) = r0;
    0x0006579e str.w ip, [r6, r7, lsl 2]                         |     __asm ("str.w ip, [r6, r7, lsl 2]");
    0x000657a2 str r0, [r1, 4]                                   |     *((r1 + 4)) = r0;
                                                                 | label_15:
    0x000657a4 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000657a8 cmp r5, 0                                         |     
    0x000657aa it lt                                             |     
                                                                 |     if (r5 >= 0) {
    0x000657ac addlt r5, r2, -1                                  |         r5 = r2 + -1;
                                                                 |     }
    0x000657b0 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x000657b4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000657b6 bne.w 0x65a8a                                     |         goto label_59;
                                                                 |     }
    0x000657ba ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x000657be add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x000657c2 add.w r3, r3, r5, lsl 2                           |     r3 += (r5 << 2);
                                                                 | label_12:
    0x000657c6 add.w r8, r8, -1                                  |     r8 += -1;
    0x000657ca str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x000657cc cmp.w r8, -1                                      |     
    0x000657d0 sub.w r4, r4, 0x60                                |     r4 -= 0x60;
                                                                 |     if (r8 != -1) {
    0x000657d4 bne.w 0x65664                                     |         goto label_1;
                                                                 |     }
                                                                 | label_49:
    0x000657d8 ldr.w r1, [sb, 0x44]                              |     r1 = *((sb + 0x44));
    0x000657dc str.w fp, [sp, 0xc]                               |     __asm ("str.w fp, [var_ch]");
    0x000657e0 ldr.w fp, [sp, 0x24]                              |     fp = var_24h;
                                                                 |     if (r1 == 0) {
    0x000657e4 cbz r1, 0x65832                                   |         goto label_60;
                                                                 |     }
                                                                 | label_2:
    0x000657e6 ldrd r0, r2, [r1]                                 |     __asm ("ldrd r0, r2, [r1]");
    0x000657ea add.w r3, r1, 8                                   |     r3 = r1 + 8;
    0x000657ee add.w r7, r1, 0x38                                |     r7 = r1 + 0x38;
    0x000657f2 str.w r0, [sb, 0x44]                              |     __asm ("str.w r0, [sb, 0x44]");
                                                                 |     do {
    0x000657f6 ldr r6, [r3]                                      |         r6 = *(r3);
    0x000657f8 adds r3, 0x10                                     |         r3 += 0x10;
    0x000657fa ldr r5, [r3, -0xc]                                |         r5 = *((r3 - 0xc));
    0x000657fe adds r2, 0x10                                     |         r2 += 0x10;
    0x00065800 ldr r4, [r3, -0x8]                                |         r4 = *((r3 - 0x8));
    0x00065804 ldr r0, [r3, -0x4]                                |         r0 = *((r3 - 0x4));
    0x00065808 cmp r3, r7                                        |         
    0x0006580a str r6, [r2, -0x10]                               |         *((r2 - 0x10)) = r6;
    0x0006580e str r5, [r2, -0xc]                                |         *((r2 - 0xc)) = r5;
    0x00065812 str r4, [r2, -0x8]                                |         *((r2 - 0x8)) = r4;
    0x00065816 str r0, [r2, -0x4]                                |         *((r2 - 0x4)) = r0;
    0x0006581a bne 0x657f6                                       |         
                                                                 |     } while (r3 != r7);
    0x0006581c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0006581e str r3, [r2]                                      |     *(r2) = r3;
    0x00065820 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00065824 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00065826 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006582a ldr.w r1, [sb, 0x44]                              |     r1 = *((sb + 0x44));
    0x0006582e cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00065830 bne 0x657e6                                       |         goto label_2;
                                                                 |     }
                                                                 | label_60:
    0x00065832 ldrb.w r1, [sb, 0x30]                             |     r1 = *((sb + 0x30));
    0x00065836 add.w r4, sb, 0x300                               |     r4 = sb + 0x300;
    0x0006583a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006583c beq.w 0x65e34                                     |         goto label_61;
                                                                 |     }
    0x00065840 ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x00065842 movs r5, 0                                        |     r5 = 0;
    0x00065844 mov r8, sl                                        |     r8 = sl;
                                                                 |     do {
    0x00065846 ldrb.w r3, [r4, 0x3c]                             |         r3 = *((r4 + 0x3c));
    0x0006584a ldr r2, [r4, 0x38]                                |         r2 = *((r4 + 0x38));
    0x0006584c ldr r0, [r4, 0x50]                                |         r0 = *((r4 + 0x50));
    0x0006584e add.w r3, fp, r3, lsl 6                           |         r3 = fp + (r3 << 6);
    0x00065852 ldr r6, [r3, 0x18]                                |         r6 = *((r3 + 0x18));
    0x00065854 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00065856 bne.w 0x65ac4                                     |             goto label_62;
                                                                 |         }
    0x0006585a ldrb.w ip, [r3, 0x2d]                             |         ip = *((r3 + 0x2d));
    0x0006585e tst.w ip, 0x20                                    |         
                                                                 |         if ((ip & 0x20) != 0) {
    0x00065862 bne.w 0x65ae0                                     |             goto label_63;
                                                                 |         }
    0x00065866 ldr r3, [r0, 0x28]                                |         r3 = *((r0 + 0x28));
    0x00065868 tst.w r3, 0x240                                   |         
                                                                 |         if ((r3 & 0x240) == 0) {
    0x0006586c beq.w 0x65ad4                                     |             goto label_64;
                                                                 |         }
    0x00065870 ldr.w ip, [r0, 0x20]                              |         ip = *((r0 + 0x20));
                                                                 | label_17:
    0x00065874 cmp.w ip, 0                                       |         
                                                                 |         if (ip != 0) {
    0x00065878 beq 0x65886                                       |             
    0x0006587a ldr r3, [sp, 8]                                   |             r3 = var_8h;
    0x0006587c ldrb.w r3, [r3, 0x57]                             |             r3 = *((r3 + 0x57));
    0x00065880 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x00065882 beq.w 0x65c78                                     |                 goto label_65;
                                                                 |             }
                                                                 |         }
                                                                 | label_16:
    0x00065886 adds r5, 1                                        |         r5++;
    0x00065888 adds r4, 0x60                                     |         r4 += 0x60;
    0x0006588a cmp r1, r5                                        |         
    0x0006588c bgt 0x65846                                       |         
                                                                 |     } while (r1 > r5);
    0x0006588e ldrb.w r4, [sp, 0xc]                              |     r4 = var_ch;
    0x00065892 mov sl, r8                                        |     sl = r8;
                                                                 | label_37:
    0x00065894 ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00065898 ldr.w r2, [sb, 0x24]                              |     r2 = *((sb + 0x24));
    0x0006589c ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x000658a0 mvns r2, r2                                       |     r2 = ~r2;
    0x000658a2 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x000658a4 bmi.w 0x65dba                                     |         goto label_66;
                                                                 |     }
    0x000658a8 ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x000658ac ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x000658ae str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_33:
    0x000658b2 ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x000658b4 mov r1, sb                                        |     r1 = sb;
    0x000658b6 ldr.w r3, [sb, 0x28]                              |     r3 = *((sb + 0x28));
    0x000658ba ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x000658bc str.w r3, [r5, 0x88]                              |     __asm ("str.w r3, [r5, 0x88]");
    0x000658c0 bl 0x17004                                        |     fcn_00017004 (r0, r1);
    0x000658c4 ldrb r3, [r5, 0x1a]                               |     r3 = *((r5 + 0x1a));
    0x000658c6 subs r3, r3, r4                                   |     r3 -= r4;
    0x000658c8 strb r3, [r5, 0x1a]                               |     *((r5 + 0x1a)) = r3;
    0x000658ca add sp, 0x3c                                      |     
    0x000658cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_47:
    0x000658d0 ldr.w r2, [r4, 0x2cc]                             |     r2 = *((r4 + 0x2cc));
    0x000658d4 movs r1, 0                                        |     r1 = 0;
    0x000658d6 str r1, [sp]                                      |     *(sp) = r1;
    0x000658d8 mov r0, sl                                        |     r0 = sl;
    0x000658da movs r1, 0x3c                                     |     r1 = 0x3c;
    0x000658dc lsrs r2, r2, 1                                    |     r2 >>= 1;
    0x000658de bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000658e2 b 0x6564e                                         |     goto label_3;
                                                                 | label_46:
    0x000658e4 ldrd r2, r1, [sl, 0x6c]                           |     __asm ("ldrd r2, r1, [sl, 0x6c]");
    0x000658e8 cmp r2, r1                                        |     
                                                                 |     if (r2 >= r1) {
    0x000658ea bge.w 0x65d0e                                     |         goto label_67;
                                                                 |     }
    0x000658ee ldr.w r5, [sl, 0x68]                              |     r5 = *((sl + 0x68));
    0x000658f2 add.w r6, r2, r2, lsl 2                           |     r6 = r2 + (r2 << 2);
    0x000658f6 movs r0, 0                                        |     r0 = 0;
    0x000658f8 adds r2, 1                                        |     r2++;
    0x000658fa mov.w ip, 8                                       |     
    0x000658fe str.w r2, [sl, 0x6c]                              |     __asm ("str.w r2, [sl, 0x6c]");
    0x00065902 add.w r1, r5, r6, lsl 2                           |     r1 = r5 + (r6 << 2);
    0x00065906 strd r3, r0, [r1, 8]                              |     __asm ("strd r3, r0, [r1, 8]");
    0x0006590a str r0, [r1, 0x10]                                |     *((r1 + 0x10)) = r0;
    0x0006590c str.w ip, [r5, r6, lsl 2]                         |     __asm ("str.w ip, [r5, r6, lsl 2]");
    0x00065910 str r0, [r1, 4]                                   |     *((r1 + 4)) = r0;
                                                                 | label_27:
    0x00065912 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00065916 cmp r3, 0                                         |     
    0x00065918 ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
                                                                 |     if (r3 < 0) {
    0x0006591c blt.w 0x65a98                                     |         goto label_68;
                                                                 |     }
    0x00065920 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00065922 bne.w 0x65a76                                     |         goto label_14;
                                                                 |     }
    0x00065926 add.w r0, r3, r3, lsl 2                           |     r0 = r3 + (r3 << 2);
    0x0006592a ldr.w r1, [sl, 0x68]                              |     r1 = *((sl + 0x68));
    0x0006592e cmp r3, 1                                         |     
    0x00065930 lsl.w r0, r0, 2                                   |     r0 <<= 2;
    0x00065934 it le                                             |     
                                                                 |     if (r3 > 1) {
    0x00065936 addle r3, r2, -1                                  |         r3 = r2 + -1;
                                                                 |     }
    0x0006593a add.w r5, r1, r0                                  |     r5 = r1 + r0;
    0x0006593e itt le                                            |     
                                                                 |     if (r3 > 1) {
    0x00065940 movle r0, 0x14                                    |         r0 = 0x14;
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x00065942 mlale r3, r0, r3, r1                              |         __asm ("mlale r3, r0, r3, r1");
                                                                 |     }
    0x00065946 str r2, [r5, 8]                                   |     *((r5 + 8)) = r2;
    0x00065948 itt gt                                            |     
                                                                 |     if (r3 <= 1) {
    0x0006594a subgt r0, 0x28                                    |         r0 -= 0x28;
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x0006594c addgt r3, r1, r0                                  |         r3 = r1 + r0;
                                                                 |     }
                                                                 | label_9:
    0x0006594e str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00065950 b 0x65644                                         |     goto label_4;
                                                                 | label_45:
    0x00065952 mov r1, sl                                        |     r1 = sl;
    0x00065954 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00065958 b 0x65624                                         |     goto label_5;
                                                                 | label_40:
    0x0006595a ldrb.w r3, [sb, 0x30]                             |     r3 = *((sb + 0x30));
    0x0006595e subs r3, 1                                        |     r3--;
    0x00065960 cmp r3, r8                                        |     
                                                                 |     if (r3 != r8) {
    0x00065962 bne.w 0x655a8                                     |         goto label_6;
                                                                 |     }
    0x00065966 ldr r5, [r7, 0x28]                                |     r5 = *((r7 + 0x28));
    0x00065968 ands r5, r5, 0x200                                |     r5 &= 0x200;
                                                                 |     if (r5 == r5) {
    0x0006596c beq.w 0x655aa                                     |         goto label_7;
                                                                 |     }
    0x00065970 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00065972 ldrsb.w r2, [r3, 0x37]                            |     r2 = *((r3 + 0x37));
    0x00065976 cmp r2, 0                                         |     
                                                                 |     if (r2 >= 0) {
    0x00065978 bge.w 0x655a8                                     |         goto label_6;
                                                                 |     }
    0x0006597c ldrh r5, [r7, 0x1e]                               |     r5 = *((r7 + 0x1e));
    0x0006597e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00065980 beq.w 0x655aa                                     |         goto label_7;
                                                                 |     }
    0x00065984 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00065986 ldrsh.w r3, [r3, r5, lsl 1]                       |     offset_0 = r5 << 1;
                                                                 |     r3 = *((r3 + offset_0));
    0x0006598a cmp r3, 0x23                                      |     
                                                                 |     if (r3 <= 0x23) {
    0x0006598c ble.w 0x655a8                                     |         goto label_6;
                                                                 |     }
    0x00065990 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00065992 movs r6, 0                                        |     r6 = 0;
    0x00065994 str r7, [sp, 0xc]                                 |     var_ch = r7;
    0x00065996 mov r7, r6                                        |     r7 = r6;
    0x00065998 ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x0006599a adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x0006599c mov r6, r1                                        |     r6 = r1;
                                                                 |     do {
    0x0006599e adds r1, r6, r7                                   |         r1 = r6 + r7;
    0x000659a0 ldr.w r2, [r4, 0x2a8]                             |         r2 = *((r4 + 0x2a8));
    0x000659a4 mov r3, r7                                        |         r3 = r7;
    0x000659a6 str r1, [sp]                                      |         *(sp) = r1;
    0x000659a8 mov r0, sl                                        |         r0 = sl;
    0x000659aa movs r1, 0x5e                                     |         r1 = 0x5e;
    0x000659ac bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000659b0 mov r2, r7                                        |         r2 = r7;
    0x000659b2 adds r7, 1                                        |         r7++;
    0x000659b4 cmp r5, r7                                        |         
    0x000659b6 bne 0x6599e                                       |         
                                                                 |     } while (r5 != r7);
    0x000659b8 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x000659ba mov r3, r2                                        |     r3 = r2;
    0x000659bc adds r3, 2                                        |     r3 += 2;
    0x000659be mov r1, r6                                        |     r1 = r6;
    0x000659c0 ldr r7, [sp, 0xc]                                 |     r7 = var_ch;
    0x000659c2 ldr r2, [r0, 0x2c]                                |     r2 = *((r0 + 0x2c));
    0x000659c4 add r2, r3                                        |     r2 += r3;
    0x000659c6 ldrb.w r3, [r4, 0x2dd]                            |     r3 = *((r4 + 0x2dd));
    0x000659ca str r2, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r2;
    0x000659cc mov r0, sl                                        |     r0 = sl;
    0x000659ce ldr.w r2, [r4, 0x2a8]                             |     r2 = *((r4 + 0x2a8));
    0x000659d2 cmp r3, 0x25                                      |     
    0x000659d4 strd r6, r5, [sp]                                 |     __asm ("strd r6, r5, [sp]");
    0x000659d8 ite ne                                            |     
                                                                 |     if (r3 == 0x25) {
    0x000659da movne r1, 0x17                                    |         r1 = 0x17;
                                                                 |     }
                                                                 |     if (r3 != 0x25) {
    0x000659dc moveq r1, 0x14                                    |         r1 = 0x14;
                                                                 |     }
    0x000659de movs r3, 0                                        |     r3 = 0;
    0x000659e0 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x000659e4 movs r2, 0                                        |     r2 = 0;
    0x000659e6 ldr.w r3, [r4, 0x2e4]                             |     r3 = *((r4 + 0x2e4));
    0x000659ea mov r5, r0                                        |     r5 = r0;
    0x000659ec str r2, [sp]                                      |     *(sp) = r2;
    0x000659ee movs r1, 8                                        |     r1 = 8;
    0x000659f0 movs r2, 1                                        |     r2 = 1;
    0x000659f2 mov r0, sl                                        |     r0 = sl;
    0x000659f4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000659f8 b 0x655aa                                         |     goto label_7;
                                                                 | label_42:
    0x000659fa ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x000659fe ldr.w r2, [r4, 0x2c8]                             |     r2 = *((r4 + 0x2c8));
    0x00065a02 ldrd r1, r6, [r0, 0x38]                           |     __asm ("ldrd r1, r6, [r0, 0x38]");
    0x00065a06 mvns r2, r2                                       |     r2 = ~r2;
    0x00065a08 cmn r6, r1                                        |     
                                                                 |     if (r6 < r1) {
    0x00065a0a bmi.w 0x65d4a                                     |         goto label_69;
                                                                 |     }
    0x00065a0c strh r6, [r3, 0xc]                                |     *((r3 + 0xc)) = r6;
    0x00065a0e ldr r1, [r0, 0x40]                                |     r1 = *((r0 + 0x40));
    0x00065a10 str.w r3, [r1, r2, lsl 2]                         |     __asm ("str.w r3, [r1, r2, lsl 2]");
                                                                 | label_31:
    0x00065a14 ldr.w r3, [r4, 0x2e4]                             |     r3 = *((r4 + 0x2e4));
    0x00065a18 movs r1, 0                                        |     r1 = 0;
    0x00065a1a ldr.w r2, [r4, 0x2c4]                             |     r2 = *((r4 + 0x2c4));
    0x00065a1e mov r0, sl                                        |     r0 = sl;
    0x00065a20 str r1, [sp]                                      |     *(sp) = r1;
    0x00065a22 movs r1, 0x3c                                     |     r1 = 0x3c;
    0x00065a24 subs r3, 1                                        |     r3--;
    0x00065a26 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00065a2a cmp r5, 0                                         |     
    0x00065a2c ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
                                                                 |     if (r5 == 0) {
    0x00065a30 beq.w 0x655f8                                     |         goto label_0;
                                                                 |     }
                                                                 | label_43:
    0x00065a34 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00065a38 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x00065a3c ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00065a40 it lt                                             |     
                                                                 |     if (r5 >= 0) {
    0x00065a42 addlt r5, r2, -1                                  |         r5 = r2 + -1;
                                                                 |     }
    0x00065a46 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00065a48 bne 0x65af8                                       |         goto label_70;
                                                                 |     }
    0x00065a4a ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x00065a4e add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x00065a52 add.w r3, r3, r5, lsl 2                           |     r3 += (r5 << 2);
                                                                 | label_18:
    0x00065a56 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00065a58 b 0x655f8                                         |     goto label_0;
                                                                 | label_41:
    0x00065a5a ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00065a5e mvns r2, r2                                       |     r2 = ~r2;
    0x00065a60 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00065a64 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00065a66 bmi.w 0x65d42                                     |         goto label_71;
                                                                 |     }
    0x00065a6a ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00065a6c ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x00065a70 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x00065a74 b 0x655b4                                         |     goto label_8;
                                                                 | label_14:
    0x00065a76 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00065a78 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x00065a7a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00065a7c b 0x6594e                                         |     goto label_9;
                                                                 | label_54:
    0x00065a7e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00065a80 beq.w 0x65758                                     |         goto label_10;
                                                                 |     }
    0x00065a84 ldr.w r6, [r4, 0x2e8]                             |     r6 = *((r4 + 0x2e8));
    0x00065a88 b 0x65722                                         |     goto label_11;
                                                                 | label_59:
    0x00065a8a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00065a8c adds r3, 4                                        |     r3 += 4;
    0x00065a8e b 0x657c6                                         |     goto label_12;
                                                                 | label_50:
    0x00065a90 mov r1, sl                                        |     r1 = sl;
    0x00065a92 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00065a96 b 0x65688                                         |     goto label_13;
                                                                 | label_68:
    0x00065a98 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00065a9a bne 0x65a76                                       |         goto label_14;
                                                                 |     }
    0x00065a9c ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x00065aa0 subs r1, r2, 1                                    |     r1 = r2 - 1;
    0x00065aa2 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x00065aa6 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
    0x00065aaa str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00065aac b 0x6594e                                         |     goto label_9;
                                                                 | label_57:
    0x00065aae movs r1, 0                                        |     r1 = 0;
    0x00065ab0 ldr.w r2, [r4, 0x2e0]                             |     r2 = *((r4 + 0x2e0));
    0x00065ab4 mov r0, sl                                        |     r0 = sl;
    0x00065ab6 str r1, [sp]                                      |     *(sp) = r1;
    0x00065ab8 movs r1, 9                                        |     r1 = 9;
    0x00065aba bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00065abe ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x00065ac2 b 0x657a4                                         |     goto label_15;
                                                                 | label_62:
    0x00065ac4 mov r1, r5                                        |     r1 = r5;
    0x00065ac6 mov r2, r4                                        |     r2 = r4;
    0x00065ac8 mov r0, sb                                        |     r0 = sb;
    0x00065aca bl 0x65224                                        |     fcn_00065224 (r0, r1, r2, r3);
    0x00065ace ldrb.w r1, [sb, 0x30]                             |     r1 = *((sb + 0x30));
    0x00065ad2 b 0x65886                                         |     goto label_16;
                                                                 | label_64:
    0x00065ad4 lsls r2, r3, 0x12                                 |     r2 = r3 << 0x12;
                                                                 |     if (r2 >= r3) {
    0x00065ad6 bpl.w 0x65886                                     |         goto label_16;
                                                                 |     }
    0x00065ada ldr.w ip, [r4, 0x48]                              |     ip = *((r4 + 0x48));
    0x00065ade b 0x65874                                         |     goto label_17;
                                                                 | label_63:
    0x00065ae0 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x00065ae2 ldr r0, [r7]                                      |     r0 = *(r7);
    0x00065ae4 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00065ae6 ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x00065ae8 str r3, [sp]                                      |     *(sp) = r3;
    0x00065aea ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00065aec ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00065aee bl 0x108a4                                        |     fcn_000108a4 (r0, r1, r2, r3, r4, r5);
    0x00065af2 ldrb.w r1, [sb, 0x30]                             |     r1 = *((sb + 0x30));
    0x00065af6 b 0x65886                                         |     goto label_16;
                                                                 | label_70:
    0x00065af8 ldr r3, [pc, 0x358]                               |     
    0x00065afa add r3, pc                                        |     r3 = 0xcb952;
    0x00065afc adds r3, 4                                        |     r3 += 4;
    0x00065afe b 0x65a56                                         |     goto label_18;
                                                                 | label_53:
    0x00065b00 ldr.w r2, [r4, 0x2a4]                             |     r2 = *((r4 + 0x2a4));
    0x00065b04 movs r1, 0x88                                     |     r1 = 0x88;
    0x00065b06 mov r0, sl                                        |     r0 = sl;
    0x00065b08 str r3, [sp]                                      |     *(sp) = r3;
    0x00065b0a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00065b0e b 0x65710                                         |     goto label_19;
                                                                 | label_44:
    0x00065b10 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00065b14 ldr.w r2, [r4, 0x2b0]                             |     r2 = *((r4 + 0x2b0));
    0x00065b18 cmn r1, r3                                        |     
    0x00065b1a mvn.w r2, r2                                      |     r2 = ~r2;
                                                                 |     if (r1 < r3) {
    0x00065b1e bmi.w 0x65dd6                                     |         goto label_72;
                                                                 |     }
    0x00065b22 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00065b24 ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x00065b28 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_35:
    0x00065b2c ldrd r6, r5, [r4, 0x2e8]                          |     __asm ("ldrd r6, r5, aav.0x000000ff");
    0x00065b30 cmp r6, 0                                         |     
    0x00065b32 add.w r3, r6, r6, lsl 2                           |     r3 = r6 + (r6 << 2);
    0x00065b36 lsl.w r3, r3, 2                                   |     r3 <<= 2;
                                                                 |     if (r6 <= 0) {
    0x00065b3a ble 0x65c0a                                       |         goto label_73;
                                                                 |     }
    0x00065b3c subs r3, 0x28                                     |     r3 -= 0x28;
    0x00065b3e str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [var_28h]");
    0x00065b42 add r5, r3                                        |     r5 += r3;
    0x00065b44 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00065b48 mov.w ip, 0x400                                   |     
    0x00065b4c strd r8, sb, [sp, 0x2c]                           |     __asm ("strd r8, sb, [var_2ch]");
    0x00065b50 movt ip, 4                                        |     
    0x00065b54 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x00065b58 ldrb.w r0, [r3, 0x57]                             |     r0 = *((r3 + 0x57));
    0x00065b5c mov fp, ip                                        |     
    0x00065b5e ldr r3, [pc, 0x2f8]                               |     
    0x00065b60 str r7, [sp, 0x14]                                |     var_14h = r7;
    0x00065b62 add r3, pc                                        |     r3 = 0xcb9c0;
    0x00065b64 adds r1, r3, 4                                    |     r1 = r3 + 4;
    0x00065b66 ldr r3, [pc, 0x2f4]                               |     
    0x00065b68 mov sb, r1                                        |     sb = r1;
    0x00065b6a add r3, pc                                        |     r3 = 0xcb9cc;
    0x00065b6c adds r3, 4                                        |     r3 += 4;
    0x00065b6e str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00065b70 b 0x65be2                                         |     
                                                                 |     while (r0 == 0) {
    0x00065b72 ldr.w r7, [sl, 0x68]                              |         r7 = *((sl + 0x68));
    0x00065b76 add.w r1, r1, r1, lsl 2                           |         r1 += (r1 << 2);
    0x00065b7a add.w r1, r7, r1, lsl 2                           |         r1 = r7 + (r1 << 2);
                                                                 | label_20:
    0x00065b7e str r2, [r1, 8]                                   |         *((r1 + 8)) = r2;
    0x00065b80 ldrb.w r1, [r5, 0x24]                             |         r1 = *((r5 + 0x24));
    0x00065b84 cmp r1, 0xb8                                      |         
                                                                 |         if (r1 != 0xb8) {
    0x00065b86 beq 0x65bc2                                       |             
    0x00065b88 ldr r0, [r5, 0x20]                                |             r0 = *((r5 + 0x20));
                                                                 |             if (r0 != 0) {
    0x00065b8a cbz r0, 0x65ba8                                   |                 
    0x00065b8c ldr r1, [sp, 0x14]                                |                 r1 = var_14h;
    0x00065b8e ldr.w r3, [r4, 0x2a0]                             |                 r3 = *((r4 + 0x2a0));
    0x00065b92 ldr r1, [r1, 0x28]                                |                 r1 = *((r1 + 0x28));
    0x00065b94 and.w r8, fp, r1                                  |                 r8 = fp & r1;
    0x00065b98 cmp r3, 0                                         |                 
                                                                 |                 if (r3 != 0) {
    0x00065b9a bne 0x65c10                                       |                     goto label_74;
                                                                 |                 }
    0x00065b9c cmp.w r8, 0x40000                                 |                 
                                                                 |                 if (r8 == 0x40000) {
    0x00065ba0 beq 0x65c2e                                       |                     goto label_75;
                                                                 |                 }
                                                                 | label_23:
    0x00065ba2 ldrb.w r1, [r5, 0x24]                             |                 r1 = *((r5 + 0x24));
    0x00065ba6 ldr r3, [r5, 0x18]                                |                 r3 = *((r5 + 0x18));
                                                                 |             }
                                                                 | label_24:
    0x00065ba8 movs r0, 0                                        |             r0 = 0;
    0x00065baa ldr r2, [r5, 0x14]                                |             r2 = *((r5 + 0x14));
    0x00065bac str r0, [sp]                                      |             *(sp) = r0;
    0x00065bae mov r0, sl                                        |             r0 = sl;
    0x00065bb0 bl 0x29ac4                                        |             fcn_00029ac4 (r0, r1, r2, r3);
    0x00065bb4 ldr.w r3, [sl]                                    |             r3 = *(sl);
    0x00065bb8 ldr.w r2, [sl, 0x6c]                              |             r2 = *((sl + 0x6c));
    0x00065bbc ldrb.w r0, [r3, 0x57]                             |             r0 = *((r3 + 0x57));
    0x00065bc0 ldr r3, [r5, 0x18]                                |             r3 = *((r5 + 0x18));
                                                                 |         }
    0x00065bc2 subs r3, 1                                        |         r3--;
    0x00065bc4 it mi                                             |         
                                                                 |         if (r3 >= 1) {
    0x00065bc6 addmi r3, r2, -1                                  |             r3 = r2 + -1;
                                                                 |         }
                                                                 |         if (r0 != 0) {
    0x00065bca cbnz r0, 0x65bf4                                  |             goto label_76;
                                                                 |         }
    0x00065bcc ldr.w r1, [sl, 0x68]                              |         r1 = *((sl + 0x68));
    0x00065bd0 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00065bd4 subs r6, 1                                        |         r6--;
    0x00065bd6 sub.w r5, r5, 0x14                                |         r5 -= 0x14;
    0x00065bda add.w r3, r1, r3, lsl 2                           |         r3 = r1 + (r3 << 2);
    0x00065bde str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |         if (r6 == 1) {
    0x00065be0 beq 0x65c00                                       |             goto label_77;
                                                                 |         }
                                                                 | label_21:
    0x00065be2 ldr r3, [r5, 0x18]                                |         r3 = *((r5 + 0x18));
    0x00065be4 adds r1, r3, 1                                    |         r1 = r3 + 1;
    0x00065be6 it mi                                             |         
                                                                 |         if (r1 >= r3) {
    0x00065be8 addmi r1, r2, -1                                  |             r1 = r2 + -1;
                                                                 |         }
    0x00065bec cmp r0, 0                                         |         
    0x00065bee beq 0x65b72                                       |         
                                                                 |     }
    0x00065bf0 mov r1, sb                                        |     r1 = sb;
    0x00065bf2 b 0x65b7e                                         |     goto label_20;
                                                                 | label_76:
    0x00065bf4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00065bf6 subs r6, 1                                        |     r6--;
    0x00065bf8 sub.w r5, r5, 0x14                                |     r5 -= 0x14;
    0x00065bfc str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
                                                                 |     if (r6 != 1) {
    0x00065bfe bne 0x65be2                                       |         goto label_21;
                                                                 |     }
                                                                 | label_77:
    0x00065c00 ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x00065c04 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x00065c06 ldrd r8, sb, [sp, 0x2c]                           |     __asm ("ldrd r8, sb, [var_2ch]");
                                                                 | label_73:
    0x00065c0a ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00065c0e b 0x65608                                         |     goto label_22;
                                                                 | label_74:
    0x00065c10 adds r3, r2, 2                                    |     r3 = r2 + 2;
    0x00065c12 movs r1, 0                                        |     r1 = 0;
    0x00065c14 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00065c16 cmp.w r8, 0x40000                                 |     
    0x00065c1a it eq                                             |     
                                                                 |     if (r8 != 0x40000) {
    0x00065c1c addeq r3, 1                                       |         r3++;
                                                                 |     }
    0x00065c1e str r1, [sp]                                      |     *(sp) = r1;
    0x00065c20 mov r0, sl                                        |     r0 = sl;
    0x00065c22 movs r1, 0x18                                     |     r1 = 0x18;
    0x00065c24 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00065c28 cmp.w r8, 0x40000                                 |     
                                                                 |     if (r8 != 0x40000) {
    0x00065c2c bne 0x65ba2                                       |         goto label_23;
                                                                 |     }
                                                                 | label_75:
    0x00065c2e ldr r1, [r5, 0x20]                                |     r1 = *((r5 + 0x20));
    0x00065c30 mov r0, sl                                        |     r0 = sl;
    0x00065c32 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x00065c36 ldr.w r2, [r4, 0x2a8]                             |     r2 = *((r4 + 0x2a8));
    0x00065c3a str r1, [sp, 4]                                   |     var_4h = r1;
    0x00065c3c ldr r1, [r5, 0x1c]                                |     r1 = *((r5 + 0x1c));
    0x00065c3e adds r3, 2                                        |     r3 += 2;
    0x00065c40 str r1, [sp]                                      |     *(sp) = r1;
    0x00065c42 movs r1, 0x19                                     |     r1 = 0x19;
    0x00065c44 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00065c48 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00065c4c ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00065c4e ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x00065c52 ldrb.w r0, [r0, 0x57]                             |     r0 = *((r0 + 0x57));
    0x00065c56 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00065c58 it mi                                             |     
                                                                 |     if (r2 >= r3) {
    0x00065c5a addmi r2, r1, -1                                  |         r2 = r1 + -1;
                                                                 |     }
    0x00065c5e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00065c60 bne.w 0x65dce                                     |         goto label_78;
                                                                 |     }
    0x00065c64 add.w r0, r2, r2, lsl 2                           |     r0 = r2 + (r2 << 2);
    0x00065c68 ldr.w r2, [sl, 0x68]                              |     r2 = *((sl + 0x68));
    0x00065c6c add.w r2, r2, r0, lsl 2                           |     r2 += (r0 << 2);
                                                                 | label_34:
    0x00065c70 str r1, [r2, 8]                                   |     *((r2 + 8)) = r1;
    0x00065c72 ldrb.w r1, [r5, 0x24]                             |     r1 = *((r5 + 0x24));
    0x00065c76 b 0x65ba8                                         |     goto label_24;
                                                                 | label_65:
    0x00065c78 ldrb.w r3, [sb, 0x32]                             |     r3 = *((sb + 0x32));
    0x00065c7c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00065c7e bne 0x65d24                                       |         goto label_79;
                                                                 |     }
                                                                 | label_28:
    0x00065c80 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
                                                                 | label_29:
    0x00065c82 ldr r1, [r4, 0x20]                                |     r1 = *((r4 + 0x20));
    0x00065c84 ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x00065c88 adds r1, 1                                        |     r1++;
    0x00065c8a ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00065c8e itee pl                                           |     
                                                                 |     if (r1 < 1) {
    0x00065c90 movpl r3, r1                                      |         r3 = r1;
                                                                 |     }
                                                                 |     if (r1 >= 1) {
    0x00065c92 ldrmi r3, [r8, 0x6c]                              |         r3 = *((r8 + 0x6c));
                                                                 |     }
                                                                 |     if (r1 < 1) {
    0x00065c96 add.w r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
    0x00065c9a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00065c9c bne 0x65d64                                       |         goto label_80;
                                                                 |     }
    0x00065c9e ldr.w r2, [r8, 0x68]                              |     r2 = *((r8 + 0x68));
    0x00065ca2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00065ca6 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
                                                                 | label_32:
    0x00065caa subs r0, r0, r1                                   |     r0 -= r1;
    0x00065cac strd r5, r6, [sp, 0x14]                           |     __asm ("strd r5, r6, [var_14h]");
    0x00065cb0 add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x00065cb4 ldr.w sl, [r4, 4]                                 |     sl = *((r4 + 4));
    0x00065cb8 mov lr, r7                                        |     lr = r7;
    0x00065cba add.w r0, r3, r0, lsl 2                           |     r0 = r3 + (r0 << 2);
    0x00065cbe mov r5, ip                                        |     r5 = ip;
    0x00065cc0 adds r3, 0x14                                     |     r3 += 0x14;
    0x00065cc2 b 0x65ccc                                         |     
                                                                 |     while (r1 != sl) {
                                                                 | label_30:
    0x00065cc4 cmp r0, r2                                        |         
    0x00065cc6 add.w r3, r3, 0x14                                |         r3 += 0x14;
                                                                 |         if (r0 < r2) {
    0x00065cca bls 0x65cf4                                       |             goto label_81;
                                                                 |         }
                                                                 | label_25:
    0x00065ccc ldr r1, [r3, -0x10]                               |         r1 = *((r3 - 0x10));
    0x00065cd0 mov r2, r3                                        |         r2 = r3;
    0x00065cd2 cmp r1, sl                                        |         
    0x00065cd4 bne 0x65cc4                                       |         
                                                                 |     }
    0x00065cd6 ldrb r1, [r3, -0x14]                              |     r1 = *((r3 - 0x14));
    0x00065cda cmp r1, 0x5e                                      |     
                                                                 |     if (r1 == 0x5e) {
    0x00065cdc beq 0x65d6c                                       |         goto label_82;
                                                                 |     }
    0x00065cde cmp r1, 0x87                                      |     
                                                                 |     if (r1 == 0x87) {
    0x00065ce0 beq 0x65d34                                       |         goto label_83;
                                                                 |     }
    0x00065ce2 cmp r1, 0x12                                      |     
    0x00065ce4 add.w r3, r3, 0x14                                |     r3 += 0x14;
    0x00065ce8 itt eq                                            |     
                                                                 |     if (r1 != 0x12) {
    0x00065cea ldreq r1, [r4, 8]                                 |         r1 = *((r4 + 8));
                                                                 |     }
                                                                 |     if (r1 != 0x12) {
    0x00065cec streq r1, [r3, -0x24]                             |         *((r3 - 0x24)) = r1;
                                                                 |     }
    0x00065cf0 cmp r0, r2                                        |     
                                                                 |     if (r0 > r2) {
    0x00065cf2 bhi 0x65ccc                                       |         goto label_25;
                                                                 |     }
                                                                 | label_81:
    0x00065cf4 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x00065cf6 mov r7, lr                                        |     r7 = lr;
    0x00065cf8 ldrb.w r1, [sb, 0x30]                             |     r1 = *((sb + 0x30));
    0x00065cfc b 0x65886                                         |     goto label_16;
                                                                 | label_52:
    0x00065cfe movs r3, 0                                        |     r3 = 0;
    0x00065d00 movs r1, 0x31                                     |     r1 = 0x31;
    0x00065d02 mov r0, sl                                        |     r0 = sl;
    0x00065d04 str r3, [sp]                                      |     *(sp) = r3;
    0x00065d06 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00065d0a mov r5, r0                                        |     r5 = r0;
    0x00065d0c b 0x65708                                         |     goto label_26;
                                                                 | label_67:
    0x00065d0e movs r2, 0                                        |     r2 = 0;
    0x00065d10 movs r1, 8                                        |     r1 = 8;
    0x00065d12 str r2, [sp]                                      |     *(sp) = r2;
    0x00065d14 mov r0, sl                                        |     r0 = sl;
    0x00065d16 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00065d1a ldr.w r3, [r4, 0x2b4]                             |     r3 = *((r4 + 0x2b4));
    0x00065d1e ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x00065d22 b 0x65912                                         |     goto label_27;
                                                                 | label_79:
    0x00065d24 ldr.w r3, [ip, 0xc]                               |     r3 = *((ip + 0xc));
    0x00065d28 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00065d2a lsls r3, r3, 0x18                                 |     r3 <<= 0x18;
                                                                 |     if (r3 < r3) {
    0x00065d2c bmi 0x65c80                                       |         goto label_28;
                                                                 |     }
    0x00065d2e ldr.w r0, [sb, 0x3c]                              |     r0 = *((sb + 0x3c));
    0x00065d32 b 0x65c82                                         |     goto label_29;
                                                                 | label_83:
    0x00065d34 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00065d36 str r1, [r3, -0x10]                               |     *((r3 - 0x10)) = r1;
    0x00065d3a movs r1, 0x8e                                     |     r1 = 0x8e;
    0x00065d3c strb r1, [r3, -0x14]                              |     *((r3 - 0x14)) = r1;
    0x00065d40 b 0x65cc4                                         |     goto label_30;
                                                                 | label_71:
    0x00065d42 mov r1, sl                                        |     r1 = sl;
    0x00065d44 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00065d48 b 0x655b4                                         |     goto label_8;
                                                                 | label_69:
    0x00065d4a mov r1, sl                                        |     r1 = sl;
    0x00065d4c bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00065d50 b 0x65a14                                         |     goto label_31;
                                                                 | label_58:
    0x00065d52 movs r2, 0                                        |     r2 = 0;
    0x00065d54 movs r1, 8                                        |     r1 = 8;
    0x00065d56 str r2, [sp]                                      |     *(sp) = r2;
    0x00065d58 mov r0, sl                                        |     r0 = sl;
    0x00065d5a bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00065d5e ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x00065d62 b 0x657a4                                         |     goto label_15;
                                                                 | label_80:
    0x00065d64 ldr r3, [pc, 0xf8]                                |     
    0x00065d66 add r3, pc                                        |     r3 = 0xcbbca;
    0x00065d68 adds r3, 4                                        |     r3 += 4;
    0x00065d6a b 0x65caa                                         |     goto label_32;
                                                                 | label_82:
    0x00065d6c ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00065d6e ldr r6, [r3, -0xc]                                |     r6 = *((r3 - 0xc));
    0x00065d72 ldr r7, [r1, 0x1c]                                |     r7 = *((r1 + 0x1c));
    0x00065d74 ands r1, r7, 0x80                                 |     r1 = r7 & 0x80;
                                                                 |     if (r1 != r7) {
    0x00065d78 bne 0x65e14                                       |         goto label_84;
                                                                 |     }
    0x00065d7a lsls r7, r7, 0x1a                                 |     r7 <<= 0x1a;
    0x00065d7c sxth r6, r6                                       |     __asm ("sxth r6, r6");
                                                                 |     if (r7 < r7) {
    0x00065d7e bmi 0x65dde                                       |         goto label_85;
                                                                 |     }
                                                                 | label_36:
    0x00065d80 ldrh.w ip, [r5, 0x34]                             |     ip = *((r5 + 0x34));
    0x00065d84 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x00065d88 beq 0x65cc4                                       |         goto label_30;
                                                                 |     }
    0x00065d8a ldr r7, [r5, 4]                                   |     r7 = *((r5 + 4));
    0x00065d8c movs r1, 0                                        |     r1 = 0;
    0x00065d8e str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch]");
    0x00065d92 subs r7, 2                                        |     r7 -= 2;
    0x00065d94 b 0x65d9c                                         |     
                                                                 |     while (sl != r6) {
    0x00065d96 adds r1, 1                                        |         r1++;
    0x00065d98 cmp r1, ip                                        |         
                                                                 |         if (r1 == ip) {
    0x00065d9a beq 0x65dfe                                       |             goto label_86;
                                                                 |         }
    0x00065d9c ldrsh sl, [r7, 2]!                                |         sl = *((r7 += 2));
    0x00065da0 cmp sl, r6                                        |         
    0x00065da2 bne 0x65d96                                       |         
                                                                 |     }
    0x00065da4 sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x00065da6 ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch;
    0x00065daa cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x00065dac blt 0x65cc4                                       |         goto label_30;
                                                                 |     }
    0x00065dae str r1, [r3, -0xc]                                |     *((r3 - 0xc)) = r1;
    0x00065db2 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00065db4 str r1, [r3, -0x10]                               |     *((r3 - 0x10)) = r1;
    0x00065db8 b 0x65cc4                                         |     goto label_30;
                                                                 | label_66:
    0x00065dba mov r1, sl                                        |     r1 = sl;
    0x00065dbc bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00065dc0 b 0x658b2                                         |     goto label_33;
                                                                 | label_51:
    0x00065dc2 mov r1, sl                                        |     r1 = sl;
    0x00065dc4 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00065dc8 ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00065dcc b 0x655f8                                         |     goto label_0;
                                                                 | label_78:
    0x00065dce ldr r2, [pc, 0x94]                                |     
    0x00065dd0 add r2, pc                                        |     r2 = 0xcbc3a;
    0x00065dd2 adds r2, 4                                        |     r2 += 4;
    0x00065dd4 b 0x65c70                                         |     goto label_34;
                                                                 | label_72:
    0x00065dd6 mov r1, sl                                        |     r1 = sl;
    0x00065dd8 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00065ddc b 0x65b2c                                         |     goto label_35;
                                                                 | label_85:
    0x00065dde cmp r6, 0                                         |     
                                                                 |     if (r6 < 0) {
    0x00065de0 blt 0x65d80                                       |         goto label_36;
                                                                 |     }
    0x00065de2 ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x00065de4 ldr r7, [r7, 4]                                   |     r7 = *((r7 + 4));
                                                                 |     do {
    0x00065de6 ldrh.w ip, [r7, 0xa]                              |         ip = *((r7 + 0xa));
    0x00065dea adds r1, 1                                        |         r1++;
    0x00065dec adds r7, 0xc                                      |         r7 += 0xc;
    0x00065dee tst.w ip, 0x20                                    |         
    0x00065df2 itt ne                                            |         
                                                                 |         if ((ip & 0x20) == 0) {
    0x00065df4 addne r6, 1                                       |             r6++;
                                                                 |         }
                                                                 |         if ((ip & 0x20) != 0) {
    0x00065df6 sxthne r6, r6                                     |             __asm ("sxthne r6, r6");
                                                                 |         }
    0x00065df8 cmp r6, r1                                        |         
    0x00065dfa bge 0x65de6                                       |         
                                                                 |     } while (r6 >= r1);
    0x00065dfc b 0x65d80                                         |     goto label_36;
                                                                 | label_86:
    0x00065dfe ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch;
    0x00065e02 b 0x65cc4                                         |     goto label_30;
                                                                 | label_39:
    0x00065e04 ldr r1, [r0, 0x44]                                |     r1 = *((r0 + 0x44));
    0x00065e06 mov r4, r1                                        |     r4 = r1;
    0x00065e08 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00065e0a beq.w 0x65894                                     |         goto label_37;
                                                                 |     }
    0x00065e0e movs r3, 0                                        |     r3 = 0;
    0x00065e10 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00065e12 b 0x657e6                                         |     goto label_2;
                                                                 | label_84:
    0x00065e14 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00065e16 ldr r1, [r1, 8]                                   |     r1 = *((r1 + 8));
                                                                 |     if (r1 != 0) {
    0x00065e18 cbnz r1, 0x65e20                                  |         goto label_87;
                                                                 |     }
    0x00065e1a b 0x65e44                                         |     goto label_88;
                                                                 |     do {
    0x00065e1c ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
                                                                 |         if (r1 == 0) {
    0x00065e1e cbz r1, 0x65e44                                   |             goto label_88;
                                                                 |         }
                                                                 | label_87:
    0x00065e20 ldrb.w r7, [r1, 0x37]                             |         r7 = *((r1 + 0x37));
    0x00065e24 and r7, r7, 3                                     |         r7 &= 3;
    0x00065e28 cmp r7, 2                                         |         
    0x00065e2a bne 0x65e1c                                       |         
                                                                 |     } while (r7 != 2);
    0x00065e2c ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x00065e2e ldrsh.w r6, [r1, r6, lsl 1]                       |     offset_1 = r6 << 1;
                                                                 |     r6 = *((r1 + offset_1));
    0x00065e32 b 0x65d80                                         |     goto label_36;
                                                                 | label_61:
    0x00065e34 ldrb.w r4, [sp, 0xc]                              |     r4 = var_ch;
    0x00065e38 b 0x65894                                         |     goto label_37;
                                                                 | label_56:
    0x00065e3a mov.w r1, 0x8000                                  |     
    0x00065e3e movt r1, 0xffff                                   |     r1 = 0x-8000;
    0x00065e42 b 0x65740                                         |     goto label_38;
                                                                 | label_88:
    0x00065e44 movs r3, 0                                        |     r3 = 0;
    0x00065e46 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00065e48 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x65e68 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00065e68 ()                                      | void fcn_00065e68 (int16_t arg_c0h, 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_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int32_t var_5ch;
                                                                 |     int32_t var_5ch_2;
                                                                 |     int16_t var_64h;
                                                                 |     int32_t var_68h;
                                                                 |     int32_t var_68h_2;
                                                                 |     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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00065e68 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00065e6c sub sp, 0x9c                                      |     
    0x00065e6e str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00065e70 mov r4, r3                                        |     r4 = r3;
    0x00065e72 mov r7, r0                                        |     r7 = r0;
    0x00065e74 mov sb, r1                                        |     sb = r1;
    0x00065e76 ldr.w r2, [pc, 0xbec]                             |     
    0x00065e7a ldr.w r3, [pc, 0xbec]                             |     r3 = *(0x66a6a);
    0x00065e7e ldr r6, [r1, 0x44]                                |     r6 = *((r1 + 0x44));
    0x00065e80 add r2, pc                                        |     r2 = 0xcc8ea;
    0x00065e82 ldr r5, [r0, 8]                                   |     r5 = *((r0 + 8));
    0x00065e84 ldr r3, [r2, r3]                                  |     
    0x00065e86 ldr.w r8, [sp, 0xc0]                              |     r8 = *(arg_c0h);
    0x00065e8a ldr r3, [r3]                                      |     r3 = *(0xcc8ea);
    0x00065e8c str r3, [sp, 0x94]                                |     var_94h = r3;
    0x00065e8e mov.w r3, 0                                       |     r3 = 0;
    0x00065e92 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00065e94 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00065e96 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00065e98 beq.w 0x66578                                     |         goto label_15;
                                                                 |     }
                                                                 | label_4:
    0x00065e9c ldr r2, [r7, 0x38]                                |     r2 = *((r7 + 0x38));
    0x00065e9e movs r1, 0                                        |     r1 = 0;
    0x00065ea0 ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x00065ea4 add r0, sp, 0x70                                  |     r0 += var_70h;
    0x00065ea6 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00065ea8 movs r2, 0x24                                     |     r2 = 0x24;
    0x00065eaa ldr.w ip, [r3, 0x18]                              |     ip = *((r3 + 0x18));
    0x00065eae ldr.w sb, [r3, 0x30]                              |     sb = *((r3 + 0x30));
    0x00065eb2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00065eb4 ldrsh.w fp, [ip, 0x22]                            |     fp = *((ip + 0x22));
    0x00065eb8 subs r3, 1                                        |     r3--;
    0x00065eba str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x00065ebc str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00065ebe blx 0x97d4                                        |     fcn_000097d4 ();
    0x00065ec2 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00065ec4 ldrb r2, [r6, 0x11]                               |     r2 = *((r6 + 0x11));
    0x00065ec6 strd r8, r4, [sp, 0x68]                           |     __asm ("strd r8, r4, [var_68h]");
    0x00065eca adds r1, r3, 2                                    |     r1 = r3 + 2;
    0x00065ecc str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00065ece cmp r2, 0x56                                      |     
    0x00065ed0 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00065ed2 str r1, [sp, 0x54]                                |     var_54h = r1;
    0x00065ed4 str r1, [sp, 0x7c]                                |     var_7ch = r1;
    0x00065ed6 add.w r1, r3, 3                                   |     r1 = r3 + 3;
    0x00065eda add.w r3, r3, 1                                   |     r3++;
    0x00065ede strd r7, r6, [sp, 0x5c]                           |     __asm ("strd r7, r6, [var_5ch]");
    0x00065ee2 str r5, [sp, 0x64]                                |     var_64h = r5;
    0x00065ee4 str r1, [sp, 0x40]                                |     var_40h = r1;
    0x00065ee6 str r1, [sp, 0x8c]                                |     var_8ch = r1;
    0x00065ee8 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     if (r2 == 0x56) {
    0x00065eea beq.w 0x6643e                                     |         goto label_16;
                                                                 |     }
    0x00065eee cmp r2, 0x5a                                      |     
                                                                 |     if (r2 == 0x5a) {
    0x00065ef0 beq.w 0x665aa                                     |         goto label_17;
                                                                 |     }
    0x00065ef4 ldrb.w ip, [r6, 0x10]                             |     ip = *((r6 + 0x10));
    0x00065ef8 movs r1, 2                                        |     r1 = 2;
    0x00065efa ldrb r0, [r6, 0x12]                               |     r0 = *((r6 + 0x12));
    0x00065efc str r1, [sp, 0x74]                                |     var_74h = r1;
                                                                 | label_8:
    0x00065efe ldr r4, [r7, 0x2c]                                |     r4 = *((r7 + 0x2c));
    0x00065f00 subs r2, 0x56                                     |     r2 -= 0x56;
    0x00065f02 tst.w r2, 0xfd                                    |     
    0x00065f06 add.w r1, r4, fp                                  |     r1 = r4 + fp;
    0x00065f0a add.w r8, r4, 1                                   |     r8 = r4 + 1;
    0x00065f0e add.w r3, r1, 1                                   |     r3 = r1 + 1;
    0x00065f12 add.w sl, r1, 2                                   |     sl = r1 + 2;
    0x00065f16 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00065f18 it ne                                             |     
                                                                 |     if ((r2 & 0xfd) == 0) {
    0x00065f1a movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00065f1c str.w sl, [r7, 0x2c]                              |     __asm ("str.w sl, [r7, 0x2c]");
    0x00065f20 str.w sl, [sp, 0x78]                              |     __asm ("str.w sl, [var_78h]");
    0x00065f24 it ne                                             |     
                                                                 |     if ((r2 & 0xfd) == 0) {
    0x00065f26 strne r3, [sp, 0xc]                               |         var_ch = r3;
                                                                 |     }
                                                                 |     if ((r2 & 0xfd) == 0) {
    0x00065f28 beq.w 0x66462                                     |         goto label_18;
                                                                 |     }
                                                                 | label_0:
    0x00065f2c subs r0, 0x56                                     |     r0 -= 0x56;
    0x00065f2e tst.w r0, 0xfd                                    |     
    0x00065f32 iteet eq                                          |     
                                                                 |     if ((r0 & 0xfd) != 0) {
    0x00065f34 ldreq r2, [r7, 0x2c]                              |         r2 = *((r7 + 0x2c));
                                                                 |     }
                                                                 |     if ((r0 & 0xfd) == 0) {
    0x00065f36 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if ((r0 & 0xfd) == 0) {
    0x00065f38 strne r3, [sp, 0x10]                              |         var_10h = r3;
                                                                 |     }
                                                                 |     if ((r0 & 0xfd) != 0) {
    0x00065f3a addeq r3, r2, 1                                   |         r3 = r2 + 1;
                                                                 |     }
    0x00065f3c itt eq                                            |     
                                                                 |     if ((r0 & 0xfd) != 0) {
    0x00065f3e streq r3, [sp, 0x10]                              |         var_10h = r3;
                                                                 |     }
                                                                 |     if ((r0 & 0xfd) != 0) {
    0x00065f40 streq r3, [r7, 0x2c]                              |         *((r7 + 0x2c)) = r3;
                                                                 |     }
    0x00065f42 cmp.w ip, 0x4c                                    |     
                                                                 |     if (ip == 0x4c) {
    0x00065f46 beq.w 0x66594                                     |         goto label_19;
                                                                 |     }
    0x00065f4a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00065f4c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00065f4e beq.w 0x66842                                     |         goto label_20;
                                                                 |     }
    0x00065f52 ldr r2, [r3]                                      |     r2 = *(r3);
                                                                 | label_7:
    0x00065f54 ldr r0, [r6, 0x4c]                                |     r0 = *((r6 + 0x4c));
    0x00065f56 ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x00065f58 add.w r3, r8, r0                                  |     r3 = r8 + r0;
    0x00065f5c str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 |     if (r1 != 0) {
    0x00065f5e cbz r1, 0x65f66                                   |         
    0x00065f60 ldr r1, [r1]                                      |         r1 = *(r1);
    0x00065f62 add r3, r1                                        |         r3 += r1;
    0x00065f64 str r3, [sp, 0x3c]                                |         var_3ch = r3;
                                                                 |     }
    0x00065f66 ldr r0, [r7, 0x2c]                                |     r0 = *((r7 + 0x2c));
    0x00065f68 adds r1, r0, r2                                   |     r1 = r0 + r2;
    0x00065f6a adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00065f6c add.w r0, r1, r2                                  |     r0 = r1 + r2;
    0x00065f70 add.w r1, r1, 1                                   |     r1++;
    0x00065f74 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00065f76 str r1, [sp, 0x80]                                |     var_80h = r1;
    0x00065f78 add.w r1, r0, r2                                  |     r1 = r0 + r2;
    0x00065f7c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00065f7e add r2, r1                                        |     r2 += r1;
    0x00065f80 str r2, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r2;
    0x00065f82 ite ne                                            |     
                                                                 |     if (r3 == r0) {
    0x00065f84 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r3 != r0) {
    0x00065f86 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00065f88 adds r0, 1                                        |     r0++;
    0x00065f8a adds r1, 1                                        |     r1++;
    0x00065f8c cmp r3, 0                                         |     
    0x00065f8e ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00065f90 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00065f92 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x00065f96 str r0, [sp, 0x88]                                |     var_88h = r0;
    0x00065f98 str r1, [sp, 0x90]                                |     var_90h = r1;
    0x00065f9a str r2, [sp, 0x50]                                |     var_50h = r2;
                                                                 | label_5:
    0x00065f9c cmp.w fp, 0                                       |     
    0x00065fa0 it gt                                             |     
                                                                 |     if (fp <= 0) {
    0x00065fa2 movgt r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (fp <= 0) {
    0x00065fa4 ble 0x65fbe                                       |         goto label_21;
                                                                 |     }
                                                                 |     do {
    0x00065fa6 add.w r3, r8, r4                                  |         r3 = r8 + r4;
    0x00065faa mov r2, sb                                        |         r2 = sb;
    0x00065fac str r3, [sp]                                      |         *(sp) = r3;
    0x00065fae movs r1, 0x5e                                     |         r1 = 0x5e;
    0x00065fb0 mov r3, r4                                        |         r3 = r4;
    0x00065fb2 mov r0, r5                                        |         r0 = r5;
    0x00065fb4 adds r4, 1                                        |         r4++;
    0x00065fb6 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00065fba cmp fp, r4                                        |         
    0x00065fbc bne 0x65fa6                                       |         
                                                                 |     } while (fp != r4);
                                                                 | label_21:
    0x00065fbe ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00065fc0 movs r1, 0x61                                     |     r1 = 0x61;
    0x00065fc2 mov r3, fp                                        |     r3 = fp;
    0x00065fc4 mov r0, r5                                        |     r0 = r5;
    0x00065fc6 str r2, [sp]                                      |     *(sp) = r2;
    0x00065fc8 mov r2, r8                                        |     r2 = r8;
    0x00065fca bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00065fce ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x00065fd0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00065fd2 beq.w 0x664f8                                     |         goto label_22;
                                                                 |     }
    0x00065fd6 ldr r3, [r6, 0x4c]                                |     r3 = *((r6 + 0x4c));
    0x00065fd8 mov r0, r7                                        |     r0 = r7;
    0x00065fda ldr r4, [r1]                                      |     r4 = *(r1);
    0x00065fdc add r8, r3                                        |     r8 += r3;
    0x00065fde movs r3, 0                                        |     r3 = 0;
    0x00065fe0 mov r2, r3                                        |     r2 = r3;
    0x00065fe2 bl 0x28128                                        |     fcn_00028128 (r0, r1, r2, r3);
    0x00065fe6 ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x00065fe8 mov sb, r0                                        |     sb = r0;
    0x00065fea ldr.w ip, [r6, 0x44]                              |     ip = *((r6 + 0x44));
    0x00065fee adds r3, 1                                        |     r3++;
    0x00065ff0 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00065ff2 str r3, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r3;
    0x00065ff4 ldrd r3, r2, [r5, 0x6c]                           |     __asm ("ldrd r3, r2, [r5, 0x6c]");
    0x00065ff8 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00065ffa bge.w 0x66aae                                     |         goto label_23;
                                                                 |     }
    0x00065ffe add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x00066002 ldr r0, [r5, 0x68]                                |     r0 = *((r5 + 0x68));
    0x00066004 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00066006 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00066008 str r1, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r1;
    0x0006600a mov.w lr, 0                                       |     lr = 0;
    0x0006600e adds r1, r0, r2                                   |     r1 = r0 + r2;
    0x00066010 str.w ip, [r1, 8]                                 |     __asm ("str.w ip, [r1, 8]");
    0x00066014 str.w lr, [r1, 0x10]                              |     __asm ("str.w lr, [r1, 0x10]");
    0x00066018 str.w r8, [r1, 4]                                 |     __asm ("str.w r8, [r1, 4]");
    0x0006601c str r4, [r1, 0xc]                                 |     *((r1 + 0xc)) = r4;
    0x0006601e movs r1, 0x5a                                     |     r1 = 0x5a;
    0x00066020 str r1, [r0, r2]                                  |     *((r0 + r2)) = r1;
                                                                 | label_13:
    0x00066022 ldr r2, [r5]                                      |     r2 = *(r5);
    0x00066024 ldrb.w r1, [r2, 0x57]                             |     r1 = *((r2 + 0x57));
    0x00066028 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0006602a bne.w 0x668a4                                     |         goto label_24;
                                                                 |     }
    0x0006602e ldr r2, [r5, 0x6c]                                |     r2 = *((r5 + 0x6c));
    0x00066030 ldr r1, [r5, 0x68]                                |     r1 = *((r5 + 0x68));
    0x00066032 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x00066036 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00066038 subs r2, 0x14                                     |     r2 -= 0x14;
    0x0006603a add r2, r1                                        |     r2 += r1;
    0x0006603c movs r1, 0xf8                                     |     r1 = 0xf8;
    0x0006603e str.w sb, [r2, 0x10]                              |     __asm ("str.w sb, [r2, 0x10]");
    0x00066042 strb r1, [r2, 1]                                  |     *((r2 + 1)) = r1;
                                                                 | label_9:
    0x00066044 adds r2, r3, 2                                    |     r2 = r3 + 2;
    0x00066046 movs r1, 0xd                                      |     r1 = 0xd;
    0x00066048 adds r3, 4                                        |     r3 += 4;
    0x0006604a str r2, [sp]                                      |     *(sp) = r2;
    0x0006604c mov r0, r5                                        |     r0 = r5;
    0x0006604e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00066052 ldr r3, [r5, 0x6c]                                |     r3 = *((r5 + 0x6c));
    0x00066054 mov r2, r3                                        |     r2 = r3;
    0x00066056 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00066058 ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
    0x0006605a cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0006605c bge.w 0x66a50                                     |         goto label_25;
                                                                 |     }
    0x00066060 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00066062 movs r1, 0                                        |     r1 = 0;
    0x00066064 ldr r0, [r5, 0x68]                                |     r0 = *((r5 + 0x68));
    0x00066066 mov.w ip, 9                                       |     
    0x0006606a add.w r3, r2, r2, lsl 2                           |     r3 = r2 + (r2 << 2);
    0x0006606e adds r2, 1                                        |     r2++;
    0x00066070 str r2, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r2;
    0x00066072 lsl.w lr, r3, 2                                   |     lr = r3 << 2;
    0x00066076 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00066078 add.w r2, r0, lr                                  |     r2 = r0 + lr;
    0x0006607c strd r3, r1, [r2, 4]                              |     __asm ("strd r3, r1, [r2, 4]");
    0x00066080 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x00066084 str.w ip, [r0, lr]                                |     __asm ("str.w ip, [r0, lr]");
                                                                 | label_12:
    0x00066088 subs r4, 1                                        |     r4--;
    0x0006608a ldr r3, [r6, 0x44]                                |     r3 = *((r6 + 0x44));
    0x0006608c mov r2, r8                                        |     r2 = r8;
    0x0006608e movs r1, 0x50                                     |     r1 = 0x50;
    0x00066090 mov r0, r5                                        |     r0 = r5;
    0x00066092 str r4, [sp]                                      |     *(sp) = r4;
    0x00066094 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_2:
    0x00066098 ldr.w r8, [sp, 0x28]                              |     r8 = var_28h;
    0x0006609c movs r4, 0                                        |     r4 = 0;
    0x0006609e mov r3, sl                                        |     r3 = sl;
    0x000660a0 movs r1, 0x7f                                     |     r1 = 0x7f;
    0x000660a2 mov r0, r5                                        |     r0 = r5;
    0x000660a4 str r4, [sp]                                      |     *(sp) = r4;
    0x000660a6 mov r2, r8                                        |     r2 = r8;
    0x000660a8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000660ac ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000660ae mov r2, r8                                        |     r2 = r8;
    0x000660b0 movs r1, 0x80                                     |     r1 = 0x80;
    0x000660b2 mov r0, r5                                        |     r0 = r5;
    0x000660b4 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x000660b8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000660bc ldr r3, [r5, 0x6c]                                |     r3 = *((r5 + 0x6c));
    0x000660be ldr r2, [r6, 0x54]                                |     r2 = *((r6 + 0x54));
    0x000660c0 mov r1, r3                                        |     r1 = r3;
    0x000660c2 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000660c4 ldr r3, [r5, 0x70]                                |     r3 = *((r5 + 0x70));
    0x000660c6 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x000660c8 bge.w 0x66830                                     |         goto label_26;
                                                                 |     }
    0x000660cc ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000660ce mov.w ip, 0x34                                    |     
    0x000660d2 ldr r0, [r5, 0x68]                                |     r0 = *((r5 + 0x68));
    0x000660d4 add.w r3, r1, r1, lsl 2                           |     r3 = r1 + (r1 << 2);
    0x000660d8 adds r1, 1                                        |     r1++;
    0x000660da str r1, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r1;
    0x000660dc lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000660de adds r1, r0, r3                                   |     r1 = r0 + r3;
    0x000660e0 str r2, [r1, 4]                                   |     *((r1 + 4)) = r2;
    0x000660e2 strd r4, sl, [r1, 8]                              |     __asm ("strd r4, sl, [r1, 8]");
    0x000660e6 str r4, [r1, 0x10]                                |     *((r1 + 0x10)) = r4;
    0x000660e8 str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
                                                                 | label_6:
    0x000660ec ldr.w fp, [r7, 8]                                 |     fp = *((r7 + 8));
    0x000660f0 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x000660f4 beq.w 0x66566                                     |         goto label_27;
                                                                 |     }
                                                                 | label_3:
    0x000660f8 ldr.w ip, [pc, 0x970]                             |     
    0x000660fc mov.w sl, 0                                       |     sl = 0;
    0x00066100 strd r5, r7, [sp, 0x48]                           |     __asm ("strd r5, r7, [var_48h]");
    0x00066104 mov r4, r6                                        |     r4 = r6;
    0x00066106 mov sb, sl                                        |     sb = sl;
    0x00066108 add ip, pc                                        |     ip = 0xccb78;
    0x0006610a add.w r3, ip, 0x13c                               |     r3 = ip + 0x13c;
    0x0006610e mov r8, ip                                        |     r8 = ip;
    0x00066110 mov r7, r3                                        |     r7 = r3;
                                                                 |     do {
    0x00066112 ldr r3, [r4, 0x34]                                |         r3 = *((r4 + 0x34));
    0x00066114 movs r2, 0                                        |         r2 = 0;
    0x00066116 ldr r5, [r4, 0x2c]                                |         r5 = *((r4 + 0x2c));
    0x00066118 movs r1, 0x4b                                     |         r1 = 0x4b;
    0x0006611a mov r0, fp                                        |         r0 = fp;
    0x0006611c str.w sb, [sp]                                    |         __asm ("str.w sb, [sp]");
    0x00066120 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00066124 ldr r3, [r4, 0x48]                                |         r3 = *((r4 + 0x48));
    0x00066126 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
                                                                 |         if (r3 != 0) {
    0x00066128 cbz r3, 0x6612c                                   |             
    0x0006612a ldr r3, [r3]                                      |             r3 = *(r3);
                                                                 |         }
    0x0006612c ldr r2, [r6, 0x58]                                |         r2 = *((r6 + 0x58));
    0x0006612e cmp sl, r3                                        |         
    0x00066130 it lt                                             |         
                                                                 |         if (sl >= r3) {
    0x00066132 movlt sl, r3                                      |             sl = r3;
                                                                 |         }
                                                                 |         if (r2 == 0) {
    0x00066134 cbnz r2, 0x66170                                  |             
    0x00066136 ldr r3, [r5, 0x20]                                |             r3 = *((r5 + 0x20));
    0x00066138 add.w r1, r8, 0x130                               |             r1 = r8 + 0x130;
    0x0006613c cmp r3, r1                                        |             
    0x0006613e it ne                                             |             
                                                                 |             if (r3 != r1) {
    0x00066140 cmpne r3, r7                                      |                 __asm ("cmpne r3, r7");
                                                                 |             }
                                                                 |             if (r3 == r1) {
    0x00066142 bne 0x66162                                       |                 
    0x00066144 ldr r3, [r4, 0x40]                                |                 r3 = *((r4 + 0x40));
    0x00066146 movs r1, 0x47                                     |                 r1 = 0x47;
    0x00066148 str r2, [sp]                                      |                 *(sp) = r2;
    0x0006614a mov r0, fp                                        |                 r0 = fp;
    0x0006614c str r2, [sp, 0x18]                                |                 var_18h = r2;
    0x0006614e bl 0x29ac4                                        |                 fcn_00029ac4 (r0, r1, r2, r3);
    0x00066152 ldr r3, [r4, 0x40]                                |                 r3 = *((r4 + 0x40));
    0x00066154 movs r1, 0x47                                     |                 r1 = 0x47;
    0x00066156 ldr r2, [sp, 0x18]                                |                 r2 = var_18h;
    0x00066158 mov r0, fp                                        |                 r0 = fp;
    0x0006615a adds r3, 1                                        |                 r3++;
    0x0006615c str r2, [sp]                                      |                 *(sp) = r2;
    0x0006615e bl 0x29ac4                                        |                 fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |             }
    0x00066162 ldr r3, [r5, 4]                                   |             r3 = *((r5 + 4));
    0x00066164 lsls r3, r3, 0x13                                 |             r3 <<= 0x13;
                                                                 |             if (r3 >= r3) {
    0x00066166 bpl 0x66170                                       |                 goto label_1;
                                                                 |             }
    0x00066168 ldr r2, [r4, 0x3c]                                |             r2 = *((r4 + 0x3c));
    0x0006616a cmp r2, 0                                         |             
                                                                 |             if (r2 != 0) {
    0x0006616c bne.w 0x6646a                                     |                 goto label_28;
                                                                 |             }
                                                                 |         }
                                                                 | label_1:
    0x00066170 ldr r4, [r4, 0x24]                                |         r4 = *((r4 + 0x24));
    0x00066172 cmp r4, 0                                         |         
    0x00066174 bne 0x66112                                       |         
                                                                 |     } while (r4 != 0);
    0x00066176 ldrd r5, r7, [sp, 0x48]                           |     __asm ("ldrd r5, r7, [var_48h]");
    0x0006617a ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0006617c ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x0006617e add.w r1, sl, r3                                  |     r1 = sl + r3;
    0x00066182 adds r3, 1                                        |     r3++;
    0x00066184 str r1, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r1;
    0x00066186 str r3, [sp, 0x70]                                |     var_70h = r3;
                                                                 |     if (r2 != 0) {
    0x00066188 cbz r2, 0x661a8                                   |         
    0x0006618a ldr r3, [r7, 8]                                   |         r3 = *((r7 + 8));
                                                                 |         if (r3 != 0) {
    0x0006618c cbz r3, 0x66196                                   |             
    0x0006618e ldr r1, [r6, 0x18]                                |             r1 = *((r6 + 0x18));
    0x00066190 mov r0, r7                                        |             r0 = r7;
    0x00066192 bl 0x5aa10                                        |             fcn_0005aa10 (r0, r1, r2);
                                                                 |         }
    0x00066196 ldrb r3, [r6, 0x10]                               |         r3 = *((r6 + 0x10));
    0x00066198 mov r0, r7                                        |         r0 = r7;
    0x0006619a ldr r1, [sp, 0xc]                                 |         r1 = var_ch;
    0x0006619c cmp r3, 0x59                                      |         
    0x0006619e ite eq                                            |         
                                                                 |         if (r3 != 0x59) {
    0x000661a0 moveq r2, 3                                       |             r2 = 3;
                                                                 |         }
                                                                 |         if (r3 == 0x59) {
    0x000661a2 movne r2, 0                                       |             r2 = 0;
                                                                 |         }
    0x000661a4 bl 0x2b50c                                        |         fcn_0002b50c (r0, r1, r2);
                                                                 |     }
    0x000661a8 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
                                                                 |     if (r2 == 0) {
    0x000661aa cbz r2, 0x661ca                                   |         void (*0x661ca)() ();
                                                                 |     }
    0x000661ac ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
                                                                 |     if (r3 == 0) {
    0x000661ae cbz r3, 0x661b8                                   |         void (*0x661b8)() ();
                                                                 |     }
    0x000661b0 ldr r1, [r6, 0x1c]                                |     r1 = *((r6 + 0x1c));
    0x000661b2 mov r0, r7                                        |     r0 = r7;
    0x000661b4 bl 0x5aa10                                        |     fcn_0005aa10 (r0, r1, r2);
                                                                 | label_16:
    0x0006643e ldrb.w ip, [r6, 0x10]                             |     ip = *((r6 + 0x10));
    0x00066442 cmp.w ip, 0x59                                    |     
                                                                 |     if (ip != 0x59) {
    0x00066446 bne.w 0x66848                                     |         goto label_29;
                                                                 |     }
    0x0006644a ldr r4, [r7, 0x2c]                                |     r4 = *((r7 + 0x2c));
    0x0006644c ldrb r0, [r6, 0x12]                               |     r0 = *((r6 + 0x12));
    0x0006644e add.w r1, fp, r4                                  |     r1 = fp + r4;
    0x00066452 add.w r8, r4, 1                                   |     r8 = r4 + 1;
    0x00066456 add.w sl, r1, 2                                   |     sl = r1 + 2;
    0x0006645a adds r3, r1, 1                                    |     r3 = r1 + 1;
    0x0006645c str.w sl, [sp, 0x78]                              |     __asm ("str.w sl, [var_78h]");
    0x00066460 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_18:
    0x00066462 adds r3, r1, 3                                    |     r3 = r1 + 3;
    0x00066464 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00066466 str r3, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r3;
    0x00066468 b 0x65f2c                                         |     goto label_0;
                                                                 | label_28:
    0x0006646a movs r5, 0                                        |     r5 = 0;
    0x0006646c movs r1, 0x92                                     |     r1 = 0x92;
    0x0006646e mov r3, r5                                        |     r3 = r5;
    0x00066470 mov r0, fp                                        |     r0 = fp;
    0x00066472 str r5, [sp]                                      |     *(sp) = r5;
    0x00066474 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00066478 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x0006647a mov r2, r5                                        |     r2 = r5;
    0x0006647c movs r1, 0x47                                     |     r1 = 0x47;
    0x0006647e mov r0, fp                                        |     r0 = fp;
    0x00066480 str r5, [sp]                                      |     *(sp) = r5;
    0x00066482 adds r3, 1                                        |     r3++;
    0x00066484 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00066488 b 0x66170                                         |     goto label_1;
                                                                 | label_22:
    0x000664f8 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x000664fa str r1, [sp, 0x34]                                |     var_34h = r1;
    0x000664fc b 0x66098                                         |     goto label_2;
                                                                 | label_27:
    0x00066566 ldr r3, [r7, 0x74]                                |     r3 = *((r7 + 0x74));
    0x00066568 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006656a beq.w 0x6690e                                     |         goto label_30;
                                                                 |     }
                                                                 | label_10:
    0x0006656e mov r0, r7                                        |     r0 = r7;
    0x00066570 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x00066574 mov fp, r0                                        |     
    0x00066576 b 0x660f8                                         |     goto label_3;
                                                                 | label_15:
    0x00066578 ldr r3, [r0, 0x74]                                |     r3 = *((r0 + 0x74));
    0x0006657a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006657c beq.w 0x6691c                                     |         goto label_31;
                                                                 |     }
                                                                 | label_11:
    0x00066580 mov r0, r7                                        |     r0 = r7;
    0x00066582 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x00066586 mov r5, r0                                        |     r5 = r0;
    0x00066588 b 0x65e9c                                         |     goto label_4;
                                                                 | label_19:
    0x00066594 movs r3, 0                                        |     r3 = 0;
    0x00066596 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00066598 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0006659a str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0006659c b 0x65f9c                                         |     goto label_5;
                                                                 | label_17:
    0x000665aa ldr r2, [r6, 0x58]                                |     r2 = *((r6 + 0x58));
    0x000665ac ldrb r0, [r6, 0x12]                               |     r0 = *((r6 + 0x12));
    0x000665ae ldrb.w ip, [r6, 0x10]                             |     ip = *((r6 + 0x10));
    0x000665b2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000665b4 bne.w 0x668ec                                     |         goto label_32;
                                                                 |     }
    0x000665b8 ldr.w r4, [pc, 0x4c8]                             |     r4 = *(0x00066a84);
    0x000665bc mov r1, r6                                        |     r1 = r6;
    0x000665be add r4, pc                                        |     r4 += pc;
    0x000665c0 add.w sl, r4, 0x13c                               |     sl = r4 + 0x13c;
    0x000665c4 add.w r8, r4, 0x130                               |     r8 = r4 + 0x130;
    0x000665c8 add.w lr, r4, 0x148                               |     lr = r4 + 0x148;
    0x000665cc add.w r4, r4, 0x150                               |     r4 += 0x150;
    0x000665d0 b 0x665da                                         |     
                                                                 |     while (r3 == 0) {
    0x000665d2 ldr r1, [r1, 0x24]                                |         r1 = *((r1 + 0x24));
    0x000665d4 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x000665d6 beq.w 0x668e0                                     |             goto label_33;
                                                                 |         }
    0x000665da ldr r3, [r1, 0x2c]                                |         r3 = *((r1 + 0x2c));
    0x000665dc ldr r2, [r3, 0x20]                                |         r2 = *((r3 + 0x20));
    0x000665de cmp r2, r8                                        |         
    0x000665e0 it ne                                             |         
                                                                 |         if (r2 != r8) {
    0x000665e2 cmpne r2, sl                                      |             __asm ("cmpne r2, sl");
                                                                 |         }
    0x000665e4 ite eq                                            |         
                                                                 |         if (r2 != r8) {
    0x000665e6 moveq r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r2 == r8) {
    0x000665e8 movne r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x000665ea cmp r2, lr                                        |         
    0x000665ec it eq                                             |         
                                                                 |         if (r2 != lr) {
    0x000665ee orreq r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x000665f2 cmp r2, r4                                        |         
    0x000665f4 it eq                                             |         
                                                                 |         if (r2 != r4) {
    0x000665f6 orreq r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x000665fa cmp r3, 0                                         |         
    0x000665fc beq 0x665d2                                       |         
                                                                 |     }
    0x000665fe b 0x668ec                                         |     goto label_32;
                                                                 | label_26:
    0x00066830 mov r3, r4                                        |     r3 = r4;
    0x00066832 movs r1, 0x34                                     |     r1 = 0x34;
    0x00066834 mov r0, r5                                        |     r0 = r5;
    0x00066836 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0006683a bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0006683e str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00066840 b 0x660ec                                         |     goto label_6;
                                                                 | label_20:
    0x00066842 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00066844 b.w 0x65f54                                       |     goto label_7;
                                                                 | label_29:
    0x00066848 ldr r1, [r6, 0x18]                                |     r1 = *((r6 + 0x18));
    0x0006684a ldr r0, [r7]                                      |     r0 = *(r7);
    0x0006684c bl 0x308c4                                        |     r0 = fcn_000308c4 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x00066850 cbz r0, 0x66856                                   |         
    0x00066852 movs r2, 1                                        |         r2 = 1;
    0x00066854 str r2, [sp, 0x74]                                |         var_74h = r2;
                                                                 |     }
                                                                 | label_14:
    0x00066856 ldrb.w ip, [r6, 0x10]                             |     ip = *((r6 + 0x10));
    0x0006685a ldrb r2, [r6, 0x11]                               |     r2 = *((r6 + 0x11));
    0x0006685c ldrb r0, [r6, 0x12]                               |     r0 = *((r6 + 0x12));
    0x0006685e b.w 0x65efe                                       |     goto label_8;
                                                                 | label_24:
    0x000668a4 ldr.w r2, [r2, 0x210]                             |     r2 = *((r2 + 0x210));
    0x000668a8 cmp.w sb, 0                                       |     
    0x000668ac clz r2, r2                                        |     r2 &= r2;
    0x000668b0 lsr.w r2, r2, 5                                   |     r2 >>= 5;
    0x000668b4 it eq                                             |     
                                                                 |     if (sb != 0) {
    0x000668b6 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000668b8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000668ba beq.w 0x66044                                     |         goto label_9;
                                                                 |     }
    0x000668be ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x000668c2 subs r2, 1                                        |     r2--;
    0x000668c4 str.w r2, [sb]                                    |     __asm ("str.w r2, [sb]");
    0x000668c8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000668ca bne.w 0x66044                                     |         goto label_9;
                                                                 |     }
    0x000668ce ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x000668d2 mov r1, sb                                        |     r1 = sb;
    0x000668d4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000668d6 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x000668da ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000668dc b.w 0x66044                                       |     goto label_9;
                                                                 | label_33:
    0x000668e0 cmp r0, 0x58                                      |     
    0x000668e2 itt ne                                            |     
                                                                 |     if (r0 == 0x58) {
    0x000668e4 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r0 == 0x58) {
    0x000668e6 strne r2, [sp, 0x74]                              |         var_74h = r2;
                                                                 |     }
    0x000668e8 beq.w 0x66ac2                                     |     
                                                                 |     while (ip == 0x59) {
                                                                 | label_32:
    0x000668ec ldr r4, [r7, 0x2c]                                |         r4 = *((r7 + 0x2c));
    0x000668ee movs r3, 0                                        |         r3 = 0;
    0x000668f0 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x000668f2 add.w r3, fp, r4                                  |         r3 = fp + r4;
    0x000668f6 add.w r8, r4, 1                                   |         r8 = r4 + 1;
    0x000668fa add.w sl, r3, 2                                   |         sl = r3 + 2;
    0x000668fe adds r3, 1                                        |         r3++;
    0x00066900 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x00066902 str.w sl, [r7, 0x2c]                              |         __asm ("str.w sl, [r7, 0x2c]");
    0x00066906 str.w sl, [sp, 0x78]                              |         __asm ("str.w sl, [var_78h]");
    0x0006690a b.w 0x65f2c                                       |         goto label_0;
                                                                 | label_30:
    0x0006690e ldr r3, [r7]                                      |         r3 = *(r7);
    0x00066910 ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x00066912 lsls r2, r3, 0x1c                                 |         r2 = r3 << 0x1c;
    0x00066914 itt pl                                            |         
                                                                 |         if (r2 < r3) {
    0x00066916 movpl r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r2 < r3) {
    0x00066918 strbpl r3, [r7, 0x17]                             |             *((r7 + 0x17)) = r3;
                                                                 |         }
    0x0006691a b 0x6656e                                         |         goto label_10;
                                                                 | label_31:
    0x0006691c ldr r3, [r0]                                      |         r3 = *(r0);
    0x0006691e ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x00066920 lsls r1, r3, 0x1c                                 |         r1 = r3 << 0x1c;
    0x00066922 itt pl                                            |         
                                                                 |         if (r1 < r3) {
    0x00066924 movpl r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r1 < r3) {
    0x00066926 strbpl r3, [r0, 0x17]                             |             *((r0 + 0x17)) = r3;
                                                                 |         }
    0x00066928 b 0x66580                                         |         goto label_11;
                                                                 | label_25:
    0x00066a50 movs r3, 0                                        |         r3 = 0;
    0x00066a52 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00066a54 movs r1, 9                                        |         r1 = 9;
    0x00066a56 mov r0, r5                                        |         r0 = r5;
    0x00066a58 str r3, [sp]                                      |         *(sp) = r3;
    0x00066a5a bl 0x29a7c                                        |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00066a5e str r0, [sp, 0x34]                                |         var_34h = r0;
    0x00066a60 b.w 0x66088                                       |         goto label_12;
                                                                 | label_23:
    0x00066aae mov r3, ip                                        |         r3 = ip;
    0x00066ab0 mov r2, r8                                        |         r2 = r8;
    0x00066ab2 movs r1, 0x5a                                     |         r1 = 0x5a;
    0x00066ab4 mov r0, r5                                        |         r0 = r5;
    0x00066ab6 str r4, [sp]                                      |         *(sp) = r4;
    0x00066ab8 bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00066abc mov r3, r0                                        |         r3 = r0;
    0x00066abe b.w 0x66022                                       |         goto label_13;
    0x00066ac2 cmp.w ip, 0x59                                    |         
    0x00066ac6 beq.w 0x668ec                                     |         
                                                                 |     }
    0x00066aca ldr r1, [r6, 0x1c]                                |     r1 = *((r6 + 0x1c));
    0x00066acc ldr r0, [r7]                                      |     r0 = *(r7);
    0x00066ace bl 0x308c4                                        |     r0 = fcn_000308c4 (r0, r1);
    0x00066ad2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00066ad4 beq.w 0x66856                                     |         goto label_14;
                                                                 |     }
    0x00066ad8 movs r2, 3                                        |     r2 = 3;
    0x00066ada str r2, [sp, 0x74]                                |     var_74h = r2;
    0x00066adc b 0x66856                                         |     goto label_14;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x66bcc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00066bcc ()                                      | void fcn_00066bcc (int16_t arg_4h, int16_t arg_1ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_4;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch_3;
                                                                 |     int16_t var_20h_3;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_2ch_3;
                                                                 |     int16_t var_34h_2;
                                                                 |     int16_t var_38h_2;
                                                                 |     int16_t var_54h_2;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00066bcc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00066bd0 mov fp, r2                                        |     
    0x00066bd2 ldr r2, [pc, 0x31c]                               |     
    0x00066bd4 mov sb, r3                                        |     sb = r3;
    0x00066bd6 sub sp, 0x5c                                      |     
    0x00066bd8 mov r6, r0                                        |     r6 = r0;
    0x00066bda ldr r3, [pc, 0x318]                               |     r3 = *(0x66ef6);
    0x00066bdc add r2, pc                                        |     r2 = 0xcdad2;
    0x00066bde str r1, [sp, 0x2c]                                |     var_2ch_3 = r1;
    0x00066be0 ldr.w r8, [sp, 0x80]                              |     r8 = var_0h;
    0x00066be4 ldr r3, [r2, r3]                                  |     
    0x00066be6 ldr r2, [r0]                                      |     r2 = *(r0);
    0x00066be8 ldrd sl, r7, [sp, 0x84]                           |     __asm ("ldrd sl, r7, [var_4h]");
    0x00066bec ldr r3, [r3]                                      |     r3 = *(0xcdad2);
    0x00066bee str r3, [sp, 0x54]                                |     var_54h_2 = r3;
    0x00066bf0 mov.w r3, 0                                       |     r3 = 0;
    0x00066bf4 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00066bf6 str r2, [sp, 0x18]                                |     var_18h_2 = r2;
    0x00066bf8 str r3, [sp, 0x24]                                |     *((sp + 0x24)) = r3;
    0x00066bfa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00066bfc beq.w 0x66d10                                     |         goto label_10;
                                                                 |     }
    0x00066c00 ldr r3, [sp, 0x8c]                                |     r3 = var_ch_2;
    0x00066c02 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00066c04 beq.w 0x66d28                                     |         goto label_11;
                                                                 |     }
                                                                 | label_1:
    0x00066c08 ldr.w r3, [r8, 0x14]                              |     r3 = *((r8 + 0x14));
    0x00066c0c cmp r3, 0                                         |     
    0x00066c0e mov.w r3, 0                                       |     r3 = 0;
    0x00066c12 str r3, [sp, 0x28]                                |     x = r3;
                                                                 |     if (r3 <= 0) {
    0x00066c14 ble.w 0x66e82                                     |         goto label_12;
                                                                 |     }
                                                                 | label_2:
    0x00066c18 movs r3, 0                                        |     r3 = 0;
    0x00066c1a str r7, [sp, 0x88]                                |     var_8h = r7;
    0x00066c1c add r2, sp, 0x34                                  |     r2 += var_34h_2;
    0x00066c1e mov r7, sb                                        |     r7 = sb;
    0x00066c20 mov r4, r3                                        |     r4 = r3;
    0x00066c22 ldr.w sb, [sp, 0x88]                              |     sb = var_8h;
    0x00066c26 mov r5, r3                                        |     r5 = r3;
    0x00066c28 str r2, [sp, 0x14]                                |     var_14h_2 = r2;
    0x00066c2a str.w fp, [sp, 0x1c]                              |     __asm ("str.w fp, [arg_1ch]");
    0x00066c2e b 0x66c7e                                         |     
                                                                 |     while (sl != 0) {
    0x00066c30 ldrsh.w r3, [sl, r5, lsl 2]                       |         offset_0 = r5 << 2;
                                                                 |         r3 = *((sl + offset_0));
                                                                 | label_0:
    0x00066c34 ldr.w r2, [r8]                                    |         r2 = *(r8);
    0x00066c38 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00066c3c ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00066c3e ldr.w r0, [r2, r3, lsl 2]                         |         offset_1 = r3 << 2;
                                                                 |         r0 = *((r2 + offset_1));
    0x00066c42 str r0, [sp, 0x34]                                |         var_34h_2 = r0;
                                                                 |         if (r0 != 0) {
    0x00066c44 cbz r0, 0x66c4e                                   |             
    0x00066c46 blx 0x9e8c                                        |             r0 = fcn_00009e8c ();
    0x00066c4a bic r0, r0, 0xc0000000                            |             r0 = BIT_MASK (r0, 0xc0000000);
    0x00066c4c eors r0, r0                                       |             r0 = 0;
                                                                 |         }
    0x00066c4e movs r1, 0x3b                                     |         r1 = 0x3b;
    0x00066c50 movs r3, 0                                        |         r3 = 0;
    0x00066c52 str r0, [sp, 0x38]                                |         var_38h_2 = r0;
    0x00066c54 adds r5, 1                                        |         r5++;
    0x00066c56 ldrd r2, r0, [sp, 0x14]                           |         __asm ("ldrd r2, r0, [var_14h_2]");
    0x00066c58 movs r0, 5                                        |         r0 = 5;
    0x00066c5a bl 0x1db90                                        |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00066c5e mov r2, fp                                        |         r2 = fp;
    0x00066c60 mov r3, r0                                        |         r3 = r0;
    0x00066c62 movs r1, 0x35                                     |         r1 = 0x35;
    0x00066c64 mov r0, r6                                        |         r0 = r6;
    0x00066c66 bl 0x20c10                                        |         fcn_00020c10 (r0, r1, r2, r3);
    0x00066c6a mov r1, r4                                        |         r1 = r4;
    0x00066c6c mov r2, r0                                        |         r2 = r0;
    0x00066c6e mov r0, r6                                        |         r0 = r6;
    0x00066c70 bl 0x2c1c4                                        |         fcn_0002c1c4 (r0, r1, r2, r3);
    0x00066c74 ldr.w r3, [r8, 0x14]                              |         r3 = *((r8 + 0x14));
    0x00066c78 mov r4, r0                                        |         r4 = r0;
    0x00066c7a cmp r3, r5                                        |         
                                                                 |         if (r3 <= r5) {
    0x00066c7c ble 0x66ca2                                       |             goto label_13;
                                                                 |         }
    0x00066c7e mov.w r3, -1                                      |         r3 = -1;
                                                                 |         if (r7 != 0) {
    0x00066c82 cbz r7, 0x66c8a                                   |             
    0x00066c84 ldr r3, [r7, 4]                                   |             r3 = *((r7 + 4));
    0x00066c86 ldrsh.w r3, [r3, r5, lsl 1]                       |             offset_2 = r5 << 1;
                                                                 |             r3 = *((r3 + offset_2));
                                                                 |         }
    0x00066c8a ldr r1, [sp, 0x1c]                                |         r1 = *(arg_1ch);
    0x00066c8c mov r2, sb                                        |         r2 = sb;
    0x00066c8e mov r0, r6                                        |         r0 = r6;
    0x00066c90 bl 0x1ddac                                        |         r0 = fcn_0001ddac (r0, r1, r2, r3, r4, r5);
    0x00066c94 mov fp, r0                                        |         
    0x00066c96 cmp.w sl, 0                                       |         
    0x00066c9a bne 0x66c30                                       |         
                                                                 |     }
    0x00066c9c ldrsh.w r3, [r8, 0x24]                            |     r3 = *((r8 + 0x24));
    0x00066ca0 b 0x66c34                                         |     goto label_0;
                                                                 | label_13:
    0x00066ca2 str.w sb, [sp, 0x88]                              |     __asm ("str.w sb, [var_8h]");
    0x00066ca6 mov sb, r7                                        |     sb = r7;
    0x00066ca8 ldr.w fp, [sp, 0x1c]                              |     fp = *(arg_1ch);
    0x00066cac ldr r7, [sp, 0x88]                                |     r7 = var_8h;
    0x00066cae str r0, [sp, 0x20]                                |     var_20h_3 = r0;
                                                                 | label_7:
    0x00066cb0 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00066cb4 ldr r2, [sp, 0x8c]                                |     r2 = var_ch_2;
    0x00066cb6 cmp r3, fp                                        |     
    0x00066cb8 it eq                                             |     
                                                                 |     if (r3 == fp) {
    0x00066cba cmpeq r2, 1                                       |         __asm ("cmpeq r2, 1");
                                                                 |     }
                                                                 |     if (r3 == fp) {
    0x00066cbc beq.w 0x66dda                                     |         goto label_14;
                                                                 |     }
                                                                 | label_3:
    0x00066cc0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch_3;
    0x00066cc2 ldr r0, [sp, 0x14]                                |     r0 = var_14h_2;
    0x00066cc4 ldr r1, [sp, 0x20]                                |     r1 = var_20h_3;
    0x00066cc6 strd r6, r3, [sp, 0x34]                           |     __asm ("strd r6, r3, [sp, 0x34]");
    0x00066cca movs r3, 0                                        |     r3 = 0;
    0x00066ccc strd r3, r3, [sp, 0x3c]                           |     __asm ("strd r3, r3, [sp, 0x3c]");
    0x00066cd0 strd r3, r3, [sp, 0x44]                           |     __asm ("strd r3, r3, [sp, 0x44]");
    0x00066cd4 strd r3, r3, [sp, 0x4c]                           |     __asm ("strd r3, r3, [sp, 0x4c]");
    0x00066cd8 bl 0x2cfe8                                        |     fcn_0002cfe8 (r0, r1);
    0x00066cdc ldr r5, [r6, 0x24]                                |     r5 = *((r6 + 0x24));
    0x00066cde cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00066ce0 beq 0x66da8                                       |         goto label_15;
                                                                 |     }
                                                                 | label_5:
    0x00066ce2 ldr r3, [sp, 0x20]                                |     r3 = var_20h_3;
                                                                 |     if (r3 != 0) {
    0x00066ce4 cbz r3, 0x66cee                                   |         
    0x00066ce6 ldr r0, [sp, 0x18]                                |         r0 = var_18h_2;
    0x00066ce8 mov r1, r3                                        |         r1 = r3;
    0x00066cea bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
                                                                 |     }
    0x00066cee ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00066cf0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00066cf2 bne 0x66d70                                       |         goto label_16;
                                                                 |     }
                                                                 | label_4:
    0x00066cf4 ldr r2, [pc, 0x200]                               |     
    0x00066cf6 ldr r3, [pc, 0x1fc]                               |     r3 = *(0x66ef6);
    0x00066cf8 add r2, pc                                        |     r2 = 0xcdbf4;
    0x00066cfa ldr r3, [r2, r3]                                  |     r3 = *(0xcdbf4);
    0x00066cfc ldr r2, [r3]                                      |     r2 = *(0xcdbf4);
    0x00066cfe ldr r3, [sp, 0x54]                                |     r3 = var_54h_2;
    0x00066d00 eors r2, r3                                       |     r2 ^= r3;
    0x00066d02 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00066d06 bne.w 0x66eec                                     |         goto label_17;
                                                                 |     }
    0x00066d0a add sp, 0x5c                                      |     
    0x00066d0c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_10:
    0x00066d10 ldr r3, [r0, 0x74]                                |     r3 = *((r0 + 0x74));
    0x00066d12 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00066d14 beq.w 0x66e76                                     |         goto label_18;
                                                                 |     }
                                                                 | label_6:
    0x00066d18 mov r0, r6                                        |     r0 = r6;
    0x00066d1a bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x00066d1e ldr r3, [sp, 0x8c]                                |     r3 = var_ch_2;
    0x00066d20 str r0, [sp, 0x24]                                |     *((sp + 0x24)) = r0;
    0x00066d22 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 != 1) {
    0x00066d24 bne.w 0x66c08                                     |         goto label_1;
                                                                 |     }
                                                                 | label_11:
    0x00066d28 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00066d2a ldrb.w r2, [r8, 0x18]                             |     r2 = *((r8 + 0x18));
    0x00066d2e ldr r1, [r3, 0x6c]                                |     r1 = *((r3 + 0x6c));
    0x00066d30 ldr r3, [r3, 0x70]                                |     r3 = *((r3 + 0x70));
    0x00066d32 str r1, [sp, 0x28]                                |     x = r1;
    0x00066d34 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x00066d36 bge.w 0x66edc                                     |         goto label_19;
                                                                 |     }
    0x00066d3a ldr r1, [sp, 0x28]                                |     r1 = x;
    0x00066d3c movs r0, 0                                        |     r0 = 0;
    0x00066d3e ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x00066d40 add.w r3, r1, r1, lsl 2                           |     r3 = r1 + (r1 << 2);
    0x00066d44 ldr r4, [r5, 0x68]                                |     r4 = *((r5 + 0x68));
    0x00066d46 adds r1, 1                                        |     r1++;
    0x00066d48 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00066d4a str r1, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r1;
    0x00066d4c movs r5, 0x30                                     |     r5 = 0x30;
    0x00066d4e adds r1, r4, r3                                   |     r1 = r4 + r3;
    0x00066d50 strd r2, r0, [r1, 4]                              |     __asm ("strd r2, r0, [r1, 4]");
    0x00066d54 strd r0, r0, [r1, 0xc]                            |     __asm ("strd r0, r0, [r1, 0xc]");
    0x00066d58 str r5, [r4, r3]                                  |     *((r4 + r3)) = r5;
                                                                 | label_9:
    0x00066d5a ldr.w r3, [r8, 0x14]                              |     r3 = *((r8 + 0x14));
    0x00066d5e cmp r3, 0                                         |     
    0x00066d60 itttt le                                          |     
                                                                 |     if (r3 > 0) {
    0x00066d62 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x00066d64 strle r3, [sp, 0x20]                              |         var_20h_3 = r3;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x00066d66 addle r3, sp, 0x34                                |         r3 += var_34h_2;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00066d68 strle r3, [sp, 0x14]                              |         var_14h_2 = r3;
                                                                 |         goto label_20;
                                                                 |     }
                                                                 |     if (r3 > 0) {
                                                                 | label_20:
    0x00066d6a bgt.w 0x66c18                                     |         goto label_2;
                                                                 |     }
    0x00066d6e b 0x66cc0                                         |     goto label_3;
                                                                 | label_16:
    0x00066d70 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x00066d72 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00066d74 ldr r3, [r1, 0x6c]                                |     r3 = *((r1 + 0x6c));
    0x00066d76 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x00066d78 cmp r0, r2                                        |     
    0x00066d7a itt eq                                            |     
                                                                 |     if (r0 != r2) {
    0x00066d7c moveq r3, r1                                      |         r3 = r1;
                                                                 |     }
                                                                 |     if (r0 == r2) {
    0x00066d7e streq r0, [r3, 0x6c]                              |         *((r3 + 0x6c)) = r0;
                                                                 |         goto label_21;
                                                                 |     }
                                                                 |     if (r0 == r2) {
                                                                 | label_21:
    0x00066d80 beq 0x66cf4                                       |         goto label_4;
                                                                 |     }
    0x00066d82 ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x00066d84 ldr r4, [sp, 0x28]                                |     r4 = x;
    0x00066d86 ldr r1, [r5]                                      |     r1 = *(r5);
    0x00066d88 mov r0, r4                                        |     r0 = r4;
    0x00066d8a bics.w r0, r0, r4, asr 32                         |     __asm ("bics.w r0, r0, r4, asr 32");
    0x00066d8e it hs                                             |     
                                                                 |     if (r0 < r2) {
    0x00066d90 movhs r0, r2                                      |         r0 = r2;
                                                                 |     }
    0x00066d92 ldrb.w r2, [r1, 0x57]                             |     r2 = *((r1 + 0x57));
    0x00066d96 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00066d98 bne 0x66e8a                                       |         goto label_22;
                                                                 |     }
    0x00066d9a ldr r2, [r5, 0x68]                                |     r2 = *((r5 + 0x68));
    0x00066d9c add.w r1, r0, r0, lsl 2                           |     r1 = r0 + (r0 << 2);
    0x00066da0 add.w r2, r2, r1, lsl 2                           |     r2 += (r1 << 2);
                                                                 | label_8:
    0x00066da4 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x00066da6 b 0x66cf4                                         |     goto label_4;
                                                                 | label_15:
    0x00066da8 mov r3, r5                                        |     r3 = r5;
    0x00066daa ldr r1, [sp, 0x2c]                                |     r1 = var_2ch_3;
    0x00066dac ldr r2, [sp, 0x20]                                |     r2 = var_20h_3;
    0x00066dae mov r0, r6                                        |     r0 = r6;
    0x00066db0 strd r5, r5, [sp, 8]                              |     __asm ("strd r5, r5, [sp, 8]");
    0x00066db4 strd r5, r5, [sp]                                 |     __asm ("strd r5, r5, [sp]");
    0x00066db8 bl 0x61f10                                        |     fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x00066dbc str r5, [sp]                                      |     *(sp) = r5;
    0x00066dbe mov r5, r0                                        |     r5 = r0;
    0x00066dc0 ldrb.w r2, [r8, 0x18]                             |     r2 = *((r8 + 0x18));
    0x00066dc4 movs r1, 0x9e                                     |     r1 = 0x9e;
    0x00066dc6 ldr r3, [sp, 0x8c]                                |     r3 = var_ch_2;
    0x00066dc8 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00066dca bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00066dce cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00066dd0 beq 0x66ce2                                       |         goto label_5;
                                                                 |     }
    0x00066dd2 mov r0, r5                                        |     r0 = r5;
    0x00066dd4 bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00066dd8 b 0x66ce2                                         |     goto label_5;
                                                                 | label_14:
    0x00066dda ldr.w r3, [fp, 0x1c]                              |     r3 = *(arg_1ch);
    0x00066dde ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 == r3) {
    0x00066de2 beq 0x66e92                                       |         goto label_23;
                                                                 |     }
    0x00066de4 ldrh.w r1, [sb, 0x32]                             |     r1 = *((sb + 0x32));
                                                                 |     if (r1 == 0) {
    0x00066de8 cbz r1, 0x66e5c                                   |         goto label_24;
                                                                 |     }
    0x00066dea str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00066dee movs r1, 0                                        |     r1 = 0;
    0x00066df0 ldr.w r8, [sp, 0x18]                              |     r8 = var_18h_2;
    0x00066df4 mov r5, r1                                        |     r5 = r1;
    0x00066df6 mov r4, r1                                        |     r4 = r1;
                                                                 |     do {
    0x00066df8 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x00066dfc mov r2, r7                                        |         r2 = r7;
    0x00066dfe mov r1, fp                                        |         r1 = fp;
    0x00066e00 mov r0, r6                                        |         r0 = r6;
    0x00066e02 ldrsh.w sl, [r3, r5, lsl 1]                       |         offset_3 = r5 << 1;
                                                                 |         sl = *((r3 + offset_3));
    0x00066e06 mov r3, sl                                        |         r3 = sl;
    0x00066e08 bl 0x1ddac                                        |         fcn_0001ddac (r0, r1, r2, r3, r4, r5);
    0x00066e0c ldr.w r2, [fp, 4]                                 |         r2 = *(arg_4h);
    0x00066e10 add.w r3, sl, sl, lsl 1                           |         r3 = sl + (sl << 1);
    0x00066e14 mov sl, r0                                        |         sl = r0;
    0x00066e16 ldr.w r0, [r2, r3, lsl 2]                         |         offset_4 = r3 << 2;
                                                                 |         r0 = *((r2 + offset_4));
    0x00066e1a str r0, [sp, 0x34]                                |         var_34h_2 = r0;
                                                                 |         if (r0 != 0) {
    0x00066e1c cbz r0, 0x66e26                                   |             
    0x00066e1e blx 0x9e8c                                        |             r0 = fcn_00009e8c ();
    0x00066e22 bic r0, r0, 0xc0000000                            |             r0 = BIT_MASK (r0, 0xc0000000);
                                                                 |         }
    0x00066e26 ldr r2, [sp, 0x14]                                |         r2 = var_14h_2;
    0x00066e28 movs r1, 0x3b                                     |         r1 = 0x3b;
    0x00066e2a movs r3, 0                                        |         r3 = 0;
    0x00066e2c str r0, [sp, 0x38]                                |         var_38h_2 = r0;
    0x00066e2e mov r0, r8                                        |         r0 = r8;
    0x00066e30 adds r5, 1                                        |         r5++;
    0x00066e32 bl 0x1db90                                        |         fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00066e36 mov r2, sl                                        |         r2 = sl;
    0x00066e38 mov r3, r0                                        |         r3 = r0;
    0x00066e3a movs r1, 0x2d                                     |         r1 = 0x2d;
    0x00066e3c mov r0, r6                                        |         r0 = r6;
    0x00066e3e bl 0x20c10                                        |         fcn_00020c10 (r0, r1, r2, r3);
    0x00066e42 mov r1, r4                                        |         r1 = r4;
    0x00066e44 mov r2, r0                                        |         r2 = r0;
    0x00066e46 mov r0, r6                                        |         r0 = r6;
    0x00066e48 bl 0x2c1c4                                        |         fcn_0002c1c4 (r0, r1, r2, r3);
    0x00066e4c ldrh.w r3, [sb, 0x32]                             |         r3 = *((sb + 0x32));
    0x00066e50 mov r4, r0                                        |         r4 = r0;
    0x00066e52 cmp r3, r5                                        |         
    0x00066e54 bgt 0x66df8                                       |         
                                                                 |     } while (r3 > r5);
    0x00066e56 ldr.w r8, [sp, 0x1c]                              |     r8 = *(arg_1ch);
    0x00066e5a mov r1, r0                                        |     r1 = r0;
                                                                 | label_24:
    0x00066e5c mov r2, r1                                        |     r2 = r1;
    0x00066e5e movs r3, 0                                        |     r3 = 0;
    0x00066e60 movs r1, 0x13                                     |     r1 = 0x13;
    0x00066e62 mov r0, r6                                        |     r0 = r6;
    0x00066e64 bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x00066e68 mov r2, r0                                        |     r2 = r0;
                                                                 |     do {
    0x00066e6a ldr r1, [sp, 0x20]                                |         r1 = var_20h_3;
    0x00066e6c mov r0, r6                                        |         r0 = r6;
    0x00066e6e bl 0x2c1c4                                        |         fcn_0002c1c4 (r0, r1, r2, r3);
    0x00066e72 str r0, [sp, 0x20]                                |         var_20h_3 = r0;
    0x00066e74 b 0x66cc0                                         |         goto label_3;
                                                                 | label_18:
    0x00066e76 ldr r3, [r2, 0x50]                                |         r3 = *((r2 + 0x50));
    0x00066e78 lsls r3, r3, 0x1c                                 |         r3 <<= 0x1c;
    0x00066e7a itt pl                                            |         
                                                                 |         if (r3 < r3) {
    0x00066e7c movpl r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r3 < r3) {
    0x00066e7e strbpl r3, [r0, 0x17]                             |             *((r0 + 0x17)) = r3;
                                                                 |         }
    0x00066e80 b 0x66d18                                         |         goto label_6;
                                                                 | label_12:
    0x00066e82 add r2, sp, 0x34                                  |         r2 += var_34h_2;
    0x00066e84 str r3, [sp, 0x20]                                |         var_20h_3 = r3;
    0x00066e86 str r2, [sp, 0x14]                                |         var_14h_2 = r2;
    0x00066e88 b 0x66cb0                                         |         goto label_7;
                                                                 | label_22:
    0x00066e8a ldr r2, [pc, 0x70]                                |         
    0x00066e8c add r2, pc                                        |         r2 = 0xcdd8e;
    0x00066e8e adds r2, 4                                        |         r2 += 4;
    0x00066e90 b 0x66da4                                         |         goto label_8;
                                                                 | label_23:
    0x00066e92 ldr r0, [r6]                                      |         r0 = *(r6);
    0x00066e94 movs r1, 0xb0                                     |         r1 = 0xb0;
    0x00066e96 ldr r2, [sp, 0x14]                                |         r2 = var_14h_2;
    0x00066e98 strd r3, r3, [sp, 0x34]                           |         __asm ("strd r3, r3, [sp, 0x34]");
    0x00066e9c bl 0x1db90                                        |         r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00066ea0 mov r5, r0                                        |         r5 = r0;
                                                                 |         if (r0 != 0) {
    0x00066ea2 cbz r0, 0x66eaa                                   |             
    0x00066ea4 movs r3, 0x44                                     |             r3 = 0x44;
    0x00066ea6 str r7, [r0, 0x1c]                                |             *((r0 + 0x1c)) = r7;
    0x00066ea8 strb r3, [r0, 1]                                  |             *((r0 + 1)) = r3;
                                                                 |         }
    0x00066eaa ldr r4, [sp, 0x2c]                                |         r4 = var_2ch_3;
    0x00066eac movs r3, 0                                        |         r3 = 0;
    0x00066eae ldr r2, [sp, 0x14]                                |         r2 = var_14h_2;
    0x00066eb0 movs r1, 0xa7                                     |         r1 = 0xa7;
    0x00066eb2 ldr r0, [sp, 0x18]                                |         r0 = var_18h_2;
    0x00066eb4 strd r3, r3, [sp, 0x34]                           |         __asm ("strd r3, r3, [sp, 0x34]");
    0x00066eb8 ldr r4, [r4, 0x30]                                |         r4 = *((r4 + 0x30));
    0x00066eba bl 0x1db90                                        |         r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00066ebe mov r3, r0                                        |         r3 = r0;
                                                                 |         if (r0 != 0) {
    0x00066ec0 cbz r0, 0x66ece                                   |             
    0x00066ec2 movw r2, 0xffff                                   |             r2 = 0xffff;
    0x00066ec6 str.w fp, [r0, 0x2c]                              |             __asm ("str.w fp, [r0, 0x2c]");
    0x00066eca str r4, [r0, 0x1c]                                |             *((r0 + 0x1c)) = r4;
    0x00066ecc strh r2, [r0, 0x20]                               |             *((r0 + 0x20)) = r2;
                                                                 |         }
    0x00066ece mov r2, r5                                        |         r2 = r5;
    0x00066ed0 movs r1, 0x34                                     |         r1 = 0x34;
    0x00066ed2 mov r0, r6                                        |         r0 = r6;
    0x00066ed4 bl 0x20c10                                        |         r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x00066ed8 mov r2, r0                                        |         r2 = r0;
    0x00066eda b 0x66e6a                                         |         
                                                                 |     } while (1);
                                                                 | label_19:
    0x00066edc movs r3, 0                                        |     r3 = 0;
    0x00066ede ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00066ee0 movs r1, 0x30                                     |     r1 = 0x30;
    0x00066ee2 str r3, [sp]                                      |     *(sp) = r3;
    0x00066ee4 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00066ee8 str r0, [sp, 0x28]                                |     x = r0;
    0x00066eea b 0x66d5a                                         |     goto label_9;
                                                                 | label_17:
    0x00066eec blx 0x9b44                                        |     fcn_00009b44 ();
    0x00066ef0 ldr r7, [sp, 0x90]                                |     r7 = var_10h_2;
    0x00066ef2 movs r3, r0                                       |     r3 = r0;
    0x00066ef4 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00066ef6 movs r0, r0                                       |     
    0x00066ef8 ldr r6, [sp, 0x20]                                |     r6 = var_20h_3;
    0x00066efa movs r3, r0                                       |     r3 = r0;
    0x00066efc bkpt 0xd8                                         |     __asm ("bkpt 0xd8");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x67020 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00067020 ()                                      | void fcn_00067020 (arithmetic arg_0h, int16_t arg_8h, int16_t arg_10h, int16_t arg_13h, int16_t arg_17h, int16_t arg_18h, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_34h, int16_t arg_38h, int16_t arg_74h, int16_t arg_80h, int16_t arg_dch, int16_t arg1, int16_t arg2, arithmetic x) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     arithmetic 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_6ch;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int32_t var_88h_2;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int32_t var_a4h_2;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = x;
    0x00067020 push {r0, r1, fp, sp, lr}                         |     
    0x00067024 ldr r7, [pc, 0x3c0]                               |     r7 = *(0x673e8);
    0x00067026 mov r7, r2                                        |     r7 = r2;
    0x00067028 vpush {d8}                                        |     __asm ("vpush {d8}");
    0x0006702c sub sp, 0xbc                                      |     
    0x0006702e mov fp, r0                                        |     
    0x00067030 mov r4, r1                                        |     r4 = r1;
    0x00067032 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00067034 add.w sl, sp, 0x60                                |     sl += var_60h;
    0x00067038 ldr.w r2, [pc, 0xb18]                             |     
    0x0006703c mov r6, sl                                        |     r6 = sl;
    0x0006703e str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00067040 ldr.w r3, [pc, 0xb14]                             |     r3 = *(0x67b58);
    0x00067044 add r2, pc                                        |     r2 = 0xceb9c;
    0x00067046 ldr.w r8, [r1, 0x34]                              |     r8 = *((r1 + 0x34));
    0x0006704a ldr r5, [r0, 8]                                   |     r5 = *((r0 + 8));
    0x0006704c ldr r3, [r2, r3]                                  |     
    0x0006704e ldr r3, [r3]                                      |     r3 = *(0xceb9c);
    0x00067050 str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x00067052 mov.w r3, 0                                       |     r3 = 0;
    0x00067056 ldm r7!, {r0, r1, r2, r3}                         |     r0 = *(r7!);
                                                                 |     r1 = *((r7! + 4));
                                                                 |     r2 = *((r7! + 8));
                                                                 |     r3 = *((r7! + 12));
    0x00067058 stm r6!, {r0, r1, r2, r3}                         |     *(r6!) = r0;
                                                                 |     *((r6! + 4)) = r1;
                                                                 |     *((r6! + 8)) = r2;
                                                                 |     *((r6! + 12)) = r3;
    0x0006705a ldm.w r7, {r0, r1, r2}                            |     r0 = *(r7);
                                                                 |     r1 = *((r7 + 4));
                                                                 |     r2 = *((r7 + 8));
    0x0006705e stm.w r6, {r0, r1, r2}                            |     *(r6) = r0;
                                                                 |     *((r6 + 4)) = r1;
                                                                 |     *((r6 + 8)) = r2;
    0x00067060 movs r7, r0                                       |     r7 = r0;
    0x00067062 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00067064 beq.w 0x678f0                                     |         goto label_79;
                                                                 |     }
    0x00067068 ldrb.w r3, [sp, 0x60]                             |     r3 = var_60h;
    0x0006706c cmp r3, 0xc                                       |     
                                                                 |     if (r3 == 0xc) {
    0x0006706e beq.w 0x6790c                                     |         goto label_80;
                                                                 |     }
                                                                 | label_4:
    0x00067072 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00067074 lsls r6, r3, 0x15                                 |     r6 = r3 << 0x15;
                                                                 |     if (r6 < r3) {
    0x00067076 bmi.w 0x6792c                                     |         goto label_81;
                                                                 |     }
                                                                 | label_5:
    0x0006707a ands r3, r3, 0x2000                               |     r3 &= 0x2000;
                                                                 |     if (r3 == r3) {
    0x0006707e beq 0x67130                                       |         goto label_82;
                                                                 |     }
    0x00067080 mov r2, r4                                        |     r2 = r4;
                                                                 |     if (r3 == 0) {
    0x00067082 cbz r3, 0x67094                                   |         goto label_83;
                                                                 |     }
                                                                 |     do {
    0x00067084 ldr r2, [r2, 0x34]                                |         r2 = *((r2 + 0x34));
    0x00067086 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00067088 beq 0x67130                                       |             goto label_82;
                                                                 |         }
    0x0006708a ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x0006708c and r3, r3, 0x2000                                |         r3 &= 0x2000;
    0x00067090 cmp r3, 0                                         |         
    0x00067092 bne 0x67084                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_83:
    0x00067094 ldr r2, [r4, 0x44]                                |     r2 = *((r4 + 0x44));
    0x00067096 ldr r1, [r4, 0x1c]                                |     r1 = *((r4 + 0x1c));
    0x00067098 ldr r6, [r4, 0x20]                                |     r6 = *((r4 + 0x20));
    0x0006709a ldr.w r8, [fp, 8]                                 |     r8 = *(arg_8h);
    0x0006709e ldr r7, [r1]                                      |     r7 = *(r1);
    0x000670a0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000670a2 beq.w 0x679ac                                     |         goto label_84;
                                                                 |     }
    0x000670a4 strh r3, [r0, 0x24]                               |     *((r0 + 0x24)) = r3;
    0x000670a6 ldr.w r1, [pc, 0xab4]                             |     
    0x000670aa mov r0, fp                                        |     r0 = fp;
    0x000670ac add r1, pc                                        |     r1 = 0xcec0e;
    0x000670ae bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_7:
    0x000670b2 ldr.w r7, [fp, 0x24]                              |     r7 = *(arg_24h);
    0x000670b6 add r6, sp, 0x6c                                  |     r6 += var_6ch;
    0x000670b8 vld1.32 {d16}, [r6]                               |     __asm ("vld1.32 {d16}, [r6]");
    0x000670bc cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000670be bne.w 0x6799e                                     |         goto label_85;
                                                                 |     }
    0x000670c2 str r7, [sp, 0x1c]                                |     var_1ch = r7;
                                                                 | label_1:
    0x000670c4 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x000670c6 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
                                                                 |     if (r3 < r3) {
    0x000670c8 bmi.w 0x67f04                                     |         goto label_86;
                                                                 |     }
                                                                 | label_0:
    0x000670cc ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000670ce vld1.32 {d16}, [r6]                               |     __asm ("vld1.32 {d16}, [r6]");
    0x000670d2 adds r3, 0xc                                      |     r3 += 0xc;
    0x000670d4 vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
    0x000670d8 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if (r3 != 0) {
    0x000670da cbz r3, 0x6710a                                   |         
    0x000670dc ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x000670e0 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000670e2 beq.w 0x67b26                                     |             goto label_87;
                                                                 |         }
    0x000670e6 movs r2, 0xc                                      |         r2 = 0xc;
    0x000670e8 movs r3, 0                                        |         r3 = 0;
    0x000670ea bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
                                                                 | label_9:
    0x000670ee cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000670f0 beq.w 0x68180                                     |             goto label_88;
                                                                 |         }
    0x000670f4 ldr.w r3, [fp, 0x80]                              |         r3 = *(arg_80h);
    0x000670f8 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x000670fa str r3, [r0]                                      |         *(r0) = r3;
    0x000670fc ldr.w r3, [pc, 0xa60]                             |         r3 = *(0x00067b60);
    0x00067100 str.w r0, [fp, 0x80]                              |         __asm ("str.w r0, [arg_80h]");
    0x00067104 add r3, pc                                        |         r3 += pc;
    0x00067106 strd r2, r3, [r0, 4]                              |         __asm ("strd r2, r3, [r0, 4]");
                                                                 |     }
                                                                 | label_3:
    0x0006710a ldr.w r2, [pc, 0xa58]                             |     r2 = *(0x00067b64);
    0x0006710e ldr.w r3, [pc, 0xa48]                             |     r3 = *(0x67b5a);
    0x00067112 add r2, pc                                        |     r2 += pc;
    0x00067114 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00067116 ldr r2, [r3]                                      |     r2 = *(0x67b5a);
    0x00067118 ldr r3, [sp, 0xb4]                                |     r3 = var_b4h;
    0x0006711a eors r2, r3                                       |     r2 ^= r3;
    0x0006711c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00067120 bne.w 0x6882c                                     |         goto label_89;
                                                                 |     }
    0x00067124 mov r0, r7                                        |     r0 = r7;
    0x00067126 add sp, 0xbc                                      |     
    0x00067128 vpop {d8}                                         |     __asm ("vpop {d8}");
    0x0006712c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_82:
    0x00067130 ldr r7, [r4, 0x30]                                |     r7 = *((r4 + 0x30));
    0x00067132 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00067134 bne.w 0x6737c                                     |         goto label_90;
                                                                 |     }
    0x00067138 ldr.w r3, [r8, 0x34]                              |     r3 = *((r8 + 0x34));
    0x0006713c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006713e beq.w 0x68116                                     |         goto label_91;
                                                                 |     }
                                                                 | label_28:
    0x00067142 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00067144 cmp r3, 0x87                                      |     
                                                                 |     if (r3 == 0x87) {
    0x00067146 beq.w 0x67cf8                                     |         goto label_92;
                                                                 |     }
    0x0006714a adds r3, 0x7a                                     |     r3 += 0x7a;
    0x0006714c ands r3, r3, 0xfd                                 |     r3 &= 0xfd;
                                                                 |     if (r3 == r3) {
    0x00067150 beq.w 0x67b94                                     |         goto label_93;
                                                                 |     }
    0x00067154 ldrd r3, r2, [r5, 0x6c]                           |     __asm ("ldrd r3, r2, [r5, 0x6c]");
    0x00067158 ldr.w sb, [fp, 0x28]                              |     sb = *(arg_28h);
    0x0006715c cmp r3, r2                                        |     
    0x0006715e add.w r1, sb, 2                                   |     r1 = sb + 2;
    0x00067162 str.w r1, [fp, 0x28]                              |     __asm ("str.w r1, [arg_28h]");
                                                                 |     if (r3 >= r2) {
    0x00067166 bge.w 0x68256                                     |         goto label_94;
                                                                 |     }
    0x0006716a add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x0006716e ldr r6, [r5, 0x68]                                |     r6 = *((r5 + 0x68));
    0x00067170 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00067172 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00067174 str r1, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r1;
    0x00067176 movs r0, 0                                        |     r0 = 0;
    0x00067178 adds r1, r6, r2                                   |     r1 = r6 + r2;
    0x0006717a movs r7, 0x76                                     |     r7 = 0x76;
    0x0006717c strd sb, r0, [r1, 4]                              |     __asm ("strd sb, r0, [r1, 4]");
    0x00067180 strd r0, r0, [r1, 0xc]                            |     __asm ("strd r0, r0, [r1, 0xc]");
    0x00067184 str r7, [r6, r2]                                  |     *((r6 + r2)) = r7;
                                                                 | label_38:
    0x00067186 mov r6, r4                                        |     r6 = r4;
    0x00067188 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
                                                                 |     do {
    0x0006718a mov r3, r6                                        |         r3 = r6;
    0x0006718c ldr r6, [r6, 0x38]                                |         r6 = *((r6 + 0x38));
    0x0006718e cmp r6, 0                                         |         
    0x00067190 bne 0x6718a                                       |         
                                                                 |     } while (r6 != 0);
    0x00067192 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00067194 mov r1, r8                                        |     r1 = r8;
    0x00067196 mov r0, fp                                        |     r0 = fp;
    0x00067198 orr r2, r2, 0x20                                  |     r2 |= 0x20;
    0x0006719c str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x0006719e add r3, sp, 0x98                                  |     r3 += var_98h;
    0x000671a0 mov r2, r3                                        |     r2 = r3;
    0x000671a2 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000671a4 movs r3, 1                                        |     r3 = 1;
    0x000671a6 strd sb, r6, [sp, 0x9c]                           |     __asm ("strd sb, r6, [var_a0h]");
    0x000671aa str r6, [sp, 0xac]                                |     var_ach = r6;
    0x000671ac strd r6, r6, [sp, 0xa4]                           |     __asm ("strd r6, r6, [var_a4h]");
    0x000671b0 strb.w r3, [sp, 0x98]                             |     var_98h = r3;
    0x000671b4 bl 0x54c38                                        |     r0 = fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x000671b8 mov r7, r0                                        |     r7 = r0;
    0x000671ba cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000671bc bne.w 0x67b32                                     |         goto label_12;
                                                                 |     }
    0x000671c0 ldrd r3, r2, [r5, 0x6c]                           |     __asm ("ldrd r3, r2, [r5, 0x6c]");
    0x000671c4 add.w r1, sb, 1                                   |     r1 = sb + 1;
    0x000671c8 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x000671ca cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x000671cc bge.w 0x68614                                     |         goto label_95;
                                                                 |     }
    0x000671d0 add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x000671d4 ldr r0, [r5, 0x68]                                |     r0 = *((r5 + 0x68));
    0x000671d6 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x000671d8 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x000671da lsls r2, r2, 2                                    |     r2 <<= 2;
    0x000671dc str r1, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r1;
    0x000671de mov.w ip, 0x76                                    |     
    0x000671e2 adds r1, r0, r2                                   |     r1 = r0 + r2;
    0x000671e4 strd r7, r6, [r1, 4]                              |     __asm ("strd r7, r6, [r1, 4]");
    0x000671e8 strd r6, r6, [r1, 0xc]                            |     __asm ("strd r6, r6, [r1, 0xc]");
    0x000671ec str.w ip, [r0, r2]                                |     __asm ("str.w ip, [r0, r2]");
                                                                 | label_59:
    0x000671f0 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x000671f2 movs r2, 0                                        |     r2 = 0;
    0x000671f4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000671f6 ldr r6, [r4, 0x3c]                                |     r6 = *((r4 + 0x3c));
    0x000671f8 str r2, [r4, 0x34]                                |     *((r4 + 0x34)) = r2;
    0x000671fa str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x000671fc ldrb r3, [r4]                                     |     r3 = *(r4);
    0x000671fe str r2, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r2;
    0x00067200 cmp r3, 0x88                                      |     
                                                                 |     if (r3 == 0x88) {
    0x00067202 beq.w 0x68290                                     |         goto label_96;
                                                                 |     }
    0x00067206 cmp r3, 0x89                                      |     
                                                                 |     if (r3 == 0x89) {
    0x00067208 beq.w 0x6827c                                     |         goto label_97;
                                                                 |     }
    0x0006720c cmp r3, 0x87                                      |     
                                                                 |     if (r3 == 0x87) {
    0x0006720e beq.w 0x68272                                     |         goto label_98;
                                                                 |     }
    0x00067212 ldr.w r3, [pc, 0x954]                             |     r3 = *(0x00067b68);
    0x00067216 add r3, pc                                        |     r3 += pc;
                                                                 | label_40:
    0x00067218 ldr.w r2, [pc, 0x950]                             |     
    0x0006721c movs r1, 1                                        |     r1 = 1;
    0x0006721e mov r0, fp                                        |     r0 = fp;
    0x00067220 add r2, pc                                        |     r2 = 0xced90;
    0x00067222 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00067226 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00067228 mov r1, r4                                        |     r1 = r4;
    0x0006722a mov r0, fp                                        |     r0 = fp;
    0x0006722c bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00067230 ldr r1, [r4, 0x34]                                |     r1 = *((r4 + 0x34));
    0x00067232 mov r7, r0                                        |     r7 = r0;
    0x00067234 ldrsh.w r3, [r8, 2]                               |     r3 = *((r8 + 2));
    0x00067238 ldrsh.w r2, [r4, 2]                               |     r2 = *((r4 + 2));
    0x0006723c str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0006723e ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
    0x00067240 cmp r2, r3                                        |     
    0x00067242 str.w r8, [r4, 0x34]                              |     __asm ("str.w r8, [r4, 0x34]");
    0x00067246 it gt                                             |     
                                                                 |     if (r2 > r3) {
    0x00067248 strhgt r3, [r4, 2]                                |         __asm ("strhgt r3, [r4, 2]");
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x0006724a cbz r1, 0x67252                                   |         
    0x0006724c ldr r0, [sp, 0x18]                                |         r0 = var_18h;
    0x0006724e bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
                                                                 |     }
    0x00067252 str r6, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r6;
    0x00067254 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00067256 bne.w 0x67366                                     |         
    0x0006725a ldr.w r3, [fp, 0x38]                              |         r3 = *(arg_38h);
    0x0006725e mov r1, r4                                        |         r1 = r4;
    0x00067260 mov r0, fp                                        |         r0 = fp;
    0x00067262 subs r2, r3, 1                                    |         r2 = r3 - 1;
    0x00067264 str r3, [sp, 0x28]                                |         var_28h = r3;
    0x00067266 subs r3, 2                                        |         r3 -= 2;
    0x00067268 mov r6, r2                                        |         r6 = r2;
    0x0006726a str.w r3, [fp, 0x38]                              |         __asm ("str.w r3, [arg_38h]");
    0x0006726e str r2, [sp, 0x2c]                                |         var_2ch = r2;
    0x00067270 str r3, [sp, 0x24]                                |         var_24h = r3;
    0x00067272 bl 0x5b760                                        |         fcn_0005b760 (r0, r1, r2, r3);
    0x00067276 mov r3, r6                                        |         r3 = r6;
    0x00067278 mov r2, sb                                        |         r2 = sb;
    0x0006727a movs r1, 0x23                                     |         r1 = 0x23;
    0x0006727c mov r0, r5                                        |         r0 = r5;
    0x0006727e str r7, [sp]                                      |         *(sp) = r7;
    0x00067280 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00067284 ldrb.w r3, [fp, 0x13]                             |         r3 = *(arg_13h);
    0x00067288 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0006728a beq.w 0x686ca                                     |             goto label_99;
                                                                 |         }
    0x0006728e subs r3, 1                                        |         r3--;
    0x00067290 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x00067292 strb.w r3, [fp, 0x13]                             |         *(arg_13h) = r3;
    0x00067296 adds r3, 0x26                                     |         r3 += 0x26;
    0x00067298 ldr.w r6, [fp, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r6 = *((fp + offset_0));
                                                                 | label_63:
    0x0006729c ldrd r8, r3, [r5, 0x6c]                           |         __asm ("ldrd r8, r3, [r5, 0x6c]");
    0x000672a0 cmp r8, r3                                        |         
                                                                 |         if (r8 >= r3) {
    0x000672a2 bge.w 0x68768                                     |             goto label_100;
                                                                 |         }
    0x000672a6 add.w r3, r8, r8, lsl 2                           |         r3 = r8 + (r8 << 2);
    0x000672aa ldr r1, [r5, 0x68]                                |         r1 = *((r5 + 0x68));
    0x000672ac add.w r2, r8, 1                                   |         r2 = r8 + 1;
    0x000672b0 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x000672b2 str r2, [r5, 0x6c]                                |         *((r5 + 0x6c)) = r2;
    0x000672b4 movs r0, 0                                        |         r0 = 0;
    0x000672b6 adds r2, r1, r3                                   |         r2 = r1 + r3;
    0x000672b8 mov.w ip, 0x86                                    |         
    0x000672bc strd sb, r6, [r2, 4]                              |         __asm ("strd sb, r6, [r2, 4]");
    0x000672c0 strd r0, r0, [r2, 0xc]                            |         __asm ("strd r0, r0, [r2, 0xc]");
    0x000672c4 str.w ip, [r1, r3]                                |         __asm ("str.w ip, [r1, r3]");
                                                                 | label_70:
    0x000672c8 movs r3, 0                                        |         r3 = 0;
    0x000672ca movs r1, 0x1b                                     |         r1 = 0x1b;
    0x000672cc str r3, [sp, 4]                                   |         var_4h = r3;
    0x000672ce mov r0, r5                                        |         r0 = r5;
    0x000672d0 ldrd r2, r3, [sp, 0x20]                           |         __asm ("ldrd r2, r3, [var_20h]");
    0x000672d4 str r6, [sp]                                      |         *(sp) = r6;
    0x000672d6 bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                 |         if (r6 != 0) {
    0x000672da cbz r6, 0x672f0                                   |             
    0x000672dc ldrb.w r3, [fp, 0x13]                             |             r3 = *(arg_13h);
    0x000672e0 cmp r3, 7                                         |             
    0x000672e2 itttt ls                                          |             
                                                                 |             if (r3 > 7) {
    0x000672e4 addls r2, r3, 1                                   |                 r2 = r3 + 1;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x000672e6 addls r3, 0x26                                    |                 r3 += 0x26;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x000672e8 strbls r2, [fp, 0x13]                             |                 *(arg_13h) = r2;
                                                                 |             }
                                                                 |             if (r3 > 7) {
    0x000672ec str.w r6, [fp, r3, lsl 2]                         |                 __asm ("str.w r6, [fp, r3, lsl 2]");
                                                                 |                 goto label_101;
                                                                 |             }
                                                                 |         }
                                                                 | label_101:
    0x000672f0 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000672f2 mov r2, sb                                        |         r2 = sb;
    0x000672f4 ldr r6, [sp, 0x24]                                |         r6 = var_24h;
    0x000672f6 mov r1, r4                                        |         r1 = r4;
    0x000672f8 mov r0, fp                                        |         r0 = fp;
    0x000672fa str.w sl, [sp, 4]                                 |         __asm ("str.w sl, [var_4h]");
    0x000672fe str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00067300 movs r3, 0                                        |         r3 = 0;
    0x00067302 str r3, [sp]                                      |         *(sp) = r3;
    0x00067304 str r6, [sp, 8]                                   |         var_8h = r6;
    0x00067306 bl 0x5fbc0                                        |         fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x0006730a ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x0006730c mvns r2, r6                                       |         r2 = ~r6;
    0x0006730e ldrd r3, r1, [r0, 0x38]                           |         __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00067312 cmn r1, r3                                        |         
                                                                 |         if (r1 < r3) {
    0x00067314 bmi.w 0x6875e                                     |             goto label_102;
                                                                 |         }
    0x00067318 ldr r3, [r0, 0x40]                                |         r3 = *((r0 + 0x40));
    0x0006731a ldr r1, [r5, 0x6c]                                |         r1 = *((r5 + 0x6c));
    0x0006731c str.w r1, [r3, r2, lsl 2]                         |         __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_69:
    0x00067320 movs r2, 0                                        |         r2 = 0;
    0x00067322 mov r3, r8                                        |         r3 = r8;
    0x00067324 str r2, [sp]                                      |         *(sp) = r2;
    0x00067326 movs r1, 0x26                                     |         r1 = 0x26;
    0x00067328 mov r2, sb                                        |         r2 = sb;
    0x0006732a mov r0, r5                                        |         r0 = r5;
    0x0006732c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00067330 ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x00067332 ldrd r3, r2, [r0, 0x38]                           |         __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00067336 cmn r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x00067338 bmi.w 0x68750                                     |             goto label_103;
                                                                 |         }
    0x0006733c ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x0006733e ldr r2, [r0, 0x40]                                |         r2 = *((r0 + 0x40));
    0x00067340 ldr r1, [r5, 0x6c]                                |         r1 = *((r5 + 0x6c));
    0x00067342 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00067344 rsbs r3, r3, 0                                    |         r3 -= ;
    0x00067346 str r1, [r2, r3]                                  |         *((r2 + r3)) = r1;
                                                                 | label_68:
    0x00067348 movs r6, 0                                        |         r6 = 0;
    0x0006734a ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x0006734c mov r3, r6                                        |         r3 = r6;
    0x0006734e movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00067350 mov r0, r5                                        |         r0 = r5;
    0x00067352 str r6, [sp]                                      |         *(sp) = r6;
    0x00067354 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00067358 mov r2, sb                                        |         r2 = sb;
    0x0006735a mov r3, r6                                        |         r3 = r6;
    0x0006735c movs r1, 0x7a                                     |         r1 = 0x7a;
    0x0006735e mov r0, r5                                        |         r0 = r5;
    0x00067360 str r6, [sp]                                      |         *(sp) = r6;
    0x00067362 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_11:
    0x00067366 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x00067368 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006736a beq.w 0x680e0                                     |         goto label_104;
                                                                 |     }
                                                                 | label_27:
    0x0006736e ldr.w r3, [fp, 0x24]                              |     r3 = *(arg_24h);
    0x00067372 add r6, sp, 0x6c                                  |     r6 += var_6ch;
    0x00067374 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00067376 bne.w 0x670cc                                     |         goto label_0;
                                                                 |     }
    0x0006737a b 0x670c4                                         |     goto label_1;
                                                                 | label_90:
    0x0006737c ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00067380 ldr r5, [r7]                                      |     r5 = *(r7);
    0x00067382 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x00067386 subs r2, r3, 2                                    |     r2 = r3 - 2;
    0x00067388 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0006738a str r2, [sp, 0x30]                                |     var_30h = r2;
    0x0006738c subs r3, 1                                        |     r3--;
    0x0006738e str.w r2, [fp, 0x38]                              |     __asm ("str.w r2, [arg_38h]");
    0x00067392 ldrb r2, [r4]                                     |     r2 = *(r4);
    0x00067394 ldr.w r6, [fp, 8]                                 |     r6 = *(arg_8h);
    0x00067398 str r1, [sp, 0x28]                                |     var_28h = r1;
    0x0006739a cmp r2, 0x87                                      |     
    0x0006739c str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0006739e str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 |     if (r2 == 0x87) {
    0x000673a0 beq.w 0x681fa                                     |         goto label_105;
                                                                 |     }
    0x000673a4 ldrb.w r0, [r1, 0x57]                             |     r0 = *((r1 + 0x57));
    0x000673a8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000673aa bne.w 0x68730                                     |         goto label_106;
                                                                 |     }
    0x000673ae ldr.w sl, [sp, 0x28]                              |     sl = var_28h;
    0x000673b2 mov.w r8, 1                                       |     r8 = 1;
    0x000673b6 mov sb, r0                                        |     sb = r0;
    0x000673b8 add r3, sp, 0x98                                  |     r3 += var_98h;
    0x000673ba str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_2:
    0x000673bc ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x000673be ldr r3, [r3]                                      |     r3 = *(r3);
    0x000673c0 cmp r3, r8                                        |     
                                                                 |     if (r3 < r8) {
    0x000673c2 blt 0x673f0                                       |         goto label_107;
                                                                 |     }
    0x000673c4 cmp r5, 0                                         |     
    0x000673c6 add.w r2, r7, 8                                   |     r2 = r7 + 8;
    0x000673ca mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r5 > 0) {
    0x000673ce bgt 0x673dc                                       |         goto label_108;
                                                                 |     }
    0x000673d0 b 0x673e2                                         |     goto label_109;
                                                                 |     do {
    0x000673d2 adds r3, 1                                        |         r3++;
    0x000673d4 adds r2, 0x10                                     |         r2 += 0x10;
    0x000673d6 cmp r3, r5                                        |         
                                                                 |         if (r3 == r5) {
    0x000673d8 beq.w 0x67ae4                                     |             goto label_110;
                                                                 |         }
                                                                 | label_108:
    0x000673dc ldrh r1, [r2, 0xc]                                |         r1 = *((r2 + 0xc));
    0x000673de cmp r1, r8                                        |         
    0x000673e0 bne 0x673d2                                       |         
                                                                 |     } while (r1 != r8);
                                                                 | label_109:
    0x000673e2 cmp r3, r5                                        |     
                                                                 |     if (r3 == r5) {
    0x000673e4 beq.w 0x67ae4                                     |         goto label_110;
                                                                 |     }
                                                                 | label_8:
    0x000673e8 add.w r8, r8, 1                                   |     r8++;
    0x000673ec cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000673ee beq 0x673bc                                       |         goto label_2;
                                                                 |     }
                                                                 | label_107:
    0x000673f0 adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x000673f2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000673f4 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x000673f6 movs r3, 0                                        |     r3 = 0;
    0x000673f8 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x000673fc str r0, [sp, 0x38]                                |     var_38h = r0;
    0x000673fe cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00067400 beq.w 0x67e10                                     |         goto label_111;
                                                                 |     }
                                                                 | label_36:
    0x00067404 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00067406 cmp r5, 0                                         |     
    0x00067408 add.w r2, r7, 8                                   |     r2 = r7 + 8;
    0x0006740c str r5, [r3]                                      |     *(r3) = r5;
                                                                 |     if (r5 <= 0) {
    0x0006740e ble 0x67424                                       |         goto label_112;
                                                                 |     }
    0x00067410 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00067412 add.w r0, r1, r5, lsl 2                           |     r0 = r1 + (r5 << 2);
                                                                 |     do {
    0x00067416 ldrh r3, [r2, 0xc]                                |         r3 = *((r2 + 0xc));
    0x00067418 adds r2, 0x10                                     |         r2 += 0x10;
    0x0006741a subs r3, 1                                        |         r3--;
    0x0006741c str r3, [r1, 4]!                                  |         *((r1 += 4)) = r3;
    0x00067420 cmp r0, r1                                        |         
    0x00067422 bne 0x67416                                       |         
                                                                 |     } while (r0 != r1);
                                                                 | label_112:
    0x00067424 mov r1, r4                                        |     r1 = r4;
    0x00067426 mov r0, fp                                        |     r0 = fp;
    0x00067428 bl 0x28228                                        |     fcn_00028228 (r0, r1, r2);
    0x0006742c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0006742e str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x00067430 cmp r3, 0x87                                      |     
                                                                 |     if (r3 != 0x87) {
    0x00067432 bne.w 0x67e14                                     |         goto label_67;
                                                                 |     }
    0x00067436 ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x00067438 movs r2, 1                                        |     r2 = 1;
    0x0006743a mov.w sb, 0                                       |     sb = 0;
    0x0006743e strd r2, sb, [sp, 0x40]                           |     __asm ("strd r2, sb, [var_44h]");
                                                                 | label_19:
    0x00067442 mov r8, r3                                        |     r8 = r3;
    0x00067444 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00067446 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00067448 lsls r2, r3, 0xa                                  |     r2 = r3 << 0xa;
                                                                 |     if (r2 >= r3) {
    0x0006744a bpl.w 0x68216                                     |         goto label_113;
                                                                 |     }
                                                                 | label_18:
    0x0006744e str r4, [sp, 0x34]                                |     var_34h = r4;
                                                                 | label_37:
    0x00067450 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00067452 mov r1, r7                                        |     r1 = r7;
    0x00067454 ldr.w r7, [pc, 0x718]                             |     
    0x00067458 movs r2, 0                                        |     r2 = 0;
    0x0006745a ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0006745e str r2, [r3, 0x34]                                |     *((r3 + 0x34)) = r2;
    0x00067460 add r7, pc                                        |     r7 = 0xcefd4;
    0x00067462 str.w r2, [r8, 0x38]                              |     __asm ("str.w r2, [r8, 0x38]");
    0x00067466 bl 0x2dffc                                        |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x0006746a mov r1, r4                                        |     r1 = r4;
    0x0006746c str.w r0, [r8, 0x30]                              |     __asm ("str.w r0, [r8, 0x30]");
    0x00067470 mov r3, r7                                        |     r3 = r7;
    0x00067472 ldr r2, [r4, 0x30]                                |     r2 = *((r4 + 0x30));
    0x00067474 mov r0, fp                                        |     r0 = fp;
    0x00067476 bl 0x2e624                                        |     fcn_0002e624 (r0, r1, r2, r3);
    0x0006747a mov r3, r7                                        |     r3 = r7;
    0x0006747c ldr.w r2, [r8, 0x30]                              |     r2 = *((r8 + 0x30));
    0x00067480 mov r1, r8                                        |     r1 = r8;
    0x00067482 mov r0, fp                                        |     r0 = fp;
    0x00067484 bl 0x2e624                                        |     fcn_0002e624 (r0, r1, r2, r3);
    0x00067488 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0006748a mov r1, r4                                        |     r1 = r4;
    0x0006748c mov r0, fp                                        |     r0 = fp;
    0x0006748e bl 0x5b760                                        |     fcn_0005b760 (r0, r1, r2, r3);
    0x00067492 ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x00067494 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00067496 subs r3, r2, 0                                    |     r3 = r2 - 0;
    0x00067498 it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x0006749a movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0006749c cmp r1, 0x87                                      |     
    0x0006749e it ne                                             |     
                                                                 |     if (r1 == 0x87) {
    0x000674a0 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000674a2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000674a4 bne.w 0x6830e                                     |         goto label_114;
                                                                 |     }
    0x000674a8 mov sl, r3                                        |     sl = r3;
    0x000674aa str r3, [sp, 0x48]                                |     var_48h = r3;
                                                                 | label_46:
    0x000674ac ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
                                                                 |     if (r1 != 0) {
    0x000674ae cbz r1, 0x674b6                                   |         
    0x000674b0 ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x000674b2 bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
                                                                 |     }
    0x000674b6 ldr.w r2, [fp, 0x2c]                              |     r2 = *(arg_2ch);
    0x000674ba movs r3, 0                                        |     r3 = 0;
    0x000674bc str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x000674be movs r1, 0xd                                      |     r1 = 0xd;
    0x000674c0 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x000674c2 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x000674c4 strd r3, r3, [sp, 0x88]                           |     __asm ("strd r3, r3, [var_88h]");
    0x000674c8 str r3, [sp, 0xa0]                                |     var_a0h = r3;
    0x000674ca str r3, [sp, 0xac]                                |     var_ach = r3;
    0x000674cc strd r3, r3, [sp, 0xa4]                           |     __asm ("strd r3, r3, [var_a4h]");
    0x000674d0 adds r3, r2, 4                                    |     r3 = r2 + 4;
    0x000674d2 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x000674d4 str.w r3, [fp, 0x2c]                              |     __asm ("str.w r3, [arg_2ch]");
    0x000674d8 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x000674da strb.w r1, [sp, 0x7c]                             |     var_7ch = r1;
    0x000674de strb.w r1, [sp, 0x98]                             |     var_98h = r1;
    0x000674e2 adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x000674e4 cmp r3, 0x88                                      |     
    0x000674e6 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x000674e8 str r1, [sp, 0x80]                                |     var_80h = r1;
    0x000674ea add.w r1, r2, 2                                   |     r1 = r2 + 2;
    0x000674ee add.w r2, r2, 3                                   |     r2 += 3;
    0x000674f2 str r1, [sp, 0x24]                                |     var_24h = r1;
    0x000674f4 str r1, [sp, 0x9c]                                |     var_9ch = r1;
    0x000674f6 str r2, [sp, 0x3c]                                |     var_3ch = r2;
                                                                 |     if (r3 == 0x88) {
    0x000674f8 beq.w 0x681bc                                     |         goto label_115;
                                                                 |     }
    0x000674fc cmp r3, 0x89                                      |     
                                                                 |     if (r3 == 0x89) {
    0x000674fe beq.w 0x680d6                                     |         goto label_116;
                                                                 |     }
    0x00067502 cmp r3, 0x87                                      |     
                                                                 |     if (r3 == 0x87) {
    0x00067504 beq.w 0x680cc                                     |         goto label_117;
                                                                 |     }
    0x00067508 ldr.w r3, [pc, 0x668]                             |     
    0x0006750c add r3, pc                                        |     r3 = 0xcf084;
                                                                 | label_26:
    0x0006750e ldr.w r2, [pc, 0x668]                             |     r2 = *(0x00067b78);
    0x00067512 movs r1, 1                                        |     r1 = 1;
    0x00067514 mov r0, fp                                        |     r0 = fp;
    0x00067516 add r2, pc                                        |     r2 += pc;
    0x00067518 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x0006751c ldrd r7, r3, [r6, 0x6c]                           |     __asm ("ldrd r7, r3, [r6, 0x6c]");
    0x00067520 cmp r7, r3                                        |     
    0x00067522 add.w r1, r7, 1                                   |     r1 = r7 + 1;
                                                                 |     if (r7 >= r3) {
    0x00067526 bge.w 0x682a2                                     |         goto label_118;
                                                                 |     }
    0x0006752a add.w r3, r7, r7, lsl 2                           |     r3 = r7 + (r7 << 2);
    0x0006752e ldr r0, [r6, 0x68]                                |     r0 = *((r6 + 0x68));
    0x00067530 str r1, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r1;
    0x00067532 mov.w ip, 0                                       |     
    0x00067536 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00067538 mov.w lr, 0xa                                     |     lr = 0xa;
    0x0006753c adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x0006753e str r1, [r2, 0xc]                                 |     *((r2 + 0xc)) = r1;
    0x00067540 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00067542 str.w ip, [r2, 0x10]                              |     __asm ("str.w ip, [r2, 0x10]");
    0x00067546 strd r1, ip, [r2, 4]                              |     __asm ("strd r1, ip, [r2, 4]");
    0x0006754a str.w lr, [r0, r3]                                |     __asm ("str.w lr, [r0, r3]");
                                                                 | label_41:
    0x0006754e ldr.w r2, [pc, 0x62c]                             |     r2 = *(0x00067b7c);
    0x00067552 movs r1, 1                                        |     r1 = 1;
    0x00067554 mov r0, fp                                        |     r0 = fp;
    0x00067556 str.w sl, [r8, 8]                                 |     __asm ("str.w sl, [r8, 8]");
    0x0006755a mov.w sl, 0                                       |     sl = 0;
    0x0006755e add r2, pc                                        |     r2 += pc;
    0x00067560 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00067564 add r3, sp, 0x7c                                  |     r3 += var_7ch;
    0x00067566 mov r1, r8                                        |     r1 = r8;
    0x00067568 mov r2, r3                                        |     r2 = r3;
    0x0006756a mov r0, fp                                        |     r0 = fp;
    0x0006756c str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0006756e bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00067572 mov r3, sl                                        |     r3 = sl;
    0x00067574 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00067578 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0006757a movs r1, 0x44                                     |     r1 = 0x44;
    0x0006757c mov r0, r6                                        |     r0 = r6;
    0x0006757e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00067582 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00067584 cmp r7, 0                                         |     
    0x00067586 strb.w sl, [r3, 0x13]                             |     *((r3 + 0x13)) = sl;
    0x0006758a str.w sl, [r3, 0x1c]                              |     __asm ("str.w sl, [r3, 0x1c]");
    0x0006758e ldr r3, [r6]                                      |     r3 = *(r6);
    0x00067590 ldr.w sl, [r6, 0x6c]                              |     sl = *((r6 + 0x6c));
    0x00067594 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00067598 it lt                                             |     
                                                                 |     if (r7 >= 0) {
    0x0006759a addlt r7, sl, -1                                  |         r7 = sl + -1;
                                                                 |     }
    0x0006759e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000675a0 bne.w 0x67db2                                     |         goto label_119;
                                                                 |     }
    0x000675a4 ldr r3, [r6, 0x68]                                |     r3 = *((r6 + 0x68));
    0x000675a6 add.w r7, r7, r7, lsl 2                           |     r7 += (r7 << 2);
    0x000675aa add.w r3, r3, r7, lsl 2                           |     r3 += (r7 << 2);
                                                                 | label_13:
    0x000675ae str.w sl, [r3, 8]                                 |     __asm ("str.w sl, [r3, 8]");
    0x000675b2 add.w r1, sl, 1                                   |     r1 = sl + 1;
    0x000675b6 ldr r3, [r6, 0x70]                                |     r3 = *((r6 + 0x70));
    0x000675b8 cmp sl, r3                                        |     
                                                                 |     if (sl >= r3) {
    0x000675ba bge.w 0x682b6                                     |         goto label_120;
                                                                 |     }
    0x000675be add.w r3, sl, sl, lsl 2                           |     r3 = sl + (sl << 2);
    0x000675c2 ldr r0, [r6, 0x68]                                |     r0 = *((r6 + 0x68));
    0x000675c4 str r1, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r1;
    0x000675c6 movs r7, 0                                        |     r7 = 0;
    0x000675c8 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000675ca mov.w ip, 0xa                                     |     
    0x000675cc lsrs r2, r1, 0x10                                 |     r2 = r1 >> 0x10;
    0x000675ce adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x000675d0 str r1, [r2, 0xc]                                 |     *((r2 + 0xc)) = r1;
    0x000675d2 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000675d4 str r7, [r2, 0x10]                                |     *((r2 + 0x10)) = r7;
    0x000675d6 strd r1, r7, [r2, 4]                              |     __asm ("strd r1, r7, [r2, 4]");
    0x000675da str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
                                                                 | label_42:
    0x000675de add.w r3, r4, 8                                   |     r3 = r4 + 8;
    0x000675e2 ldr.w r2, [pc, 0x59c]                             |     r2 = *(0x00067b80);
    0x000675e6 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x000675e8 movs r7, 0                                        |     r7 = 0;
    0x000675ea vld1.32 {d8}, [r3]                                |     __asm ("vld1.32 {d8}, [r3]");
    0x000675ee movs r1, 1                                        |     r1 = 1;
    0x000675f0 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x000675f2 add r2, pc                                        |     r2 += pc;
    0x000675f4 mov r0, fp                                        |     r0 = fp;
    0x000675f6 str r7, [r4, 0xc]                                 |     *((r4 + 0xc)) = r7;
    0x000675f8 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x000675fa bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x000675fe ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00067600 mov r1, r4                                        |     r1 = r4;
    0x00067602 mov r0, fp                                        |     r0 = fp;
    0x00067604 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00067608 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0006760a movs r1, 0x44                                     |     r1 = 0x44;
    0x0006760c ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0006760e mov r0, r6                                        |     r0 = r6;
    0x00067610 vst1.32 {d8}, [r3]                                |     __asm ("vst1.32 {d8}, [r3]");
    0x00067614 mov r3, r7                                        |     r3 = r7;
    0x00067616 str r7, [sp]                                      |     *(sp) = r7;
    0x00067618 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006761c ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x0006761e mov r1, r4                                        |     r1 = r4;
    0x00067620 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x00067622 mov r0, fp                                        |     r0 = fp;
    0x00067624 strb r7, [r3, 0x13]                               |     *((r3 + 0x13)) = r7;
    0x00067626 str r7, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r7;
    0x00067628 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006762a strd sb, r3, [sp, 8]                              |     __asm ("strd sb, r3, [var_8h]");
    0x0006762e ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00067630 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00067632 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00067634 str r3, [sp]                                      |     *(sp) = r3;
    0x00067636 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00067638 bl 0x309b8                                        |     fcn_000309b8 (r0, r1, r2, r3, r4, r5, r6);
    0x0006763c ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006763e str r0, [sp, 0x48]                                |     var_48h = r0;
    0x00067640 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00067642 bls.w 0x67f88                                     |         goto label_121;
                                                                 |     }
    0x00067646 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0006764a beq.w 0x6829a                                     |         goto label_122;
                                                                 |     }
    0x0006764e str r7, [sp, 0x54]                                |     var_54h = r7;
                                                                 | label_21:
    0x00067650 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00067654 subs r3, 1                                        |     r3--;
    0x00067656 str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x0006765a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006765c beq.w 0x681ec                                     |         goto label_123;
                                                                 |     }
                                                                 | label_35:
    0x00067660 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00067662 subs r3, 0x88                                     |     r3 -= 0x88;
    0x00067664 cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x00067666 bhi.w 0x67fac                                     |         goto label_124;
                                                                 |     }
    0x0006766a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006766c str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0006766e str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_22:
    0x00067670 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00067672 ldrd r3, r2, [r6, 0x6c]                           |     __asm ("ldrd r3, r2, [r6, 0x6c]");
    0x00067676 cmp r1, 0x89                                      |     
    0x00067678 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     if (r1 != 0x89) {
    0x0006767a bne.w 0x67dc8                                     |         goto label_125;
                                                                 |     }
    0x0006767e ldrsh.w r1, [r8, 2]                               |     r1 = *((r8 + 2));
    0x00067682 ldrsh.w r0, [r4, 2]                               |     r0 = *((r4 + 2));
    0x00067686 cmp r0, r1                                        |     
    0x00067688 it gt                                             |     
                                                                 |     if (r0 > r1) {
    0x0006768a strhgt r1, [r4, 2]                                |         __asm ("strhgt r1, [r4, 2]");
                                                                 |     }
    0x0006768c ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0006768e str r1, [sp, 0x14]                                |     var_14h = r1;
                                                                 | label_15:
    0x00067690 cmp r3, r2                                        |     
    0x00067692 mov r4, r3                                        |     r4 = r3;
                                                                 |     if (r3 >= r2) {
    0x00067694 bge.w 0x682f8                                     |         goto label_126;
                                                                 |     }
    0x00067698 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0006769c ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x0006769e ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x000676a0 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x000676a2 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000676a4 str r2, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r2;
    0x000676a6 movs r0, 0                                        |     r0 = 0;
    0x000676a8 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x000676aa mov.w ip, 9                                       |     
    0x000676ae str r7, [r2, 4]                                   |     *((r2 + 4)) = r7;
    0x000676b0 ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x000676b2 str r0, [r2, 0x10]                                |     *((r2 + 0x10)) = r0;
    0x000676b4 strd r7, r0, [r2, 8]                              |     __asm ("strd r7, r0, [r2, 8]");
    0x000676b8 str.w ip, [r1, r3]                                |     __asm ("str.w ip, [r1, r3]");
                                                                 | label_45:
    0x000676bc mov.w sb, 0                                       |     sb = 0;
    0x000676c0 ldrd r3, r2, [sp, 0x1c]                           |     __asm ("ldrd r3, r2, [var_1ch]");
    0x000676c4 movs r1, 0xb                                      |     r1 = 0xb;
    0x000676c6 mov r0, r6                                        |     r0 = r6;
    0x000676c8 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000676cc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000676d0 ldrd r3, r2, [r6, 0x6c]                           |     __asm ("ldrd r3, r2, [r6, 0x6c]");
    0x000676d4 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x000676d6 bge.w 0x682e0                                     |         goto label_127;
                                                                 |     }
    0x000676da add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x000676de ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x000676e0 ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x000676e2 adds r3, 1                                        |     r3++;
    0x000676e4 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x000676e6 str r3, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r3;
    0x000676e8 movs r0, 8                                        |     r0 = 8;
    0x000676ea str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000676ec adds r3, r1, r2                                   |     r3 = r1 + r2;
    0x000676ee strd r7, sb, [r3, 8]                              |     __asm ("strd r7, sb, [r3, 8]");
    0x000676f2 str.w sb, [r3, 0x10]                              |     __asm ("str.w sb, [r3, 0x10]");
    0x000676f4 str r0, [sp, 0x40]                                |     *((sp + 0x40)) = r0;
    0x000676f6 str r0, [r1, r2]                                  |     *((r1 + r2)) = r0;
    0x000676f8 str.w sb, [r3, 4]                                 |     __asm ("str.w sb, [r3, 4]");
                                                                 | label_44:
    0x000676fc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000676fe cmp r3, 0x87                                      |     
    0x00067700 it eq                                             |     
                                                                 |     if (r3 != 0x87) {
    0x00067702 streq r4, [sp, 0x18]                              |         var_18h = r4;
                                                                 |     }
                                                                 |     if (r3 != 0x87) {
    0x00067704 beq 0x67750                                       |         
    0x00067706 cmp r3, 0x89                                      |         
    0x00067708 itt eq                                            |         
                                                                 |         if (r3 != 0x89) {
    0x0006770a addeq r3, r4, 1                                   |             r3 = r4 + 1;
                                                                 |         }
                                                                 |         if (r3 != 0x89) {
    0x0006770c streq r3, [sp, 0x18]                              |             var_18h = r3;
                                                                 |         }
                                                                 |         if (r3 == 0x89) {
    0x0006770e beq 0x67750                                       |             goto label_128;
                                                                 |         }
    0x00067710 ldr r3, [r6, 0x70]                                |         r3 = *((r6 + 0x70));
    0x00067712 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00067714 cmp r3, r2                                        |         
                                                                 |         if (r3 <= r2) {
    0x00067716 ble.w 0x685e8                                     |             goto label_129;
                                                                 |         }
    0x0006771a ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x0006771c mov.w ip, 0                                       |         
    0x00067720 ldr r0, [r6, 0x68]                                |         r0 = *((r6 + 0x68));
    0x00067722 ldr r7, [sp, 0x1c]                                |         r7 = var_1ch;
    0x00067724 mov r1, r2                                        |         r1 = r2;
    0x00067726 add.w r3, r2, r2, lsl 2                           |         r3 = r2 + (r2 << 2);
    0x0006772a adds r2, 1                                        |         r2++;
    0x0006772c str r2, [r6, 0x6c]                                |         *((r6 + 0x6c)) = r2;
    0x0006772e lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00067730 adds r2, r0, r3                                   |         r2 = r0 + r3;
    0x00067732 str r7, [r2, 8]                                   |         *((r2 + 8)) = r7;
    0x00067734 ldr r7, [sp, 0x20]                                |         r7 = var_20h;
    0x00067736 strd ip, ip, [r2, 0xc]                            |         __asm ("strd ip, ip, [r2, 0xc]");
    0x0006773a str r7, [r2, 4]                                   |         *((r2 + 4)) = r7;
    0x0006773c movs r2, 0xb                                      |         r2 = 0xb;
    0x0006773e str r2, [r0, r3]                                  |         *((r0 + r3)) = r2;
                                                                 | label_58:
    0x00067740 str r4, [sp, 0x18]                                |         var_18h = r4;
    0x00067742 mov r0, r6                                        |         r0 = r6;
    0x00067744 mov r4, r1                                        |         r4 = r1;
    0x00067746 ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x00067748 bl 0x2a2e4                                        |         fcn_0002a2e4 (r0, r1, r2);
    0x0006774c ldr r3, [r6, 0x6c]                                |         r3 = *((r6 + 0x6c));
    0x0006774e str r3, [sp, 0x2c]                                |         var_2ch = r3;
                                                                 |     }
                                                                 | label_128:
    0x00067750 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00067752 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00067754 bls.w 0x681a8                                     |         goto label_130;
                                                                 |     }
                                                                 | label_32:
    0x00067758 mov.w sb, 0                                       |     sb = 0;
    0x0006775c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0006775e ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00067760 movs r1, 0xb                                      |     r1 = 0xb;
    0x00067762 mov r0, r6                                        |     r0 = r6;
    0x00067764 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00067768 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006776c ldrd r3, r2, [r6, 0x6c]                           |     __asm ("ldrd r3, r2, [r6, 0x6c]");
    0x00067770 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00067772 bge.w 0x682ca                                     |         goto label_131;
                                                                 |     }
    0x00067776 add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x0006777a ldr r0, [r6, 0x68]                                |     r0 = *((r6 + 0x68));
    0x0006777c ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x0006777e adds r3, 1                                        |     r3++;
    0x00067780 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x00067782 mov.w ip, 8                                       |     
    0x00067786 str r3, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r3;
    0x00067788 adds r2, r0, r1                                   |     r2 = r0 + r1;
    0x0006778a strd r7, sb, [r2, 8]                              |     __asm ("strd r7, sb, [r2, 8]");
    0x0006778e str.w sb, [r2, 0x10]                              |     __asm ("str.w sb, [r2, 0x10]");
    0x00067792 str.w ip, [r0, r1]                                |     __asm ("str.w ip, [r0, r1]");
    0x00067796 str.w sb, [r2, 4]                                 |     __asm ("str.w sb, [r2, 4]");
                                                                 | label_43:
    0x0006779a ldr r2, [r6]                                      |     r2 = *(r6);
    0x0006779c cmp.w sl, 0                                       |     
    0x000677a0 it lt                                             |     
                                                                 |     if (sl >= 0) {
    0x000677a2 addlt sl, r3, -1                                  |         sl = r3 + -1;
                                                                 |     }
    0x000677a6 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x000677aa cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000677ac bne.w 0x67dbe                                     |         goto label_132;
                                                                 |     }
    0x000677b0 ldr r2, [r6, 0x68]                                |     r2 = *((r6 + 0x68));
    0x000677b2 add.w sl, sl, sl, lsl 2                           |     sl += (sl << 2);
    0x000677b6 add.w r2, r2, sl, lsl 2                           |     r2 += (sl << 2);
                                                                 | label_14:
    0x000677ba mov.w sb, 0                                       |     sb = 0;
    0x000677be str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x000677c0 movs r1, 0xb                                      |     r1 = 0xb;
    0x000677c2 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000677c4 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000677c6 mov r0, r6                                        |     r0 = r6;
    0x000677c8 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000677cc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000677d0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000677d2 movs r1, 0xb                                      |     r1 = 0xb;
    0x000677d4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000677d6 mov r0, r6                                        |     r0 = r6;
    0x000677d8 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000677dc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000677e0 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000677e2 ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x000677e4 mvns r2, r3                                       |     r2 = ~r3;
    0x000677e6 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x000677ea cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x000677ec bmi.w 0x6819e                                     |         goto label_133;
                                                                 |     }
    0x000677f0 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x000677f2 ldr r1, [r6, 0x6c]                                |     r1 = *((r6 + 0x6c));
    0x000677f4 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_31:
    0x000677f8 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000677fa mvn r2, 0xd                                       |     r2 = ~0xd;
    0x000677fe movs r1, 0x59                                     |     r1 = 0x59;
    0x00067800 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00067802 mov r0, r6                                        |     r0 = r6;
    0x00067804 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00067806 movs r3, 0                                        |     r3 = 0;
    0x00067808 mov r2, r3                                        |     r2 = r3;
    0x0006780a str r3, [sp]                                      |     *(sp) = r3;
    0x0006780c bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00067810 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00067812 movs r1, 0x5a                                     |     r1 = 0x5a;
    0x00067814 ldr r2, [sp, 0x88]                                |     r2 = var_88h;
    0x00067816 mov r0, r6                                        |     r0 = r6;
    0x00067818 strd r5, r3, [sp]                                 |     __asm ("strd r5, r3, [sp]");
    0x0006781c mvn r3, 7                                         |     r3 = ~7;
    0x00067820 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00067822 ldr r3, [sp, 0xa4]                                |     r3 = var_a4h;
    0x00067824 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00067828 ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x0006782a cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x0006782c ble 0x6783e                                       |         
    0x0006782e ldr r2, [r6, 0x68]                                |         r2 = *((r6 + 0x68));
    0x00067830 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00067834 add.w r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
    0x00067838 movs r3, 1                                        |         r3 = 1;
    0x0006783a strh r3, [r2, -0x12]                              |         *((r2 - 0x12)) = r3;
                                                                 |     }
    0x0006783e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00067840 movs r1, 0xd                                      |     r1 = 0xd;
    0x00067842 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00067844 mov r0, r6                                        |     r0 = r6;
    0x00067846 str r3, [sp]                                      |     *(sp) = r3;
    0x00067848 mov r3, r4                                        |     r3 = r4;
    0x0006784a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006784e ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x00067850 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00067854 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00067856 bmi.w 0x68190                                     |         goto label_134;
                                                                 |     }
    0x0006785a ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0006785c ldr r1, [r6, 0x6c]                                |     r1 = *((r6 + 0x6c));
    0x0006785e ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00067860 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00067862 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00067864 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_30:
    0x00067866 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00067868 ldr r4, [r3, 0x34]                                |     r4 = *((r3 + 0x34));
                                                                 |     if (r4 != 0) {
    0x0006786a cbz r4, 0x67896                                   |         
    0x0006786c ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00067870 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00067872 beq.w 0x681c6                                     |             goto label_135;
                                                                 |         }
    0x00067876 movs r2, 0xc                                      |         r2 = 0xc;
    0x00067878 movs r3, 0                                        |         r3 = 0;
    0x0006787a bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
                                                                 | label_33:
    0x0006787e cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00067880 beq.w 0x685ce                                     |             goto label_136;
                                                                 |         }
    0x00067884 ldr.w r3, [fp, 0x80]                              |         r3 = *(arg_80h);
    0x00067888 str r3, [r0]                                      |         *(r0) = r3;
    0x0006788a ldr r3, [pc, 0x2f8]                               |         
    0x0006788c str.w r0, [fp, 0x80]                              |         __asm ("str.w r0, [arg_80h]");
    0x00067890 str r4, [r0, 4]                                   |         *((r0 + 4)) = r4;
    0x00067892 add r3, pc                                        |         r3 = 0xcf41c;
    0x00067894 str r3, [r0, 8]                                   |         *((r0 + 8)) = r3;
                                                                 |     }
                                                                 | label_57:
    0x00067896 ldr.w r1, [r8, 0x30]                              |     r1 = *((r8 + 0x30));
    0x0006789a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006789c str.w r8, [r3, 0x34]                              |     __asm ("str.w r8, [r3, 0x34]");
    0x000678a0 str.w r3, [r8, 0x38]                              |     __asm ("str.w r3, [r8, 0x38]");
                                                                 |     if (r1 != 0) {
    0x000678a4 cbz r1, 0x678ac                                   |         
    0x000678a6 ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x000678a8 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 |     }
    0x000678ac ldr.w r3, [fp, 0xdc]                              |     r3 = *(arg_dch);
    0x000678b0 movs r2, 0                                        |     r2 = 0;
    0x000678b2 str.w r2, [r8, 0x30]                              |     __asm ("str.w r2, [r8, 0x30]");
    0x000678b6 ldr.w r2, [fp, 8]                                 |     r2 = *(arg_8h);
    0x000678ba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000678bc beq 0x678e0                                       |         
    0x000678be ldr r1, [r2]                                      |         r1 = *(r2);
    0x000678c0 it lt                                             |         
                                                                 |         if (r3 >= 0) {
    0x000678c2 ldrlt r3, [r2, 0x6c]                              |             r3 = *((r2 + 0x6c));
                                                                 |         }
    0x000678c4 ldrb.w r1, [r1, 0x57]                             |         r1 = *((r1 + 0x57));
    0x000678c8 it lt                                             |         
                                                                 |         if (r3 >= 0) {
    0x000678ca addlt r3, r3, -1                                  |             r3 += -1;
                                                                 |         }
    0x000678ce cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000678d0 bne.w 0x680c2                                     |             goto label_137;
                                                                 |         }
    0x000678d4 ldr r2, [r2, 0x68]                                |         r2 = *((r2 + 0x68));
    0x000678d6 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x000678da add.w r3, r2, r3, lsl 2                           |         r3 = r2 + (r3 << 2);
                                                                 | label_25:
    0x000678de ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
                                                                 |     }
    0x000678e0 ldr.w r7, [fp, 0x24]                              |     r7 = *(arg_24h);
    0x000678e4 str.w r3, [fp, 0xdc]                              |     __asm ("str.w r3, [arg_dch]");
    0x000678e8 subs r7, 0                                        |     
    0x000678ea it ne                                             |     
                                                                 |     if (r7 == 0) {
    0x000678ec movne r7, 1                                       |         r7 = 1;
                                                                 |     }
    0x000678ee b 0x6710a                                         |     goto label_3;
                                                                 | label_79:
    0x000678f0 ldr.w r3, [fp, 0x74]                              |     r3 = *(arg_74h);
    0x000678f4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000678f6 beq.w 0x67b44                                     |         goto label_138;
                                                                 |     }
                                                                 | label_10:
    0x000678fa mov r0, fp                                        |     r0 = fp;
    0x000678fc bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x00067900 ldrb.w r3, [sp, 0x60]                             |     r3 = var_60h;
    0x00067904 mov r5, r0                                        |     r5 = r0;
    0x00067906 cmp r3, 0xc                                       |     
                                                                 |     if (r3 != 0xc) {
    0x00067908 bne.w 0x67072                                     |         goto label_4;
                                                                 |     }
                                                                 | label_80:
    0x0006790c ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x0006790e movs r2, 0                                        |     r2 = 0;
    0x00067910 movs r1, 0x76                                     |     r1 = 0x76;
    0x00067912 mov r0, r5                                        |     r0 = r5;
    0x00067914 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00067916 str r2, [sp]                                      |     *(sp) = r2;
    0x00067918 ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x0006791a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006791e movs r3, 0xe                                      |     r3 = 0xe;
    0x00067920 strb.w r3, [sp, 0x60]                             |     var_60h = r3;
    0x00067924 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00067926 lsls r6, r3, 0x15                                 |     r6 = r3 << 0x15;
                                                                 |     if (r6 >= r3) {
    0x00067928 bpl.w 0x6707a                                     |         goto label_5;
                                                                 |     }
                                                                 | label_81:
    0x0006792c ldr r7, [r4, 0x3c]                                |     r7 = *((r4 + 0x3c));
    0x0006792e ldr r2, [r4, 0x44]                                |     r2 = *((r4 + 0x44));
    0x00067930 clz r0, r7                                        |     r0 &= r7;
    0x00067934 lsrs r0, r0, 5                                    |     r0 >>= 5;
    0x00067936 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00067938 bne.w 0x6707a                                     |         goto label_5;
                                                                 |     }
    0x0006793c mov r1, r4                                        |     r1 = r4;
    0x0006793e mov.w sb, 1                                       |     sb = 1;
    0x00067942 b 0x6794e                                         |     goto label_139;
                                                                 | label_6:
    0x00067944 ldr r2, [r1, 0x44]                                |     r2 = *((r1 + 0x44));
    0x00067946 add sb, r0                                        |     sb += r0;
    0x00067948 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0006794a bne.w 0x6707a                                     |         goto label_5;
                                                                 |     }
                                                                 | label_139:
    0x0006794e mov r6, r1                                        |     r6 = r1;
    0x00067950 ldr r1, [r1, 0x34]                                |     r1 = *((r1 + 0x34));
    0x00067952 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00067954 bne 0x67944                                       |         goto label_6;
                                                                 |     }
    0x00067956 cmp.w sb, 1                                       |     
                                                                 |     if (sb == 1) {
    0x0006795a beq.w 0x681d2                                     |         goto label_140;
                                                                 |     }
    0x0006795e ldr r3, [pc, 0x228]                               |     
    0x00067960 mov r0, fp                                        |     r0 = fp;
    0x00067962 ldr r2, [pc, 0x228]                               |     
    0x00067964 add r3, pc                                        |     r3 = 0xcf4f2;
    0x00067966 str r3, [sp]                                      |     *(sp) = r3;
    0x00067968 add r2, pc                                        |     r2 = 0xcf4fa;
    0x0006796a mov r3, sb                                        |     r3 = sb;
    0x0006796c bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
                                                                 | label_34:
    0x00067970 movs r4, 1                                        |     r4 = 1;
    0x00067972 movs r5, 0                                        |     r5 = 0;
    0x00067974 b 0x6797e                                         |     
                                                                 |     while (r7 == 0) {
    0x00067976 strh.w sb, [r6, 2]                                |         *((r6 + 2)) = sb;
    0x0006797a ldr r6, [r6, 0x38]                                |         r6 = *((r6 + 0x38));
                                                                 |         if (r6 == 0) {
    0x0006797c cbz r6, 0x67998                                   |             goto label_141;
                                                                 |         }
    0x0006797e movs r3, 0                                        |         r3 = 0;
    0x00067980 mov.w r2, -1                                      |         r2 = -1;
    0x00067984 mov r1, r6                                        |         r1 = r6;
    0x00067986 mov r0, fp                                        |         r0 = fp;
    0x00067988 strd r4, r4, [sp, 8]                              |         __asm ("strd r4, r4, [var_8h]");
    0x0006798c strd r5, sl, [sp]                                 |         __asm ("strd r5, sl, [sp]");
    0x00067990 bl 0x5fbc0                                        |         fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x00067994 cmp r7, 0                                         |         
    0x00067996 beq 0x67976                                       |         
                                                                 |     }
                                                                 | label_141:
    0x00067998 add r3, sp, 0x6c                                  |     r3 += var_6ch;
    0x0006799a vld1.32 {d16}, [r3]                               |     __asm ("vld1.32 {d16}, [r3]");
                                                                 | label_85:
    0x0006799e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000679a0 movs r7, 0                                        |     r7 = 0;
    0x000679a2 adds r3, 0xc                                      |     r3 += 0xc;
    0x000679a4 vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
    0x000679a8 b.w 0x6710a                                       |     goto label_3;
                                                                 | label_84:
    0x000679ac mov r2, r3                                        |     r2 = r3;
    0x000679ae movs r1, 0x21                                     |     r1 = 0x21;
    0x000679b0 mov r0, fp                                        |     r0 = fp;
    0x000679b2 str r3, [sp]                                      |     *(sp) = r3;
    0x000679b4 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000679b6 bl 0x200fc                                        |     fcn_000200fc (r0, r1);
    0x000679ba str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x000679bc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000679be bne.w 0x670b2                                     |         goto label_7;
                                                                 |     }
    0x000679c2 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x000679c6 mov.w r2, 0x140                                   |     r2 = 0x140;
    0x000679ca mov r1, r4                                        |     r1 = r4;
    0x000679cc mov r0, fp                                        |     r0 = fp;
    0x000679ce str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000679d0 subs r3, 1                                        |     r3--;
    0x000679d2 str.w r3, [fp, 0x38]                              |     __asm ("str.w r3, [arg_38h]");
    0x000679d6 strh r2, [r4, 2]                                  |     *((r4 + 2)) = r2;
    0x000679d8 mov r2, r3                                        |     r2 = r3;
    0x000679da str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000679dc bl 0x5b760                                        |     fcn_0005b760 (r0, r1, r2, r3);
    0x000679e0 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x000679e2 add.w r2, r4, 8                                   |     r2 = r4 + 8;
    0x000679e4 lsls r0, r1, 8                                    |     r0 = r1 << 8;
    0x000679e6 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x000679e8 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000679ec str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000679ee ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000679f0 str r1, [sp, 0x38]                                |     var_38h = r1;
    0x000679f2 ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x000679f4 str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x000679f6 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x000679fa ldr r0, [r6]                                      |     r0 = *(r6);
    0x000679fc ldr.w sb, [r4, 0x30]                              |     sb = *((r4 + 0x30));
    0x00067a00 str r1, [sp, 0x40]                                |     var_40h = r1;
    0x00067a02 cmp r0, 0                                         |     
                                                                 |     if (r0 > 0) {
    0x00067a04 bgt 0x67a12                                       |         goto label_142;
                                                                 |     }
    0x00067a06 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00067a08 b 0x67a26                                         |     goto label_51;
                                                                 |     do {
    0x00067a0a adds r3, 1                                        |         r3++;
    0x00067a0c cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00067a0e beq.w 0x68510                                     |             goto label_143;
                                                                 |         }
                                                                 | label_142:
    0x00067a12 add.w r1, r6, r3, lsl 6                           |         r1 = r6 + (r3 << 6);
    0x00067a16 ldrb.w r2, [r1, 0x2d]                             |         r2 = *((r1 + 0x2d));
    0x00067a1a ubfx r2, r2, 6, 1                                 |         r2 = (r2 >> 6) & ((1 << 1) - 1);
    0x00067a1e cmp r2, 0                                         |         
    0x00067a20 beq 0x67a0a                                       |         
                                                                 |     } while (r2 == 0);
    0x00067a22 ldr r3, [r1, 0x30]                                |     r3 = *((r1 + 0x30));
    0x00067a24 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_51:
    0x00067a26 ldr.w r3, [fp, 0x2c]                              |     r3 = *(arg_2ch);
    0x00067a2a ldr.w r2, [fp, 0x28]                              |     r2 = *(arg_28h);
    0x00067a2e adds r3, 1                                        |     r3++;
    0x00067a30 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00067a32 adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x00067a34 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00067a36 str.w r3, [fp, 0x28]                              |     __asm ("str.w r3, [arg_28h]");
    0x00067a3a ldrb r2, [r4]                                     |     r2 = *(r4);
    0x00067a3c cmp r2, 0x86                                      |     
                                                                 |     if (r2 == 0x86) {
    0x00067a3e beq.w 0x685a2                                     |         goto label_144;
                                                                 |     }
    0x00067a42 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00067a46 beq.w 0x68680                                     |         goto label_145;
                                                                 |     }
    0x00067a4a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00067a4c ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00067a4e str r7, [sp]                                      |     *(sp) = r7;
    0x00067a50 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x00067a52 movs r3, 0                                        |     r3 = 0;
    0x00067a54 str r3, [sp, 0xa0]                                |     var_a0h = r3;
    0x00067a56 str r3, [sp, 0xac]                                |     var_ach = r3;
    0x00067a58 strd r3, r3, [sp, 0xa4]                           |     __asm ("strd r3, r3, [var_a4h]");
    0x00067a5c movs r3, 7                                        |     r3 = 7;
    0x00067a5e str.w r2, [fp, 0x2c]                              |     __asm ("str.w r2, [arg_2ch]");
                                                                 | label_56:
    0x00067a62 movs r1, 0x79                                     |     r1 = 0x79;
    0x00067a64 strb.w r3, [sp, 0x98]                             |     var_98h = r3;
    0x00067a68 mov r0, r8                                        |     r0 = r8;
    0x00067a6a mov r3, r2                                        |     r3 = r2;
    0x00067a6c ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00067a6e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00067a72 mov r1, r4                                        |     r1 = r4;
    0x00067a74 mov r0, fp                                        |     r0 = fp;
    0x00067a76 bl 0x28228                                        |     fcn_00028228 (r0, r1, r2);
    0x00067a7a ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00067a7e mvn r2, 7                                         |     r2 = ~7;
    0x00067a82 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00067a84 movs r2, 0                                        |     r2 = 0;
    0x00067a86 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00067a88 movs r1, 0x76                                     |     r1 = 0x76;
    0x00067a8a str r2, [sp]                                      |     *(sp) = r2;
    0x00067a8c adds r3, 2                                        |     r3 += 2;
    0x00067a8e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00067a90 mov r0, r8                                        |     r0 = r8;
    0x00067a92 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00067a96 str.w sb, [sp, 0xb0]                              |     __asm ("str.w sb, [var_b0h]");
                                                                 | label_65:
    0x00067a9a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00067a9c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00067a9e bne.w 0x6855e                                     |         goto label_146;
                                                                 |     }
                                                                 | label_61:
    0x00067aa2 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 | label_55:
    0x00067aa4 movs r2, 0                                        |     r2 = 0;
    0x00067aa6 mov r6, r4                                        |     r6 = r4;
    0x00067aa8 str r2, [r4, 0x30]                                |     *((r4 + 0x30)) = r2;
    0x00067aaa movs r2, 0x87                                     |     r2 = 0x87;
    0x00067aac b 0x67abe                                         |     
                                                                 |     while (r1 >= r3) {
    0x00067aae ldr r7, [r6, 0x34]                                |         r7 = *((r6 + 0x34));
    0x00067ab0 strb r2, [r6]                                     |         *(r6) = r2;
    0x00067ab2 ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x00067ab4 ands r1, r3, 0x2000                               |         r1 = r3 & 0x2000;
                                                                 |         if (r1 == r3) {
    0x00067ab8 beq.w 0x683c2                                     |             goto label_147;
                                                                 |         }
    0x00067abc mov r6, r7                                        |         r6 = r7;
    0x00067abe lsls r1, r3, 0x1c                                 |         r1 = r3 << 0x1c;
    0x00067ac0 bpl 0x67aae                                       |         
                                                                 |     }
    0x00067ac2 ldr r1, [pc, 0xcc]                                |     
    0x00067ac4 mov r0, fp                                        |     r0 = fp;
    0x00067ac6 add r1, pc                                        |     r1 = 0xcf65c;
    0x00067ac8 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_49:
    0x00067acc ldr r1, [r4, 0x30]                                |     r1 = *((r4 + 0x30));
                                                                 |     if (r1 != 0) {
    0x00067ace cbz r1, 0x67ad8                                   |         
    0x00067ad0 ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00067ad4 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 |     }
    0x00067ad8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00067ada str.w sb, [r4, 0x30]                              |     __asm ("str.w sb, [r4, 0x30]");
    0x00067ade str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x00067ae0 b.w 0x670b2                                       |     goto label_7;
                                                                 | label_110:
    0x00067ae4 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00067ae6 movs r3, 0                                        |     r3 = 0;
    0x00067ae8 movs r1, 0x9b                                     |     r1 = 0x9b;
    0x00067aea mov r0, sl                                        |     r0 = sl;
    0x00067aec strd sb, sb, [sp, 0x98]                           |     __asm ("strd sb, sb, [var_98h]");
    0x00067af0 bl 0x1db90                                        |     r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00067af4 mov r2, r0                                        |     r2 = r0;
    0x00067af6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00067af8 beq.w 0x6859c                                     |         goto label_148;
                                                                 |     }
    0x00067afc ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x00067afe mov r1, r7                                        |     r1 = r7;
    0x00067b00 str.w r8, [r0, 8]                                 |     __asm ("str.w r8, [r0, 8]");
    0x00067b04 orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x00067b08 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x00067b0a mov r0, fp                                        |     r0 = fp;
    0x00067b0c bl 0x2bffc                                        |     r0 = fcn_0002bffc (r0, r1, r2);
    0x00067b10 mov r7, r0                                        |     r7 = r0;
    0x00067b12 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
                                                                 |     if (r0 != 0) {
    0x00067b14 cbz r0, 0x67b20                                   |         
    0x00067b16 adds r5, 1                                        |         r5++;
    0x00067b18 add.w r3, r0, r5, lsl 4                           |         r3 = r0 + (r5 << 4);
    0x00067b1c strh.w r8, [r3, 4]                                |         *((r3 + 4)) = r8;
                                                                 |     }
    0x00067b20 ldrb.w r0, [sl, 0x57]                             |     r0 = *((sl + 0x57));
    0x00067b24 b 0x673e8                                         |     goto label_8;
                                                                 | label_87:
    0x00067b26 movs r1, 0                                        |     r1 = 0;
    0x00067b28 movs r0, 0xc                                      |     r0 = 0xc;
    0x00067b2a bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x00067b2e b.w 0x670ee                                       |     goto label_9;
                                                                 |     do {
                                                                 | label_12:
    0x00067b32 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00067b34 add r3, sp, 0x6c                                  |         r3 += var_6ch;
    0x00067b36 vld1.32 {d16}, [r3]                               |         __asm ("vld1.32 {d16}, [r3]");
    0x00067b3a adds r2, 0xc                                      |         r2 += 0xc;
    0x00067b3c vst1.32 {d16}, [r2]                               |         __asm ("vst1.32 {d16}, [r2]");
    0x00067b40 b.w 0x6710a                                       |         goto label_3;
                                                                 | label_138:
    0x00067b44 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00067b46 ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x00067b48 lsls r7, r3, 0x1c                                 |         r7 = r3 << 0x1c;
    0x00067b4a itt pl                                            |         
                                                                 |         if (r7 < r3) {
    0x00067b4c movpl r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r7 < r3) {
    0x00067b4e strbpl r3, [fp, 0x17]                             |             *(arg_17h) = r3;
                                                                 |         }
    0x00067b52 b 0x678fa                                         |         goto label_10;
                                                                 | label_93:
    0x00067b94 ldrb.w sb, [sp, 0x60]                             |         sb = var_60h;
    0x00067b98 cmp.w sb, 1                                       |         
                                                                 |         if (sb != 1) {
    0x00067b9c bne.w 0x68136                                     |             goto label_149;
                                                                 |         }
    0x00067ba0 ldr r6, [sp, 0x64]                                |         r6 = var_64h;
                                                                 | label_29:
    0x00067ba2 movs r3, 0                                        |         r3 = 0;
    0x00067ba4 add r2, sp, 0x98                                  |         r2 += var_98h;
    0x00067ba6 str r3, [sp, 0xa0]                                |         var_a0h = r3;
    0x00067ba8 mov r1, r8                                        |         r1 = r8;
    0x00067baa str r3, [sp, 0xac]                                |         var_ach = r3;
    0x00067bac mov r0, fp                                        |         r0 = fp;
    0x00067bae strd r3, r3, [sp, 0xa4]                           |         __asm ("strd r3, r3, [var_a4h]");
    0x00067bb2 movs r3, 1                                        |         r3 = 1;
    0x00067bb4 strb.w r3, [sp, 0x98]                             |         var_98h = r3;
    0x00067bb8 str r6, [sp, 0x9c]                                |         var_9ch = r6;
    0x00067bba str r2, [sp, 0x1c]                                |         var_1ch = r2;
    0x00067bbc bl 0x54c38                                        |         fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00067bc0 movs r3, 1                                        |         r3 = 1;
    0x00067bc2 mov r7, r0                                        |         r7 = r0;
    0x00067bc4 cmp r0, 0                                         |         
    0x00067bc6 bne 0x67b32                                       |         
                                                                 |     } while (r0 != 0);
    0x00067bc8 ldrb r2, [r4]                                     |     r2 = *(r4);
    0x00067bca str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x00067bcc cmp r2, 0x88                                      |     
                                                                 |     if (r2 == 0x88) {
    0x00067bce beq.w 0x68344                                     |         goto label_150;
                                                                 |     }
    0x00067bd2 ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
    0x00067bd4 cmp r2, 0x87                                      |     
    0x00067bd6 str r1, [sp, 0x20]                                |     var_20h = r1;
                                                                 |     if (r2 == 0x87) {
    0x00067bd8 beq.w 0x68286                                     |         goto label_151;
                                                                 |     }
    0x00067bdc cmp r2, 0x89                                      |     
    0x00067bde mov r2, r3                                        |     r2 = r3;
                                                                 |     if (r2 != 0x89) {
    0x00067be0 bne.w 0x6826a                                     |         goto label_152;
                                                                 |     }
    0x00067be4 ldr.w r3, [pc, 0xc4c]                             |     r3 = sym.sqlite3_result_error;
    0x00067be8 add r3, pc                                        |     r3 += pc;
                                                                 | label_39:
    0x00067bea strb.w r2, [sp, 0x98]                             |     var_98h = r2;
    0x00067bee movs r7, 0                                        |     r7 = 0;
    0x00067bf0 ldr.w r2, [pc, 0xc44]                             |     r2 = *(0x00068838);
    0x00067bf4 movs r1, 1                                        |     r1 = 1;
    0x00067bf6 mov r0, fp                                        |     r0 = fp;
    0x00067bf8 str r7, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r7;
    0x00067bfa add r2, pc                                        |     r2 += pc;
    0x00067bfc bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00067c00 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00067c02 mov r1, r4                                        |     r1 = r4;
    0x00067c04 mov r0, fp                                        |     r0 = fp;
    0x00067c06 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00067c0a ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00067c0c ldr r2, [r4, 0x34]                                |     r2 = *((r4 + 0x34));
    0x00067c0e str r7, [r4, 0x30]                                |     *((r4 + 0x30)) = r7;
    0x00067c10 mov r7, r0                                        |     r7 = r0;
    0x00067c12 cmp r3, 0x86                                      |     
    0x00067c14 str.w r8, [r4, 0x34]                              |     __asm ("str.w r8, [r4, 0x34]");
    0x00067c18 str r2, [sp, 0x1c]                                |     var_1ch = r2;
                                                                 |     if (r3 == 0x86) {
    0x00067c1a bne 0x67c2a                                       |         
    0x00067c1c ldrsh.w r1, [r8, 2]                               |         r1 = *((r8 + 2));
    0x00067c20 ldrsh.w r0, [r4, 2]                               |         r0 = *((r4 + 2));
    0x00067c24 bl 0xf330                                         |         fcn_0000f330 (r0, r1);
    0x00067c28 strh r0, [r4, 2]                                  |         *((r4 + 2)) = r0;
                                                                 |     }
    0x00067c2a ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
                                                                 |     if (r1 != 0) {
    0x00067c2c cbz r1, 0x67c34                                   |         
    0x00067c2e ldr r0, [sp, 0x18]                                |         r0 = var_18h;
    0x00067c30 bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
                                                                 |     }
    0x00067c34 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00067c36 cmp.w sb, 1                                       |     
    0x00067c3a vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00067c3e str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x00067c40 add.w r3, r4, 8                                   |     r3 = r4 + 8;
    0x00067c44 vst1.32 {d16}, [r3]                               |     __asm ("vst1.32 {d16}, [r3]");
                                                                 |     if (sb == 1) {
    0x00067c48 beq.w 0x67366                                     |         goto label_11;
                                                                 |     }
    0x00067c4c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00067c4e ldrb.w sb, [r3, 0x57]                             |     sb = *((r3 + 0x57));
    0x00067c52 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00067c56 bne.w 0x67366                                     |         goto label_11;
                                                                 |     }
    0x00067c5a ldr.w r8, [fp, 0x38]                              |     r8 = *(arg_38h);
    0x00067c5e mov r1, r4                                        |     r1 = r4;
    0x00067c60 mov r0, fp                                        |     r0 = fp;
    0x00067c62 sub.w r3, r8, 2                                   |     r3 = r8 - 2;
    0x00067c66 add.w r2, r8, -1                                  |     r2 = r8 + -1;
    0x00067c6a str.w r3, [fp, 0x38]                              |     __asm ("str.w r3, [arg_38h]");
    0x00067c6e str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00067c70 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00067c72 bl 0x5b760                                        |     fcn_0005b760 (r0, r1, r2, r3);
    0x00067c76 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00067c78 mov r2, r6                                        |     r2 = r6;
    0x00067c7a movs r1, 0x23                                     |     r1 = 0x23;
    0x00067c7c mov r0, r5                                        |     r0 = r5;
    0x00067c7e str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00067c82 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00067c86 ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00067c88 mov r0, fp                                        |     r0 = fp;
    0x00067c8a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00067c8c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00067c8e str r1, [sp, 0x28]                                |     var_28h = r1;
    0x00067c90 mov r1, r4                                        |     r1 = r4;
    0x00067c92 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00067c94 mov r2, r6                                        |     r2 = r6;
    0x00067c96 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00067c98 mov r3, sb                                        |     r3 = sb;
    0x00067c9a str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [var_4h]");
    0x00067c9e str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00067ca2 bl 0x5fbc0                                        |     fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x00067ca6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00067ca8 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00067caa mvns r2, r3                                       |     r2 = ~r3;
    0x00067cac ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00067cb0 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00067cb2 bmi.w 0x6878c                                     |         goto label_153;
                                                                 |     }
    0x00067cb6 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00067cb8 ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00067cba str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_72:
    0x00067cbe movs r2, 0                                        |     r2 = 0;
    0x00067cc0 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00067cc2 str r2, [sp]                                      |     *(sp) = r2;
    0x00067cc4 movs r1, 0x26                                     |     r1 = 0x26;
    0x00067cc6 mov r2, r6                                        |     r2 = r6;
    0x00067cc8 mov r0, r5                                        |     r0 = r5;
    0x00067cca bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00067cce ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x00067cd0 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00067cd4 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00067cd6 bmi.w 0x6877e                                     |         goto label_154;
                                                                 |     }
    0x00067cda ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00067cdc lsl.w r3, r8, 2                                   |     r3 = r8 << 2;
    0x00067ce0 ldr r1, [r5, 0x6c]                                |     r1 = *((r5 + 0x6c));
    0x00067ce2 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00067ce4 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_71:
    0x00067ce6 movs r3, 0                                        |     r3 = 0;
    0x00067ce8 mov r2, r6                                        |     r2 = r6;
    0x00067cea movs r1, 0x7a                                     |     r1 = 0x7a;
    0x00067cec mov r0, r5                                        |     r0 = r5;
    0x00067cee str r3, [sp]                                      |     *(sp) = r3;
    0x00067cf0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00067cf4 b.w 0x67366                                       |     goto label_11;
                                                                 | label_92:
    0x00067cf8 add.w r6, r4, 8                                   |     r6 = r4 + 8;
    0x00067cfc ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x00067cfe add.w sb, r8, 8                                   |     sb = r8 + 8;
    0x00067d02 movs r7, 0                                        |     r7 = 0;
    0x00067d04 vld1.32 {d16}, [r6]                               |     __asm ("vld1.32 {d16}, [r6]");
    0x00067d08 mov r2, sl                                        |     r2 = sl;
    0x00067d0a mov r1, r8                                        |     r1 = r8;
    0x00067d0c mov r0, fp                                        |     r0 = fp;
    0x00067d0e vst1.32 {d16}, [sb]                               |     __asm ("vst1.32 {d16}, [sb]");
    0x00067d12 str.w r3, [r8, 0x3c]                              |     __asm ("str.w r3, [r8, 0x3c]");
    0x00067d16 str r7, [sp, 0x98]                                |     var_98h = r7;
    0x00067d18 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00067d1c str.w r7, [r8, 0x3c]                              |     __asm ("str.w r7, [r8, 0x3c]");
    0x00067d20 mov r7, r0                                        |     r7 = r0;
    0x00067d22 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00067d24 bne.w 0x67b32                                     |         goto label_12;
                                                                 |     }
    0x00067d28 vld1.32 {d7}, [sb]                                |     __asm ("vld1.32 {d7}, [sb]");
    0x00067d2c str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x00067d2e vmov r3, s14                                      |     __asm ("vmov r3, s14");
    0x00067d32 vst1.32 {d7}, [r6]                                |     __asm ("vst1.32 {d7}, [r6]");
    0x00067d36 subs r6, r3, 0                                    |     r6 = r3 - 0;
                                                                 |     if (r6 != r3) {
    0x00067d38 bne.w 0x68352                                     |         goto label_155;
                                                                 |     }
    0x00067d3c ldr.w r2, [pc, 0xafc]                             |     
    0x00067d40 movs r1, 1                                        |     r1 = 1;
    0x00067d42 mov r0, fp                                        |     r0 = fp;
    0x00067d44 add r2, pc                                        |     r2 = 0xd0584;
    0x00067d46 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00067d4a mov r2, sl                                        |     r2 = sl;
    0x00067d4c mov r1, r4                                        |     r1 = r4;
    0x00067d4e mov r0, fp                                        |     r0 = fp;
    0x00067d50 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x00067d54 ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x00067d56 mov r7, r0                                        |     r7 = r0;
    0x00067d58 ldrsh.w r1, [r8, 2]                               |     r1 = *((r8 + 2));
    0x00067d5c ldrsh.w r0, [r4, 2]                               |     r0 = *((r4 + 2));
    0x00067d60 str.w r8, [r4, 0x34]                              |     __asm ("str.w r8, [r4, 0x34]");
    0x00067d64 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00067d66 bl 0xf330                                         |     fcn_0000f330 (r0, r1);
    0x00067d6a ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x00067d6c mov r8, r0                                        |     r8 = r0;
    0x00067d6e strh r0, [r4, 2]                                  |     *((r4 + 2)) = r0;
    0x00067d70 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00067d72 beq.w 0x67366                                     |         goto label_11;
                                                                 |     }
                                                                 | label_47:
    0x00067d76 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00067d78 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x00067d7a bl 0xc048                                         |     r0 = fcn_0000c048 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x00067d7e cbz r0, 0x67d88                                   |         
    0x00067d80 ldr r2, [sp, 0x98]                                |         r2 = var_98h;
    0x00067d82 cmp r2, 0                                         |         
                                                                 |         if (r2 > 0) {
    0x00067d84 bgt.w 0x68638                                     |             goto label_156;
                                                                 |         }
                                                                 |     }
                                                                 | label_48:
    0x00067d88 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00067d8a beq.w 0x67366                                     |         goto label_11;
                                                                 |     }
                                                                 | label_119:
    0x00067db2 ldr.w r3, [pc, 0xa8c]                             |     r3 = *(0x00068840);
    0x00067db6 add r3, pc                                        |     r3 += pc;
    0x00067db8 adds r3, 4                                        |     r3 += 4;
    0x00067dba b.w 0x675ae                                       |     goto label_13;
                                                                 | label_132:
    0x00067dbe ldr.w r2, [pc, 0xa84]                             |     r2 = *(0x00068844);
    0x00067dc2 add r2, pc                                        |     r2 += pc;
    0x00067dc4 adds r2, 4                                        |     r2 += 4;
    0x00067dc6 b 0x677ba                                         |     goto label_14;
                                                                 | label_125:
    0x00067dc8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00067dca cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00067dcc bge.w 0x68516                                     |         goto label_157;
                                                                 |     }
    0x00067dd0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00067dd2 movs r0, 0                                        |     r0 = 0;
    0x00067dd4 ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x00067dd6 movs r4, 9                                        |     r4 = 9;
    0x00067dd8 ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x00067dda add.w r3, r2, r2, lsl 2                           |     r3 = r2 + (r2 << 2);
    0x00067dde adds r2, 1                                        |     r2++;
    0x00067de0 str r2, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r2;
    0x00067de2 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00067de4 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00067de6 str r7, [r2, 4]                                   |     *((r2 + 4)) = r7;
    0x00067de8 ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x00067dea str r0, [r2, 0x10]                                |     *((r2 + 0x10)) = r0;
    0x00067dec strd r7, r0, [r2, 8]                              |     __asm ("strd r7, r0, [r2, 8]");
    0x00067df0 str r4, [r1, r3]                                  |     *((r1 + r3)) = r4;
                                                                 | label_52:
    0x00067df2 movs r2, 0                                        |     r2 = 0;
    0x00067df4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00067df6 movs r1, 0xb                                      |     r1 = 0xb;
    0x00067df8 str r2, [sp]                                      |     *(sp) = r2;
    0x00067dfa mov r0, r6                                        |     r0 = r6;
    0x00067dfc ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00067dfe bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00067e02 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00067e04 mov r0, r6                                        |     r0 = r6;
    0x00067e06 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00067e0a ldrd r3, r2, [r6, 0x6c]                           |     __asm ("ldrd r3, r2, [r6, 0x6c]");
    0x00067e0e b 0x67690                                         |     goto label_15;
                                                                 | label_111:
    0x00067e10 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00067e12 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 | label_67:
    0x00067e14 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00067e16 mov.w sl, 0                                       |     sl = 0;
    0x00067e1a ldr.w r1, [fp, 0x2c]                              |     r1 = *(arg_2ch);
    0x00067e1e mov r2, sl                                        |     r2 = sl;
    0x00067e20 mov r0, r6                                        |     r0 = r6;
    0x00067e22 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00067e24 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00067e28 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00067e2a adds r3, 1                                        |     r3++;
    0x00067e2c add r3, r1                                        |     r3 += r1;
    0x00067e2e adds r1, 1                                        |     r1++;
    0x00067e30 str.w r3, [fp, 0x2c]                              |     __asm ("str.w r3, [arg_2ch]");
    0x00067e34 mov r3, r1                                        |     r3 = r1;
    0x00067e36 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x00067e38 movs r1, 0x47                                     |     r1 = 0x47;
    0x00067e3a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00067e3e ldr.w r8, [sp, 0x20]                              |     r8 = var_20h;
    0x00067e42 movs r2, 1                                        |     r2 = 1;
    0x00067e44 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00067e46 mov r1, r8                                        |     r1 = r8;
    0x00067e48 bl 0x1e178                                        |     r0 = fcn_0001e178 (r0, r1, r2);
    0x00067e4c mov sb, r0                                        |     sb = r0;
    0x00067e4e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00067e50 beq 0x67eec                                       |         goto label_158;
                                                                 |     }
    0x00067e52 cmp r8, sl                                        |     
    0x00067e54 mov r3, r8                                        |     r3 = r8;
                                                                 |     if (r8 <= sl) {
    0x00067e56 ble 0x67eec                                       |         goto label_158;
                                                                 |     }
    0x00067e58 mov sb, sl                                        |     sb = sl;
    0x00067e5a str r7, [sp, 0x34]                                |     var_34h = r7;
    0x00067e5c add.w r8, r0, 0x10                                |     r8 = r0 + 0x10;
    0x00067e60 mov r7, r0                                        |     r7 = r0;
    0x00067e62 mov sl, r3                                        |     sl = r3;
    0x00067e64 strd r6, r5, [sp, 0x20]                           |     __asm ("strd r6, r5, [var_20h]");
    0x00067e68 b 0x67e92                                         |     
                                                                 |     while (r6 != 0) {
    0x00067e6a ldr r5, [r6, 0x34]                                |         r5 = *((r6 + 0x34));
                                                                 |         if (r5 == 0) {
    0x00067e6c cbz r5, 0x67eca                                   |             goto label_159;
                                                                 |         }
    0x00067e6e ldr r1, [r5, 0x34]                                |         r1 = *((r5 + 0x34));
                                                                 |         if (r1 == 0) {
    0x00067e70 cbz r1, 0x67eb2                                   |             goto label_160;
                                                                 |         }
    0x00067e72 mov r2, sb                                        |         r2 = sb;
    0x00067e74 mov r0, fp                                        |         r0 = fp;
    0x00067e76 bl 0x2818c                                        |         r0 = fcn_0002818c (r0, r1, r2);
                                                                 |         if (r0 == 0) {
    0x00067e7a cbz r0, 0x67eb2                                   |             goto label_160;
                                                                 |         }
                                                                 | label_16:
    0x00067e7c ldr r1, [r7, 0x10]                                |         r1 = *((r7 + 0x10));
    0x00067e7e mov.w r3, 0                                       |         r3 = 0;
    0x00067e82 str r0, [r8, 4]!                                  |         *((r8 += 4)) = r0;
    0x00067e86 strb.w r3, [r1, sb]                               |         *((r1 + sb)) = r3;
    0x00067e8a add.w sb, sb, 1                                   |         sb++;
    0x00067e8e cmp sl, sb                                        |         
                                                                 |         if (sl == sb) {
    0x00067e90 beq 0x67ee4                                       |             goto label_161;
                                                                 |         }
    0x00067e92 ldr r6, [r4, 0x34]                                |         r6 = *((r4 + 0x34));
    0x00067e94 cmp r6, 0                                         |         
    0x00067e96 bne 0x67e6a                                       |         
                                                                 |     }
                                                                 | label_17:
    0x00067e98 ldr r1, [r4, 0x1c]                                |     r1 = *((r4 + 0x1c));
    0x00067e9a ldr r0, [r1]                                      |     r0 = *(r1);
    0x00067e9c cmp r0, sb                                        |     
    0x00067e9e it le                                             |     
                                                                 |     if (r0 <= sb) {
    0x00067ea0 movle r0, 0                                       |         r0 = 0;
                                                                 |         goto label_162;
                                                                 |     }
                                                                 |     if (r0 <= sb) {
                                                                 | label_162:
    0x00067ea2 ble 0x67e7c                                       |         goto label_16;
                                                                 |     }
    0x00067ea4 add.w r1, r1, sb, lsl 4                           |     r1 += (sb << 4);
    0x00067ea8 mov r0, fp                                        |     r0 = fp;
    0x00067eaa ldr r1, [r1, 8]                                   |     r1 = *((r1 + 8));
    0x00067eac bl 0x27e14                                        |     fcn_00027e14 (r0, r1);
    0x00067eb0 b 0x67e7c                                         |     goto label_16;
                                                                 | label_160:
    0x00067eb2 ldr r1, [r5, 0x1c]                                |     r1 = *((r5 + 0x1c));
    0x00067eb4 ldr r0, [r1]                                      |     r0 = *(r1);
    0x00067eb6 cmp r0, sb                                        |     
                                                                 |     if (r0 <= sb) {
    0x00067eb8 ble 0x67eca                                       |         goto label_159;
                                                                 |     }
    0x00067eba add.w r1, r1, sb, lsl 4                           |     r1 += (sb << 4);
    0x00067ebe mov r0, fp                                        |     r0 = fp;
    0x00067ec0 ldr r1, [r1, 8]                                   |     r1 = *((r1 + 8));
    0x00067ec2 bl 0x27e14                                        |     r0 = fcn_00027e14 (r0, r1);
    0x00067ec6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00067ec8 bne 0x67e7c                                       |         goto label_16;
                                                                 |     }
                                                                 | label_159:
    0x00067eca ldr r1, [r6, 0x1c]                                |     r1 = *((r6 + 0x1c));
    0x00067ecc ldr r0, [r1]                                      |     r0 = *(r1);
    0x00067ece cmp r0, sb                                        |     
                                                                 |     if (r0 <= sb) {
    0x00067ed0 ble 0x67e98                                       |         goto label_17;
                                                                 |     }
    0x00067ed2 add.w r1, r1, sb, lsl 4                           |     r1 += (sb << 4);
    0x00067ed6 mov r0, fp                                        |     r0 = fp;
    0x00067ed8 ldr r1, [r1, 8]                                   |     r1 = *((r1 + 8));
    0x00067eda bl 0x27e14                                        |     r0 = fcn_00027e14 (r0, r1);
    0x00067ede cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00067ee0 bne 0x67e7c                                       |         goto label_16;
                                                                 |     }
    0x00067ee2 b 0x67e98                                         |     goto label_17;
                                                                 | label_161:
    0x00067ee4 mov sb, r7                                        |     sb = r7;
    0x00067ee6 ldrd r6, r5, [sp, 0x20]                           |     __asm ("ldrd r6, r5, [var_20h]");
    0x00067eea ldr r7, [sp, 0x34]                                |     r7 = var_34h;
                                                                 | label_158:
    0x00067eec ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00067eee ldr.w r8, [r4, 0x34]                              |     r8 = *((r4 + 0x34));
    0x00067ef2 subs r3, 0x86                                     |     r3 -= 0x86;
    0x00067ef4 mov r2, r3                                        |     r2 = r3;
    0x00067ef6 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00067ef8 cmp r2, 1                                         |     
    0x00067efa mov r3, r8                                        |     r3 = r8;
                                                                 |     if (r2 > 1) {
    0x00067efc bhi.w 0x6744e                                     |         goto label_18;
                                                                 |     }
    0x00067f00 b.w 0x67442                                       |     goto label_19;
                                                                 | label_86:
    0x00067f04 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00067f06 movs r2, 1                                        |     r2 = 1;
    0x00067f08 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00067f0a ldr r3, [r3]                                      |     r3 = *(r3);
    0x00067f0c mov r1, r3                                        |     r1 = r3;
    0x00067f0e mov sb, r3                                        |     sb = r3;
    0x00067f10 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00067f12 bl 0x1e178                                        |     r0 = fcn_0001e178 (r0, r1, r2);
    0x00067f16 mov r8, r0                                        |     r8 = r0;
    0x00067f18 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00067f1a beq.w 0x68558                                     |         goto label_163;
                                                                 |     }
    0x00067f1e mov r3, sb                                        |     r3 = sb;
    0x00067f20 add.w sl, r0, 0x14                                |     sl = r0 + 0x14;
    0x00067f24 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00067f26 ble.w 0x68032                                     |         goto label_164;
                                                                 |     }
    0x00067f2a mov.w sb, 0                                       |     sb = 0;
    0x00067f2e str r5, [sp, 0x24]                                |     var_24h = r5;
    0x00067f30 str r6, [sp, 0x28]                                |     var_28h = r6;
    0x00067f32 mov r5, sb                                        |     r5 = sb;
    0x00067f34 mov r6, r4                                        |     r6 = r4;
    0x00067f36 ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x00067f3a ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00067f3c b 0x67f56                                         |     
                                                                 |     while (r1 != 0) {
    0x00067f3e mov r2, r5                                        |         r2 = r5;
    0x00067f40 mov r0, fp                                        |         r0 = fp;
    0x00067f42 bl 0x2818c                                        |         fcn_0002818c (r0, r1, r2);
    0x00067f44 vld4.16 {d11, d13, d15, d17}, [r3], r8            |         __asm ("vld4.16 {d11, d13, d15, d17}, [r3], r8");
    0x00067f48 str.w r0, [sl]                                    |         __asm ("str.w r0, [sl]");
                                                                 | label_20:
    0x00067f4c adds r5, 1                                        |         r5++;
    0x00067f4e add.w sl, sl, 4                                   |         sl += 4;
    0x00067f52 cmp sb, r5                                        |         
                                                                 |         if (sb == r5) {
    0x00067f54 beq 0x6802c                                       |             goto label_165;
                                                                 |         }
    0x00067f56 ldr r1, [r6, 0x34]                                |         r1 = *((r6 + 0x34));
    0x00067f58 cmp r1, 0                                         |         
    0x00067f5a bne 0x67f3e                                       |         
                                                                 |     }
    0x00067f5c ldr r1, [r6, 0x1c]                                |     r1 = *((r6 + 0x1c));
    0x00067f5e ldr r0, [r1]                                      |     r0 = *(r1);
    0x00067f60 cmp r0, r5                                        |     
    0x00067f62 itt le                                            |     
                                                                 |     if (r0 > r5) {
    0x00067f64 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r0 > r5) {
    0x00067f66 strle r3, [sl]                                    |         *(sl) = r3;
                                                                 |     }
                                                                 |     if (r0 <= r5) {
    0x00067f6a ble 0x67f80                                       |         goto label_166;
                                                                 |     }
    0x00067f6c add.w r1, r1, r5, lsl 4                           |     r1 += (r5 << 4);
    0x00067f70 mov r0, fp                                        |     r0 = fp;
    0x00067f72 ldr r1, [r1, 8]                                   |     r1 = *((r1 + 8));
    0x00067f74 bl 0x27e14                                        |     fcn_00027e14 (r0, r1);
    0x00067f78 str.w r0, [sl]                                    |     __asm ("str.w r0, [sl]");
    0x00067f7c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00067f7e bne 0x67f4c                                       |         goto label_20;
                                                                 |     }
                                                                 | label_166:
    0x00067f80 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00067f82 str.w r1, [sl]                                    |     __asm ("str.w r1, [sl]");
    0x00067f86 b 0x67f4c                                         |     goto label_20;
                                                                 | label_121:
    0x00067f88 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00067f8a mov r0, fp                                        |     r0 = fp;
    0x00067f8c ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00067f8e ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00067f90 strd sb, r1, [sp, 8]                              |     __asm ("strd sb, r1, [var_8h]");
    0x00067f94 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x00067f96 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00067f98 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00067f9a str r1, [sp]                                      |     *(sp) = r1;
    0x00067f9c mov r1, r4                                        |     r1 = r4;
    0x00067f9e bl 0x309b8                                        |     fcn_000309b8 (r0, r1, r2, r3, r4, r5, r6);
    0x00067fa2 str r0, [sp, 0x54]                                |     var_54h = r0;
    0x00067fa4 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00067fa8 bne.w 0x67650                                     |         goto label_21;
                                                                 |     }
                                                                 | label_124:
    0x00067fac ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x00067fae ldr r1, [r6, 0x70]                                |     r1 = *((r6 + 0x70));
    0x00067fb0 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00067fb2 cmp r3, r1                                        |     
                                                                 |     if (r3 >= r1) {
    0x00067fb4 bge.w 0x6853e                                     |         goto label_167;
                                                                 |     }
    0x00067fb8 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00067fba mov.w lr, 0                                       |     lr = 0;
    0x00067fbe ldr r0, [r6, 0x68]                                |     r0 = *((r6 + 0x68));
    0x00067fc0 mov.w ip, 9                                       |     
    0x00067fc4 ldr r7, [sp, 0x5c]                                |     r7 = var_5ch;
    0x00067fc6 add.w r3, r2, r2, lsl 2                           |     r3 = r2 + (r2 << 2);
    0x00067fca adds r2, 1                                        |     r2++;
    0x00067fcc str r2, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r2;
    0x00067fce lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00067fd0 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00067fd2 adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x00067fd4 str r7, [r2, 4]                                   |     *((r2 + 4)) = r7;
    0x00067fd6 ldr r7, [sp, 0x54]                                |     r7 = var_54h;
    0x00067fd8 str.w lr, [r2, 0x10]                              |     __asm ("str.w lr, [r2, 0x10]");
    0x00067fdc strd r7, lr, [r2, 8]                              |     __asm ("strd r7, lr, [r2, 8]");
    0x00067fe0 str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
                                                                 | label_54:
    0x00067fe4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00067fe6 cmp r1, r3                                        |     
                                                                 |     if (r1 <= r3) {
    0x00067fe8 ble.w 0x6852a                                     |         goto label_168;
                                                                 |     }
    0x00067fec ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00067fee movs r0, 0                                        |     r0 = 0;
    0x00067ff0 ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x00067ff2 mov.w ip, 0xb                                     |     
    0x00067ff6 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00067ff8 add.w r3, r2, r2, lsl 2                           |     r3 = r2 + (r2 << 2);
    0x00067ffc adds r2, 1                                        |     r2++;
    0x00067ffe str r2, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r2;
    0x00068000 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00068002 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00068004 str r7, [r2, 4]                                   |     *((r2 + 4)) = r7;
    0x00068006 ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x00068008 str r0, [r2, 0x10]                                |     *((r2 + 0x10)) = r0;
    0x0006800a strd r7, r0, [r2, 8]                              |     __asm ("strd r7, r0, [r2, 8]");
    0x0006800e str.w ip, [r1, r3]                                |     __asm ("str.w ip, [r1, r3]");
                                                                 | label_53:
    0x00068012 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00068014 mov r0, r6                                        |     r0 = r6;
    0x00068016 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x0006801a ldrsh.w r1, [r8, 2]                               |     r1 = *((r8 + 2));
    0x0006801e ldrsh.w r0, [r4, 2]                               |     r0 = *((r4 + 2));
    0x00068022 bl 0xf330                                         |     fcn_0000f330 (r0, r1);
    0x00068026 strh r0, [r4, 2]                                  |     *((r4 + 2)) = r0;
    0x00068028 b.w 0x67670                                       |     goto label_22;
                                                                 | label_165:
    0x0006802c mov r4, r6                                        |     r4 = r6;
    0x0006802e ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00068030 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
                                                                 | label_164:
    0x00068032 ldr.w sl, [pc, 0x814]                             |     sl = *(0x00068848);
    0x00068036 str r6, [sp, 0x28]                                |     var_28h = r6;
    0x00068038 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x0006803a add sl, pc                                        |     sl += pc;
    0x0006803c str r7, [sp, 0x18]                                |     var_18h = r7;
    0x0006803e str.w fp, [sp, 0x24]                              |     __asm ("str.w fp, [var_24h]");
    0x00068042 add.w sl, sl, 4                                   |     sl += 4;
    0x00068046 mov r7, r5                                        |     r7 = r5;
    0x00068048 mov fp, r4                                        |     
                                                                 | label_23:
    0x0006804a add.w sb, fp, 0x10                                |     sb += arg_10h;
    0x0006804e add.w r5, fp, 0x18                                |     r5 += arg_18h;
    0x00068052 mov.w r4, -1                                      |     r4 = -1;
                                                                 |     do {
    0x00068056 ldr r1, [sb, 4]!                                  |         r1 = *((sb += 4));
    0x0006805a cmp r1, 0                                         |         
                                                                 |         if (r1 < 0) {
    0x0006805c blt 0x68090                                       |             goto label_169;
                                                                 |         }
    0x0006805e ldr r3, [r7]                                      |         r3 = *(r7);
    0x00068060 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 != 0) {
    0x00068064 cbnz r3, 0x680be                                  |             goto label_170;
                                                                 |         }
    0x00068066 ldr r3, [r7, 0x68]                                |         r3 = *((r7 + 0x68));
    0x00068068 add.w r2, r1, r1, lsl 2                           |         r2 = r1 + (r1 << 2);
    0x0006806c add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
                                                                 | label_24:
    0x00068070 str r6, [r3, 8]                                   |         *((r3 + 8)) = r6;
    0x00068072 mov r2, r8                                        |         r2 = r8;
    0x00068074 ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x00068078 mov r0, r7                                        |         r0 = r7;
    0x0006807a adds r3, 1                                        |         r3++;
    0x0006807c str.w r3, [r8]                                    |         __asm ("str.w r3, [r8]");
    0x00068080 mvn r3, 7                                         |         r3 = ~7;
    0x00068084 bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
    0x00068088 cmp r5, sb                                        |         
    0x0006808a str.w r4, [sb]                                    |         __asm ("str.w r4, [sb]");
    0x0006808e bne 0x68056                                       |         
                                                                 |     } while (r5 != sb);
                                                                 | label_169:
    0x00068090 ldr.w fp, [fp, 0x34]                              |     fp = *(arg_34h);
    0x00068094 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00068098 bne 0x6804a                                       |         goto label_23;
                                                                 |     }
    0x0006809a ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0006809e ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x000680a0 ldrd fp, r6, [sp, 0x24]                           |     __asm ("ldrd fp, r6, [var_28h]");
    0x000680a4 subs r3, 1                                        |     r3--;
    0x000680a6 str.w r3, [r8]                                    |     __asm ("str.w r3, [r8]");
    0x000680aa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000680ac bne.w 0x670cc                                     |         goto label_0;
                                                                 |     }
    0x000680b0 ldr.w r0, [r8, 0xc]                               |     r0 = *((r8 + 0xc));
    0x000680b4 mov r1, r8                                        |     r1 = r8;
    0x000680b6 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x000680ba b.w 0x670cc                                       |     goto label_0;
                                                                 | label_170:
    0x000680be mov r3, sl                                        |     r3 = sl;
    0x000680c0 b 0x68070                                         |     goto label_24;
                                                                 | label_137:
    0x000680c2 ldr.w r3, [pc, 0x788]                             |     r3 = *(0x0006884c);
    0x000680c6 add r3, pc                                        |     r3 += pc;
    0x000680c8 adds r3, 4                                        |     r3 += 4;
    0x000680ca b 0x678de                                         |     goto label_25;
                                                                 | label_117:
    0x000680cc ldr.w r3, [pc, 0x780]                             |     
    0x000680d0 add r3, pc                                        |     r3 = 0xd0924;
    0x000680d2 b.w 0x6750e                                       |     goto label_26;
                                                                 | label_116:
    0x000680d6 ldr.w r3, [pc, 0x77c]                             |     r3 = *(0x00068854);
    0x000680da add r3, pc                                        |     r3 += pc;
    0x000680dc b.w 0x6750e                                       |     goto label_26;
                                                                 | label_104:
    0x000680e0 ldr.w r3, [fp, 0xdc]                              |     r3 = *(arg_dch);
    0x000680e4 ldr.w r2, [fp, 8]                                 |     r2 = *(arg_8h);
    0x000680e8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000680ea beq 0x6810e                                       |         
    0x000680ec ldr r1, [r2]                                      |         r1 = *(r2);
    0x000680ee it lt                                             |         
                                                                 |         if (r3 >= 0) {
    0x000680f0 ldrlt r3, [r2, 0x6c]                              |             r3 = *((r2 + 0x6c));
                                                                 |         }
    0x000680f2 ldrb.w r1, [r1, 0x57]                             |         r1 = *((r1 + 0x57));
    0x000680f6 it lt                                             |         
                                                                 |         if (r3 >= 0) {
    0x000680f8 addlt r3, r3, -1                                  |             r3 += -1;
                                                                 |         }
    0x000680fc cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000680fe bne.w 0x68508                                     |             goto label_171;
                                                                 |         }
    0x00068102 ldr r2, [r2, 0x68]                                |         r2 = *((r2 + 0x68));
    0x00068104 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00068108 add.w r3, r2, r3, lsl 2                           |         r3 = r2 + (r3 << 2);
                                                                 | label_50:
    0x0006810c ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
                                                                 |     }
    0x0006810e str.w r3, [fp, 0xdc]                              |     __asm ("str.w r3, [arg_dch]");
    0x00068112 b.w 0x6736e                                       |     goto label_27;
                                                                 | label_91:
    0x00068116 ldr.w r2, [pc, 0x740]                             |     r2 = *(0x00068858);
    0x0006811a mov r0, fp                                        |     r0 = fp;
    0x0006811c movs r1, 1                                        |     r1 = 1;
    0x0006811e add r2, pc                                        |     r2 += pc;
    0x00068120 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00068124 ldr.w r2, [pc, 0x734]                             |     
    0x00068128 movs r1, 1                                        |     r1 = 1;
    0x0006812a mov r0, fp                                        |     r0 = fp;
    0x0006812c add r2, pc                                        |     r2 = 0xd098c;
    0x0006812e bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00068132 b.w 0x67142                                       |     goto label_28;
                                                                 | label_149:
    0x00068136 ldrd r2, r1, [r5, 0x6c]                           |     __asm ("ldrd r2, r1, [r5, 0x6c]");
    0x0006813a ldr.w r6, [fp, 0x28]                              |     r6 = *(arg_28h);
    0x0006813e cmp r2, r1                                        |     
    0x00068140 add.w r0, r6, 1                                   |     r0 = r6 + 1;
    0x00068144 str.w r0, [fp, 0x28]                              |     __asm ("str.w r0, [arg_28h]");
                                                                 |     if (r2 >= r1) {
    0x00068148 bge.w 0x68628                                     |         goto label_172;
                                                                 |     }
    0x0006814c add.w r1, r2, r2, lsl 2                           |     r1 = r2 + (r2 << 2);
    0x00068150 ldr r7, [r5, 0x68]                                |     r7 = *((r5 + 0x68));
    0x00068152 adds r0, r2, 1                                    |     r0 = r2 + 1;
    0x00068154 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x00068156 str r0, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r0;
    0x00068158 mov.w ip, 0x76                                    |     
    0x0006815c adds r0, r7, r1                                   |     r0 = r7 + r1;
    0x0006815e strd r6, r3, [r0, 4]                              |     __asm ("strd r6, r3, [r0, 4]");
    0x00068162 strd r3, r3, [r0, 0xc]                            |     __asm ("strd r3, r3, [r0, 0xc]");
    0x00068166 str.w ip, [r7, r1]                                |     __asm ("str.w ip, [r7, r1]");
                                                                 | label_60:
    0x0006816a mov r3, r4                                        |     r3 = r4;
    0x0006816c str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
                                                                 |     do {
    0x0006816e mov r2, r3                                        |         r2 = r3;
    0x00068170 ldr r3, [r3, 0x38]                                |         r3 = *((r3 + 0x38));
    0x00068172 cmp r3, 0                                         |         
    0x00068174 bne 0x6816e                                       |         
                                                                 |     } while (r3 != 0);
    0x00068176 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00068178 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x0006817c str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0006817e b 0x67ba2                                         |     goto label_29;
                                                                 | label_88:
    0x00068180 ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x00068184 movs r2, 1                                        |     r2 = 1;
    0x00068186 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00068188 bl 0x16b48                                        |     fcn_00016b48 (r0, r1, r2);
    0x0006818c b.w 0x6710a                                       |     goto label_3;
                                                                 | label_134:
    0x00068190 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00068192 mov r1, r6                                        |     r1 = r6;
    0x00068194 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00068196 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x0006819a b.w 0x67866                                       |     goto label_30;
                                                                 | label_133:
    0x0006819e mov r1, r6                                        |     r1 = r6;
    0x000681a0 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000681a4 b.w 0x677f8                                       |     goto label_31;
                                                                 | label_130:
    0x000681a8 movs r1, 0                                        |     r1 = 0;
    0x000681aa ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000681ac str r1, [sp]                                      |     *(sp) = r1;
    0x000681ae mov r0, r6                                        |     r0 = r6;
    0x000681b0 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x000681b2 movs r1, 9                                        |     r1 = 9;
    0x000681b4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000681b8 b.w 0x67758                                       |     goto label_32;
                                                                 | label_115:
    0x000681bc ldr.w r3, [pc, 0x6a0]                             |     
    0x000681c0 add r3, pc                                        |     r3 = 0xd0a24;
    0x000681c2 b.w 0x6750e                                       |     goto label_26;
                                                                 | label_135:
    0x000681c6 movs r1, 0                                        |     r1 = 0;
    0x000681c8 movs r0, 0xc                                      |     r0 = 0xc;
    0x000681ca bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x000681ce b.w 0x6787e                                       |     goto label_33;
                                                                 | label_140:
    0x000681d2 ldr.w r3, [pc, 0x690]                             |     
    0x000681d6 mov r0, fp                                        |     r0 = fp;
    0x000681d8 ldr.w r2, [pc, 0x68c]                             |     r2 = fcn.00029a7c;
    0x000681dc add r3, pc                                        |     r3 = 0xd0a46;
    0x000681de str r3, [sp]                                      |     *(sp) = r3;
    0x000681e0 add r2, pc                                        |     r2 += pc;
    0x000681e2 mov r3, sb                                        |     r3 = sb;
    0x000681e4 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x000681e8 b.w 0x67970                                       |     goto label_34;
                                                                 | label_123:
    0x000681ec ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x000681f0 mov r1, sb                                        |     r1 = sb;
    0x000681f2 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x000681f6 b.w 0x67660                                       |     goto label_35;
                                                                 | label_105:
    0x000681fa adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x000681fc ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000681fe lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00068200 movs r3, 0                                        |     r3 = 0;
    0x00068202 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x00068206 str r0, [sp, 0x38]                                |     var_38h = r0;
    0x00068208 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006820a beq.w 0x685fe                                     |         goto label_173;
                                                                 |     }
                                                                 | label_66:
    0x0006820e add r3, sp, 0x98                                  |     r3 += var_98h;
    0x00068210 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00068212 b.w 0x67404                                       |     goto label_36;
                                                                 | label_113:
    0x00068216 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0006821a beq.w 0x6744e                                     |         goto label_18;
                                                                 |     }
    0x0006821e ldr.w ip, [sp, 0x18]                              |     ip = var_18h;
    0x00068222 mov r3, r8                                        |     r3 = r8;
    0x00068224 mov r0, r4                                        |     r0 = r4;
    0x00068226 movs r1, 1                                        |     r1 = 1;
    0x00068228 b 0x68234                                         |     
                                                                 |     while (r2 == ip) {
    0x0006822a ldr r2, [r3, 0x34]                                |         r2 = *((r3 + 0x34));
    0x0006822c adds r1, 1                                        |         r1++;
    0x0006822e mov r0, r3                                        |         r0 = r3;
                                                                 |         if (r2 == 0) {
    0x00068230 cbz r2, 0x6823a                                   |             goto label_174;
                                                                 |         }
    0x00068232 mov r3, r2                                        |         r3 = r2;
    0x00068234 ldrb r2, [r0]                                     |         r2 = *(r0);
    0x00068236 cmp r2, ip                                        |         
    0x00068238 beq 0x6822a                                       |         
                                                                 |     }
                                                                 | label_174:
    0x0006823a cmp r1, 3                                         |     
                                                                 |     if (r1 <= 3) {
    0x0006823c ble.w 0x6744e                                     |         goto label_18;
                                                                 |     }
    0x00068240 movs r3, 2                                        |     r3 = 2;
    0x00068242 mov r2, r8                                        |     r2 = r8;
                                                                 |     do {
    0x00068244 adds r3, 2                                        |         r3 += 2;
    0x00068246 mov r0, r2                                        |         r0 = r2;
    0x00068248 cmp r3, r1                                        |         
    0x0006824a ldr r2, [r2, 0x34]                                |         r2 = *((r2 + 0x34));
    0x0006824c blt 0x68244                                       |         
                                                                 |     } while (r3 < r1);
    0x0006824e mov r8, r2                                        |     r8 = r2;
    0x00068250 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00068252 b.w 0x67450                                       |     goto label_37;
                                                                 | label_94:
    0x00068256 movs r3, 0                                        |     r3 = 0;
    0x00068258 mov r2, sb                                        |     r2 = sb;
    0x0006825a str r3, [sp]                                      |     *(sp) = r3;
    0x0006825c movs r1, 0x76                                     |     r1 = 0x76;
    0x0006825e mov r0, r5                                        |     r0 = r5;
    0x00068260 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068264 mov r3, r0                                        |     r3 = r0;
    0x00068266 b.w 0x67186                                       |     goto label_38;
                                                                 | label_152:
    0x0006826a ldr.w r3, [pc, 0x600]                             |     r3 = *(0x0006886c);
    0x0006826e add r3, pc                                        |     r3 += pc;
    0x00068270 b 0x67bea                                         |     goto label_39;
                                                                 | label_98:
    0x00068272 ldr.w r3, [pc, 0x5fc]                             |     r3 = *(0x00068870);
    0x00068276 add r3, pc                                        |     r3 += pc;
    0x00068278 b.w 0x67218                                       |     goto label_40;
                                                                 | label_97:
    0x0006827c ldr.w r3, [pc, 0x5f4]                             |     
    0x00068280 add r3, pc                                        |     r3 = 0xd0af8;
    0x00068282 b.w 0x67218                                       |     goto label_40;
                                                                 | label_151:
    0x00068286 mov r2, r3                                        |     r2 = r3;
    0x00068288 ldr.w r3, [pc, 0x5ec]                             |     
    0x0006828c add r3, pc                                        |     r3 = 0xd0b08;
    0x0006828e b 0x67bea                                         |     goto label_39;
                                                                 | label_96:
    0x00068290 ldr.w r3, [pc, 0x5e8]                             |     
    0x00068294 add r3, pc                                        |     r3 = 0xd0b14;
    0x00068296 b.w 0x67218                                       |     goto label_40;
                                                                 | label_122:
    0x0006829a str.w sb, [sp, 0x54]                              |     __asm ("str.w sb, [var_54h]");
    0x0006829e b.w 0x67660                                       |     goto label_35;
                                                                 | label_118:
    0x000682a2 str r1, [sp]                                      |     *(sp) = r1;
    0x000682a4 movs r3, 0                                        |     r3 = 0;
    0x000682a6 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000682a8 movs r1, 0xa                                      |     r1 = 0xa;
    0x000682aa mov r0, r6                                        |     r0 = r6;
    0x000682ac bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000682b0 mov r7, r0                                        |     r7 = r0;
    0x000682b2 b.w 0x6754e                                       |     goto label_41;
                                                                 | label_120:
    0x000682b6 str r1, [sp]                                      |     *(sp) = r1;
    0x000682b8 movs r3, 0                                        |     r3 = 0;
    0x000682ba ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000682bc movs r1, 0xa                                      |     r1 = 0xa;
    0x000682be mov r0, r6                                        |     r0 = r6;
    0x000682c0 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000682c4 mov sl, r0                                        |     sl = r0;
    0x000682c6 b.w 0x675de                                       |     goto label_42;
                                                                 | label_131:
    0x000682ca ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000682cc mov r2, sb                                        |     r2 = sb;
    0x000682ce movs r1, 8                                        |     r1 = 8;
    0x000682d0 mov r0, r6                                        |     r0 = r6;
    0x000682d2 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000682d6 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000682da ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x000682dc b.w 0x6779a                                       |     goto label_43;
                                                                 | label_127:
    0x000682e0 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000682e2 mov r2, sb                                        |     r2 = sb;
    0x000682e4 movs r1, 8                                        |     r1 = 8;
    0x000682e6 mov r0, r6                                        |     r0 = r6;
    0x000682e8 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000682ec bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000682f0 ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x000682f2 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000682f4 b.w 0x676fc                                       |     goto label_44;
                                                                 | label_126:
    0x000682f8 movs r1, 0                                        |     r1 = 0;
    0x000682fa ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x000682fc str r1, [sp]                                      |     *(sp) = r1;
    0x000682fe mov r0, r6                                        |     r0 = r6;
    0x00068300 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00068302 movs r1, 9                                        |     r1 = 9;
    0x00068304 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068308 mov r4, r0                                        |     r4 = r0;
    0x0006830a b.w 0x676bc                                       |     goto label_45;
                                                                 | label_114:
    0x0006830e ldr.w r1, [fp, 0x2c]                              |     r1 = *(arg_2ch);
    0x00068312 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00068314 adds r0, r1, 2                                    |     r0 = r1 + 2;
    0x00068316 add.w sl, r1, 1                                   |     sl = r1 + 1;
    0x0006831a str r0, [sp, 0x48]                                |     var_48h = r0;
    0x0006831c str.w r0, [fp, 0x2c]                              |     __asm ("str.w r0, [arg_2ch]");
                                                                 |     if (r3 != 0) {
    0x00068320 cbz r3, 0x68324                                   |         
    0x00068322 adds r2, r3, 1                                    |         r2 = r3 + 1;
                                                                 |     }
    0x00068324 movs r7, 0                                        |     r7 = 0;
    0x00068326 mov r3, sl                                        |     r3 = sl;
    0x00068328 movs r1, 0x50                                     |     r1 = 0x50;
    0x0006832a mov r0, r6                                        |     r0 = r6;
    0x0006832c str r7, [sp]                                      |     *(sp) = r7;
    0x0006832e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00068332 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00068334 mov r2, sl                                        |     r2 = sl;
    0x00068336 movs r1, 0x50                                     |     r1 = 0x50;
    0x00068338 mov r0, r6                                        |     r0 = r6;
    0x0006833a str r7, [sp]                                      |     *(sp) = r7;
    0x0006833c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00068340 b.w 0x674ac                                       |     goto label_46;
                                                                 | label_150:
    0x00068344 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x00068346 movs r2, 2                                        |     r2 = 2;
    0x00068348 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0006834a ldr.w r3, [pc, 0x534]                             |     r3 = *(0x00068880);
    0x0006834e add r3, pc                                        |     r3 += pc;
    0x00068350 b 0x67bea                                         |     goto label_39;
                                                                 | label_155:
    0x00068352 ldrd r3, r2, [r5, 0x6c]                           |     __asm ("ldrd r3, r2, [r5, 0x6c]");
    0x00068356 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00068358 bge.w 0x686d8                                     |         goto label_175;
                                                                 |     }
    0x0006835c add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x00068360 ldr r0, [r5, 0x68]                                |     r0 = *((r5 + 0x68));
    0x00068362 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00068364 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00068366 str r1, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r1;
    0x00068368 mov.w ip, 0x10                                    |     
    0x0006836c adds r1, r0, r2                                   |     r1 = r0 + r2;
    0x0006836e str r6, [r1, 4]                                   |     *((r1 + 4)) = r6;
    0x00068370 mov r6, r3                                        |     r6 = r3;
    0x00068372 vmov.32 r3, d7[1]                                 |     __asm ("vmov.32 r3, d7[1]");
    0x00068376 strd r7, r7, [r1, 8]                              |     __asm ("strd r7, r7, [r1, 8]");
    0x0006837a str r7, [r1, 0x10]                                |     *((r1 + 0x10)) = r7;
    0x0006837c str.w ip, [r0, r2]                                |     __asm ("str.w ip, [r0, r2]");
                                                                 | label_64:
    0x00068380 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00068382 bne.w 0x686ba                                     |         goto label_176;
                                                                 |     }
                                                                 | label_62:
    0x00068386 ldr.w r2, [pc, 0x4fc]                             |     r2 = *(0x00068884);
    0x0006838a movs r1, 1                                        |     r1 = 1;
    0x0006838c mov r0, fp                                        |     r0 = fp;
    0x0006838e add r2, pc                                        |     r2 += pc;
    0x00068390 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x00068394 mov r2, sl                                        |     r2 = sl;
    0x00068396 mov r1, r4                                        |     r1 = r4;
    0x00068398 mov r0, fp                                        |     r0 = fp;
    0x0006839a bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x0006839e ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
    0x000683a0 mov r7, r0                                        |     r7 = r0;
    0x000683a2 ldrsh.w r1, [r8, 2]                               |     r1 = *((r8 + 2));
    0x000683a6 ldrsh.w r0, [r4, 2]                               |     r0 = *((r4 + 2));
    0x000683aa str.w r8, [r4, 0x34]                              |     __asm ("str.w r8, [r4, 0x34]");
    0x000683ae str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000683b0 bl 0xf330                                         |     fcn_0000f330 (r0, r1);
    0x000683b4 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x000683b6 mov r8, r0                                        |     r8 = r0;
    0x000683b8 strh r0, [r4, 2]                                  |     *((r4 + 2)) = r0;
    0x000683ba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000683bc bne.w 0x67d76                                     |         goto label_47;
                                                                 |     }
    0x000683c0 b 0x67d88                                         |     goto label_48;
                                                                 | label_147:
    0x000683c2 ldr.w r2, [pc, 0x4c4]                             |     
    0x000683c6 mov r0, fp                                        |     r0 = fp;
    0x000683c8 str r1, [r7, 0x38]                                |     *((r7 + 0x38)) = r1;
    0x000683ca movs r1, 1                                        |     r1 = 1;
    0x000683cc add r2, pc                                        |     r2 = 0xd0c5a;
    0x000683ce bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x000683d2 add r3, sp, 0x98                                  |     r3 += var_98h;
    0x000683d4 mov r1, r7                                        |     r1 = r7;
    0x000683d6 mov r2, r3                                        |     r2 = r3;
    0x000683d8 mov r0, fp                                        |     r0 = fp;
    0x000683da str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000683dc bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x000683e0 str r4, [r7, 0x38]                                |     *((r7 + 0x38)) = r4;
    0x000683e2 mov r3, r0                                        |     r3 = r0;
    0x000683e4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000683e6 bne.w 0x67acc                                     |         goto label_49;
                                                                 |     }
    0x000683ea ldr.w r2, [r8, 0x6c]                              |     r2 = *((r8 + 0x6c));
    0x000683ee mov r1, r2                                        |     r1 = r2;
    0x000683f0 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x000683f2 ldr.w r2, [r8, 0x70]                              |     r2 = *((r8 + 0x70));
    0x000683f6 cmp r1, r2                                        |     
                                                                 |     if (r1 >= r2) {
    0x000683f8 bge.w 0x6881a                                     |         goto label_177;
                                                                 |     }
    0x000683fc ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x000683fe mov.w ip, 0x23                                    |     
    0x00068402 ldr.w r0, [r8, 0x68]                              |     r0 = *((r8 + 0x68));
    0x00068406 add.w r2, r1, r1, lsl 2                           |     r2 = r1 + (r1 << 2);
    0x0006840a adds r1, 1                                        |     r1++;
    0x0006840c str.w r1, [r8, 0x6c]                              |     __asm ("str.w r1, [r8, 0x6c]");
    0x00068410 lsl.w lr, r2, 2                                   |     lr = r2 << 2;
    0x00068414 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00068416 add.w r1, r0, lr                                  |     r1 = r0 + lr;
    0x0006841a str r2, [r1, 4]                                   |     *((r1 + 4)) = r2;
    0x0006841c ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0006841e str r3, [r1, 0x10]                                |     *((r1 + 0x10)) = r3;
    0x00068420 strd r2, r3, [r1, 8]                              |     __asm ("strd r2, r3, [r1, 8]");
    0x00068424 str.w ip, [r0, lr]                                |     __asm ("str.w ip, [r0, lr]");
                                                                 | label_78:
    0x00068428 movs r3, 0                                        |     r3 = 0;
    0x0006842a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0006842c movs r1, 0x88                                     |     r1 = 0x88;
    0x0006842e mov r0, r8                                        |     r0 = r8;
    0x00068430 str r3, [sp]                                      |     *(sp) = r3;
    0x00068432 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00068436 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0006843a beq.w 0x687c2                                     |         goto label_178;
                                                                 |     }
    0x0006843e ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00068442 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x00068444 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00068446 mov r0, r8                                        |     r0 = r8;
    0x00068448 adds r3, 1                                        |     r3++;
    0x0006844a str r2, [sp]                                      |     *(sp) = r2;
    0x0006844c ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0006844e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_75:
    0x00068452 movs r3, 0                                        |     r3 = 0;
    0x00068454 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00068456 str r3, [sp]                                      |     *(sp) = r3;
    0x00068458 movs r1, 0x82                                     |     r1 = 0x82;
    0x0006845a mov r0, r8                                        |     r0 = r8;
    0x0006845c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00068460 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00068462 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00068466 cmp r2, 0                                         |     
    0x00068468 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0006846a add.w r3, r3, -1                                  |     r3 += -1;
    0x0006846e str.w r3, [fp, 0x38]                              |     __asm ("str.w r3, [arg_38h]");
                                                                 |     if (r2 > 0) {
    0x00068472 ble 0x68484                                       |         
    0x00068474 movs r1, 1                                        |         r1 = 1;
    0x00068476 mov r0, r8                                        |         r0 = r8;
    0x00068478 str r1, [sp]                                      |         *(sp) = r1;
    0x0006847a movs r1, 0x31                                     |         r1 = 0x31;
    0x0006847c str r3, [sp, 0x28]                                |         var_28h = r3;
    0x0006847e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00068482 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
                                                                 |     }
    0x00068484 strd sl, r3, [sp, 4]                              |     __asm ("strd sl, r3, [var_4h]");
    0x00068488 mov.w sl, 0                                       |     sl = 0;
    0x0006848c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006848e mov r1, r4                                        |     r1 = r4;
    0x00068490 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00068492 mov r0, fp                                        |     r0 = fp;
    0x00068494 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00068498 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0006849a mov r3, sl                                        |     r3 = sl;
    0x0006849c bl 0x5fbc0                                        |     fcn_0005fbc0 (r0, r1, r2, r3, r4, r5, r6);
    0x000684a0 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000684a2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000684a4 bne.w 0x687a2                                     |         goto label_179;
                                                                 |     }
                                                                 | label_74:
    0x000684a8 ldr.w r0, [r8, 0xc]                               |     r0 = *((r8 + 0xc));
    0x000684ac ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x000684b0 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x000684b2 bmi.w 0x68796                                     |         goto label_180;
                                                                 |     }
    0x000684b6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000684b8 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x000684ba ldr.w r1, [r8, 0x6c]                              |     r1 = *((r8 + 0x6c));
    0x000684be lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000684c0 rsbs r3, r3, 0                                    |     r3 -= ;
    0x000684c2 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_73:
    0x000684c4 ldr r2, [pc, 0x3c4]                               |     
    0x000684c6 movs r3, 0                                        |     r3 = 0;
    0x000684c8 str r3, [r6, 0x34]                                |     *((r6 + 0x34)) = r3;
    0x000684ca movs r1, 1                                        |     r1 = 1;
    0x000684cc mov r0, fp                                        |     r0 = fp;
    0x000684ce add r2, pc                                        |     r2 = 0xd0d5e;
    0x000684d0 bl 0x2b770                                        |     fcn_0002b770 (r0, r1);
    0x000684d4 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000684d6 mov r1, r4                                        |     r1 = r4;
    0x000684d8 mov r0, fp                                        |     r0 = fp;
    0x000684da bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x000684de mov r0, r8                                        |     r0 = r8;
    0x000684e0 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x000684e2 str r7, [r6, 0x34]                                |     *((r6 + 0x34)) = r7;
    0x000684e4 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x000684e8 ldr.w r0, [r8, 0xc]                               |     r0 = *((r8 + 0xc));
    0x000684ec ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x000684f0 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x000684f2 bmi.w 0x687b4                                     |         goto label_181;
                                                                 |     }
    0x000684f6 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000684f8 ldr.w r1, [r8, 0x6c]                              |     r1 = *((r8 + 0x6c));
    0x000684fc ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x000684fe lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00068500 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00068502 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
    0x00068504 b.w 0x67acc                                       |     goto label_49;
                                                                 | label_171:
    0x00068508 ldr r3, [pc, 0x384]                               |     
    0x0006850a add r3, pc                                        |     r3 = 0xd0d9e;
    0x0006850c adds r3, 4                                        |     r3 += 4;
    0x0006850e b 0x6810c                                         |     goto label_50;
                                                                 | label_143:
    0x00068510 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00068512 b.w 0x67a26                                       |     goto label_51;
                                                                 | label_157:
    0x00068516 movs r3, 0                                        |     r3 = 0;
    0x00068518 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0006851a str r3, [sp]                                      |     *(sp) = r3;
    0x0006851c movs r1, 9                                        |     r1 = 9;
    0x0006851e ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00068520 mov r0, r6                                        |     r0 = r6;
    0x00068522 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068526 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00068528 b 0x67df2                                         |     goto label_52;
                                                                 | label_168:
    0x0006852a movs r3, 0                                        |     r3 = 0;
    0x0006852c ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0006852e str r3, [sp]                                      |     *(sp) = r3;
    0x00068530 movs r1, 0xb                                      |     r1 = 0xb;
    0x00068532 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00068534 mov r0, r6                                        |     r0 = r6;
    0x00068536 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0006853a str r0, [sp, 0x44]                                |     var_44h = r0;
    0x0006853c b 0x68012                                         |     goto label_53;
                                                                 | label_167:
    0x0006853e movs r3, 0                                        |     r3 = 0;
    0x00068540 movs r1, 9                                        |     r1 = 9;
    0x00068542 str r3, [sp]                                      |     *(sp) = r3;
    0x00068544 mov r0, r6                                        |     r0 = r6;
    0x00068546 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00068548 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0006854a bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0006854e ldr r3, [r6, 0x6c]                                |     r3 = *((r6 + 0x6c));
    0x00068550 ldr r1, [r6, 0x70]                                |     r1 = *((r6 + 0x70));
    0x00068552 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00068554 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00068556 b 0x67fe4                                         |     goto label_54;
                                                                 | label_163:
    0x00068558 movs r7, 7                                        |     r7 = 7;
    0x0006855a b.w 0x670cc                                       |     goto label_0;
                                                                 | label_146:
    0x0006855e ldrd r3, r2, [r8, 0x6c]                           |     __asm ("ldrd r3, r2, [r8, 0x6c]");
    0x00068562 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00068564 bge.w 0x68808                                     |         goto label_182;
                                                                 |     }
    0x00068568 add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x0006856c ldr.w r6, [r8, 0x68]                              |     r6 = *((r8 + 0x68));
    0x00068570 ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x00068572 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00068574 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00068576 str.w r1, [r8, 0x6c]                              |     __asm ("str.w r1, [r8, 0x6c]");
    0x0006857a movs r0, 0                                        |     r0 = 0;
    0x0006857c adds r1, r6, r2                                   |     r1 = r6 + r2;
    0x0006857e mov.w ip, 0x76                                    |     
    0x00068582 strd r7, r0, [r1, 4]                              |     __asm ("strd r7, r0, [r1, 4]");
    0x00068586 strd r0, r0, [r1, 0xc]                            |     __asm ("strd r0, r0, [r1, 0xc]");
    0x0006858a str.w ip, [r6, r2]                                |     __asm ("str.w ip, [r6, r2]");
                                                                 | label_77:
    0x0006858e str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x00068590 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00068592 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x00068596 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00068598 b.w 0x67aa4                                       |     goto label_55;
                                                                 | label_148:
    0x0006859c movs r7, 7                                        |     r7 = 7;
    0x0006859e b.w 0x6710a                                       |     goto label_3;
                                                                 | label_144:
    0x000685a2 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x000685a6 beq.w 0x686ec                                     |         
    0x000685aa ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x000685ac ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x000685ae str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x000685b0 adds r3, r1, 2                                    |         r3 = r1 + 2;
    0x000685b2 str r7, [sp]                                      |         *(sp) = r7;
    0x000685b4 str.w r3, [fp, 0x28]                              |         __asm ("str.w r3, [arg_28h]");
    0x000685b8 movs r3, 0                                        |         r3 = 0;
    0x000685ba str r3, [sp, 0xa0]                                |         var_a0h = r3;
    0x000685bc str r3, [sp, 0xac]                                |         var_ach = r3;
    0x000685be strd r3, r3, [sp, 0xa4]                           |         __asm ("strd r3, r3, [var_a4h]");
    0x000685c2 movs r3, 6                                        |         r3 = 6;
    0x000685c4 str.w r2, [fp, 0x2c]                              |         __asm ("str.w r2, [arg_2ch]");
    0x000685c8 str r1, [sp, 0x9c]                                |         var_9ch = r1;
    0x000685ca b.w 0x67a62                                       |         goto label_56;
                                                                 | label_136:
    0x000685ce ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x000685d2 mov r1, r4                                        |         r1 = r4;
    0x000685d4 movs r2, 1                                        |         r2 = 1;
    0x000685d6 bl 0x16b48                                        |         fcn_00016b48 (r0, r1, r2);
    0x000685da b.w 0x67896                                       |         goto label_57;
                                                                 | label_129:
    0x000685e8 movs r2, 0                                        |         r2 = 0;
    0x000685ea movs r1, 0xb                                      |         r1 = 0xb;
    0x000685ec str r2, [sp]                                      |         *(sp) = r2;
    0x000685ee mov r0, r6                                        |         r0 = r6;
    0x000685f0 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x000685f2 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x000685f4 bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000685f8 mov r1, r0                                        |         r1 = r0;
    0x000685fa b.w 0x67740                                       |         goto label_58;
                                                                 | label_173:
    0x000685fe ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x00068600 ldr r3, [r4, 0x34]                                |         r3 = *((r4 + 0x34));
    0x00068602 mov sb, r2                                        |         sb = r2;
    0x00068604 str r2, [sp, 0x4c]                                |         var_4ch = r2;
    0x00068606 str r2, [sp, 0x44]                                |         var_44h = r2;
    0x00068608 movs r2, 1                                        |         r2 = 1;
    0x0006860a str r2, [sp, 0x40]                                |         var_40h = r2;
    0x0006860c add r2, sp, 0x98                                  |         r2 += var_98h;
    0x0006860e str r2, [sp, 0x1c]                                |         var_1ch = r2;
    0x00068610 b.w 0x67442                                       |         goto label_19;
                                                                 | label_95:
    0x00068614 mov r3, r6                                        |         r3 = r6;
    0x00068616 mov r2, r1                                        |         r2 = r1;
    0x00068618 mov r0, r5                                        |         r0 = r5;
    0x0006861a movs r1, 0x76                                     |         r1 = 0x76;
    0x0006861c str r6, [sp]                                      |         *(sp) = r6;
    0x0006861e bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068622 mov r3, r0                                        |         r3 = r0;
    0x00068624 b.w 0x671f0                                       |         goto label_59;
                                                                 | label_172:
    0x00068628 mov r2, r6                                        |         r2 = r6;
    0x0006862a movs r1, 0x76                                     |         r1 = 0x76;
    0x0006862c mov r0, r5                                        |         r0 = r5;
    0x0006862e str r3, [sp]                                      |         *(sp) = r3;
    0x00068630 bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068634 mov r2, r0                                        |         r2 = r0;
    0x00068636 b 0x6816a                                         |         goto label_60;
                                                                 | label_156:
    0x00068638 cmp r2, 7                                         |         
    0x0006863a asr.w r0, r2, 0x1f                                |         r0 = r2 >> 0x1f;
                                                                 |         if (r2 > 7) {
    0x0006863e bgt.w 0x687d4                                     |             goto label_183;
                                                                 |         }
    0x00068642 subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x00068644 orrs r3, r0                                       |         r3 |= r0;
    0x00068646 it eq                                             |         
                                                                 |         if (r3 != r0) {
    0x00068648 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r3 != r0) {
    0x0006864a beq 0x68676                                       |             
    0x0006864c adds r1, r2, r2                                   |             r1 = r2 + r2;
    0x0006864e adcs r0, r0                                       |             __asm ("adcs r0, r0");
    0x00068650 cmp r1, 8                                         |             
    0x00068652 sbcs r0, r0, 0                                    |             __asm ("sbcs r0, r0, 0");
                                                                 |             if (r1 >= 8) {
    0x00068656 bhs.w 0x68830                                     |                 goto label_184;
                                                                 |             }
    0x0006865a lsls r1, r2, 2                                    |             r1 = r2 << 2;
    0x0006865c movs r2, 0x14                                     |             r2 = 0x14;
                                                                 | label_76:
    0x0006865e sub.w r3, r2, 0xa                                 |             r3 = r2 - 0xa;
    0x00068662 ldr r2, [pc, 0x234]                               |             
    0x00068664 and r1, r1, 7                                     |             r1 &= 7;
    0x00068668 add r2, pc                                        |             r2 = 0xd0f06;
    0x0006866a add.w r2, r2, r1, lsl 1                           |             r2 += (r1 << 1);
    0x0006866e ldrh.w r2, [r2, 0xd58]                            |             r2 = *((r2 + 0xd58));
    0x00068672 add r3, r2                                        |             r3 += r2;
    0x00068674 sxth r3, r3                                       |             __asm ("sxth r3, r3");
                                                                 |         }
    0x00068676 cmp r8, r3                                        |         
    0x00068678 it gt                                             |         
                                                                 |         if (r8 > r3) {
    0x0006867a strhgt r3, [r4, 2]                                |             __asm ("strhgt r3, [r4, 2]");
                                                                 |         }
    0x0006867c b.w 0x67d88                                       |         goto label_48;
                                                                 | label_145:
    0x00068680 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00068682 movs r1, 8                                        |         r1 = 8;
    0x00068684 ldr r6, [sp, 0x20]                                |         r6 = var_20h;
    0x00068686 mov r0, r8                                        |         r0 = r8;
    0x00068688 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x0006868a str.w r3, [fp, 0x2c]                              |         __asm ("str.w r3, [arg_2ch]");
    0x0006868e strb.w r1, [sp, 0x98]                             |         var_98h = r1;
    0x00068692 movs r1, 0x79                                     |         r1 = 0x79;
    0x00068694 str r7, [sp]                                      |         *(sp) = r7;
    0x00068696 strd r6, sb, [sp, 0x9c]                           |         __asm ("strd r6, sb, [var_a0h]");
    0x0006869a str.w sb, [sp, 0xac]                              |         __asm ("str.w sb, [var_ach]");
    0x0006869e strd sb, sb, [sp, 0xa4]                           |         __asm ("strd sb, sb, [var_a4h]");
    0x000686a2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000686a6 mov r3, r7                                        |         r3 = r7;
    0x000686a8 mov r2, r6                                        |         r2 = r6;
    0x000686aa movs r1, 0x76                                     |         r1 = 0x76;
    0x000686ac mov r0, r8                                        |         r0 = r8;
    0x000686ae str.w sb, [sp]                                    |         __asm ("str.w sb, [sp]");
    0x000686b2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000686b6 b.w 0x67aa2                                       |         goto label_61;
                                                                 | label_176:
    0x000686ba ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x000686bc movs r1, 0xa0                                     |         r1 = 0xa0;
    0x000686be str r3, [sp]                                      |         *(sp) = r3;
    0x000686c0 mov r0, r5                                        |         r0 = r5;
    0x000686c2 adds r3, 1                                        |         r3++;
    0x000686c4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000686c8 b 0x68386                                         |         goto label_62;
                                                                 | label_99:
    0x000686ca ldr.w r3, [fp, 0x2c]                              |         r3 = *(arg_2ch);
    0x000686ce adds r6, r3, 1                                    |         r6 = r3 + 1;
    0x000686d0 str.w r6, [fp, 0x2c]                              |         __asm ("str.w r6, [arg_2ch]");
    0x000686d4 b.w 0x6729c                                       |         goto label_63;
                                                                 | label_175:
    0x000686d8 mov r3, r0                                        |         r3 = r0;
    0x000686da mov r2, r6                                        |         r2 = r6;
    0x000686dc str r0, [sp]                                      |         *(sp) = r0;
    0x000686de movs r1, 0x10                                     |         r1 = 0x10;
    0x000686e0 mov r0, r5                                        |         r0 = r5;
    0x000686e2 bl 0x29a7c                                        |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000686e6 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x000686e8 mov r6, r0                                        |         r6 = r0;
    0x000686ea b 0x68380                                         |         goto label_64;
                                                                 |     }
    0x000686ec ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x000686ee movs r0, 5                                        |     r0 = 5;
    0x000686f0 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000686f2 movs r1, 0x79                                     |     r1 = 0x79;
    0x000686f4 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000686f6 adds r3, r6, 2                                    |     r3 = r6 + 2;
    0x000686f8 strb.w r0, [sp, 0x98]                             |     var_98h = r0;
    0x000686fc str.w r2, [fp, 0x2c]                              |     __asm ("str.w r2, [arg_2ch]");
    0x00068700 mov r0, r8                                        |     r0 = r8;
    0x00068702 str r7, [sp]                                      |     *(sp) = r7;
    0x00068704 str.w r3, [fp, 0x28]                              |     __asm ("str.w r3, [arg_28h]");
    0x00068708 mov r3, r2                                        |     r3 = r2;
    0x0006870a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0006870c strd r6, sb, [sp, 0x9c]                           |     __asm ("strd r6, sb, [var_a0h]");
    0x00068710 str.w sb, [sp, 0xac]                              |     __asm ("str.w sb, [var_ach]");
    0x00068714 strd sb, sb, [sp, 0xa4]                           |     __asm ("strd sb, sb, [var_a4h]");
    0x00068718 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006871c mov r3, r7                                        |     r3 = r7;
    0x0006871e mov r2, r6                                        |     r2 = r6;
    0x00068720 movs r1, 0x76                                     |     r1 = 0x76;
    0x00068722 mov r0, r8                                        |     r0 = r8;
    0x00068724 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00068728 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006872c b.w 0x67a9a                                       |     goto label_65;
                                                                 | label_106:
    0x00068730 adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x00068732 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00068734 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00068736 movs r3, 0                                        |     r3 = 0;
    0x00068738 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x0006873c str r0, [sp, 0x38]                                |     var_38h = r0;
    0x0006873e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00068740 bne.w 0x6820e                                     |         goto label_66;
                                                                 |     }
    0x00068744 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00068746 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00068748 add r3, sp, 0x98                                  |     r3 += var_98h;
    0x0006874a str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0006874c b.w 0x67e14                                       |     goto label_67;
                                                                 | label_103:
    0x00068750 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00068752 mov r1, r5                                        |     r1 = r5;
    0x00068754 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00068756 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x0006875a b.w 0x67348                                       |     goto label_68;
                                                                 | label_102:
    0x0006875e mov r1, r5                                        |     r1 = r5;
    0x00068760 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00068764 b.w 0x67320                                       |     goto label_69;
                                                                 | label_100:
    0x00068768 movs r3, 0                                        |     r3 = 0;
    0x0006876a mov r2, sb                                        |     r2 = sb;
    0x0006876c str r3, [sp]                                      |     *(sp) = r3;
    0x0006876e movs r1, 0x86                                     |     r1 = 0x86;
    0x00068770 mov r3, r6                                        |     r3 = r6;
    0x00068772 mov r0, r5                                        |     r0 = r5;
    0x00068774 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068778 mov r8, r0                                        |     r8 = r0;
    0x0006877a b.w 0x672c8                                       |     goto label_70;
                                                                 | label_154:
    0x0006877e rsb.w r2, r8, 0                                   |     r2 = r8 - ;
    0x00068782 mov r1, r5                                        |     r1 = r5;
    0x00068784 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00068788 b.w 0x67ce6                                       |     goto label_71;
                                                                 | label_153:
    0x0006878c mov r1, r5                                        |     r1 = r5;
    0x0006878e bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00068792 b.w 0x67cbe                                       |     goto label_72;
                                                                 | label_180:
    0x00068796 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00068798 mov r1, r8                                        |     r1 = r8;
    0x0006879a rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x0006879c bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000687a0 b 0x684c4                                         |     goto label_73;
                                                                 | label_179:
    0x000687a2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000687a4 movs r1, 0x3c                                     |     r1 = 0x3c;
    0x000687a6 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000687a8 mov r0, r8                                        |     r0 = r8;
    0x000687aa str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x000687ae bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000687b2 b 0x684a8                                         |     goto label_74;
                                                                 | label_181:
    0x000687b4 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000687b6 mov r1, r8                                        |     r1 = r8;
    0x000687b8 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x000687ba bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000687be b.w 0x67acc                                       |     goto label_49;
                                                                 | label_178:
    0x000687c2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000687c4 movs r1, 0x86                                     |     r1 = 0x86;
    0x000687c6 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000687c8 mov r0, r8                                        |     r0 = r8;
    0x000687ca str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000687ce bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000687d2 b 0x68452                                         |     goto label_75;
                                                                 | label_183:
    0x000687d4 clz r3, r0                                        |     r3 &= r0;
                                                                 |     if (r0 == 0) {
    0x000687d8 cbnz r0, 0x687e0                                  |         
    0x000687da clz r3, r2                                        |         r3 &= r2;
    0x000687de adds r3, 0x20                                     |         r3 += 0x20;
                                                                 |     }
    0x000687e0 rsb.w r3, r3, 0x3c                                |     r3 = 0x3c - r3;
    0x000687e4 lsr.w r1, r2, r3                                  |     r1 = r2 >> r3;
    0x000687e8 add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x000687ec rsb.w ip, r3, 0x20                                |     
    0x000687f0 lsls r2, r2, 1                                    |     r2 <<= 1;
    0x000687f2 lsl.w ip, r0, ip                                  |     
    0x000687f6 subs r3, 0x20                                     |     r3 -= 0x20;
    0x000687f8 lsr.w r3, r0, r3                                  |     r3 = r0 >> r3;
    0x000687fc adds r2, 0x28                                     |     r2 += 0x28;
    0x000687fe orr.w r1, r1, ip                                  |     r1 |= ip;
    0x00068802 uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x00068804 orrs r1, r3                                       |     r1 |= r3;
    0x00068806 b 0x6865e                                         |     goto label_76;
                                                                 | label_182:
    0x00068808 movs r3, 0                                        |     r3 = 0;
    0x0006880a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0006880c str r3, [sp]                                      |     *(sp) = r3;
    0x0006880e movs r1, 0x76                                     |     r1 = 0x76;
    0x00068810 mov r0, r8                                        |     r0 = r8;
    0x00068812 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068816 mov r3, r0                                        |     r3 = r0;
    0x00068818 b 0x6858e                                         |     goto label_77;
                                                                 | label_177:
    0x0006881a str r0, [sp]                                      |     *(sp) = r0;
    0x0006881c movs r1, 0x23                                     |     r1 = 0x23;
    0x0006881e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00068820 mov r0, r8                                        |     r0 = r8;
    0x00068822 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00068824 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00068828 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x0006882a b 0x68428                                         |     goto label_78;
                                                                 | label_89:
    0x0006882c blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_184:
    0x00068830 movs r2, 0x1e                                     |     r2 = 0x1e;
    0x00068832 b 0x6865e                                         |     goto label_76;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x68bfc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00068bfc ()                                      | void fcn_00068bfc (int16_t arg_198h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00068bfc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00068c00 mov r4, r1                                        |     r4 = r1;
    0x00068c02 ldrb.w r3, [r1, 0x2b]                             |     r3 = *((r1 + 0x2b));
    0x00068c06 sub sp, 0x1c                                      |     
    0x00068c08 mov r5, r0                                        |     r5 = r0;
    0x00068c0a ldr r1, [pc, 0x200]                               |     
    0x00068c0c ldr r2, [pc, 0x200]                               |     r2 = *(0x68e10);
    0x00068c0e cmp r3, 1                                         |     
    0x00068c10 ldr r6, [r0]                                      |     r6 = *(r0);
    0x00068c12 add r1, pc                                        |     r1 = 0xd1a24;
    0x00068c14 ldr r2, [r1, r2]                                  |     
    0x00068c16 ldr r2, [r2]                                      |     r2 = *(0xd1a24);
    0x00068c18 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00068c1a mov.w r2, 0                                       |     r2 = 0;
                                                                 |     if (r3 == 1) {
    0x00068c1e beq.w 0x68d36                                     |         goto label_8;
                                                                 |     }
    0x00068c22 ldrsh.w r7, [r4, 0x22]                            |     r7 = *((r4 + 0x22));
    0x00068c26 cmp r7, 0                                         |     
    0x00068c28 it gt                                             |     
                                                                 |     if (r7 <= 0) {
    0x00068c2a movgt r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r7 > 0) {
    0x00068c2c bgt 0x68cf8                                       |         goto label_0;
                                                                 |     }
                                                                 |     if (r7 == 0) {
    0x00068c2e bne 0x68cec                                       |         
    0x00068c30 ldr r1, [r4, 0x2c]                                |         r1 = *((r4 + 0x2c));
    0x00068c32 mov r2, r7                                        |         r2 = r7;
    0x00068c34 mov r0, r6                                        |         r0 = r6;
    0x00068c36 bl 0x2db4c                                        |         r0 = fcn_0002db4c (r0, r1, r2, r3);
    0x00068c3a mov r8, r0                                        |         r8 = r0;
    0x00068c3c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00068c3e beq 0x68d14                                       |             goto label_9;
                                                                 |         }
    0x00068c40 ldrb.w sb, [r5, 0xd0]                             |         sb = *((r5 + 0xd0));
    0x00068c44 mov r0, r5                                        |         r0 = r5;
    0x00068c46 strb.w r7, [r5, 0xd0]                             |         *((r5 + 0xd0)) = r7;
    0x00068c4a ldr.w r1, [r8, 0x20]                              |         r1 = *((r8 + 0x20));
    0x00068c4c asrs r0, r4, 0x20                                 |         r0 = r4 >> 0x20;
    0x00068c4e ldr.w fp, [r5, 0x28]                              |         fp = *((r5 + 0x28));
    0x00068c52 ldr.w sl, [r5, 0x64]                              |         sl = *((r5 + 0x64));
    0x00068c56 bl 0xc32c                                         |         fcn_0000c32c (r0, r1);
    0x00068c5a ldr.w r3, [r6, 0x130]                             |         r3 = *((r6 + 0x130));
    0x00068c5e movw r2, 0xffff                                   |         r2 = 0xffff;
    0x00068c62 strh r2, [r4, 0x22]                               |         *((r4 + 0x22)) = r2;
    0x00068c64 mov r1, r8                                        |         r1 = r8;
    0x00068c66 strh.w r7, [r6, 0x134]                            |         *((r6 + 0x134)) = r7;
    0x00068c6a movs r2, 0x40                                     |         r2 = 0x40;
    0x00068c6c adds r3, 1                                        |         r3++;
    0x00068c6e mov r0, r5                                        |         r0 = r5;
    0x00068c70 str.w r3, [r6, 0x130]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00068c74 ldr.w r3, [r6, 0x168]                             |         r3 = *((r6 + 0x168));
    0x00068c78 str.w r7, [r6, 0x168]                             |         __asm ("str.w r7, aav.0x000000ff");
    0x00068c7c str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00068c7e bl 0x54b94                                        |         fcn_00054b94 (r0, r1, r2);
    0x00068c82 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00068c84 mov r7, r0                                        |         r7 = r0;
    0x00068c86 str.w r3, [r6, 0x168]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00068c8a str.w fp, [r5, 0x28]                              |         __asm ("str.w fp, [r5, 0x28]");
    0x00068c8e str.w sl, [r5, 0x64]                              |         __asm ("str.w sl, [r5, 0x64]");
    0x00068c92 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00068c94 beq 0x68d7e                                       |             goto label_10;
                                                                 |         }
    0x00068c96 ldr r1, [r4, 0x10]                                |         r1 = *((r4 + 0x10));
    0x00068c98 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00068c9a beq 0x68d62                                       |             goto label_11;
                                                                 |         }
    0x00068c9c adds r3, r4, 4                                    |         r3 = r4 + 4;
    0x00068c9e ldr r0, [r5]                                      |         r0 = *(r5);
    0x00068ca0 add.w r2, r4, 0x22                                |         r2 = r4 + 0x22;
    0x00068ca4 bl 0x5476c                                        |         fcn_0005476c (r0, r1, r2, r3, r4);
    0x00068ca8 ldr r3, [r5, 0x24]                                |         r3 = *((r5 + 0x24));
    0x00068caa cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00068cac beq 0x68d86                                       |             goto label_12;
                                                                 |         }
                                                                 | label_4:
    0x00068cae ldrsh.w r3, [r4, 0x22]                            |         r3 = *((r4 + 0x22));
                                                                 | label_6:
    0x00068cb2 strh r3, [r4, 0x24]                               |         *((r4 + 0x24)) = r3;
    0x00068cb4 ldr.w r3, [r6, 0x210]                             |         r3 = *((r6 + 0x210));
    0x00068cb8 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00068cba beq 0x68d56                                       |             goto label_13;
                                                                 |         }
                                                                 | label_2:
    0x00068cbc mov r1, r7                                        |         r1 = r7;
    0x00068cbe mov r0, r6                                        |         r0 = r6;
    0x00068cc0 bl 0x170b8                                        |         fcn_000170b8 (r0, r1);
                                                                 | label_3:
    0x00068cc4 movs r7, 0                                        |         r7 = 0;
                                                                 | label_5:
    0x00068cc6 mov r1, r8                                        |         r1 = r8;
    0x00068cc8 movs r2, 1                                        |         r2 = 1;
    0x00068cca mov r0, r6                                        |         r0 = r6;
    0x00068ccc bl 0x16b48                                        |         fcn_00016b48 (r0, r1, r2);
    0x00068cd0 ldr.w r3, [r6, 0x130]                             |         r3 = *((r6 + 0x130));
    0x00068cd4 subs r3, 1                                        |         r3--;
    0x00068cd6 str.w r3, [r6, 0x130]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00068cda cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00068cdc bne 0x68d52                                       |             goto label_14;
                                                                 |         }
    0x00068cde ldrh.w r3, [r6, 0x136]                            |         r3 = *((r6 + 0x136));
                                                                 | label_1:
    0x00068ce2 strh.w r3, [r6, 0x134]                            |         *((r6 + 0x134)) = r3;
    0x00068ce6 strb.w sb, [r5, 0xd0]                             |         *((r5 + 0xd0)) = sb;
    0x00068cea b 0x68d16                                         |         goto label_15;
                                                                 |     }
    0x00068cec ldr r1, [pc, 0x124]                               |     
    0x00068cee movs r7, 1                                        |     r7 = 1;
    0x00068cf0 ldr r2, [r4]                                      |     r2 = *(r4);
    0x00068cf2 add r1, pc                                        |     r1 = 0xd1b0a;
    0x00068cf4 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 |     do {
                                                                 | label_0:
    0x00068cf8 ldr r2, [pc, 0x11c]                               |         
    0x00068cfa ldr r3, [pc, 0x114]                               |         r3 = *(0x68e12);
    0x00068cfc add r2, pc                                        |         r2 = 0xd1b18;
    0x00068cfe ldr r3, [r2, r3]                                  |         r3 = *(0xd1b18);
    0x00068d00 ldr r2, [r3]                                      |         r2 = *(0xd1b18);
    0x00068d02 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00068d04 eors r2, r3                                       |         r2 ^= r3;
    0x00068d06 mov.w r3, 0                                       |         r3 = 0;
    0x00068d08 lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
                                                                 |         if (r0 != r0) {
    0x00068d0a bne 0x68e08                                       |             goto label_16;
                                                                 |         }
    0x00068d0c mov r0, r7                                        |         r0 = r7;
    0x00068d0e add sp, 0x1c                                      |         
    0x00068d10 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_9:
    0x00068d14 movs r7, 1                                        |         r7 = 1;
                                                                 | label_15:
    0x00068d16 ldr r2, [r4, 0x3c]                                |         r2 = *((r4 + 0x3c));
    0x00068d18 ldrh.w r3, [r2, 0x4e]                             |         r3 = *((r2 + 0x4e));
    0x00068d1c orr r3, r3, 2                                     |         r3 |= 2;
    0x00068d20 strh.w r3, [r2, 0x4e]                             |         *((r2 + 0x4e)) = r3;
    0x00068d24 ldrb.w r3, [r6, 0x57]                             |         r3 = *((r6 + 0x57));
    0x00068d28 cmp r3, 0                                         |         
    0x00068d2a beq 0x68cf8                                       |         
                                                                 |     } while (r3 == 0);
    0x00068d2c mov r1, r4                                        |     r1 = r4;
    0x00068d2e mov r0, r6                                        |     r0 = r6;
    0x00068d30 bl 0x16cd8                                        |     fcn_00016cd8 (r0, r1);
    0x00068d34 b 0x68cf8                                         |     goto label_0;
                                                                 | label_8:
    0x00068d36 ldr r1, [r6, 0x38]                                |     r1 = *((r6 + 0x38));
    0x00068d38 adds r3, r1, 1                                    |     r3 = r1 + 1;
    0x00068d3a str r3, [r6, 0x38]                                |     *((r6 + 0x38)) = r3;
    0x00068d3c ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
                                                                 |     if (r3 != 0) {
    0x00068d3e cbnz r3, 0x68d46                                  |         goto label_17;
                                                                 |     }
    0x00068d40 b 0x68da6                                         |     goto label_18;
                                                                 |     do {
    0x00068d42 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
                                                                 |         if (r3 == 0) {
    0x00068d44 cbz r3, 0x68da6                                   |             goto label_18;
                                                                 |         }
                                                                 | label_17:
    0x00068d46 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00068d48 cmp r6, r2                                        |         
    0x00068d4a bne 0x68d42                                       |         
                                                                 |     } while (r6 != r2);
    0x00068d4c movs r7, 0                                        |     r7 = 0;
                                                                 | label_7:
    0x00068d4e str r1, [r6, 0x38]                                |     *((r6 + 0x38)) = r1;
    0x00068d50 b 0x68cf8                                         |     goto label_0;
                                                                 | label_14:
    0x00068d52 movs r3, 0                                        |     r3 = 0;
    0x00068d54 b 0x68ce2                                         |     goto label_1;
                                                                 | label_13:
    0x00068d56 ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x00068d58 subs r3, 1                                        |     r3--;
    0x00068d5a str r3, [r7, 0x18]                                |     *((r7 + 0x18)) = r3;
    0x00068d5c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00068d5e beq 0x68cbc                                       |         goto label_2;
                                                                 |     }
    0x00068d60 b 0x68cc4                                         |     goto label_3;
                                                                 | label_11:
    0x00068d62 ldr r3, [r0, 0x1c]                                |     r3 = *((r0 + 0x1c));
    0x00068d64 and r2, r3, 0x62                                  |     r2 = r3 & 0x62;
    0x00068d68 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00068d6a orrs r3, r2                                       |     r3 |= r2;
    0x00068d6c ldrsh.w r2, [r0, 0x22]                            |     r2 = *((r0 + 0x22));
    0x00068d70 strh r2, [r4, 0x22]                               |     *((r4 + 0x22)) = r2;
    0x00068d72 ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x00068d74 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x00068d76 str r2, [r4, 4]                                   |     *((r4 + 4)) = r2;
    0x00068d78 strh r1, [r0, 0x22]                               |     *((r0 + 0x22)) = r1;
    0x00068d7a str r1, [r0, 4]                                   |     *((r0 + 4)) = r1;
    0x00068d7c b 0x68cae                                         |     goto label_4;
                                                                 | label_10:
    0x00068d7e movs r7, 1                                        |     r7 = 1;
    0x00068d80 str.w r0, [r4, 0x22]                              |     __asm ("str.w r0, [r4, 0x22]");
    0x00068d84 b 0x68cc6                                         |     goto label_5;
                                                                 | label_12:
    0x00068d86 ldr.w r3, [r8, 0x1c]                              |     r3 = *((r8 + 0x1c));
    0x00068d8a ldr r2, [r3]                                      |     r2 = *(r3);
    0x00068d8c ldrsh.w r3, [r4, 0x22]                            |     r3 = *((r4 + 0x22));
    0x00068d90 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00068d92 bne 0x68cb2                                       |         goto label_6;
                                                                 |     }
    0x00068d94 movs r3, 0x40                                     |     r3 = 0x40;
    0x00068d96 mov r2, r8                                        |     r2 = r8;
    0x00068d98 mov r1, r4                                        |     r1 = r4;
    0x00068d9a mov r0, r5                                        |     r0 = r5;
    0x00068d9c bl 0x2b830                                        |     fcn_0002b830 (r0, r1, r2, r3, r4, r5, r6);
    0x00068da0 ldrsh.w r3, [r4, 0x22]                            |     r3 = *((r4 + 0x22));
    0x00068da4 b 0x68cb2                                         |     goto label_6;
                                                                 | label_18:
    0x00068da6 ldr r3, [r4, 0x30]                                |     r3 = *((r4 + 0x30));
    0x00068da8 movs r2, 0                                        |     r2 = 0;
    0x00068daa add.w r0, r6, 0x180                               |     r0 = r6 + 0x180;
    0x00068dae ldr r7, [r3]                                      |     r7 = *(r3);
    0x00068db0 mov r1, r7                                        |     r1 = r7;
    0x00068db2 bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x00068db6 ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
                                                                 |     if (r2 == 0) {
    0x00068db8 cbz r2, 0x68df4                                   |         goto label_19;
                                                                 |     }
    0x00068dba movs r3, 0                                        |     r3 = 0;
    0x00068dbc add r0, sp, 0x10                                  |     r0 += var_10h;
    0x00068dbe str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00068dc0 mov r1, r4                                        |     r1 = r4;
    0x00068dc2 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00068dc4 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00068dc6 str r0, [sp]                                      |     *(sp) = r0;
    0x00068dc8 mov r0, r6                                        |     r0 = r6;
    0x00068dca bl 0x326e0                                        |     fcn_000326e0 (r0, r1, r2, r3, r4);
    0x00068dce ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00068dd0 mov r7, r0                                        |     r7 = r0;
    0x00068dd2 cbnz r0, 0x68de4                                  |     
                                                                 |     if (r4 != 0) {
                                                                 |         while (1) {
    0x00068dd4 cbz r4, 0x68dde                                   |             
    0x00068dd6 mov r1, r4                                        |             r1 = r4;
    0x00068dd8 mov r0, r6                                        |             r0 = r6;
    0x00068dda bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x00068dde ldr r1, [r6, 0x38]                                |         r1 = *((r6 + 0x38));
    0x00068de0 subs r1, 1                                        |         r1--;
    0x00068de2 b 0x68d4e                                         |         goto label_7;
    0x00068de4 ldr r1, [pc, 0x34]                                |         
    0x00068de6 mov r2, r4                                        |         r2 = r4;
    0x00068de8 mov r0, r5                                        |         r0 = r5;
    0x00068dea add r1, pc                                        |         r1 = 0xd1c0a;
    0x00068dec bl 0x1d554                                        |         fcn_0001d554 (r0, r1);
    0x00068df0 str r7, [r5, 0xc]                                 |         *((r5 + 0xc)) = r7;
    0x00068df2 b 0x68dd4                                         |         
                                                                 |     }
                                                                 | label_19:
    0x00068df4 ldr r1, [pc, 0x28]                                |     
    0x00068df6 mov r2, r7                                        |     r2 = r7;
    0x00068df8 mov r0, r5                                        |     r0 = r5;
    0x00068dfa movs r7, 1                                        |     r7 = 1;
    0x00068dfc add r1, pc                                        |     r1 = 0xd1c20;
    0x00068dfe bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00068e02 ldr r1, [r6, 0x38]                                |     r1 = *((r6 + 0x38));
    0x00068e04 subs r1, 1                                        |     r1--;
    0x00068e06 b 0x68d4e                                         |     goto label_7;
                                                                 | label_16:
    0x00068e08 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00068e0c ldrb r6, [r5, 0x1b]                               |     r6 = *((r5 + 0x1b));
    0x00068e0e movs r3, r0                                       |     r3 = r0;
    0x00068e10 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00068e12 movs r0, r0                                       |     
    0x00068e14 str r0, [sp, 0x198]                               |     *(arg_198h) = r0;
    0x00068e16 movs r2, r0                                       |     r2 = r0;
    0x00068e18 ldrb r4, [r0, 0x18]                               |     r4 = *((r0 + 0x18));
    0x00068e1a movs r3, r0                                       |     r3 = r0;
    0x00068e1c mov r6, r7                                        |     r6 = r7;
    0x00068e1e movs r2, r0                                       |     r2 = r0;
    0x00068e20 ldrh r0, [r1, 0x3a]                               |     r0 = *((r1 + 0x3a));
    0x00068e22 movs r2, r0                                       |     r2 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x6b688 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0006b688 ()                                      | void fcn_0006b688 (int16_t arg_1h, int16_t arg_4h, int16_t arg_8h, int16_t arg_10h, int16_t arg_22h, int16_t arg_2bh, int16_t arg_34h, int16_t arg_38h, int16_t arg_128h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     arithmetic sig;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     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_7ch;
                                                                 |     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_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_e4h;
                                                                 |     int16_t var_e8h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0006b688 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0006b68c mov r4, r2                                        |     r4 = r2;
    0x0006b68e ldr.w r2, [pc, 0xa30]                             |     r2 = *(0x0006c0c0);
    0x0006b692 mov r7, r3                                        |     r7 = r3;
    0x0006b694 mov r6, r1                                        |     r6 = r1;
    0x0006b696 ldr.w r3, [pc, 0xa2c]                             |     
    0x0006b69a vpush {d8, d9, d10}                               |     __asm ("vpush {d8, d9, d10}");
    0x0006b69e add r2, pc                                        |     r2 += pc;
    0x0006b6a0 sub sp, 0xec                                      |     
    0x0006b6a2 ldr.w r5, [pc, 0xa24]                             |     r5 = *(0x0006c0c8);
    0x0006b6a6 str r0, [sp, 0x28]                                |     x = r0;
    0x0006b6a8 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0006b6aa ldr.w sl, [r0, 8]                                 |     sl = *((r0 + 8));
    0x0006b6ae add r5, pc                                        |     r5 += pc;
    0x0006b6b0 ldr r2, [r0]                                      |     r2 = *(r0);
    0x0006b6b2 ldr r3, [r3]                                      |     r3 = *(0x6c0c6);
    0x0006b6b4 str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x0006b6b6 mov.w r3, 0                                       |     r3 = 0;
    0x0006b6ba str r2, [sp, 0x24]                                |     sig = r2;
    0x0006b6bc cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0006b6c0 beq.w 0x6b7d0                                     |         goto label_133;
                                                                 |     }
                                                                 | label_1:
    0x0006b6c4 movs r3, 1                                        |     r3 = 1;
    0x0006b6c6 movs r2, 0                                        |     r2 = 0;
    0x0006b6c8 movs r1, 0xa6                                     |     r1 = 0xa6;
    0x0006b6ca str r2, [sp]                                      |     *(sp) = r2;
    0x0006b6cc mov r0, sl                                        |     r0 = sl;
    0x0006b6ce mov r2, r3                                        |     r2 = r3;
    0x0006b6d0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006b6d4 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006b6d6 movs r3, 2                                        |     r3 = 2;
    0x0006b6d8 mov r1, r6                                        |     r1 = r6;
    0x0006b6da mov r2, r4                                        |     r2 = r4;
    0x0006b6dc str r3, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r3;
    0x0006b6de add r3, sp, 0x88                                  |     r3 += var_88h;
    0x0006b6e0 bl 0x20164                                        |     r0 = fcn_00020164 (r0, r1, r2, r3);
    0x0006b6e4 subs r3, r0, 0                                    |     r3 = r0 - 0;
    0x0006b6e6 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 |     if (r3 < r0) {
    0x0006b6e8 blt 0x6b7a0                                       |         goto label_0;
                                                                 |     }
    0x0006b6ea ldr r2, [sp, 0x24]                                |     r2 = sig;
    0x0006b6ec cmp r3, 1                                         |     
    0x0006b6ee ldr r6, [r2, 0x10]                                |     r6 = *((r2 + 0x10));
    0x0006b6f0 beq 0x6b7c4                                       |     
                                                                 |     while (r0 == 0) {
    0x0006b6f2 ldr r1, [sp, 0x88]                                |         r1 = var_88h;
    0x0006b6f4 ldr r0, [sp, 0x24]                                |         r0 = sig;
    0x0006b6f6 bl 0x1e9ec                                        |         fcn_0001e9ec (r0, r1);
    0x0006b6fa str r0, [sp, 0x30]                                |         var_30h = r0;
    0x0006b6fc cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0006b6fe beq 0x6b7a0                                       |             
    0x0006b700 ldr r3, [sp, 0x128]                               |             r3 = *(arg_128h);
    0x0006b702 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0006b704 beq 0x6b7e8                                       |                 goto label_134;
                                                                 |             }
    0x0006b706 ldr.w r1, [pc, 0x9c4]                             |             r1 = *(0x0006c0cc);
    0x0006b70a mov r2, r7                                        |             r2 = r7;
    0x0006b70c ldr r0, [sp, 0x24]                                |             r0 = sig;
    0x0006b70e add r1, pc                                        |             r1 += pc;
    0x0006b710 bl 0x20e84                                        |             fcn_00020e84 (r0);
    0x0006b714 str r0, [sp, 0x2c]                                |             var_2ch = r0;
                                                                 | label_3:
    0x0006b716 ldr r2, [sp, 0x34]                                |             r2 = var_34h;
    0x0006b718 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x0006b71a lsls r7, r2, 4                                    |             r7 = r2 << 4;
    0x0006b71c add.w r8, r6, r7                                  |             r8 = r6 + r7;
    0x0006b720 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0006b722 beq 0x6b7e4                                       |                 goto label_135;
                                                                 |             }
    0x0006b724 ldr r3, [r6, r7]                                  |             r3 = *((r6 + r7));
    0x0006b726 str r3, [sp, 0x38]                                |             var_38h = r3;
                                                                 | label_2:
    0x0006b728 ldr r6, [sp, 0x38]                                |             r6 = var_38h;
    0x0006b72a movs r1, 0x13                                     |             r1 = 0x13;
    0x0006b72c ldr.w fp, [sp, 0x2c]                              |             fp = var_2ch;
    0x0006b730 ldr.w sb, [sp, 0x30]                              |             sb = var_30h;
    0x0006b734 ldr r0, [sp, 0x28]                                |             r0 = x;
    0x0006b736 mov r3, fp                                        |             r3 = fp;
    0x0006b738 str r6, [sp]                                      |             *(sp) = r6;
    0x0006b73a mov r2, sb                                        |             r2 = sb;
    0x0006b73c bl 0x200fc                                        |             r0 = fcn_000200fc (r0, r1);
                                                                 |             if (r0 == 0) {
    0x0006b740 cbnz r0, 0x6b78c                                  |                 
    0x0006b742 ldr r1, [sp, 0x24]                                |                 r1 = sig;
    0x0006b744 add r3, sp, 0xac                                  |                 r3 += var_ach;
    0x0006b746 str r0, [sp, 0xac]                                |                 var_ach = r0;
    0x0006b748 movs r2, 0xe                                      |                 r2 = 0xe;
    0x0006b74a str r0, [sp, 0xb8]                                |                 var_b8h = r0;
    0x0006b74c str.w r0, [r1, 0x1c4]                             |                 __asm ("str.w r0, aav.0x000000ff");
    0x0006b750 mov r1, r6                                        |                 r1 = r6;
    0x0006b752 ldr r0, [sp, 0x24]                                |                 r0 = sig;
    0x0006b754 str.w sb, [sp, 0xb0]                              |                 __asm ("str.w sb, [var_b0h]");
    0x0006b758 str.w fp, [sp, 0xb4]                              |                 __asm ("str.w fp, [var_b4h]");
    0x0006b75c blx 0x9958                                        |                 r0 = fcn_00009958 ();
    0x0006b760 mov r6, r0                                        |                 r6 = r0;
    0x0006b762 cmp r0, 0                                         |                 
                                                                 |                 if (r0 == 0) {
    0x0006b764 beq.w 0x6ba62                                     |                     goto label_136;
                                                                 |                 }
    0x0006b768 cmp r0, 0xc                                       |                 
                                                                 |                 if (r0 == 0xc) {
    0x0006b76a beq 0x6b802                                       |                     goto label_137;
                                                                 |                 }
    0x0006b76c ldr r2, [sp, 0xac]                                |                 r2 = var_ach;
                                                                 |                 if (r2 != 0) {
    0x0006b76e cbz r2, 0x6b782                                   |                     
    0x0006b770 ldr.w r1, [pc, 0x95c]                             |                     r1 = *(0x0006c0d0);
    0x0006b774 ldr r0, [sp, 0x28]                                |                     r0 = x;
    0x0006b776 add r1, pc                                        |                     r1 += pc;
    0x0006b778 bl 0x1d554                                        |                     fcn_0001d554 (r0, r1);
    0x0006b77c ldr r0, [sp, 0xac]                                |                     r0 = var_ach;
    0x0006b77e blx 0x9c24                                        |                     fcn_00009c24 ();
                                                                 |                 }
    0x0006b782 ldr r2, [sp, 0x28]                                |                 r2 = x;
    0x0006b784 ldr r3, [r2, 0x24]                                |                 r3 = *((r2 + 0x24));
    0x0006b786 str r6, [r2, 0xc]                                 |                 *((r2 + 0xc)) = r6;
    0x0006b788 adds r3, 1                                        |                 r3++;
    0x0006b78a str r3, [r2, 0x24]                                |                 *((r2 + 0x24)) = r3;
                                                                 |             }
                                                                 | label_5:
    0x0006b78c ldr r1, [sp, 0x30]                                |             r1 = var_30h;
    0x0006b78e ldr r0, [sp, 0x24]                                |             r0 = sig;
    0x0006b790 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
    0x0006b794 ldr r3, [sp, 0x2c]                                |             r3 = var_2ch;
                                                                 |             if (r3 == 0) {
    0x0006b796 cbz r3, 0x6b7a0                                   |                 goto label_0;
                                                                 |             }
                                                                 | label_6:
    0x0006b798 ldr r1, [sp, 0x2c]                                |             r1 = var_2ch;
    0x0006b79a ldr r0, [sp, 0x24]                                |             r0 = sig;
    0x0006b79c bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
                                                                 | label_0:
    0x0006b7a0 ldr.w r2, [pc, 0x930]                             |         
    0x0006b7a4 ldr.w r3, [pc, 0x91c]                             |         r3 = *(0x6c0c4);
    0x0006b7a8 add r2, pc                                        |         r2 = 0xd7880;
    0x0006b7aa ldr r3, [r2, r3]                                  |         r3 = *(0xd7880);
    0x0006b7ac ldr r2, [r3]                                      |         r2 = *(0xd7880);
    0x0006b7ae ldr r3, [sp, 0xe4]                                |         r3 = var_e4h;
    0x0006b7b0 eors r2, r3                                       |         r2 ^= r3;
    0x0006b7b2 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0006b7b6 bne.w 0x6e1e8                                     |             goto label_138;
                                                                 |         }
    0x0006b7ba add sp, 0xec                                      |         
    0x0006b7bc vpop {d8, d9, d10}                                |         __asm ("vpop {d8, d9, d10}");
    0x0006b7c0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0006b7c4 ldr r0, [sp, 0x28]                                |         r0 = x;
    0x0006b7c6 bl 0x4a260                                        |         r0 = fcn_0004a260 (r0);
    0x0006b7ca cmp r0, 0                                         |         
    0x0006b7cc beq 0x6b6f2                                       |         
                                                                 |     }
    0x0006b7ce b 0x6b7a0                                         |     goto label_0;
                                                                 | label_133:
    0x0006b7d0 ldr r3, [r0, 0x74]                                |     r3 = *((r0 + 0x74));
                                                                 |     if (r3 == 0) {
    0x0006b7d2 cbz r3, 0x6b7f4                                   |         goto label_139;
                                                                 |     }
                                                                 | label_4:
    0x0006b7d4 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006b7d6 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x0006b7da mov sl, r0                                        |     sl = r0;
    0x0006b7dc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006b7de bne.w 0x6b6c4                                     |         goto label_1;
                                                                 |     }
    0x0006b7e2 b 0x6b7a0                                         |     goto label_0;
                                                                 | label_135:
    0x0006b7e4 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0006b7e6 b 0x6b728                                         |     goto label_2;
                                                                 | label_134:
    0x0006b7e8 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006b7ea mov r1, r7                                        |     r1 = r7;
    0x0006b7ec bl 0x1e9ec                                        |     fcn_0001e9ec (r0, r1);
    0x0006b7f0 str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x0006b7f2 b 0x6b716                                         |     goto label_3;
                                                                 | label_139:
    0x0006b7f4 ldr r3, [r2, 0x50]                                |     r3 = *((r2 + 0x50));
    0x0006b7f6 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x0006b7f8 ittt pl                                           |     
                                                                 |     if (r3 < r3) {
    0x0006b7fa movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x0006b7fc movpl r2, r0                                      |         r2 = r0;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x0006b7fe strbpl r3, [r2, 0x17]                             |         *((r2 + 0x17)) = r3;
                                                                 |     }
    0x0006b800 b 0x6b7d4                                         |     goto label_4;
                                                                 | label_137:
    0x0006b802 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006b804 ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x0006b808 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006b80a str r3, [sp]                                      |     *(sp) = r3;
    0x0006b80c ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0006b80e mov r3, sb                                        |     r3 = sb;
    0x0006b810 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006b812 blx 0x9500                                        |     fcn_00009500 ();
    0x0006b816 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x0006b818 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006b81a bne 0x6b78c                                       |         goto label_5;
                                                                 |     }
    0x0006b81c mov r0, sb                                        |     r0 = sb;
    0x0006b81e bl 0x17e28                                        |     fcn_00017e28 (r0);
    0x0006b822 str r0, [sp, 0x40]                                |     var_40h = r0;
    0x0006b824 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006b826 beq 0x6b78c                                       |         goto label_5;
                                                                 |     }
    0x0006b828 ldrb r3, [r0, 5]                                  |     r3 = *((r0 + 5));
    0x0006b82a lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
                                                                 |     if (r1 < r3) {
    0x0006b82c bmi.w 0x6cfa8                                     |         goto label_140;
                                                                 |     }
                                                                 | label_36:
    0x0006b830 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x0006b832 bmi 0x6b854                                       |         
    0x0006b834 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x0006b836 eor r3, r3, 4                                     |         r3 ^= 4;
    0x0006b83a ubfx r3, r3, 2, 1                                 |         r3 = (r3 >> 2) & ((1 << 1) - 1);
    0x0006b83c lsls r0, r0, 0xe                                  |         r0 <<= 0xe;
    0x0006b83e cmp r2, 0                                         |         
    0x0006b840 it eq                                             |         
                                                                 |         if (r2 != 0) {
    0x0006b842 orreq r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x0006b846 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0006b848 beq.w 0x6d03a                                     |             goto label_141;
                                                                 |         }
    0x0006b84c ldr r1, [sp, 0x40]                                |         r1 = var_40h;
    0x0006b84e mov r0, sl                                        |         r0 = sl;
    0x0006b850 bl 0x2872c                                        |         fcn_0002872c (r0, r1);
                                                                 |     }
    0x0006b854 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006b856 ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x0006b858 subs r3, 1                                        |     r3--;
    0x0006b85a cmp r3, 0xfe                                      |     
                                                                 |     if (r3 <= 0xfe) {
    0x0006b85c bhi.w 0x6baa4                                     |         
                                                                 |         /* switch table (256 cases) at 0x6b864 */
    0x0006b860 tbh [pc, r3, lsl 1]                               |         __asm ("tbh [pc, r3, lsl 1]");
                                                                 | label_136:
    0x0006ba62 movs r1, 1                                        |         r1 = 1;
    0x0006ba64 mov r0, sl                                        |         r0 = sl;
    0x0006ba66 bl 0x1d86c                                        |         fcn_0001d86c (r0, r1);
    0x0006ba6a ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x0006ba6e ldr r1, [sp, 0xac]                                |         r1 = var_ach;
    0x0006ba70 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 == 0) {
    0x0006ba74 cbnz r3, 0x6ba92                                  |             
    0x0006ba76 movs r3, 1                                        |             r3 = 1;
    0x0006ba78 mov.w r4, -1                                      |             r4 = -1;
    0x0006ba7c ldr.w r0, [sl, 0x74]                              |             r0 = *((sl + 0x74));
    0x0006ba80 mov.w r2, -1                                      |             r2 = -1;
    0x0006ba84 strd r3, r4, [sp]                                 |             __asm ("strd r3, r4, [sp]");
    0x0006ba88 mov.w r3, -1                                      |             r3 = -1;
    0x0006ba8c bl 0x252e0                                        |             fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
    0x0006ba90 ldr r1, [sp, 0xac]                                |             r1 = var_ach;
                                                                 |         }
                                                                 |         if (r1 != 0) {
    0x0006ba92 cbz r1, 0x6ba9c                                   |             
    0x0006ba94 mov r0, sl                                        |             r0 = sl;
    0x0006ba96 bl 0x2b16c                                        |             fcn_0002b16c (r0, r1, r2);
    0x0006ba9a ldr r1, [sp, 0xac]                                |             r1 = var_ach;
                                                                 |         }
    0x0006ba9c mov r0, r1                                        |         r0 = r1;
    0x0006ba9e blx 0x9c24                                        |         fcn_00009c24 ();
    0x0006baa2 b 0x6b78c                                         |         goto label_5;
                                                                 |     }
    0x0006baa4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006baa6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006baa8 bne.w 0x6d44c                                     |         goto label_142;
                                                                 |     }
                                                                 | label_41:
    0x0006baac ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006baae ldr.w r3, [r3, 0x1f0]                             |     r3 = *((r3 + 0x1f0));
                                                                 | label_24:
    0x0006bab2 mov r2, r3                                        |     r2 = r3;
    0x0006bab4 str r3, [sp, 0x28]                                |     x = r3;
    0x0006bab6 mov r0, sl                                        |     r0 = sl;
    0x0006bab8 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0006baba bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006babe b 0x6b78c                                         |     goto label_5;
    0x0006bac0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006bac2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006bac4 beq.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006bac8 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006baca ldrd r5, r3, [r3, 8]                              |     __asm ("ldrd r5, r3, [r3, 8]");
    0x0006bace subs r1, r5, 2                                    |     r1 = r5 - 2;
    0x0006bad0 adc r2, r3, -1                                    |     __asm ("adc r2, r3, -1");
    0x0006bad4 cmp r1, 2                                         |     
    0x0006bad6 sbcs r2, r2, 0                                    |     __asm ("sbcs r2, r2, 0");
                                                                 |     if (r1 <= 2) {
    0x0006bada blo.w 0x6e4e6                                     |         goto label_143;
                                                                 |     }
    0x0006bade cmp r5, 4                                         |     
    0x0006bae0 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r5 >= 4) {
    0x0006bae4 bhs.w 0x6e958                                     |         goto label_144;
                                                                 |     }
    0x0006bae8 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x0006baea mov r0, r6                                        |     r0 = r6;
    0x0006baec blx 0x9e8c                                        |     fcn_00009e8c ();
    0x0006baf0 mov r2, r6                                        |     r2 = r6;
    0x0006baf2 bic r4, r0, 0xc0000000                            |     r4 = BIT_MASK (r0, 0xc0000000);
                                                                 | label_97:
    0x0006baf6 lsls r5, r5, 0x1f                                 |     r5 <<= 0x1f;
    0x0006baf8 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x0006bafa ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006bafc mov r3, r4                                        |     r3 = r4;
                                                                 |     if (r5 < r5) {
    0x0006bafe bmi.w 0x6e628                                     |         goto label_145;
                                                                 |     }
    0x0006bb02 blx 0xa208                                        |     r0 = fcn_0000a208 ();
                                                                 |     if (r0 != 0) {
                                                                 | label_102:
    0x0006bb06 cbnz r0, 0x6bb44                                  |         goto label_8;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x0006bb08 cbz r4, 0x6bb44                                   |         goto label_8;
                                                                 |     }
    0x0006bb0a movs r1, 1                                        |     r1 = 1;
    0x0006bb0c mov r0, sl                                        |     r0 = sl;
    0x0006bb0e bl 0x1d86c                                        |     fcn_0001d86c (r0, r1);
    0x0006bb12 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0006bb16 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 == 0) {
    0x0006bb1a cbnz r3, 0x6bb38                                  |         
    0x0006bb1c ldr.w r1, [pc, 0x5b8]                             |         r1 = *(0x0006c0d8);
    0x0006bb20 mov.w r2, -1                                      |         r2 = -1;
    0x0006bb24 str r3, [sp, 4]                                   |         var_4h = r3;
    0x0006bb26 movs r3, 1                                        |         r3 = 1;
    0x0006bb28 str r3, [sp]                                      |         *(sp) = r3;
    0x0006bb2a mov.w r3, -1                                      |         r3 = -1;
    0x0006bb2e ldr.w r0, [sl, 0x74]                              |         r0 = *((sl + 0x74));
    0x0006bb32 add r1, pc                                        |         r1 += pc;
    0x0006bb34 bl 0x252e0                                        |         fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     }
    0x0006bb38 ldr.w r1, [pc, 0x5a0]                             |     r1 = *(0x0006c0dc);
    0x0006bb3c mov r0, sl                                        |     r0 = sl;
    0x0006bb3e add r1, pc                                        |     r1 += pc;
    0x0006bb40 bl 0x2b16c                                        |     fcn_0002b16c (r0, r1, r2);
                                                                 |     do {
                                                                 | label_8:
    0x0006bb44 ldr r1, [sp, 0x30]                                |         r1 = var_30h;
                                                                 | label_7:
    0x0006bb46 ldr r0, [sp, 0x24]                                |         r0 = sig;
    0x0006bb48 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x0006bb4c b 0x6b798                                         |         goto label_6;
    0x0006bb4e ldr r3, [r4]                                      |         r3 = *(r4);
    0x0006bb50 ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x0006bb52 cmp r3, 0                                         |         
    0x0006bb54 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x0006bb56 movne r6, r2                                      |             r6 = r2;
                                                                 |         }
    0x0006bb58 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
                                                                 |         if (r3 != 0) {
    0x0006bb5a cbz r3, 0x6bb72                                   |             
    0x0006bb5c ldr.w r1, [pc, 0x580]                             |             r1 = *(0x0006c0e0);
    0x0006bb60 ldr r0, [sp, 0x2c]                                |             r0 = var_2ch;
    0x0006bb62 add r1, pc                                        |             r1 += pc;
    0x0006bb64 bl 0xa580                                         |             r0 = fcn_0000a580 (r0);
    0x0006bb68 cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x0006bb6a bne.w 0x6e93e                                     |                 goto label_146;
                                                                 |             }
    0x0006bb6e movs r3, 1                                        |             r3 = 1;
    0x0006bb70 str r3, [sp, 0x3c]                                |             var_3ch = r3;
                                                                 |         }
                                                                 | label_122:
    0x0006bb72 ldr r1, [sp, 0x28]                                |         r1 = x;
    0x0006bb74 movs r4, 3                                        |         r4 = 3;
    0x0006bb76 movs r5, 1                                        |         r5 = 1;
    0x0006bb78 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x0006bb7a mov r2, r6                                        |         r2 = r6;
    0x0006bb7c mov r0, sl                                        |         r0 = sl;
    0x0006bb7e str r4, [r1, 0x2c]                                |         *((r1 + 0x2c)) = r4;
    0x0006bb80 mov r1, r4                                        |         r1 = r4;
    0x0006bb82 str r5, [sp]                                      |         *(sp) = r5;
    0x0006bb84 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006bb88 movs r1, 0                                        |         r1 = 0;
    0x0006bb8a mov r3, r4                                        |         r3 = r4;
    0x0006bb8c str r1, [sp]                                      |         *(sp) = r1;
    0x0006bb8e mov r2, r5                                        |         r2 = r5;
    0x0006bb90 mov r0, sl                                        |         r0 = sl;
    0x0006bb92 movs r1, 0x54                                     |         r1 = 0x54;
    0x0006bb94 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006bb98 b 0x6b78c                                         |         goto label_5;
    0x0006bb9a ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0006bb9c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0006bb9e beq.w 0x6e646                                     |             goto label_147;
                                                                 |         }
    0x0006bba0 strh r2, [r2, 0x2a]                               |         *((r2 + 0x2a)) = r2;
    0x0006bba2 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0006bba4 ldrb r4, [r3]                                     |         r4 = *(r3);
    0x0006bba6 subs r4, 0x30                                     |         r4 -= 0x30;
    0x0006bba8 uxtb r3, r4                                       |         r3 = (int8_t) r4;
    0x0006bbaa cmp r3, 2                                         |         
                                                                 |         if (r3 >= 2) {
    0x0006bbac bls 0x6bbd6                                       |             
    0x0006bbae ldr.w r1, [pc, 0x534]                             |             
    0x0006bbb2 ldr r4, [sp, 0x2c]                                |             r4 = var_2ch;
    0x0006bbb4 add r1, pc                                        |             r1 = 0xd7c9e;
    0x0006bbb6 mov r0, r4                                        |             r0 = r4;
    0x0006bbb8 bl 0xa580                                         |             r0 = fcn_0000a580 (r0);
    0x0006bbbc cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0006bbbe beq.w 0x6e952                                     |                 goto label_148;
                                                                 |             }
    0x0006bbc2 ldr.w r1, [pc, 0x524]                             |             
    0x0006bbc6 mov r0, r4                                        |             r0 = r4;
    0x0006bbc8 add r1, pc                                        |             r1 = 0xd7cb6;
    0x0006bbca bl 0xa580                                         |             r0 = fcn_0000a580 (r0);
    0x0006bbce clz r4, r0                                        |             r4 &= r0;
    0x0006bbd2 lsrs r4, r4, 5                                    |             r4 >>= 5;
    0x0006bbd4 lsls r4, r4, 1                                    |             r4 <<= 1;
                                                                 |         }
                                                                 | label_123:
    0x0006bbd6 ldr r3, [sp, 0x28]                                |         r3 = x;
    0x0006bbd8 ldr r5, [r3]                                      |         r5 = *(r3);
    0x0006bbda ldrb.w r3, [r5, 0x56]                             |         r3 = *((r5 + 0x56));
    0x0006bbde cmp r3, r4                                        |         
    0x0006bbe0 beq 0x6bb44                                       |         
                                                                 |     } while (r3 == r4);
    0x0006bbe2 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006bbe4 bl 0x525a8                                        |     fcn_000525a8 (r0);
    0x0006bbe8 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006bbea cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006bbec bne 0x6bb46                                       |         goto label_7;
                                                                 |     }
    0x0006bbee ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006bbf0 strb.w r4, [r5, 0x56]                             |     *((r5 + 0x56)) = r4;
    0x0006bbf4 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006bbf8 b 0x6b798                                         |     goto label_6;
    0x0006bbfa ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006bbfc cbz r3, 0x6bc1c                                   |         
    0x0006bbfe ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006bc00 add r1, sp, 0x98                                  |         r1 += var_98h;
    0x0006bc02 bl 0xf79c                                         |         r0 = fcn_0000f79c (r0, r1);
                                                                 |         if (r0 != 0) {
    0x0006bc06 cbnz r0, 0x6bc1c                                  |             goto label_149;
                                                                 |         }
    0x0006bc08 ldrd r2, r3, [sp, 0x98]                           |         __asm ("ldrd r2, r3, [var_98h]");
    0x0006bc0c cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x0006bc0e blt 0x6bc1c                                       |             goto label_149;
                                                                 |         }
    0x0006bc10 ldr r0, [sp, 0x24]                                |         r0 = sig;
    0x0006bc12 bic r2, r2, 0x80000000                            |         r2 = BIT_MASK (r2, 0x80000000);
    0x0006bc16 movs r1, 0xb                                      |         r1 = 0xb;
    0x0006bc18 blx 0x9c30                                        |         raise (r0);
                                                                 |     }
                                                                 | label_149:
    0x0006bc1c ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006bc1e mov.w r2, -1                                      |     r2 = -1;
    0x0006bc22 movs r1, 0xb                                      |     r1 = 0xb;
    0x0006bc24 blx 0x9c30                                        |     r0 = raise (r0);
    0x0006bc28 mov r2, r0                                        |     r2 = r0;
    0x0006bc2a mov r0, sl                                        |     r0 = sl;
    0x0006bc2c asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0006bc2e bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006bc32 b 0x6b78c                                         |     goto label_5;
    0x0006bc34 ldr.w r3, [pc, 0x4b4]                             |     
    0x0006bc38 add r3, pc                                        |     r3 = 0xd7d28;
    0x0006bc3a ldrb r0, [r3, 4]                                  |     r0 = *((r3 + 4));
                                                                 |     if (r0 != 0) {
    0x0006bc3c cbz r0, 0x6bc4a                                   |         
    0x0006bc3e ldr.w r3, [pc, 0x4b0]                             |         
    0x0006bc42 movs r0, 0xb                                      |         r0 = 0xb;
    0x0006bc44 add r3, pc                                        |         
    0x0006bc46 ldr r3, [r3, 0x48]                                |         r3 = *(0xd7d82);
    0x0006bc48 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 |     }
    0x0006bc4a blx 0xa12c                                        |     fcn_0000a12c ();
    0x0006bc4e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006bc50 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006bc52 beq.w 0x6e630                                     |         goto label_150;
                                                                 |     }
    0x0006bc56 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0006bc58 ldrb r3, [r1]                                     |     r3 = *(r1);
                                                                 |     if (r3 != 0) {
    0x0006bc5a cbz r3, 0x6bc76                                   |         
    0x0006bc5c ldr r3, [sp, 0x24]                                |         r3 = sig;
    0x0006bc5e movs r2, 1                                        |         r2 = 1;
    0x0006bc60 ldr r0, [r3]                                      |         r0 = *(r3);
    0x0006bc62 add r3, sp, 0x98                                  |         r3 += var_98h;
    0x0006bc64 ldr r4, [r0, 0x20]                                |         r4 = *((r0 + 0x20));
    0x0006bc66 blx r4                                            |         r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0006bc68 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0006bc6a bne.w 0x6e860                                     |             goto label_151;
                                                                 |         }
    0x0006bc6e ldr r3, [sp, 0x98]                                |         r3 = var_98h;
    0x0006bc70 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0006bc72 beq.w 0x6e860                                     |             goto label_151;
                                                                 |         }
                                                                 |     }
    0x0006bc76 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006bc78 ldrb.w r3, [r3, 0x56]                             |     r3 = *((r3 + 0x56));
    0x0006bc7c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0006bc7e beq.w 0x6e962                                     |         goto label_152;
                                                                 |     }
                                                                 | label_124:
    0x0006bc82 ldr.w r3, [pc, 0x470]                             |     r3 = *(0x6c0f6);
    0x0006bc86 ldr r4, [r5, r3]                                  |     r4 = *((r5 + r3));
    0x0006bc88 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0006bc8a blx 0x9c24                                        |     fcn_00009c24 ();
    0x0006bc8e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006bc90 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0006bc92 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006bc94 bne.w 0x6e96c                                     |         goto label_153;
                                                                 |     }
    0x0006bc98 str r3, [r4]                                      |     *(r4) = r3;
                                                                 | label_103:
    0x0006bc9a ldr.w r3, [pc, 0x45c]                             |     r3 = *(0x0006c0f8);
    0x0006bc9e add r3, pc                                        |     r3 += pc;
    0x0006bca0 ldrb r0, [r3, 4]                                  |     r0 = *((r3 + 4));
                                                                 |     if (r0 != 0) {
    0x0006bca2 cbz r0, 0x6bcaa                                   |         
    0x0006bca4 ldr r3, [r3, 0x48]                                |         r3 = *((r3 + 0x48));
    0x0006bca6 movs r0, 0xb                                      |         r0 = 0xb;
    0x0006bca8 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 |     }
    0x0006bcaa blx 0x9d10                                        |     fcn_00009d10 ();
    0x0006bcae b 0x6b78c                                         |     goto label_5;
    0x0006bcb0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006bcb2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006bcb4 beq.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006bcb8 ldr r5, [sp, 0x38]                                |     r5 = var_38h;
    0x0006bcba ldr r4, [sp, 0x28]                                |     r4 = x;
    0x0006bcbc mov r1, r5                                        |     r1 = r5;
    0x0006bcbe mov r0, r4                                        |     r0 = r4;
    0x0006bcc0 bl 0x4a528                                        |     fcn_0004a528 (r0, r1);
    0x0006bcc4 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0006bcc6 mov r3, r5                                        |     r3 = r5;
    0x0006bcc8 movs r1, 2                                        |     r1 = 2;
    0x0006bcca mov r0, r4                                        |     r0 = r4;
    0x0006bccc bl 0x730f4                                        |     r0 = fcn_000730f4 (r0, r1, r2, r3, r4, r5);
    0x0006bcd0 mov fp, r0                                        |     
    0x0006bcd2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006bcd4 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006bcd8 ldr r7, [r0, 8]                                   |     r7 = *((r0 + 8));
                                                                 |     if (r7 != 0) {
    0x0006bcda cbnz r7, 0x6bce2                                  |         goto label_154;
                                                                 |     }
    0x0006bcdc b 0x6bcee                                         |     goto label_155;
                                                                 |     do {
    0x0006bcde ldr r7, [r7, 0x14]                                |         r7 = *((r7 + 0x14));
                                                                 |         if (r7 == 0) {
    0x0006bce0 cbz r7, 0x6bcee                                   |             goto label_155;
                                                                 |         }
                                                                 | label_154:
    0x0006bce2 ldrb.w r3, [r7, 0x37]                             |         r3 = *((r7 + 0x37));
    0x0006bce6 and r3, r3, 3                                     |         r3 &= 3;
    0x0006bcea cmp r3, 2                                         |         
    0x0006bcec bne 0x6bcde                                       |         
                                                                 |     } while (r3 != 2);
                                                                 | label_155:
    0x0006bcee ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006bcf0 movs r3, 7                                        |     r3 = 7;
    0x0006bcf2 mov r1, fp                                        |     r1 = fp;
    0x0006bcf4 mov r0, r2                                        |     r0 = r2;
    0x0006bcf6 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006bcf8 bl 0x68bfc                                        |     fcn_00068bfc (r0, r1, r2);
    0x0006bcfc ldrsh.w r5, [fp, 0x22]                            |     r5 = *(arg_22h);
    0x0006bd00 ldr.w r2, [fp, 4]                                 |     r2 = *(arg_4h);
    0x0006bd04 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x0006bd06 ble.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006bd0a ldr r3, [pc, 0x3f0]                               |     
    0x0006bd0c mov sb, r2                                        |     sb = r2;
    0x0006bd0e str r7, [sp, 0x34]                                |     var_34h = r7;
    0x0006bd10 add r3, pc                                        |     r3 = 0xd7e12;
    0x0006bd12 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0006bd14 ldr r3, [pc, 0x3e8]                               |     
    0x0006bd16 add r3, pc                                        |     r3 = 0xd7e1a;
    0x0006bd18 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0006bd1a ldr r3, [pc, 0x3e8]                               |     
    0x0006bd1c add r3, pc                                        |     r3 = 0xd7e26;
    0x0006bd1e str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0006bd20 movs r3, 0                                        |     r3 = 0;
    0x0006bd22 mov r8, r3                                        |     r8 = r3;
    0x0006bd24 str r3, [sp, 0x28]                                |     x = r3;
    0x0006bd26 b 0x6bd52                                         |     goto label_156;
                                                                 | label_9:
    0x0006bd28 ldr r5, [r5, 8]                                   |     r5 = *((r5 + 8));
                                                                 | label_10:
    0x0006bd2a strd r1, r0, [sp]                                 |     __asm ("strd r1, r0, [sp]");
    0x0006bd2e movs r1, 1                                        |     r1 = 1;
    0x0006bd30 strd r4, r3, [sp, 0x10]                           |     __asm ("strd r4, r3, [var_10h]");
    0x0006bd34 mov r0, sl                                        |     r0 = sl;
    0x0006bd36 strd r6, r5, [sp, 8]                              |     __asm ("strd r6, r5, [var_8h]");
    0x0006bd3a ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0006bd3c bl 0x2a09c                                        |     fcn_0002a09c (r0, r1);
    0x0006bd40 ldrsh.w r5, [fp, 0x22]                            |     r5 = *(arg_22h);
                                                                 | label_93:
    0x0006bd44 add.w r8, r8, 1                                   |     r8++;
    0x0006bd48 add.w sb, sb, 0xc                                 |     sb += 0xc;
    0x0006bd4c cmp r5, r8                                        |     
                                                                 |     if (r5 <= r8) {
    0x0006bd4e ble.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
                                                                 | label_156:
    0x0006bd52 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006bd54 ldrh.w r0, [sb, 0xa]                              |     r0 = *((sb + 0xa));
    0x0006bd58 ldrd ip, r6, [r3, 8]                              |     __asm ("ldrd ip, r6, [r3, 8]");
    0x0006bd5c ands r3, r0, 0x62                                 |     r3 = r0 & 0x62;
                                                                 |     if (r3 != r0) {
    0x0006bd60 beq 0x6bd7a                                       |         
    0x0006bd62 orrs.w r3, ip, r6                                 |         r3 = ip | r6;
                                                                 |         if (r3 == ip) {
    0x0006bd66 beq.w 0x6e3a6                                     |             goto label_157;
                                                                 |         }
    0x0006bd6a lsls r2, r0, 0x1a                                 |         r2 = r0 << 0x1a;
                                                                 |         if (r2 < r0) {
    0x0006bd6c bmi.w 0x6e3a0                                     |             goto label_158;
                                                                 |         }
    0x0006bd70 tst.w r0, 0x40                                    |         
    0x0006bd74 ite ne                                            |         
                                                                 |         if ((r0 & 0x40) == 0) {
    0x0006bd76 movne r3, 3                                       |             r3 = 3;
                                                                 |         }
                                                                 |         if ((r0 & 0x40) == 0) {
    0x0006bd78 moveq r3, 1                                       |             r3 = 1;
                                                                 |             goto label_92;
                                                                 |         }
                                                                 |     }
                                                                 | label_92:
    0x0006bd7a ands r4, r0, 1                                    |     r4 = r0 & 1;
                                                                 |     if (r4 != r0) {
    0x0006bd7e beq 0x6bd8a                                       |         
    0x0006bd80 ldr r7, [sp, 0x34]                                |         r7 = var_34h;
    0x0006bd82 cmp r7, 0                                         |         
                                                                 |         if (r7 != 0) {
    0x0006bd84 bne.w 0x6e288                                     |             goto label_159;
                                                                 |         }
    0x0006bd88 movs r4, 1                                        |         r4 = 1;
                                                                 |     }
                                                                 | label_86:
    0x0006bd8a ldrh.w r1, [sb, 8]                                |     r1 = *((sb + 8));
    0x0006bd8e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006bd90 beq.w 0x6e1ec                                     |         goto label_160;
                                                                 |     }
    0x0006bd94 ldrb.w r2, [fp, 0x2b]                             |     r2 = *(arg_2bh);
    0x0006bd98 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0006bd9a bne.w 0x6e1ec                                     |         goto label_160;
                                                                 |     }
    0x0006bd9e ldr.w r5, [fp, 0x34]                              |     r5 = *(arg_34h);
                                                                 |     if (r5 != 0) {
    0x0006bda2 cbz r5, 0x6bdb4                                   |         
    0x0006bda4 ldr r7, [r5]                                      |         r7 = *(r5);
    0x0006bda6 cmp r7, r1                                        |         
                                                                 |         if (r7 < r1) {
    0x0006bda8 blt.w 0x6e8b0                                     |             goto label_161;
                                                                 |         }
    0x0006bdac add.w r1, r5, r1, lsl 4                           |         r1 = r5 + (r1 << 4);
    0x0006bdb0 ldr r5, [r1, -0x8]                                |         r5 = *((r1 - 0x8));
                                                                 |     }
                                                                 | label_78:
    0x0006bdb4 orrs.w r6, ip, r6                                 |     r6 = ip | r6;
    0x0006bdb8 it eq                                             |     
                                                                 |     if (r6 != ip) {
    0x0006bdba ldreq r2, [sp, 0x48]                              |         r2 = var_48h;
                                                                 |     }
                                                                 |     if (r6 != ip) {
    0x0006bdbc beq 0x6bdc2                                       |         
    0x0006bdbe ldr r2, [pc, 0x348]                               |         
    0x0006bdc0 add r2, pc                                        |         r2 = 0xd7ece;
                                                                 |     }
    0x0006bdc2 ldr r7, [sp, 0x28]                                |     r7 = x;
    0x0006bdc4 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x0006bdc8 ldrb.w r6, [sb, 4]                                |     r6 = *((sb + 4));
    0x0006bdcc sub.w r7, r8, r7                                  |     r7 = r8 - r7;
    0x0006bdd0 str r7, [sp, 0x38]                                |     var_38h = r7;
    0x0006bdd2 lsls r7, r0, 0x1d                                 |     r7 = r0 << 0x1d;
                                                                 |     if (r7 < r0) {
    0x0006bdd4 bmi.w 0x6e1a0                                     |         goto label_162;
                                                                 |     }
    0x0006bdd8 cmp r6, 0xf                                       |     
    0x0006bdda ittet hi                                          |     
                                                                 |     if (r6 <= 0xf) {
    0x0006bddc lsrhi r0, r6, 4                                   |         r0 = r6 >> 4;
                                                                 |     }
                                                                 |     if (r6 <= 0xf) {
    0x0006bdde ldrhi r7, [sp, 0x44]                              |         r7 = var_44h;
                                                                 |     }
                                                                 |     if (r6 > 0xf) {
    0x0006bde0 ldrls r0, [sp, 0x3c]                              |         r0 = var_3ch;
                                                                 |     }
                                                                 |     if (r6 <= 0xf) {
    0x0006bde2 addhi r0, r0, -1                                  |         r0 += -1;
                                                                 |     }
    0x0006bde6 it hi                                             |     
                                                                 |     if (r6 <= 0xf) {
    0x0006bde8 ldrhi r0, [r7, r0, lsl 2]                         |         offset_0 = r0 << 2;
                                                                 |         r0 = *((r7 + offset_0));
                                                                 |     }
                                                                 | label_76:
    0x0006bdec ands r6, r6, 0xf                                  |     r6 &= 0xf;
    0x0006bdf0 it ne                                             |     
                                                                 |     if (r6 == r6) {
    0x0006bdf2 movne r6, 1                                       |         r6 = 1;
                                                                 |     }
    0x0006bdf4 cmp r3, 1                                         |     
    0x0006bdf6 ite gt                                            |     
                                                                 |     if (r3 <= 1) {
    0x0006bdf8 movgt ip, 0                                       |         
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x0006bdfc mov.w ip, 1                                       |         
                                                                 |     }
    0x0006be00 cmp r5, 0                                         |     
    0x0006be02 it eq                                             |     
                                                                 |     if (r5 != 0) {
    0x0006be04 moveq ip, 0                                       |         
                                                                 |     }
    0x0006be08 cmp.w ip, 0                                       |     
                                                                 |     if (ip != 0) {
    0x0006be0c bne 0x6bd28                                       |         goto label_9;
                                                                 |     }
    0x0006be0e mov r5, ip                                        |     r5 = ip;
    0x0006be10 b 0x6bd2a                                         |     goto label_10;
    0x0006be12 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006be14 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006be16 beq.w 0x6e932                                     |         goto label_163;
                                                                 |     }
    0x0006be1a ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006be1c ldrb.w r3, [r3, 0x55]                             |     r3 = *((r3 + 0x55));
    0x0006be20 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006be22 beq.w 0x6e91c                                     |         goto label_164;
                                                                 |     }
    0x0006be26 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006be28 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0006be2a beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006be2e ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006be30 movs r2, 1                                        |     r2 = 1;
    0x0006be32 movs r1, 0                                        |     r1 = 0;
    0x0006be34 bl 0xf160                                         |     r0 = fcn_0000f160 (r0, r1, r2, r3, r4, r5);
    0x0006be38 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0006be3a ldr r4, [sp, 0x24]                                |     r4 = sig;
    0x0006be3c ands r3, r3, 7                                    |     r3 &= 7;
    0x0006be40 it eq                                             |     
                                                                 |     if (r3 != r3) {
    0x0006be42 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0006be44 strb.w r3, [r8, 8]                                |     *((r8 + 8)) = r3;
    0x0006be48 movs r3, 1                                        |     r3 = 1;
    0x0006be4a strb.w r3, [r8, 9]                                |     *((r8 + 9)) = r3;
    0x0006be4c adds r0, 9                                        |     r0 += 9;
    0x0006be4e ldrb.w r3, [r4, 0x55]                             |     r3 = *((r4 + 0x55));
    0x0006be52 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006be54 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
                                                                 | label_23:
    0x0006be58 mov r0, r4                                        |     r0 = r4;
    0x0006be5a bl 0x17744                                        |     fcn_00017744 (r0, r1);
    0x0006be5e ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006be60 mov r0, r4                                        |     r0 = r4;
    0x0006be62 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006be66 b 0x6b798                                         |     goto label_6;
    0x0006be68 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006be6a cbz r3, 0x6be80                                   |         
    0x0006be6c movs r3, 0                                        |         r3 = 0;
    0x0006be6e add r1, sp, 0x98                                  |         r1 += var_98h;
    0x0006be70 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006be72 str r3, [sp, 0x98]                                |         var_98h = r3;
    0x0006be74 bl 0xd180                                         |         fcn_0000d180 (r0, r1);
    0x0006be78 ldr r1, [sp, 0x98]                                |         r1 = var_98h;
    0x0006be7a ldr r0, [sp, 0x24]                                |         r0 = sig;
    0x0006be7c blx 0xa184                                        |         fcn_0000a184 ();
                                                                 |     }
    0x0006be80 ldr r2, [sp, 0x24]                                |     r2 = sig;
    0x0006be82 ldr r3, [pc, 0x288]                               |     
    0x0006be84 ldr.w r2, [r2, 0x10c]                             |     r2 = *((r2 + 0x10c));
    0x0006be88 add r3, pc                                        |     r3 = 0xd7f9a;
    0x0006be8a cmp r2, r3                                        |     
    0x0006be8c iteet eq                                          |     
                                                                 |     if (r2 != r3) {
    0x0006be8e ldreq r3, [sp, 0x24]                              |         r3 = sig;
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x0006be90 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x0006be92 movne r3, r2                                      |         r3 = r2;
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x0006be94 ldreq r2, [r3, 0x110]                             |         r2 = *((r3 + 0x110));
                                                                 |     }
    0x0006be98 it eq                                             |     
                                                                 |     if (r2 == r3) {
    0x0006be9a asreq r3, r2, 0x1f                                |         __asm ("asreq r3, r2, 0x1f");
                                                                 |     }
                                                                 | label_13:
    0x0006be9c mov r0, sl                                        |     r0 = sl;
    0x0006be9e bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006bea2 b 0x6b78c                                         |     goto label_5;
    0x0006bea4 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006bea6 movs r3, 6                                        |     r3 = 6;
    0x0006bea8 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x0006beaa str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006beac mov r0, r2                                        |     r0 = r2;
    0x0006beae bl 0x4a528                                        |     fcn_0004a528 (r0, r1);
    0x0006beb2 ldr r4, [sp, 0x24]                                |     r4 = sig;
    0x0006beb4 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0006beb6 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0006beb8 ble.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006bebc ldr r3, [pc, 0x250]                               |     
    0x0006bebe ldr r5, [pc, 0x254]                               |     
    0x0006bec0 ldr.w fp, [pc, 0x254]                             |     
    0x0006bec4 add r3, pc                                        |     r3 = 0xd7fd8;
    0x0006bec6 ldr.w sb, [sp, 0x3c]                              |     sb = var_3ch;
    0x0006beca str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0006becc add r5, pc                                        |     r5 = 0xd7fe6;
    0x0006bece ldr r3, [pc, 0x24c]                               |     
    0x0006bed0 add fp, pc                                        |     fp = 0xd7fec;
    0x0006bed2 str.w sl, [sp, 0x44]                              |     __asm ("str.w sl, [var_44h]");
    0x0006bed6 str r5, [sp, 0x3c]                                |     var_3ch = r5;
    0x0006bed8 add r3, pc                                        |     r3 = 0xd7ffa;
    0x0006beda str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0006bedc b 0x6beea                                         |     goto label_165;
                                                                 | label_11:
    0x0006bede ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0006bee0 add.w sb, sb, 1                                   |     sb++;
    0x0006bee4 cmp r3, sb                                        |     
                                                                 |     if (r3 <= sb) {
    0x0006bee6 ble.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
                                                                 | label_165:
    0x0006beea ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0006beec lsl.w r8, sb, 4                                   |     r8 = sb << 4;
    0x0006bef0 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
                                                                 |     if (r2 == 0) {
    0x0006bef2 cbz r2, 0x6bf04                                   |         goto label_166;
                                                                 |     }
    0x0006bef4 ldr.w r1, [r3, r8]                                |     r1 = *((r3 + r8));
    0x0006bef8 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0006befa blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x0006befe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006bf00 bne 0x6bede                                       |         goto label_11;
                                                                 |     }
    0x0006bf02 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
                                                                 | label_166:
    0x0006bf04 add r3, r8                                        |     r3 += r8;
    0x0006bf06 add r7, sp, 0x98                                  |     r7 += var_98h;
    0x0006bf08 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0006bf0a mov sl, r7                                        |     sl = r7;
    0x0006bf0c ldr r6, [r3, 0xc]                                 |     r6 = *((r3 + 0xc));
    0x0006bf0e adds r3, 8                                        |     r3 += 8;
                                                                 | label_12:
    0x0006bf10 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x0006bf12 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0006bf14 beq.w 0x6e9fe                                     |         goto label_167;
                                                                 |     }
    0x0006bf18 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006bf1a beq 0x6bede                                       |         goto label_11;
                                                                 |     }
    0x0006bf1c mov r3, r1                                        |     r3 = r1;
    0x0006bf1e b 0x6bf28                                         |     
                                                                 |     while (r5 != 0) {
    0x0006bf20 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0006bf22 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0006bf24 beq.w 0x6cedc                                     |             goto label_168;
                                                                 |         }
    0x0006bf28 ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
    0x0006bf2a ldrsh.w r5, [r2, 0x22]                            |         r5 = *((r2 + 0x22));
    0x0006bf2e cmp r5, 0                                         |         
    0x0006bf30 bne 0x6bf20                                       |         
                                                                 |     }
    0x0006bf32 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0006bf34 mov r0, r4                                        |     r0 = r4;
    0x0006bf36 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0006bf38 bl 0x20e84                                        |     r0 = fcn_00020e84 (r0);
    0x0006bf3c mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r0 != 0) {
    0x0006bf3e cbz r0, 0x6bf60                                   |         
    0x0006bf40 mov r1, r0                                        |         r1 = r0;
    0x0006bf42 mov r3, sl                                        |         r3 = sl;
    0x0006bf44 mov.w r2, -1                                      |         r2 = -1;
    0x0006bf48 mov r0, r4                                        |         r0 = r4;
    0x0006bf4a str r5, [sp]                                      |         *(sp) = r5;
    0x0006bf4c str r5, [sp, 0x98]                                |         var_98h = r5;
    0x0006bf4e blx 0x9ba0                                        |         fcn_00009ba0 ();
    0x0006bf52 ldr r0, [sp, 0x98]                                |         r0 = var_98h;
    0x0006bf54 blx 0x9f34                                        |         fcn_00009f34 ();
    0x0006bf58 mov r1, r7                                        |         r1 = r7;
    0x0006bf5a mov r0, r4                                        |         r0 = r4;
    0x0006bf5c bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x0006bf60 ldrb.w r3, [r4, 0x57]                             |     r3 = *((r4 + 0x57));
    0x0006bf64 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006bf66 bne.w 0x6cfbc                                     |         goto label_169;
                                                                 |     }
                                                                 | label_37:
    0x0006bf6a ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0006bf6c subs r6, 1                                        |     r6--;
    0x0006bf6e add r3, r8                                        |     r3 += r8;
    0x0006bf70 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0006bf72 adds r3, 8                                        |     r3 += 8;
    0x0006bf74 b 0x6bf10                                         |     goto label_12;
    0x0006bf76 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006bf78 cbz r3, 0x6bf88                                   |         
    0x0006bf7a ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006bf7c add r1, sp, 0x98                                  |         r1 += var_98h;
    0x0006bf7e bl 0xf79c                                         |         r0 = fcn_0000f79c (r0, r1);
    0x0006bf82 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0006bf84 beq.w 0x6e8ec                                     |             goto label_170;
                                                                 |         }
                                                                 |     }
                                                                 | label_120:
    0x0006bf88 mov.w r0, -1                                      |     r0 = -1;
    0x0006bf8c mov.w r1, -1                                      |     r1 = -1;
    0x0006bf90 blx 0x9540                                        |     r0 = fcn_00009540 ();
    0x0006bf94 mov r2, r0                                        |     r2 = r0;
    0x0006bf96 mov r3, r1                                        |     r3 = r1;
    0x0006bf98 b 0x6be9c                                         |     goto label_13;
    0x0006bf9a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006bf9c cbz r3, 0x6bfac                                   |         
    0x0006bf9e ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006bfa0 add r1, sp, 0x98                                  |         r1 += var_98h;
    0x0006bfa2 bl 0xf79c                                         |         r0 = fcn_0000f79c (r0, r1);
    0x0006bfa6 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0006bfa8 beq.w 0x6e8b6                                     |             goto label_171;
                                                                 |         }
                                                                 |     }
                                                                 | label_119:
    0x0006bfac mov.w r0, -1                                      |     r0 = -1;
    0x0006bfb0 mov.w r1, -1                                      |     r1 = -1;
    0x0006bfb4 blx 0x9cb8                                        |     r0 = fcn_00009cb8 ();
    0x0006bfb8 mov r2, r0                                        |     r2 = r0;
    0x0006bfba mov r3, r1                                        |     r3 = r1;
    0x0006bfbc mov r0, sl                                        |     r0 = sl;
    0x0006bfbe bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006bfc2 b.w 0x6b78c                                       |     goto label_5;
    0x0006bfc6 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006bfc8 ldr r7, [pc, 0x154]                               |     
    0x0006bfca ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006bfcc ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0006bfce add r7, pc                                        |     
    0x0006bfd0 add.w r6, r7, 0x124                               |     r6 = r7 + 0x124;
    0x0006bfd4 add.w r7, r7, 0x180                               |     r7 = 0xd8272;
    0x0006bfd8 ubfx r5, r3, 5, 1                                 |     r5 = (r3 >> 5) & ((1 << 1) - 1);
    0x0006bfdc movs r3, 6                                        |     r3 = 6;
    0x0006bfde str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
                                                                 | label_14:
    0x0006bfe0 ldr r4, [r6, 4]!                                  |     r4 = *((r6 += 4));
                                                                 |     if (r4 == 0) {
    0x0006bfe4 cbz r4, 0x6bff8                                   |         goto label_172;
                                                                 |     }
                                                                 |     do {
    0x0006bfe6 mov r1, r4                                        |         r1 = r4;
    0x0006bfe8 mov r3, r5                                        |         r3 = r5;
    0x0006bfea movs r2, 1                                        |         r2 = 1;
    0x0006bfec mov r0, sl                                        |         r0 = sl;
    0x0006bfee bl 0x2a1ec                                        |         fcn_0002a1ec (r0, r1, r2, r3);
    0x0006bff2 ldr r4, [r4, 0x24]                                |         r4 = *((r4 + 0x24));
    0x0006bff4 cmp r4, 0                                         |         
    0x0006bff6 bne 0x6bfe6                                       |         
                                                                 |     } while (r4 != 0);
                                                                 | label_172:
    0x0006bff8 cmp r6, r7                                        |     
                                                                 |     if (r6 != r7) {
    0x0006bffa bne 0x6bfe0                                       |         goto label_14;
                                                                 |     }
    0x0006bffc ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006bffe ldr.w r4, [r3, 0x1a4]                             |     r4 = *((r3 + 0x1a4));
    0x0006c002 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0006c004 beq.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
                                                                 |     do {
    0x0006c008 ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x0006c00a mov r3, r5                                        |         r3 = r5;
    0x0006c00c movs r2, 0                                        |         r2 = 0;
    0x0006c00e mov r0, sl                                        |         r0 = sl;
    0x0006c010 bl 0x2a1ec                                        |         fcn_0002a1ec (r0, r1, r2, r3);
    0x0006c014 ldr r4, [r4]                                      |         r4 = *(r4);
    0x0006c016 cmp r4, 0                                         |         
    0x0006c018 bne 0x6c008                                       |         
                                                                 |     } while (r4 != 0);
    0x0006c01a b.w 0x6b78c                                       |     goto label_5;
    0x0006c01e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c020 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c022 beq.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006c026 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0006c028 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0006c02a ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c02c bl 0x38d4c                                        |     r0 = fcn_00038d4c (r0, r1, r2, r3);
    0x0006c030 mov r6, r0                                        |     r6 = r0;
    0x0006c032 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006c034 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c038 ldrb.w r3, [r0, 0x2b]                             |     r3 = *((r0 + 0x2b));
    0x0006c03c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006c03e bne.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c042 ldr r4, [r0, 0x30]                                |     r4 = *((r0 + 0x30));
    0x0006c044 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0006c046 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c04a ldr r1, [r0, 0x3c]                                |     r1 = *((r0 + 0x3c));
    0x0006c04c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006c04e beq.w 0x6ea10                                     |         goto label_173;
                                                                 |     }
    0x0006c052 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c054 bl 0xf708                                         |     r0 = fcn_0000f708 (r0, r1);
    0x0006c058 mov r1, r0                                        |     r1 = r0;
                                                                 | label_131:
    0x0006c05a ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c05c mov.w fp, 0                                       |     
    0x0006c060 ldr.w r8, [pc, 0xc0]                              |     
    0x0006c064 ldr.w sb, [pc, 0xc0]                              |     sb = *(0x0006c128);
    0x0006c068 ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x0006c06a mov r0, r2                                        |     r0 = r2;
    0x0006c06c add r8, pc                                        |     r8 = 0xd8194;
    0x0006c06e add sb, pc                                        |     sb += pc;
    0x0006c070 cmp r3, 0                                         |     
    0x0006c072 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0006c074 movne r0, r3                                      |         r0 = r3;
                                                                 |     }
    0x0006c076 movs r3, 8                                        |     r3 = 8;
    0x0006c078 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006c07a bl 0x4a504                                        |     fcn_0004a504 (r0, r1);
    0x0006c07e ldr r3, [pc, 0xac]                                |     
    0x0006c080 mov ip, r8                                        |     
    0x0006c082 mov r8, r6                                        |     r8 = r6;
    0x0006c084 add r3, pc                                        |     r3 = 0xd81b6;
    0x0006c086 str r3, [sp, 0x28]                                |     x = r3;
    0x0006c088 ldr r3, [pc, 0xa4]                                |     
    0x0006c08a add r3, pc                                        |     r3 = 0xd81be;
    0x0006c08c str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 | label_15:
    0x0006c08e ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0006c090 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0006c092 ble 0x6c17a                                       |         goto label_174;
                                                                 |     }
    0x0006c094 mov r7, r4                                        |     r7 = r4;
    0x0006c096 movs r5, 0                                        |     r5 = 0;
    0x0006c098 mov r6, ip                                        |     r6 = ip;
                                                                 |     do {
    0x0006c09a ldr r2, [r7, 0x24]                                |         r2 = *((r7 + 0x24));
    0x0006c09c ldrb r3, [r4, 0x1a]                               |         r3 = *((r4 + 0x1a));
    0x0006c09e ldr.w r1, [r8, 4]                                 |         r1 = *((r8 + 4));
    0x0006c0a2 ldr.w ip, [r7, 0x28]                              |         ip = *((r7 + 0x28));
    0x0006c0a6 add.w r2, r2, r2, lsl 1                           |         r2 += (r2 << 1);
    0x0006c0aa subs r3, 7                                        |         r3 -= 7;
    0x0006c0ac ldr.w r0, [r1, r2, lsl 2]                         |         offset_1 = r2 << 2;
                                                                 |         r0 = *((r1 + offset_1));
    0x0006c0b0 ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x0006c0b2 cmp r3, 3                                         |         
                                                                 |         if (r3 > 3) {
    0x0006c0b4 bhi.w 0x6eade                                     |             goto label_175;
                                                                 |         }
    0x0006c0b8 tbb [pc, r3]                                      |         __asm ("tbb aav.0x000000ff");
                                                                 | label_132:
    0x0006c136 ldrb r3, [r4, 0x19]                               |         r3 = *((r4 + 0x19));
    0x0006c138 subs r3, 7                                        |         r3 -= 7;
    0x0006c13a cmp r3, 3                                         |         
                                                                 |         if (r3 > 3) {
    0x0006c13c bhi.w 0x6ead6                                     |             goto label_176;
                                                                 |         }
                                                                 |         /* switch table (4 cases) at 0x6c144 */
    0x0006c140 tbb [pc, r3]                                      |         __asm ("tbb aav.0x000000ff");
    0x0006c148 ldr.w r3, [pc, 0xb5c]                             |         
    0x0006c14c add r3, pc                                        |         r3 = 0xd8df8;
                                                                 | label_16:
    0x0006c14e strd r2, r3, [sp, 0x10]                           |         __asm ("strd r2, r3, [sp, 0x10]");
    0x0006c152 mov r2, sb                                        |         r2 = sb;
    0x0006c154 ldr.w r3, [pc, 0xb54]                             |         r3 = *(0x0006ccac);
    0x0006c158 adds r7, 8                                        |         r7 += 8;
    0x0006c15a strd r5, r1, [sp]                                 |         __asm ("strd r5, r1, [sp]");
    0x0006c15e movs r1, 1                                        |         r1 = 1;
    0x0006c160 strd r0, ip, [sp, 8]                              |         __asm ("strd r0, ip, [sp, 8]");
    0x0006c164 mov r0, sl                                        |         r0 = sl;
    0x0006c166 add r3, pc                                        |         r3 += pc;
    0x0006c168 adds r5, 1                                        |         r5++;
    0x0006c16a str r3, [sp, 0x18]                                |         var_18h = r3;
    0x0006c16c mov r3, fp                                        |         r3 = fp;
    0x0006c16e bl 0x2a09c                                        |         fcn_0002a09c (r0, r1);
    0x0006c172 ldr r3, [r4, 0x14]                                |         r3 = *((r4 + 0x14));
    0x0006c174 cmp r3, r5                                        |         
    0x0006c176 bgt 0x6c09a                                       |         
                                                                 |     } while (r3 > r5);
    0x0006c178 mov ip, r6                                        |     
                                                                 | label_174:
    0x0006c17a ldr r4, [r4, 4]                                   |     r4 = *((r4 + 4));
    0x0006c17c add.w fp, fp, 1                                   |     
    0x0006c180 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0006c182 bne 0x6c08e                                       |         goto label_15;
                                                                 |     }
    0x0006c184 b 0x6bb44                                         |     goto label_8;
    0x0006c186 ldr.w r3, [pc, 0xb28]                             |     r3 = *(0x0006ccb0);
    0x0006c18a add r3, pc                                        |     r3 += pc;
    0x0006c18c b 0x6c14e                                         |     goto label_16;
    0x0006c196 ldr.w r3, [pc, 0xb20]                             |     r3 = *(0x0006ccb8);
    0x0006c19a add r3, pc                                        |     r3 += pc;
    0x0006c19c b 0x6c14e                                         |     goto label_16;
    0x0006c19e ldr.w r3, [pc, 0xb1c]                             |     r3 = *(0x0006ccbc);
    0x0006c1a2 add r3, pc                                        |     r3 += pc;
    0x0006c1a4 b 0x6c14e                                         |     goto label_16;
    0x0006c1ae ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c1b0 ldr r5, [sp, 0x28]                                |     r5 = x;
    0x0006c1b2 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0006c1b4 ldr.w ip, [r5, 0x2c]                              |     ip = *((r5 + 0x2c));
    0x0006c1b8 add r3, r7                                        |     r3 += r7;
    0x0006c1ba ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0006c1bc add.w fp, ip, 5                                   |     
    0x0006c1c0 add.w r2, ip, 1                                   |     r2 = ip + 1;
    0x0006c1c4 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0006c1c6 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0006c1c8 str.w fp, [r5, 0x2c]                              |     __asm ("str.w fp, [r5, 0x2c]");
    0x0006c1cc str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0006c1ce cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c1d0 beq.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006c1d4 ldr.w r3, [pc, 0xae8]                             |     
    0x0006c1d8 str.w ip, [sp, 0x70]                              |     __asm ("str.w ip, [var_70h]");
    0x0006c1dc add r3, pc                                        |     
    0x0006c1de adds r3, 4                                        |     r3 += 4;
    0x0006c1e0 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x0006c1e2 ldr.w r3, [pc, 0xae0]                             |     r3 = *(0x0006ccc4);
    0x0006c1e6 add r3, pc                                        |     r3 = 0x14508a;
    0x0006c1e8 str r3, [sp, 0x5c]                                |     var_5ch = r3;
                                                                 | label_48:
    0x0006c1ea ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0006c1ec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006c1ee beq.w 0x6e0f8                                     |         goto label_177;
                                                                 |     }
    0x0006c1f2 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0006c1f4 movs r1, 0                                        |     r1 = 0;
    0x0006c1f6 mov r0, r5                                        |     r0 = r5;
    0x0006c1f8 bl 0x730f4                                        |     fcn_000730f4 (r0, r1, r2, r3, r4, r5);
    0x0006c1fc str r0, [sp, 0x28]                                |     x = r0;
    0x0006c1fe cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006c200 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c204 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006c206 ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x0006c20a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006c20c bne.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c210 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c212 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x0006c214 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006c216 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
                                                                 | label_73:
    0x0006c21a str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0006c21c ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006c21e ldr r0, [r3, 0x3c]                                |     r0 = *((r3 + 0x3c));
    0x0006c220 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c222 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0006c224 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006c226 beq.w 0x6e988                                     |         goto label_178;
                                                                 |     }
    0x0006c22a ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0006c22c cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x0006c22e beq.w 0x6e2f8                                     |         goto label_179;
                                                                 |     }
    0x0006c232 add.w r3, r2, 0x10                                |     r3 = r2 + 0x10;
    0x0006c236 movs r6, 0                                        |     r6 = 0;
                                                                 |     do {
    0x0006c238 mov r2, r3                                        |         r2 = r3;
    0x0006c23a adds r6, 1                                        |         r6++;
    0x0006c23c ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x0006c23e adds r3, 0x10                                     |         r3 += 0x10;
    0x0006c240 cmp r0, r1                                        |         
    0x0006c242 bne 0x6c238                                       |         
                                                                 |     } while (r0 != r1);
    0x0006c244 lsls r3, r6, 4                                    |     r3 = r6 << 4;
    0x0006c246 str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 | label_88:
    0x0006c248 ldr r0, [r5, 0x74]                                |     r0 = *((r5 + 0x74));
    0x0006c24a ldr r3, [r2]                                      |     r3 = *(r2);
    0x0006c24c cmp r0, 0                                         |     
    0x0006c24e it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x0006c250 moveq r0, r5                                      |         r0 = r5;
                                                                 |     }
    0x0006c252 ldr r2, [r0, 0x54]                                |     r2 = *((r0 + 0x54));
    0x0006c254 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0006c256 movs r3, 1                                        |     r3 = 1;
    0x0006c258 lsls r3, r6                                       |     r3 <<= r6;
    0x0006c25a tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0006c25c bne.w 0x6e018                                     |         goto label_180;
                                                                 |     }
    0x0006c260 cmp r6, 1                                         |     
    0x0006c262 orr.w r2, r2, r3                                  |     r2 |= r3;
    0x0006c266 it ne                                             |     
                                                                 |     if (r6 == 1) {
    0x0006c268 ldrne r3, [sp, 0x28]                              |         r3 = x;
                                                                 |     }
    0x0006c26a str r2, [r0, 0x54]                                |     *((r0 + 0x54)) = r2;
    0x0006c26c itt ne                                            |     
                                                                 |     if (r6 == 1) {
    0x0006c26e ldrne r1, [r3]                                    |         r1 = *(r3);
                                                                 |     }
                                                                 |     if (r6 == 1) {
    0x0006c270 ldrne r2, [r3, 0x14]                              |         r2 = *((r3 + 0x14));
                                                                 |     }
                                                                 |     if (r6 == 1) {
    0x0006c272 beq.w 0x6e54e                                     |         goto label_181;
                                                                 |     }
                                                                 | label_65:
    0x0006c276 ldr r3, [r5]                                      |     r3 = *(r5);
    0x0006c278 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0006c27a ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0006c27c add r3, r0                                        |     r3 += r0;
    0x0006c27e ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0006c280 ldrb r3, [r3, 9]                                  |     r3 = *((r3 + 9));
                                                                 |     if (r3 != 0) {
    0x0006c282 cbz r3, 0x6c290                                   |         
    0x0006c284 str r1, [sp]                                      |         *(sp) = r1;
    0x0006c286 movs r3, 0                                        |         r3 = 0;
    0x0006c288 mov r1, r6                                        |         r1 = r6;
    0x0006c28a mov r0, r5                                        |         r0 = r5;
    0x0006c28c bl 0x2ba0c                                        |         fcn_0002ba0c (r0, r1, r2, r3, r4);
                                                                 |     }
                                                                 | label_64:
    0x0006c290 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006c292 movs r1, 0                                        |     r1 = 0;
    0x0006c294 ldr r2, [r5, 0x2c]                                |     r2 = *((r5 + 0x2c));
    0x0006c296 mov r0, r5                                        |     r0 = r5;
    0x0006c298 ldr r4, [sp, 0x28]                                |     r4 = x;
    0x0006c29a mov.w r8, 1                                       |     r8 = 1;
    0x0006c29e ldrsh.w r3, [r3, 0x22]                            |     r3 = *((r3 + 0x22));
    0x0006c2a2 add r3, fp                                        |     r3 += fp;
    0x0006c2a4 cmp r3, r2                                        |     
    0x0006c2a6 mov r2, r6                                        |     r2 = r6;
    0x0006c2a8 it gt                                             |     
                                                                 |     if (r3 <= r2) {
    0x0006c2aa strgt r3, [r5, 0x2c]                              |         *((r5 + 0x2c)) = r3;
                                                                 |     }
    0x0006c2ac movs r3, 0x70                                     |     r3 = 0x70;
    0x0006c2ae str r3, [sp]                                      |     *(sp) = r3;
    0x0006c2b0 mov r3, r4                                        |     r3 = r4;
    0x0006c2b2 bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x0006c2b6 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0006c2b8 mov r0, sl                                        |     r0 = sl;
    0x0006c2ba ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0006c2bc bl 0x2a930                                        |     fcn_0002a930 (r0, r1, r2);
    0x0006c2c0 ldr r7, [r4, 0x30]                                |     r7 = *((r4 + 0x30));
    0x0006c2c2 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0006c2c4 beq.w 0x6d57c                                     |         goto label_182;
                                                                 |     }
    0x0006c2c8 add r3, sp, 0x94                                  |     r3 += var_94h;
    0x0006c2ca str.w sl, [sp, 0x40]                              |     __asm ("str.w sl, [var_40h]");
    0x0006c2ce str.w fp, [sp, 0x44]                              |     __asm ("str.w fp, [var_44h]");
    0x0006c2d2 mov sb, r5                                        |     sb = r5;
    0x0006c2d4 ldr.w sl, [sp, 0x24]                              |     sl = sig;
    0x0006c2d8 ldr.w fp, [sp, 0x38]                              |     fp = var_38h;
    0x0006c2dc str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006c2de b 0x6c302                                         |     goto label_183;
                                                                 | label_17:
    0x0006c2e0 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x0006c2e2 movs r1, 0x70                                     |     r1 = 0x70;
    0x0006c2e4 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0006c2e6 mov r2, r8                                        |     r2 = r8;
    0x0006c2e8 str r6, [sp]                                      |     *(sp) = r6;
    0x0006c2ea bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006c2ee mov r1, r5                                        |     r1 = r5;
    0x0006c2f0 mov r0, sb                                        |     r0 = sb;
    0x0006c2f2 bl 0x27dcc                                        |     fcn_00027dcc (r0, r1);
                                                                 |     do {
                                                                 | label_18:
    0x0006c2f6 ldr r7, [r7, 4]                                   |         r7 = *((r7 + 4));
    0x0006c2f8 add.w r8, r8, 1                                   |         r8++;
    0x0006c2fc cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0006c2fe beq.w 0x6d572                                     |             goto label_184;
                                                                 |         }
                                                                 | label_183:
    0x0006c302 ldr r1, [r7, 8]                                   |         r1 = *((r7 + 8));
    0x0006c304 mov r2, fp                                        |         r2 = fp;
    0x0006c306 mov r0, sl                                        |         r0 = sl;
    0x0006c308 bl 0x38d4c                                        |         r0 = fcn_00038d4c (r0, r1, r2, r3);
    0x0006c30c mov r4, r0                                        |         r4 = r0;
    0x0006c30e cmp r0, 0                                         |         
    0x0006c310 beq 0x6c2f6                                       |         
                                                                 |     } while (r0 == 0);
    0x0006c312 cmp r6, 1                                         |     
    0x0006c314 mov.w r3, 0                                       |     r3 = 0;
    0x0006c318 str r3, [sp, 0x94]                                |     var_94h = r3;
                                                                 |     if (r6 != 1) {
    0x0006c31a beq 0x6c33c                                       |         
    0x0006c31c ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x0006c320 ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x0006c322 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x0006c324 add r3, r2                                        |         r3 += r2;
    0x0006c326 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0006c328 ldrb r3, [r3, 9]                                  |         r3 = *((r3 + 9));
                                                                 |         if (r3 == 0) {
    0x0006c32a cbz r3, 0x6c33c                                   |             goto label_185;
                                                                 |         }
    0x0006c32c ldr r3, [r0]                                      |         r3 = *(r0);
    0x0006c32e mov r1, r6                                        |         r1 = r6;
    0x0006c330 ldr r2, [r0, 0x14]                                |         r2 = *((r0 + 0x14));
    0x0006c332 mov r0, sb                                        |         r0 = sb;
    0x0006c334 str r3, [sp]                                      |         *(sp) = r3;
    0x0006c336 movs r3, 0                                        |         r3 = 0;
    0x0006c338 bl 0x2ba0c                                        |         fcn_0002ba0c (r0, r1, r2, r3, r4);
                                                                 |     }
                                                                 | label_185:
    0x0006c33c movs r3, 0                                        |     r3 = 0;
    0x0006c33e mov r2, r7                                        |     r2 = r7;
    0x0006c340 str r3, [sp]                                      |     *(sp) = r3;
    0x0006c342 mov r1, r4                                        |     r1 = r4;
    0x0006c344 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006c346 mov r0, sb                                        |     r0 = sb;
    0x0006c348 bl 0x20790                                        |     r0 = fcn_00020790 (r0, r1, r2, r3, r4, r5, r6);
    0x0006c34c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006c34e bne.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006c352 ldr r5, [sp, 0x94]                                |     r5 = var_94h;
    0x0006c354 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0006c356 bne 0x6c2e0                                       |         goto label_17;
                                                                 |     }
    0x0006c358 movs r2, 0x70                                     |     r2 = 0x70;
    0x0006c35a mov r3, r4                                        |     r3 = r4;
    0x0006c35c str r2, [sp]                                      |     *(sp) = r2;
    0x0006c35e mov r1, r8                                        |     r1 = r8;
    0x0006c360 mov r2, r6                                        |     r2 = r6;
    0x0006c362 mov r0, sb                                        |     r0 = sb;
    0x0006c364 bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x0006c368 b 0x6c2f6                                         |     goto label_18;
    0x0006c36a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c36c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c36e beq.w 0x6e744                                     |         goto label_186;
                                                                 |     }
    0x0006c372 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c374 ldr r3, [r0, 0x18]                                |     r3 = *((r0 + 0x18));
    0x0006c376 lsls r4, r3, 0x19                                 |     r4 = r3 << 0x19;
                                                                 |     if (r4 < r3) {
    0x0006c378 bmi.w 0x6e49a                                     |         goto label_114;
                                                                 |     }
    0x0006c37c ldr.w r4, [pc, 0x948]                             |     r4 = *(0x0006ccc8);
    0x0006c380 ldr.w r1, [pc, 0x948]                             |     
    0x0006c384 ldr.w r5, [pc, 0x948]                             |     r5 = *(0x0006ccd0);
    0x0006c388 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c38a add r4, pc                                        |     r4 += pc;
    0x0006c38c add.w r4, r4, 0x9e0                               |     r4 += 0x9e0;
    0x0006c390 add r1, pc                                        |     r1 = 0xd9060;
    0x0006c392 add r5, pc                                        |     r5 += pc;
    0x0006c394 subs r6, r3, 1                                    |     r6 = r3 - 1;
                                                                 | label_19:
    0x0006c396 subs r1, 1                                        |     r1--;
    0x0006c398 mov r0, r6                                        |     r0 = r6;
                                                                 |     do {
                                                                 | label_34:
    0x0006c39a ldrb r3, [r0, 1]!                                 |         r3 = *((r0 += 1));
    0x0006c39e ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x0006c3a2 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0006c3a4 beq.w 0x6cf76                                     |             goto label_187;
                                                                 |         }
    0x0006c3a8 add r3, r5                                        |         r3 += r5;
    0x0006c3aa add r2, r5                                        |         r2 += r5;
    0x0006c3ac ldrb.w r7, [r3, 0x140]                            |         r7 = *((r3 + 0x140));
    0x0006c3b0 ldrb.w r3, [r2, 0x140]                            |         r3 = *((r2 + 0x140));
    0x0006c3b4 cmp r7, r3                                        |         
    0x0006c3b6 beq 0x6c39a                                       |         
                                                                 |     } while (r7 == r3);
    0x0006c3b8 ldr r1, [r4, 8]!                                  |     r1 = *((r4 += 8));
    0x0006c3bc cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0006c3be bne 0x6c396                                       |         goto label_19;
                                                                 |     }
                                                                 | label_35:
    0x0006c3c0 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0006c3c2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006c3c4 bne.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c3c8 ldr.w r1, [pc, 0x908]                             |     
    0x0006c3cc ldrd r0, r2, [sp, 0x28]                           |     __asm ("ldrd r0, r2, [x]");
    0x0006c3d0 add r1, pc                                        |     r1 = 0xd90a8;
    0x0006c3d2 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0006c3d6 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006c3d8 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c3da bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006c3de b.w 0x6b798                                       |     goto label_6;
    0x0006c3e2 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0006c3e4 mov r0, sl                                        |     r0 = sl;
    0x0006c3e6 bl 0xbc5c                                         |     fcn_0000bc5c (r0, r1);
    0x0006c3ea ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c3ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c3ee beq.w 0x6e4a4                                     |         goto label_188;
                                                                 |     }
    0x0006c3f2 movs r3, 0                                        |     r3 = 0;
    0x0006c3f4 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006c3f6 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006c3f8 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006c3fa bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x0006c3fe ldr r4, [sp, 0x98]                                |     r4 = var_98h;
    0x0006c400 cmp r4, 0                                         |     
                                                                 |     if (r4 < 0) {
    0x0006c402 bge 0x6c410                                       |         
    0x0006c404 cmp.w r4, -0x80000000                             |         
    0x0006c408 ite ne                                            |         
                                                                 |         if (r4 != -0x80000000) {
    0x0006c40a rsbne r4, r4, 0                                   |             __asm ("rsbne r4, r4, 0");
                                                                 |         }
                                                                 |         if (r4 == -0x80000000) {
    0x0006c40c mvneq r4, 0x80000000                              |             r4 = ~0x80000000;
                                                                 |             goto label_189;
                                                                 |         }
                                                                 |     }
                                                                 | label_189:
    0x0006c410 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
    0x0006c412 movs r1, 0                                        |     r1 = 0;
    0x0006c414 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006c416 mov r2, r5                                        |     r2 = r5;
    0x0006c418 bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x0006c41c mov r2, r5                                        |     r2 = r5;
    0x0006c41e mov r0, sl                                        |     r0 = sl;
    0x0006c420 movs r3, 3                                        |     r3 = 3;
    0x0006c422 movs r1, 0x64                                     |     r1 = 0x64;
    0x0006c424 str r4, [sp]                                      |     *(sp) = r4;
    0x0006c426 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006c428 invalid                                           |     
    0x0006c42c adds r0, 0xc                                      |     r0 += 0xc;
    0x0006c42e mov r1, r4                                        |     r1 = r4;
    0x0006c430 ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
    0x0006c434 str r4, [r3, 0x50]                                |     *((r3 + 0x50)) = r4;
    0x0006c436 bl 0x16590                                        |     fcn_00016590 (r0, r1);
    0x0006c43a ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006c43c ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c43e bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006c442 b.w 0x6b798                                       |     goto label_6;
    0x0006c446 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c448 movs r2, 3                                        |     r2 = 3;
    0x0006c44a ldr r1, [sp, 0x28]                                |     r1 = x;
    0x0006c44c ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0006c44e str r2, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r2;
    0x0006c450 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0006c452 ble.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006c456 ldr.w r5, [pc, 0x880]                             |     
    0x0006c45a ldr.w r4, [pc, 0x880]                             |     
    0x0006c45e ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x0006c460 add r5, pc                                        |     r5 = 0xd913e;
    0x0006c462 ldr r7, [sp, 0x24]                                |     r7 = sig;
    0x0006c464 addw r5, r5, 0xd6c                                |     __asm ("addw r5, r5, aav.0x000000ff");
    0x0006c468 add r4, pc                                        |     r4 = 0xd914a;
    0x0006c46a b 0x6c48a                                         |     goto label_190;
                                                                 | label_21:
    0x0006c46c ldr.w r3, [r3, 0xb8]                              |     r3 = *((r3 + 0xb8));
                                                                 | label_22:
    0x0006c470 strd r1, r3, [sp]                                 |     __asm ("strd r1, r3, [sp]");
    0x0006c474 mov r2, r4                                        |     r2 = r4;
    0x0006c476 mov r3, r6                                        |     r3 = r6;
    0x0006c478 movs r1, 1                                        |     r1 = 1;
    0x0006c47a mov r0, sl                                        |     r0 = sl;
    0x0006c47c bl 0x2a09c                                        |     fcn_0002a09c (r0, r1);
    0x0006c480 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
                                                                 | label_20:
    0x0006c482 adds r6, 1                                        |     r6++;
    0x0006c484 cmp r3, r6                                        |     
                                                                 |     if (r3 <= r6) {
    0x0006c486 ble.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006c488 add r1, sp, 0x204                                 |     r1 = sp + 0x204;
                                                                 | label_190:
    0x0006c48a ldr r0, [r7, 0x10]                                |     r0 = *((r7 + 0x10));
    0x0006c48c lsls r1, r6, 4                                    |     r1 = r6 << 4;
    0x0006c48e adds r2, r0, r1                                   |     r2 = r0 + r1;
    0x0006c490 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0006c492 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006c494 beq 0x6c482                                       |         goto label_20;
                                                                 |     }
    0x0006c496 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0006c498 ldr r1, [r0, r1]                                  |     r1 = *((r0 + r1));
    0x0006c49a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0006c49c ldrb r2, [r3, 0xf]                                |     r2 = *((r3 + 0xf));
    0x0006c49e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006c4a0 beq 0x6c46c                                       |         goto label_21;
                                                                 |     }
    0x0006c4a2 mov r3, r5                                        |     r3 = r5;
    0x0006c4a4 b 0x6c470                                         |     goto label_22;
    0x0006c4a6 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c4a8 movs r3, 1                                        |     r3 = 1;
    0x0006c4aa ldr r5, [sp, 0x3c]                                |     r5 = var_3ch;
    0x0006c4ac movs r4, 0                                        |     r4 = 0;
    0x0006c4ae str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006c4b0 b 0x6c4c8                                         |     
                                                                 |     while (r0 != 0) {
    0x0006c4b2 movs r1, 1                                        |         r1 = 1;
    0x0006c4b4 mov r0, sl                                        |         r0 = sl;
    0x0006c4b6 bl 0x2a930                                        |         fcn_0002a930 (r0, r1, r2);
    0x0006c4ba movs r3, 1                                        |         r3 = 1;
    0x0006c4bc movs r1, 0x54                                     |         r1 = 0x54;
    0x0006c4be mov r2, r3                                        |         r2 = r3;
    0x0006c4c0 mov r0, sl                                        |         r0 = sl;
    0x0006c4c2 str r4, [sp]                                      |         *(sp) = r4;
    0x0006c4c4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006c4c8 mov r0, r5                                        |         r0 = r5;
    0x0006c4ca adds r5, 1                                        |         r5++;
    0x0006c4cc blx 0x94dc                                        |         r0 = fcn_000094dc ();
    0x0006c4d0 mov r2, r0                                        |         r2 = r0;
    0x0006c4d2 cmp r0, 0                                         |         
    0x0006c4d4 bne 0x6c4b2                                       |         
                                                                 |     }
    0x0006c4d6 ldrd r0, r1, [sl, 0x68]                           |     __asm ("ldrd r0, r1, [sl, 0x68]");
    0x0006c4da bl 0x10b70                                        |     fcn_00010b70 (r0, r1);
    0x0006c4dc invalid                                           |     
                                                                 |     if (r5 != 0) {
    0x0006c4e0 cbnz r5, 0x6c4f8                                  |         goto label_191;
                                                                 |     }
    0x0006c4e2 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c4e4 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c4e6 ldr.w r4, [r3, 0x1b4]                             |     r4 = *((r3 + 0x1b4));
    0x0006c4ea movs r3, 2                                        |     r3 = 2;
    0x0006c4ec str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006c4ee cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0006c4f0 beq.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006c4f4 ldr.w r5, [pc, 0x7e8]                             |     r5 = *(0x0006cce0);
                                                                 | label_191:
    0x0006c4f8 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x0006c4fa add r5, pc                                        |     r5 += pc;
                                                                 |     do {
    0x0006c4fc ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x0006c4fe mov r2, r5                                        |         r2 = r5;
    0x0006c500 movs r1, 1                                        |         r1 = 1;
    0x0006c502 mov r0, sl                                        |         r0 = sl;
    0x0006c504 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0006c506 str r3, [sp]                                      |         *(sp) = r3;
    0x0006c508 mov r3, r6                                        |         r3 = r6;
    0x0006c50a bl 0x2a09c                                        |         fcn_0002a09c (r0, r1);
    0x0006c50e ldr r4, [r4]                                      |         r4 = *(r4);
    0x0006c510 adds r6, 1                                        |         r6++;
    0x0006c512 cmp r4, 0                                         |         
    0x0006c514 bne 0x6c4fc                                       |         
                                                                 |     } while (r4 != 0);
    0x0006c516 b.w 0x6b78c                                       |     goto label_5;
    0x0006c51a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c51c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c51e beq.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006c522 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006c524 movs r2, 0                                        |     r2 = 0;
    0x0006c526 movs r1, 1                                        |     r1 = 1;
    0x0006c528 bl 0xf160                                         |     r0 = fcn_0000f160 (r0, r1, r2, r3, r4, r5);
    0x0006c52c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006c52e beq.w 0x6e82c                                     |         goto label_192;
                                                                 |     }
    0x0006c532 ldr.w r5, [pc, 0x7b0]                             |     r5 = *(0x0006cce4);
    0x0006c536 add r5, pc                                        |     r5 += pc;
    0x0006c538 add.w r5, r5, 0x1a4                               |     r5 += 0x1a4;
                                                                 | label_116:
    0x0006c53c ldr.w r7, [pc, 0x7a8]                             |     r7 = *(0x0006cce8);
    0x0006c540 movs r4, 0                                        |     r4 = 0;
    0x0006c542 ldr.w r8, [pc, 0x7a8]                             |     r8 = *(0x0006ccec);
    0x0006c546 movs r3, 1                                        |     r3 = 1;
    0x0006c548 ldr.w sb, [sp, 0x24]                              |     sb = sig;
    0x0006c54c movs r2, 2                                        |     r2 = 2;
    0x0006c54e add r7, pc                                        |     r7 += pc;
    0x0006c550 str r5, [sp]                                      |     *(sp) = r5;
    0x0006c552 add r8, pc                                        |     r8 += pc;
    0x0006c554 mov r1, r7                                        |     r1 = r7;
    0x0006c556 mov r0, sb                                        |     r0 = sb;
    0x0006c558 str.w r8, [sp, 4]                                 |     __asm ("str.w r8, [var_4h]");
    0x0006c55c strd r4, r4, [sp, 0x14]                           |     __asm ("strd r4, r4, [sp, 0x14]");
    0x0006c560 strd r4, r4, [sp, 0xc]                            |     __asm ("strd r4, r4, [sp, 0xc]");
    0x0006c564 str r4, [sp, 8]                                   |     var_8h = r4;
    0x0006c566 bl 0x336c4                                        |     fcn_000336c4 (r0, r1, r2, r3, r4, r5, r6);
    0x0006c56a mov r1, r7                                        |     r1 = r7;
    0x0006c56c movs r3, 1                                        |     r3 = 1;
    0x0006c56e movs r2, 3                                        |     r2 = 3;
    0x0006c570 mov r0, sb                                        |     r0 = sb;
    0x0006c572 strd r5, r8, [sp]                                 |     __asm ("strd r5, r8, [sp]");
    0x0006c576 strd r4, r4, [sp, 0x14]                           |     __asm ("strd r4, r4, [sp, 0x14]");
    0x0006c57a strd r4, r4, [sp, 0xc]                            |     __asm ("strd r4, r4, [sp, 0xc]");
    0x0006c57e str r4, [sp, 8]                                   |     var_8h = r4;
    0x0006c580 bl 0x336c4                                        |     fcn_000336c4 (r0, r1, r2, r3, r4, r5, r6);
    0x0006c584 mov r1, r7                                        |     r1 = r7;
    0x0006c586 movs r3, 1                                        |     r3 = 1;
    0x0006c588 movs r2, 2                                        |     r2 = 2;
    0x0006c58a mov r0, sb                                        |     r0 = sb;
    0x0006c58c str r4, [sp]                                      |     *(sp) = r4;
    0x0006c58e bl 0x33454                                        |     fcn_00033454 (r0, r1, r2, r3, r4, r5);
    0x0006c592 ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0006c594 mov r1, r7                                        |     r1 = r7;
    0x0006c596 movs r3, 1                                        |     r3 = 1;
    0x0006c598 orrs r2, r6                                       |     r2 |= r6;
    0x0006c59a str r2, [r0, 4]                                   |     *((r0 + 4)) = r2;
    0x0006c59c movs r2, 3                                        |     r2 = 3;
    0x0006c59e mov r0, sb                                        |     r0 = sb;
    0x0006c5a0 str r4, [sp]                                      |     *(sp) = r4;
    0x0006c5a2 bl 0x33454                                        |     fcn_00033454 (r0, r1, r2, r3, r4, r5);
    0x0006c5a6 ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0006c5a8 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006c5aa orrs r2, r6                                       |     r2 |= r6;
    0x0006c5ac str r2, [r0, 4]                                   |     *((r0 + 4)) = r2;
    0x0006c5ae mov r0, sb                                        |     r0 = sb;
    0x0006c5b0 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006c5b4 b.w 0x6b798                                       |     goto label_6;
    0x0006c5b8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c5ba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006c5bc bne.w 0x6e2a4                                     |         goto label_193;
                                                                 |     }
    0x0006c5c0 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c5c2 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0006c5c4 lsls r0, r3, 0x1a                                 |     r0 = r3 << 0x1a;
                                                                 |     if (r0 < r3) {
    0x0006c5c6 bmi.w 0x6e83a                                     |         goto label_194;
                                                                 |     }
    0x0006c5ca ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0006c5cc mov r3, r2                                        |     r3 = r2;
                                                                 | label_25:
    0x0006c5ce mov r0, sl                                        |     r0 = sl;
    0x0006c5d0 bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006c5d4 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006c5d6 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c5d8 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006c5dc b.w 0x6b7a0                                       |     goto label_0;
    0x0006c5e0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c5e2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c5e4 beq.w 0x6d7b6                                     |         goto label_195;
                                                                 |     }
    0x0006c5e8 movs r3, 0                                        |     r3 = 0;
    0x0006c5ea add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006c5ec ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006c5ee str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006c5f0 bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x0006c5f4 ldr r1, [sp, 0x98]                                |     r1 = var_98h;
    0x0006c5f6 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x0006c5fa ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
    0x0006c5fe str r1, [r3, 0x50]                                |     *((r3 + 0x50)) = r1;
    0x0006c600 bl 0x16590                                        |     fcn_00016590 (r0, r1);
    0x0006c604 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006c606 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c608 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006c60c b.w 0x6b798                                       |     goto label_6;
    0x0006c610 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c612 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c614 beq.w 0x6e7f8                                     |         goto label_196;
                                                                 |     }
    0x0006c618 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c61a ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0006c61c ldrb.w r3, [r3, 0x55]                             |     r3 = *((r3 + 0x55));
    0x0006c620 ldrd r4, r5, [r2, 8]                              |     __asm ("ldrd r4, r5, [r2, 8]");
                                                                 |     if (r3 == 0) {
    0x0006c624 cbnz r3, 0x6c62a                                  |         
    0x0006c626 bic r4, r4, 0x4000                                |         r4 = BIT_MASK (r4, 0x4000);
                                                                 |     }
    0x0006c62a movs r2, 0                                        |     r2 = 0;
    0x0006c62c ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006c62e movs r1, 1                                        |     r1 = 1;
    0x0006c630 bl 0xf160                                         |     fcn_0000f160 (r0, r1, r2, r3, r4, r5);
    0x0006c634 ldr r2, [sp, 0x24]                                |     r2 = sig;
    0x0006c636 ldr r3, [r2, 0x20]                                |     r3 = *((r2 + 0x20));
    0x0006c638 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006c63a beq.w 0x6e564                                     |         goto label_197;
                                                                 |     }
    0x0006c63e orrs r3, r4                                       |     r3 |= r4;
    0x0006c640 str r3, [r2, 0x20]                                |     *((r2 + 0x20)) = r3;
    0x0006c642 ldr r3, [r2, 0x24]                                |     r3 = *((r2 + 0x24));
    0x0006c644 orrs r3, r5                                       |     r3 |= r5;
    0x0006c646 str r3, [r2, 0x24]                                |     *((r2 + 0x24)) = r3;
                                                                 | label_100:
    0x0006c648 movs r1, 0xa6                                     |     r1 = 0xa6;
    0x0006c64a mov r0, sl                                        |     r0 = sl;
    0x0006c64c bl 0x2a29c                                        |     fcn_0002a29c (r0, r1);
    0x0006c650 ldr r4, [sp, 0x24]                                |     r4 = sig;
    0x0006c652 ldrb.w r3, [r4, 0x55]                             |     r3 = *((r4 + 0x55));
    0x0006c656 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c658 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c65c b.w 0x6be58                                       |     goto label_23;
    0x0006c660 ldr r4, [sp, 0x28]                                |     r4 = x;
    0x0006c662 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0006c666 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0006c668 ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x0006c66a mov r0, r4                                        |     r0 = r4;
    0x0006c66c vstr d16, [sp, 0x98]                              |     __asm ("vstr d16, [sp, 0x98]");
    0x0006c670 cmp r3, 0                                         |     
    0x0006c672 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0006c674 movne r0, r3                                      |         r0 = r3;
                                                                 |     }
    0x0006c676 bl 0x4a504                                        |     fcn_0004a504 (r0, r1);
    0x0006c67a mov r3, r4                                        |     r3 = r4;
    0x0006c67c ldr r4, [r4, 0x2c]                                |     r4 = *((r4 + 0x2c));
    0x0006c67e ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0006c680 adds r4, 1                                        |     r4++;
    0x0006c682 str r4, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r4;
    0x0006c684 ldr.w r3, [pc, 0x668]                             |     r3 = *(0x0006ccf0);
    0x0006c688 ldrb r2, [r2]                                     |     r2 = *(r2);
    0x0006c68a add r3, pc                                        |     r3 += pc;
    0x0006c68c add r3, r2                                        |     r3 += r2;
    0x0006c68e ldrb.w r3, [r3, 0x140]                            |     r3 = *((r3 + 0x140));
    0x0006c692 cmp r3, 0x70                                      |     
                                                                 |     if (r3 == 0x70) {
    0x0006c694 beq.w 0x6e84c                                     |         goto label_198;
                                                                 |     }
    0x0006c698 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c69a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c69c beq.w 0x6e1f2                                     |         goto label_199;
                                                                 |     }
    0x0006c6a0 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006c6a2 mov r0, r3                                        |     r0 = r3;
    0x0006c6a4 bl 0xf79c                                         |     r0 = fcn_0000f79c (r0, r1);
    0x0006c6a8 mov r2, r0                                        |     r2 = r0;
    0x0006c6aa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006c6ac bne.w 0x6e1f2                                     |         goto label_199;
                                                                 |     }
    0x0006c6b0 ldrd r3, r1, [sp, 0x98]                           |     __asm ("ldrd r3, r1, [var_98h]");
    0x0006c6b4 cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x0006c6b6 blt.w 0x6e1f2                                     |         goto label_199;
                                                                 |     }
    0x0006c6ba mvn r0, 1                                         |     r0 = ~1;
    0x0006c6be cmp r0, r3                                        |     
    0x0006c6c0 sbcs r2, r1                                       |     __asm ("sbcs r2, r1");
    0x0006c6c2 itttt lt                                          |     
                                                                 |     if (r0 >= r3) {
    0x0006c6c4 movlt r3, r0                                      |         r3 = r0;
                                                                 |     }
                                                                 |     if (r0 >= r3) {
    0x0006c6c6 movlt r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r0 >= r3) {
    0x0006c6c8 strlt r3, [sp, 0x98]                              |         var_98h = r3;
                                                                 |     }
                                                                 |     if (r0 >= r3) {
    0x0006c6ca strlt r2, [sp, 0x9c]                              |         var_9ch = r2;
                                                                 |     }
                                                                 | label_79:
    0x0006c6cc str r3, [sp]                                      |     *(sp) = r3;
    0x0006c6ce movs r1, 0xb2                                     |     r1 = 0xb2;
    0x0006c6d0 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006c6d2 mov r3, r4                                        |     r3 = r4;
    0x0006c6d4 mov r0, sl                                        |     r0 = sl;
    0x0006c6d6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_117:
    0x0006c6da movs r3, 0                                        |     r3 = 0;
    0x0006c6dc mov r2, r4                                        |     r2 = r4;
    0x0006c6de str r3, [sp]                                      |     *(sp) = r3;
    0x0006c6e0 mov r0, sl                                        |     r0 = sl;
    0x0006c6e2 movs r3, 1                                        |     r3 = 1;
    0x0006c6e4 movs r1, 0x54                                     |     r1 = 0x54;
    0x0006c6e6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006c6ea b.w 0x6b78c                                       |     goto label_5;
    0x0006c6ee ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006c6f0 mov r0, sl                                        |     r0 = sl;
    0x0006c6f2 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0006c6f4 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x0006c6f6 bl 0xbc5c                                         |     fcn_0000bc5c (r0, r1);
    0x0006c6fa ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006c6fc cbz r3, 0x6c70a                                   |         
    0x0006c6fe ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0006c700 ldrb r3, [r3, 5]                                  |         r3 = *((r3 + 5));
    0x0006c702 ands r6, r3, 8                                    |         r6 = r3 & 8;
                                                                 |         if (r6 == r3) {
    0x0006c706 beq.w 0x6e78e                                     |             goto label_200;
                                                                 |         }
                                                                 |     }
    0x0006c70a ldr.w r2, [pc, 0x5e8]                             |     r2 = *(0x0006ccf4);
    0x0006c70e movs r1, 3                                        |     r1 = 3;
    0x0006c710 mov r0, sl                                        |     r0 = sl;
    0x0006c712 add r2, pc                                        |     r2 += pc;
    0x0006c714 add.w r2, r2, 0x20c                               |     r2 += 0x20c;
    0x0006c718 bl 0x299cc                                        |     fcn_000299cc (r0, r1, r2);
    0x0006c71c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006c71e str r5, [r0, 0x20]                                |     *((r0 + 0x20)) = r5;
    0x0006c720 str r2, [r0, 4]                                   |     *((r0 + 4)) = r2;
    0x0006c722 str r2, [r0, 0x18]                                |     *((r0 + 0x18)) = r2;
    0x0006c724 ldrd r0, r1, [sl, 0x68]                           |     __asm ("ldrd r0, r1, [sl, 0x68]");
    0x0006c728 bl 0x10b70                                        |     fcn_00010b70 (r0, r1);
    0x0006c72c b.w 0x6b78c                                       |     goto label_5;
    0x0006c730 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006c732 cbz r3, 0x6c750                                   |         
    0x0006c734 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006c736 add r1, sp, 0x98                                  |         r1 += var_98h;
    0x0006c738 bl 0xf79c                                         |         r0 = fcn_0000f79c (r0, r1);
                                                                 |         if (r0 != 0) {
    0x0006c73c cbnz r0, 0x6c750                                  |             goto label_201;
                                                                 |         }
    0x0006c73e ldrd r3, r2, [sp, 0x98]                           |         __asm ("ldrd r3, r2, [var_98h]");
    0x0006c742 cmp r2, 0                                         |         
    0x0006c744 ittt ge                                           |         
                                                                 |         if (r2 < 0) {
    0x0006c746 ldrge r2, [sp, 0x24]                              |             r2 = sig;
                                                                 |         }
                                                                 |         if (r2 >= 0) {
    0x0006c748 bicge r3, r3, 0x80000000                          |             __asm ("bicge r3, r3, aav.0x000000ff");
                                                                 |         }
                                                                 |         if (r2 < 0) {
    0x0006c74c str.w r3, [r2, 0x1ec]                             |             __asm ("str.w r3, aav.0x000000ff");
                                                                 |             goto label_201;
                                                                 |         }
                                                                 |     }
                                                                 | label_201:
    0x0006c750 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c752 ldr.w r3, [r3, 0x1ec]                             |     r3 = *((r3 + 0x1ec));
    0x0006c756 b.w 0x6bab2                                       |     goto label_24;
    0x0006c75a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c75c ldr.w r4, [r8, 4]                                 |     r4 = *((r8 + 4));
    0x0006c760 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006c762 bne.w 0x6e3c8                                     |         goto label_202;
                                                                 |     }
                                                                 |     if (r4 != 0) {
    0x0006c766 cbz r4, 0x6c76e                                   |         
    0x0006c768 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0006c76a ldr r3, [r3, 0x24]                                |         r3 = *((r3 + 0x24));
    0x0006c76c str r3, [sp, 0x3c]                                |         var_3ch = r3;
                                                                 |     }
    0x0006c76e ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0006c770 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0006c772 b 0x6c5ce                                         |     goto label_25;
    0x0006c774 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c776 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006c778 bne.w 0x6e300                                     |         goto label_203;
                                                                 |     }
    0x0006c77c movw r5, 0xfffe                                   |     r5 = 0xfffe;
                                                                 | label_89:
    0x0006c780 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c782 ldr.w fp, [r2, 0x28]                              |     fp = *((r2 + 0x28));
    0x0006c786 add.w r3, fp, 1                                   |     r3 += arg_1h;
    0x0006c78a str r3, [r2, 0x28]                                |     *((r2 + 0x28)) = r3;
    0x0006c78c ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0006c78e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c790 beq.w 0x6e77c                                     |         goto label_204;
                                                                 |     }
    0x0006c794 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
                                                                 | label_110:
    0x0006c796 ldr.w r3, [pc, 0x560]                             |     
    0x0006c79a ldr r7, [sp, 0x34]                                |     r7 = var_34h;
    0x0006c79c add r3, pc                                        |     r3 = 0xd949a;
    0x0006c79e strd r3, fp, [sp, 0x38]                           |     __asm ("strd r3, fp, [var_0hx38]");
    0x0006c7a2 ldrd fp, sb, [sp, 0x24]                           |     __asm ("ldrd fp, sb, [sig]");
                                                                 | label_43:
    0x0006c7a6 cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x0006c7a8 beq.w 0x6d4ae                                     |         goto label_205;
                                                                 |     }
    0x0006c7ac ldr.w r3, [sb, 0x74]                              |     r3 = *((sb + 0x74));
    0x0006c7b0 movs r2, 1                                        |     r2 = 1;
    0x0006c7b2 lsl.w r1, r2, r7                                  |     r1 = r2 << r7;
    0x0006c7b6 cmp r3, 0                                         |     
    0x0006c7b8 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0006c7ba moveq r3, sb                                      |         r3 = sb;
                                                                 |     }
    0x0006c7bc ldr r2, [r3, 0x54]                                |     r2 = *((r3 + 0x54));
    0x0006c7be tst r2, r1                                        |     
    0x0006c7c0 it eq                                             |     
                                                                 |     if ((r2 & r1) != 0) {
    0x0006c7c2 orreq r2, r1                                      |         r2 |= r1;
                                                                 |     }
    0x0006c7c4 lsl.w r1, r7, 4                                   |     r1 = r7 << 4;
    0x0006c7c8 it eq                                             |     
                                                                 |     if ((r2 & r1) != 0) {
    0x0006c7ca streq r2, [r3, 0x54]                              |         *((r3 + 0x54)) = r2;
                                                                 |     }
    0x0006c7cc ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0006c7d0 add r3, r1                                        |     r3 += r1;
    0x0006c7d2 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0006c7d4 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x0006c7d6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0006c7d8 beq.w 0x6d4ae                                     |         goto label_205;
                                                                 |     }
    0x0006c7dc and r8, r5, 1                                     |     r8 = r5 & 1;
    0x0006c7e0 str r7, [sp, 0x28]                                |     x = r7;
    0x0006c7e2 str r6, [sp, 0x34]                                |     var_34h = r6;
    0x0006c7e4 mov r7, r8                                        |     r7 = r8;
    0x0006c7e6 str r5, [sp, 0x40]                                |     var_40h = r5;
    0x0006c7e8 mov r8, r1                                        |     r8 = r1;
    0x0006c7ea b 0x6c7f4                                         |     
                                                                 |     while (r3 >= r3) {
                                                                 | label_26:
    0x0006c7ec ldr r4, [r4]                                      |         r4 = *(r4);
    0x0006c7ee cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0006c7f0 beq.w 0x6d4a8                                     |             goto label_206;
                                                                 |         }
    0x0006c7f4 ldr r5, [r4, 8]                                   |         r5 = *((r4 + 8));
    0x0006c7f6 ldr r3, [r5, 0x1c]                                |         r3 = *((r5 + 0x1c));
    0x0006c7f8 lsls r3, r3, 0x17                                 |         r3 <<= 0x17;
    0x0006c7fa bpl 0x6c7ec                                       |         
                                                                 |     }
    0x0006c7fc ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
                                                                 |     if (r3 != 0) {
    0x0006c7fe cbnz r3, 0x6c80c                                  |         goto label_207;
                                                                 |     }
    0x0006c800 b.w 0x6d474                                       |     goto label_208;
                                                                 |     do {
    0x0006c804 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0006c806 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0006c808 beq.w 0x6d474                                     |             goto label_208;
                                                                 |         }
                                                                 | label_207:
    0x0006c80c ldrsb.w r2, [r3, 0x37]                            |         r2 = *((r3 + 0x37));
    0x0006c810 cmp r2, 0                                         |         
    0x0006c812 blt 0x6c804                                       |         
                                                                 |     } while (r2 < 0);
                                                                 | label_42:
    0x0006c814 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0006c818 mov r0, fp                                        |     r0 = fp;
    0x0006c81a ldr r3, [r5]                                      |     r3 = *(r5);
    0x0006c81c ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x0006c81e ldr.w r2, [r2, r8]                                |     r2 = *((r2 + r8));
    0x0006c822 bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x0006c826 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0006c828 beq.w 0x6d79c                                     |         goto label_209;
                                                                 |     }
    0x0006c82c ldrb.w r3, [sb, 0x13]                             |     r3 = *((sb + 0x13));
    0x0006c830 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c832 beq.w 0x6d7d0                                     |         goto label_210;
                                                                 |     }
    0x0006c836 subs r3, 1                                        |     r3--;
    0x0006c838 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0006c83a strb.w r3, [sb, 0x13]                             |     *((sb + 0x13)) = r3;
    0x0006c83e adds r3, 0x26                                     |     r3 += 0x26;
    0x0006c840 ldr.w r6, [sb, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r6 = *((sb + offset_2));
                                                                 | label_52:
    0x0006c844 movs r5, 0                                        |     r5 = 0;
    0x0006c846 mvn r3, 5                                         |     r3 = ~5;
    0x0006c84a mov r2, r5                                        |     r2 = r5;
    0x0006c84c str r0, [sp, 4]                                   |     var_4h = r0;
    0x0006c84e str r3, [sp, 8]                                   |     var_8h = r3;
    0x0006c850 movs r1, 0x75                                     |     r1 = 0x75;
    0x0006c852 mov r3, r6                                        |     r3 = r6;
    0x0006c854 mov r0, sl                                        |     r0 = sl;
    0x0006c856 str r5, [sp]                                      |     *(sp) = r5;
    0x0006c858 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006c85c mov r2, r6                                        |     r2 = r6;
    0x0006c85e movs r3, 1                                        |     r3 = 1;
    0x0006c860 movs r1, 0x54                                     |     r1 = 0x54;
    0x0006c862 mov r0, sl                                        |     r0 = sl;
    0x0006c864 str r5, [sp]                                      |     *(sp) = r5;
    0x0006c866 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006c86a b 0x6c7ec                                         |     goto label_26;
    0x0006c86c ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c86e ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c870 ldr.w r4, [r3, 0x188]                             |     r4 = *((r3 + 0x188));
    0x0006c874 movs r3, 1                                        |     r3 = 1;
    0x0006c876 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006c878 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0006c87a beq.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006c87e ldr.w r5, [pc, 0x47c]                             |     r5 = *(0x0006ccfc);
    0x0006c882 add r5, pc                                        |     r5 += pc;
                                                                 |     do {
    0x0006c884 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x0006c886 mov r2, r5                                        |         r2 = r5;
    0x0006c888 movs r1, 1                                        |         r1 = 1;
    0x0006c88a mov r0, sl                                        |         r0 = sl;
    0x0006c88c ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0006c88e bl 0x2a09c                                        |         fcn_0002a09c (r0, r1);
    0x0006c892 ldr r4, [r4]                                      |         r4 = *(r4);
    0x0006c894 cmp r4, 0                                         |         
    0x0006c896 bne 0x6c884                                       |         
                                                                 |     } while (r4 != 0);
    0x0006c898 b.w 0x6b78c                                       |     goto label_5;
    0x0006c89c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c89e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006c8a0 bne.w 0x6e3f6                                     |         goto label_211;
                                                                 |     }
    0x0006c8a4 add r7, sp, 0x98                                  |     r7 += var_98h;
                                                                 | label_95:
    0x0006c8a6 vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x0006c8aa mov r3, r7                                        |     r3 = r7;
    0x0006c8ac ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x0006c8ae movs r2, 0x12                                     |     r2 = 0x12;
    0x0006c8b0 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c8b2 vstr d16, [sp, 0x98]                              |     __asm ("vstr d16, [sp, 0x98]");
    0x0006c8b6 blx 0x9958                                        |     r0 = fcn_00009958 ();
    0x0006c8ba cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006c8bc beq.w 0x6e4d8                                     |         goto label_212;
                                                                 |     }
    0x0006c8c0 cmp r0, 0xc                                       |     
                                                                 |     if (r0 == 0xc) {
    0x0006c8c2 beq.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006c8c6 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c8c8 ldr r3, [r2, 0x24]                                |     r3 = *((r2 + 0x24));
    0x0006c8ca str r0, [r2, 0xc]                                 |     *((r2 + 0xc)) = r0;
    0x0006c8cc adds r3, 1                                        |     r3++;
    0x0006c8ce str r3, [r2, 0x24]                                |     *((r2 + 0x24)) = r3;
    0x0006c8d0 b.w 0x6b78c                                       |     goto label_5;
    0x0006c8d4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c8d6 ldr.w r4, [r8, 4]                                 |     r4 = *((r8 + 4));
    0x0006c8da cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c8dc beq.w 0x6e660                                     |         goto label_213;
                                                                 |     }
    0x0006c8e0 ldr.w r0, [pc, 0x41c]                             |     r0 = *(0x0006cd00);
    0x0006c8e4 ldr.w r5, [pc, 0x41c]                             |     
    0x0006c8e8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c8ea add r0, pc                                        |     r0 += pc;
    0x0006c8ec add r5, pc                                        |     r5 = 0xd95f4;
    0x0006c8ee subs r1, r3, 1                                    |     r1 = r3 - 1;
                                                                 |     do {
                                                                 | label_46:
    0x0006c8f0 ldrb r3, [r1, 1]!                                 |         r3 = *((r1 += 1));
    0x0006c8f4 ldrb r2, [r0], 1                                  |         r2 = *(r0);
                                                                 |         r0++;
    0x0006c8f8 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0006c8fa beq.w 0x6d55a                                     |             goto label_214;
                                                                 |         }
    0x0006c8fe add r3, r5                                        |         r3 += r5;
    0x0006c900 add r2, r5                                        |         r2 += r5;
    0x0006c902 ldrb.w r6, [r3, 0x140]                            |         r6 = *((r3 + 0x140));
    0x0006c906 ldrb.w r3, [r2, 0x140]                            |         r3 = *((r2 + 0x140));
    0x0006c90a cmp r6, r3                                        |         
    0x0006c90c beq 0x6c8f0                                       |         
                                                                 |     } while (r6 == r3);
    0x0006c90e ldr r1, [pc, 0x3f8]                               |     
    0x0006c910 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006c912 add r1, pc                                        |     r1 = 0xd9620;
    0x0006c914 bl 0xa580                                         |     r0 = fcn_0000a580 (r0);
    0x0006c918 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006c91a bne.w 0x6e67e                                     |         goto label_215;
                                                                 |     }
    0x0006c91e movs r5, 1                                        |     r5 = 1;
                                                                 | label_129:
    0x0006c920 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c922 mov r0, r4                                        |     r0 = r4;
    0x0006c924 mov r1, r5                                        |     r1 = r5;
    0x0006c926 strb.w r5, [r3, 0x5a]                             |     *((r3 + 0x5a)) = r5;
    0x0006c92a bl 0x164dc                                        |     r0 = fcn_000164dc (r0, r1);
    0x0006c92e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006c930 bne.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006c934 subs r5, 1                                        |     r5--;
                                                                 | label_107:
    0x0006c936 ldr r2, [pc, 0x3d4]                               |     
    0x0006c938 movs r1, 5                                        |     r1 = 5;
    0x0006c93a ldr.w r4, [sl, 0x6c]                              |     r4 = *((sl + 0x6c));
    0x0006c93e mov r0, sl                                        |     r0 = sl;
    0x0006c940 add r2, pc                                        |     
    0x0006c942 add.w r2, r2, 0x1cc                               |     r2 = 0xd981e;
    0x0006c946 adds r4, 4                                        |     r4 += 4;
    0x0006c948 bl 0x299cc                                        |     fcn_000299cc (r0, r1, r2);
    0x0006c94c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006c94e mov r3, r0                                        |     r3 = r0;
    0x0006c950 str r5, [r0, 0x5c]                                |     *((r0 + 0x5c)) = r5;
    0x0006c952 str r4, [r0, 0x30]                                |     *((r0 + 0x30)) = r4;
    0x0006c954 mov r0, sl                                        |     r0 = sl;
    0x0006c956 mov r1, r2                                        |     r1 = r2;
    0x0006c958 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x0006c95a str r2, [r3, 0x18]                                |     *((r3 + 0x18)) = r2;
    0x0006c95c str r2, [r3, 0x54]                                |     *((r3 + 0x54)) = r2;
    0x0006c95e bl 0xbc5c                                         |     fcn_0000bc5c (r0, r1);
    0x0006c962 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006c964 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006c966 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006c96a b.w 0x6b798                                       |     goto label_6;
    0x0006c96e ldr r3, [r4]                                      |     r3 = *(r4);
    0x0006c970 movs r4, 0x64                                     |     r4 = 0x64;
    0x0006c972 str r4, [sp, 0x8c]                                |     var_8ch = r4;
    0x0006c974 cmp r3, 0                                         |     
    0x0006c976 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006c978 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0006c97a moveq r3, -1                                      |         r3 = -1;
                                                                 |     }
    0x0006c97e str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006c980 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0006c982 ldrb r2, [r3]                                     |     r2 = *(r3);
    0x0006c984 ldr r3, [pc, 0x388]                               |     
    0x0006c986 add r3, pc                                        |     r3 = 0xd969a;
    0x0006c988 add r3, r2                                        |     r3 += r2;
    0x0006c98a ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006c98c ldrb.w r3, [r3, 0x140]                            |     r3 = *((r3 + 0x140));
    0x0006c990 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x0006c992 movs r3, 6                                        |     r3 = 6;
    0x0006c994 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006c996 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006c998 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006c99a beq.w 0x6e282                                     |         goto label_216;
                                                                 |     }
    0x0006c99e ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006c9a0 add r1, sp, 0x8c                                  |     r1 += var_8ch;
    0x0006c9a2 bl 0xd180                                         |     r0 = fcn_0000d180 (r0, r1);
    0x0006c9a6 mov r3, r0                                        |     r3 = r0;
    0x0006c9a8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006c9aa beq.w 0x6e8f8                                     |         goto label_217;
                                                                 |     }
    0x0006c9ae ldr r5, [sp, 0x8c]                                |     r5 = var_8ch;
    0x0006c9b0 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x0006c9b2 ble.w 0x6e280                                     |         goto label_218;
                                                                 |     }
                                                                 | label_85:
    0x0006c9b6 movs r3, 0                                        |     r3 = 0;
    0x0006c9b8 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 | label_121:
    0x0006c9ba movs r7, 0                                        |     r7 = 0;
    0x0006c9bc movs r3, 1                                        |     r3 = 1;
    0x0006c9be subs r2, r5, 1                                    |     r2 = r5 - 1;
    0x0006c9c0 movs r1, 0x47                                     |     r1 = 0x47;
    0x0006c9c2 mov r0, sl                                        |     r0 = sl;
    0x0006c9c4 str r7, [sp]                                      |     *(sp) = r7;
    0x0006c9c6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006c9ca ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006c9cc ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0006c9ce cmp r3, r7                                        |     
                                                                 |     if (r3 <= r7) {
    0x0006c9d0 ble.w 0x6e138                                     |         goto label_219;
                                                                 |     }
    0x0006c9d4 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006c9d6 vldr d8, [pc, 0x2b8]                              |     __asm ("vldr d8, aav.0x000000ff");
    0x0006c9da mvn.w fp, r2                                      |     
    0x0006c9de vldr d9, [pc, 0x2b8]                              |     __asm ("vldr d9, aav.0x000000ff");
    0x0006c9e2 lsr.w fp, fp, 0x1f                                |     
    0x0006c9e6 mov sb, r2                                        |     sb = r2;
    0x0006c9e8 vldr d10, [pc, 0x2b4]                             |     __asm ("vldr d10, aav.0x000000ff");
    0x0006c9ec mov r8, fp                                        |     r8 = fp;
    0x0006c9ee mov fp, r5                                        |     
    0x0006c9f0 b 0x6c9fa                                         |     
                                                                 |     while (r2 != 0) {
                                                                 | label_44:
    0x0006c9f2 adds r7, 1                                        |         r7++;
    0x0006c9f4 cmp r3, r7                                        |         
                                                                 |         if (r3 <= r7) {
    0x0006c9f6 ble.w 0x6e136                                     |             goto label_220;
                                                                 |         }
    0x0006c9fa cmp sb, r7                                        |         
    0x0006c9fc ite eq                                            |         
                                                                 |         if (sb != r7) {
    0x0006c9fe moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (sb == r7) {
    0x0006ca00 andne r2, r8, 1                                   |             r2 = r8 & 1;
                                                                 |         }
    0x0006ca04 cmp r2, 0                                         |         
    0x0006ca06 bne 0x6c9f2                                       |         
                                                                 |     }
    0x0006ca08 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006ca0a ldr r0, [r3, 0x74]                                |     r0 = *((r3 + 0x74));
    0x0006ca0c cmp r0, 0                                         |     
    0x0006ca0e it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x0006ca10 moveq r0, r3                                      |         r0 = r3;
                                                                 |     }
    0x0006ca12 movs r3, 1                                        |     r3 = 1;
    0x0006ca14 ldr r2, [r0, 0x54]                                |     r2 = *((r0 + 0x54));
    0x0006ca16 lsls r3, r7                                       |     r3 <<= r7;
    0x0006ca18 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) == 0) {
    0x0006ca1a bne 0x6ca28                                       |         
    0x0006ca1c cmp r7, 1                                         |         
    0x0006ca1e orr.w r2, r2, r3                                  |         r2 |= r3;
    0x0006ca22 str r2, [r0, 0x54]                                |         *((r0 + 0x54)) = r2;
                                                                 |         if (r7 == 1) {
    0x0006ca24 beq.w 0x6e2f0                                     |             goto label_221;
                                                                 |         }
                                                                 |     }
                                                                 | label_87:
    0x0006ca28 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006ca2a lsls r6, r7, 4                                    |     r6 = r7 << 4;
    0x0006ca2c ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0006ca2e add r3, r6                                        |     r3 += r6;
    0x0006ca30 ldr r5, [r3, 0xc]                                 |     r5 = *((r3 + 0xc));
    0x0006ca32 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0006ca34 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006ca36 beq.w 0x6d4ca                                     |         goto label_53;
                                                                 |     }
    0x0006ca3a ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0006ca3c movs r4, 0                                        |     r4 = 0;
    0x0006ca3e str r5, [sp, 0x34]                                |     var_34h = r5;
    0x0006ca40 mov ip, r4                                        |     
    0x0006ca42 subs r2, r0, r4                                   |     r2 = r0 - r4;
    0x0006ca44 it ne                                             |     
                                                                 |     if (r2 == r0) {
    0x0006ca46 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0006ca48 mov r5, r2                                        |     r5 = r2;
    0x0006ca4a str r2, [sp, 0x48]                                |     var_48h = r2;
    0x0006ca4c b 0x6ca56                                         |     
                                                                 |     while (r2 != 0) {
                                                                 | label_27:
    0x0006ca4e ldr r3, [r3]                                      |         r3 = *(r3);
    0x0006ca50 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0006ca52 beq.w 0x6d4d2                                     |             goto label_222;
                                                                 |         }
    0x0006ca56 ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x0006ca58 cmp r0, r1                                        |         
    0x0006ca5a ite eq                                            |         
                                                                 |         if (r0 != r1) {
    0x0006ca5c moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r0 == r1) {
    0x0006ca5e andne r2, r5, 1                                   |             r2 = r5 & 1;
                                                                 |         }
    0x0006ca62 cmp r2, 0                                         |         
    0x0006ca64 bne 0x6ca4e                                       |         
                                                                 |     }
    0x0006ca66 ldr r2, [r1, 0x1c]                                |     r2 = *((r1 + 0x1c));
    0x0006ca68 lsls r2, r2, 0x18                                 |     r2 <<= 0x18;
    0x0006ca6a ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0006ca6c it pl                                             |     
                                                                 |     if (r2 < r2) {
    0x0006ca6e addpl ip, ip, 1                                   |         
                                                                 |     }
    0x0006ca72 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006ca74 beq.w 0x6e012                                     |         goto label_223;
                                                                 |     }
    0x0006ca78 movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x0006ca7a ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x0006ca7c mov lr, r1                                        |         lr = r1;
    0x0006ca7e adds r1, 1                                        |         r1++;
    0x0006ca80 cmp r2, 0                                         |         
    0x0006ca82 bne 0x6ca7a                                       |         
                                                                 |     } while (r2 != 0);
    0x0006ca84 add.w ip, ip, 1                                   |     
    0x0006ca88 add ip, lr                                        |     
                                                                 | label_63:
    0x0006ca8a cmp r4, r1                                        |     
    0x0006ca8c it lt                                             |     
                                                                 |     if (r4 >= r1) {
    0x0006ca8e movlt r4, r1                                      |         r4 = r1;
                                                                 |     }
    0x0006ca90 b 0x6ca4e                                         |     goto label_27;
    0x0006ca92 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006ca94 ldr.w r5, [r8, 4]                                 |     r5 = *((r8 + 4));
    0x0006ca98 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006ca9a bne.w 0x6e234                                     |         goto label_224;
                                                                 |     }
    0x0006ca9e mov.w r4, -1                                      |     r4 = -1;
                                                                 | label_83:
    0x0006caa2 mov r1, r4                                        |     r1 = r4;
    0x0006caa4 mov r0, r5                                        |     r0 = r5;
    0x0006caa6 bl 0x167d8                                        |     r0 = fcn_000167d8 (r0, r1);
    0x0006caaa mov r2, r0                                        |     r2 = r0;
    0x0006caac mov r0, sl                                        |     r0 = sl;
    0x0006caae asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0006cab0 bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006cab4 b.w 0x6b78c                                       |     goto label_5;
    0x0006cab8 ldr r5, [pc, 0x258]                               |     
    0x0006caba movs r4, 0                                        |     r4 = 0;
    0x0006cabc ldr r6, [pc, 0x258]                               |     
    0x0006cabe add r5, pc                                        |     
    0x0006cac0 add.w r5, r5, 0x298                               |     r5 = 0xd9a6e;
    0x0006cac4 add r6, pc                                        |     r6 = 0xd97e0;
                                                                 |     do {
    0x0006cac6 ldr.w r3, [r5, r4, lsl 2]                         |         offset_3 = r4 << 2;
                                                                 |         r3 = *((r5 + offset_3));
    0x0006caca mov r2, r6                                        |         r2 = r6;
    0x0006cacc adds r4, 4                                        |         r4 += 4;
    0x0006cace movs r1, 1                                        |         r1 = 1;
    0x0006cad0 mov r0, sl                                        |         r0 = sl;
    0x0006cad2 bl 0x2a09c                                        |         fcn_0002a09c (r0, r1);
    0x0006cad6 cmp.w r4, 0x120                                   |         
    0x0006cada bne 0x6cac6                                       |         
                                                                 |     } while (r4 != 0x120);
    0x0006cadc b.w 0x6b78c                                       |     goto label_5;
    0x0006cae0 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0006cae4 mvn r2, 1                                         |     r2 = ~1;
    0x0006cae8 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0006caea ldr r4, [r3]                                      |     r4 = *(r3);
    0x0006caec mov.w r3, -1                                      |     r3 = -1;
    0x0006caf0 strd r2, r3, [sp, 0x98]                           |     __asm ("strd r2, r3, [sp, 0x98]");
    0x0006caf4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0006caf6 cbz r3, 0x6cb26                                   |         
    0x0006caf8 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006cafa add r1, sp, 0x98                                  |         r1 += var_98h;
    0x0006cafc bl 0xf79c                                         |         fcn_0000f79c (r0, r1);
    0x0006cb00 ldrd r2, r3, [sp, 0x98]                           |         __asm ("ldrd r2, r3, [var_98h]");
    0x0006cb04 adds r2, 1                                        |         r2++;
    0x0006cb06 sbcs r3, r3, -1                                   |         __asm ("sbcs r3, r3, -1");
                                                                 |         if (r2 < 1) {
    0x0006cb0a bge 0x6cb14                                       |             
    0x0006cb0c vmov.i8 d16, 0xff                                 |             __asm ("vmov.i8 d16, 0xff");
    0x0006cb10 vstr d16, [sp, 0x98]                              |             __asm ("vstr d16, [sp, 0x98]");
                                                                 |         }
    0x0006cb14 ldr.w r3, [r4, 0xf8]                              |         r3 = *((r4 + 0xf8));
    0x0006cb18 ldrd r0, r1, [sp, 0x98]                           |         __asm ("ldrd r0, r1, [var_98h]");
    0x0006cb1c strd r0, r1, [r4, 0xb0]                           |         __asm ("strd r0, r1, [r4, 0xb0]");
                                                                 |         if (r3 == 0) {
    0x0006cb20 cbz r3, 0x6cb26                                   |             goto label_225;
                                                                 |         }
    0x0006cb22 strd r0, r1, [r3, 0x10]                           |         __asm ("strd r0, r1, [r3, 0x10]");
                                                                 |     }
                                                                 | label_225:
    0x0006cb26 ldrd r2, r3, [r4, 0xb0]                           |     __asm ("ldrd r2, r3, [r4, 0xb0]");
    0x0006cb2a mov r0, sl                                        |     r0 = sl;
    0x0006cb2c bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006cb30 b.w 0x6b78c                                       |     goto label_5;
    0x0006cb34 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 == 0) {
    0x0006cb36 cbz r3, 0x6cb66                                   |         goto label_82;
                                                                 |     }
    0x0006cb38 ldr r6, [pc, 0x1e0]                               |     
    0x0006cb3a movs r7, 0                                        |     r7 = 0;
    0x0006cb3c ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006cb3e blx 0x9e8c                                        |     fcn_00009e8c ();
    0x0006cb42 add r6, pc                                        |     r6 = 0xd9862;
    0x0006cb44 bic r5, r0, 0xc0000000                            |     r5 = BIT_MASK (r0, 0xc0000000);
    0x0006cb48 addw r6, r6, 0xa28                                |     __asm ("addw r6, r6, aav.0x000000ff");
                                                                 |     do {
    0x0006cb4c ldr r1, [r6], 4                                   |         r1 = *(r6);
                                                                 |         r6 += 4;
                                                                 |         if (r1 == 0) {
    0x0006cb50 cbz r1, 0x6cb66                                   |             goto label_82;
                                                                 |         }
    0x0006cb52 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006cb54 mov r2, r5                                        |         r2 = r5;
    0x0006cb56 blx 0x9890                                        |         r0 = fcn_00009890 ();
    0x0006cb5a cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0006cb5c beq.w 0x6e21c                                     |             goto label_226;
                                                                 |         }
    0x0006cb60 adds r7, 1                                        |         r7++;
    0x0006cb62 cmp r7, 6                                         |         
    0x0006cb64 bne 0x6cb4c                                       |         
                                                                 |     } while (r7 != 6);
                                                                 | label_82:
    0x0006cb66 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0006cb68 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006cb6a beq.w 0x6e556                                     |         goto label_227;
                                                                 |     }
    0x0006cb6e mov.w r7, -1                                      |     r7 = -1;
                                                                 | label_81:
    0x0006cb72 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006cb74 ldr r5, [r3, 0x14]                                |     r5 = *((r3 + 0x14));
    0x0006cb76 subs r5, 1                                        |     r5--;
                                                                 |     if (r5 < 1) {
    0x0006cb78 bmi.w 0x6e1ba                                     |         goto label_228;
                                                                 |     }
    0x0006cb7c ldr.w sb, [sp, 0x34]                              |     sb = var_34h;
    0x0006cb80 movs r6, 1                                        |     r6 = 1;
    0x0006cb82 mov r8, r3                                        |     r8 = r3;
    0x0006cb84 b 0x6cbb2                                         |     goto label_229;
                                                                 | label_29:
    0x0006cb86 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0006cb8a ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0006cb8c add r3, r2                                        |     r3 += r2;
    0x0006cb8e ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0006cb90 ldrb r3, [r3, 9]                                  |     r3 = *((r3 + 9));
                                                                 |     if (r3 != 0) {
    0x0006cb92 cbz r3, 0x6cb9e                                   |         
    0x0006cb94 ldr.w r3, [sl, 0x9c]                              |         r3 = *((sl + 0x9c));
    0x0006cb98 orrs r3, r1                                       |         r3 |= r1;
    0x0006cb9a str.w r3, [sl, 0x9c]                              |         __asm ("str.w r3, [sl, 0x9c]");
                                                                 |     }
    0x0006cb9e movs r3, 1                                        |     r3 = 1;
    0x0006cba0 mov r2, r5                                        |     r2 = r5;
    0x0006cba2 movs r1, 4                                        |     r1 = 4;
    0x0006cba4 mov r0, sl                                        |     r0 = sl;
    0x0006cba6 str r7, [sp]                                      |     *(sp) = r7;
    0x0006cba8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     do {
                                                                 | label_28:
    0x0006cbac subs r5, 1                                        |         r5--;
                                                                 |         if (r5 <= 1) {
    0x0006cbae blo.w 0x6e1ba                                     |             goto label_228;
                                                                 |         }
                                                                 | label_229:
    0x0006cbb2 ldr.w r3, [r8, 0x10]                              |         r3 = *((r8 + 0x10));
    0x0006cbb6 lsls r2, r5, 4                                    |         r2 = r5 << 4;
    0x0006cbb8 add r3, r2                                        |         r3 += r2;
    0x0006cbba ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0006cbbc cmp r3, 0                                         |         
    0x0006cbbe beq 0x6cbac                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_30:
    0x0006cbc0 cmp sb, r5                                        |     
                                                                 |     if (sb == r5) {
    0x0006cbc2 beq 0x6cbca                                       |         goto label_230;
                                                                 |     }
    0x0006cbc4 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0006cbc6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006cbc8 bne 0x6cbac                                       |         goto label_28;
                                                                 |     }
                                                                 | label_230:
    0x0006cbca ldr.w r3, [sl, 0x98]                              |     r3 = *((sl + 0x98));
    0x0006cbce lsl.w r1, r6, r5                                  |     r1 = r6 << r5;
    0x0006cbd2 cmp r5, 1                                         |     
    0x0006cbd4 orr.w r3, r3, r1                                  |     r3 |= r1;
    0x0006cbd8 str.w r3, [sl, 0x98]                              |     __asm ("str.w r3, [sl, 0x98]");
                                                                 |     if (r5 != 1) {
    0x0006cbdc bne 0x6cb86                                       |         goto label_29;
                                                                 |     }
    0x0006cbde mov r3, r5                                        |     r3 = r5;
    0x0006cbe0 mov r2, r5                                        |     r2 = r5;
    0x0006cbe2 movs r1, 4                                        |     r1 = 4;
    0x0006cbe4 mov r0, sl                                        |     r0 = sl;
    0x0006cbe6 str r7, [sp]                                      |     *(sp) = r7;
    0x0006cbe8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006cbec ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0006cbf0 movs r2, 0                                        |     r2 = 0;
    0x0006cbf2 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0006cbf4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006cbf6 beq.w 0x6e1ba                                     |         goto label_228;
                                                                 |     }
    0x0006cbfa mov r5, r2                                        |     r5 = r2;
    0x0006cbfc b 0x6cbc0                                         |     goto label_30;
    0x0006cbfe ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006cc00 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006cc02 bne.w 0x6e31a                                     |         goto label_231;
                                                                 |     }
    0x0006cc06 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 | label_90:
    0x0006cc08 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006cc0a bne.w 0x6e544                                     |         goto label_232;
                                                                 |     }
    0x0006cc0e ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006cc10 ldrb.w r3, [r3, 0x59]                             |     r3 = *((r3 + 0x59));
                                                                 | label_91:
    0x0006cc14 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0006cc16 beq.w 0x6e53c                                     |         goto label_233;
                                                                 |     }
    0x0006cc1a ldr r1, [pc, 0x104]                               |     
    0x0006cc1c add r1, pc                                        |     r1 = 0xd9942;
                                                                 | label_98:
    0x0006cc1e mov r0, sl                                        |     r0 = sl;
    0x0006cc20 bl 0x2b16c                                        |     fcn_0002b16c (r0, r1, r2);
    0x0006cc24 b.w 0x6b78c                                       |     goto label_5;
    0x0006cc28 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006cc2a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006cc2c beq.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006cc30 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0006cc32 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0006cc34 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006cc36 bl 0x18a0c                                        |     r0 = fcn_00018a0c (r0, r1, r2, r3);
    0x0006cc3a mov r4, r0                                        |     r4 = r0;
    0x0006cc3c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006cc3e beq.w 0x6e9c4                                     |         goto label_234;
                                                                 |     }
                                                                 | label_127:
    0x0006cc42 ldr r1, [r4, 0x18]                                |     r1 = *((r4 + 0x18));
    0x0006cc44 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006cc46 beq.w 0x6e9b8                                     |         goto label_235;
                                                                 |     }
    0x0006cc4a ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006cc4c bl 0xf708                                         |     r0 = fcn_0000f708 (r0, r1);
    0x0006cc50 mov r1, r0                                        |     r1 = r0;
                                                                 | label_126:
    0x0006cc52 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0006cc54 ldr r6, [r4, 0xc]                                 |     r6 = *((r4 + 0xc));
    0x0006cc56 ldrd r3, r2, [r2, 8]                              |     __asm ("ldrd r3, r2, [r2, 8]");
    0x0006cc5a orrs r3, r2                                       |     r3 |= r2;
    0x0006cc5c ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006cc5e itete ne                                          |     
                                                                 |     if (r3 == r2) {
    0x0006cc60 movne r3, 6                                       |         r3 = 6;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0006cc62 moveq r3, 3                                       |         r3 = 3;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0006cc64 ldrhne r7, [r4, 0x34]                             |         __asm ("ldrhne r7, [r4, 0x34]");
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0006cc66 ldrheq r7, [r4, 0x32]                             |         __asm ("ldrheq r7, [r4, 0x32]");
                                                                 |     }
    0x0006cc68 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006cc6a ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x0006cc6c cmp r3, 0                                         |     
    0x0006cc6e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0006cc70 movne r2, r3                                      |         r2 = r3;
                                                                 |     }
    0x0006cc72 mov r0, r2                                        |     r0 = r2;
    0x0006cc74 bl 0x4a504                                        |     fcn_0004a504 (r0, r1);
    0x0006cc78 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0006cc7a beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006cc7e ldr.w r8, [pc, 0xa4]                              |     
    0x0006cc82 movs r5, 0                                        |     r5 = 0;
    0x0006cc84 ldrd sb, fp, [sp, 0x3c]                           |     __asm ("ldrd sb, fp, [var_3ch]");
    0x0006cc88 add r8, pc                                        |     r8 = 0xd99b2;
    0x0006cc8a b 0x6cd44                                         |     goto label_236;
                                                                 | label_31:
    0x0006cd28 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006cd2a add.w sb, sb, 1                                   |     sb++;
    0x0006cd2e str r5, [sp]                                      |     *(sp) = r5;
    0x0006cd30 movs r2, 1                                        |     r2 = 1;
    0x0006cd32 movs r1, 0x54                                     |     r1 = 0x54;
    0x0006cd34 mov r0, sl                                        |     r0 = sl;
    0x0006cd36 ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x0006cd38 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006cd3a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006cd3e cmp r7, sb                                        |     
                                                                 |     if (r7 == sb) {
    0x0006cd40 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
                                                                 | label_236:
    0x0006cd44 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0006cd46 mov r0, sl                                        |     r0 = sl;
    0x0006cd48 ldrsh.w r3, [r3, sb, lsl 1]                       |     offset_4 = sb << 1;
                                                                 |     r3 = *((r3 + offset_4));
    0x0006cd4c cmp r3, 0                                         |     
    0x0006cd4e ittet ge                                          |     
                                                                 |     if (r3 < 0) {
    0x0006cd50 ldrge r2, [r6, 4]                                 |         r2 = *((r6 + 4));
                                                                 |     }
                                                                 |     if (r3 < 0) {
    0x0006cd52 addge r1, r3, r3, lsl 1                           |         r1 = r3 + (r3 << 1);
                                                                 |     }
                                                                 |     if (r3 < 0) {
    0x0006cd56 movge r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 >= 0) {
    0x0006cd58 ldr.w r2, [r2, r1, lsl 2]                         |         offset_5 = r1 << 2;
                                                                 |         r2 = *((r2 + offset_5));
                                                                 |     }
    0x0006cd5c movs r1, 1                                        |     r1 = 1;
    0x0006cd5e strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x0006cd62 mov r3, sb                                        |     r3 = sb;
    0x0006cd64 mov r2, r8                                        |     r2 = r8;
    0x0006cd66 bl 0x2a09c                                        |     fcn_0002a09c (r0, r1);
    0x0006cd6a ldrd r3, r2, [fp, 8]                              |     __asm ("ldrd r3, r2, [arg_8h]");
    0x0006cd6e orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0006cd70 beq 0x6cd28                                       |         goto label_31;
                                                                 |     }
    0x0006cd72 ldrh r2, [r4, 0x32]                               |     r2 = *((r4 + 0x32));
    0x0006cd74 movs r1, 4                                        |     r1 = 4;
    0x0006cd76 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x0006cd78 mov r0, sl                                        |     r0 = sl;
    0x0006cd7a cmp r2, sb                                        |     
    0x0006cd7c ite le                                            |     
                                                                 |     if (r2 > sb) {
    0x0006cd7e movle r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 <= sb) {
    0x0006cd80 movgt r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0006cd82 ldrb.w r3, [r3, sb]                               |     r3 = *((r3 + sb));
    0x0006cd86 str r2, [sp, 4]                                   |     var_4h = r2;
    0x0006cd88 ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x0006cd8a ldr.w r2, [r2, sb, lsl 2]                         |     offset_6 = sb << 2;
                                                                 |     r2 = *((r2 + offset_6));
    0x0006cd8e str r2, [sp]                                      |     *(sp) = r2;
    0x0006cd90 ldr.w r2, [pc, 0xc58]                             |     
    0x0006cd94 add r2, pc                                        |     r2 = 0xda784;
    0x0006cd96 bl 0x2a09c                                        |     fcn_0002a09c (r0, r1);
    0x0006cd9a b 0x6cd28                                         |     goto label_31;
    0x0006cd9c movs r3, 0                                        |     r3 = 0;
    0x0006cd9e str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006cda0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006cda2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006cda4 beq.w 0x6e212                                     |         goto label_237;
                                                                 |     }
    0x0006cda8 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006cdaa add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006cdac bl 0xd180                                         |     r0 = fcn_0000d180 (r0, r1);
    0x0006cdb0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006cdb2 beq.w 0x6e212                                     |         goto label_237;
                                                                 |     }
    0x0006cdb6 ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x0006cdb8 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0006cdba ble.w 0x6e212                                     |         goto label_237;
                                                                 |     }
                                                                 | label_80:
    0x0006cdbe ldr r5, [sp, 0x34]                                |     r5 = var_34h;
    0x0006cdc0 movs r4, 0                                        |     r4 = 0;
    0x0006cdc2 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006cdc4 mov r1, r4                                        |     r1 = r4;
    0x0006cdc6 mov r2, r5                                        |     r2 = r5;
    0x0006cdc8 bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x0006cdcc ldr r2, [sp, 0x98]                                |     r2 = var_98h;
    0x0006cdce movs r3, 1                                        |     r3 = 1;
    0x0006cdd0 movs r1, 0x47                                     |     r1 = 0x47;
    0x0006cdd2 mov r0, sl                                        |     r0 = sl;
    0x0006cdd4 str r4, [sp]                                      |     *(sp) = r4;
    0x0006cdd6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006cdda mov r2, r5                                        |     r2 = r5;
    0x0006cddc mov r3, r4                                        |     r3 = r4;
    0x0006cdde movs r1, 0x3d                                     |     r1 = 0x3d;
    0x0006cde0 mov r0, sl                                        |     r0 = sl;
    0x0006cde2 str r4, [sp]                                      |     *(sp) = r4;
    0x0006cde4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006cde8 mov r3, r4                                        |     r3 = r4;
    0x0006cdea mov r5, r0                                        |     r5 = r0;
    0x0006cdec movs r2, 1                                        |     r2 = 1;
    0x0006cdee movs r1, 0x54                                     |     r1 = 0x54;
    0x0006cdf0 mov r0, sl                                        |     r0 = sl;
    0x0006cdf2 str r4, [sp]                                      |     *(sp) = r4;
    0x0006cdf4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006cdf8 mov.w r3, -1                                      |     r3 = -1;
    0x0006cdfc movs r2, 1                                        |     r2 = 1;
    0x0006cdfe movs r1, 0x56                                     |     r1 = 0x56;
    0x0006ce00 mov r0, sl                                        |     r0 = sl;
    0x0006ce02 str r4, [sp]                                      |     *(sp) = r4;
    0x0006ce04 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006ce08 mov r3, r5                                        |     r3 = r5;
    0x0006ce0a movs r2, 1                                        |     r2 = 1;
    0x0006ce0c movs r1, 0x31                                     |     r1 = 0x31;
    0x0006ce0e mov r0, sl                                        |     r0 = sl;
    0x0006ce10 str r4, [sp]                                      |     *(sp) = r4;
    0x0006ce12 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006ce16 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x0006ce1a mov r1, r5                                        |     r1 = r5;
    0x0006ce1c mov r0, sl                                        |     r0 = sl;
    0x0006ce1e bl 0xbc2c                                         |     fcn_0000bc2c (r0, r1, r2);
    0x0006ce22 b.w 0x6b78c                                       |     goto label_5;
    0x0006ce26 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006ce28 blx 0xa090                                        |     fcn_0000a090 ();
    0x0006ce2c b.w 0x6b78c                                       |     goto label_5;
    0x0006ce30 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006ce32 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006ce34 beq.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006ce38 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0006ce3a ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0006ce3c ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006ce3e bl 0x38d4c                                        |     r0 = fcn_00038d4c (r0, r1, r2, r3);
    0x0006ce42 mov r4, r0                                        |     r4 = r0;
    0x0006ce44 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006ce46 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006ce4a ldr r1, [r0, 0x3c]                                |     r1 = *((r0 + 0x3c));
    0x0006ce4c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006ce4e beq.w 0x6e97c                                     |         goto label_238;
                                                                 |     }
    0x0006ce52 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006ce54 bl 0xf708                                         |     r0 = fcn_0000f708 (r0, r1);
    0x0006ce58 mov r1, r0                                        |     r1 = r0;
                                                                 | label_125:
    0x0006ce5a ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006ce5c ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x0006ce5e mov r0, r2                                        |     r0 = r2;
    0x0006ce60 cmp r3, 0                                         |     
    0x0006ce62 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0006ce64 movne r0, r3                                      |         r0 = r3;
                                                                 |     }
    0x0006ce66 movs r3, 5                                        |     r3 = 5;
    0x0006ce68 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006ce6a bl 0x4a504                                        |     fcn_0004a504 (r0, r1);
    0x0006ce6e ldr r4, [r4, 8]                                   |     r4 = *((r4 + 8));
    0x0006ce70 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0006ce72 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006ce76 ldr.w r5, [pc, 0xb78]                             |     
    0x0006ce7a add r6, sp, 0xa0                                  |     r6 += var_a0h;
    0x0006ce7c ldr.w r7, [pc, 0xb74]                             |     r7 = *(0x0006d9f4);
    0x0006ce80 ldr.w r8, [sp, 0x3c]                              |     r8 = var_3ch;
    0x0006ce84 add r5, pc                                        |     
    0x0006ce86 add.w r5, r5, 0x1f0                               |     r5 = 0xdaa6a;
    0x0006ce8a add r7, pc                                        |     r7 += pc;
                                                                 |     do {
    0x0006ce8c ldr r3, [r4, 0x24]                                |         r3 = *((r4 + 0x24));
    0x0006ce8e ldm.w r5, {r0, r1, r2}                            |         r0 = *(r5);
                                                                 |         r1 = *((r5 + 4));
                                                                 |         r2 = *((r5 + 8));
    0x0006ce92 subs r3, 0                                        |         
    0x0006ce94 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x0006ce96 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x0006ce98 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x0006ce9a add r3, sp, 0xe8                                  |         r3 += var_e8h;
    0x0006ce9c ldrb.w ip, [r4, 0x37]                             |         ip = *((r4 + 0x37));
    0x0006cea0 stm.w r6, {r0, r1, r2}                            |         *(r6) = r0;
                                                                 |         *((r6 + 4)) = r1;
                                                                 |         *((r6 + 8)) = r2;
    0x0006cea4 movs r1, 1                                        |         r1 = 1;
    0x0006cea6 mov r0, sl                                        |         r0 = sl;
    0x0006cea8 and ip, ip, 3                                     |         
    0x0006ceac add.w ip, r3, ip, lsl 2                           |         
    0x0006ceb0 mov r3, r8                                        |         r3 = r8;
    0x0006ceb2 add.w r8, r8, 1                                   |         r8++;
    0x0006ceb6 ldr r2, [ip, -0x48]                               |         r2 = *((ip - 0x48));
    0x0006ceba str r2, [sp, 8]                                   |         var_8h = r2;
    0x0006cebc ldrb.w r2, [r4, 0x36]                             |         r2 = *((r4 + 0x36));
    0x0006cec0 subs r2, 0                                        |         
    0x0006cec2 it ne                                             |         
                                                                 |         if (r2 == 0) {
    0x0006cec4 movne r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x0006cec6 str r2, [sp, 4]                                   |         var_4h = r2;
    0x0006cec8 ldr r2, [r4]                                      |         r2 = *(r4);
    0x0006ceca str r2, [sp]                                      |         *(sp) = r2;
    0x0006cecc mov r2, r7                                        |         r2 = r7;
    0x0006cece bl 0x2a09c                                        |         fcn_0002a09c (r0, r1);
    0x0006ced2 ldr r4, [r4, 0x14]                                |         r4 = *((r4 + 0x14));
    0x0006ced4 cmp r4, 0                                         |         
    0x0006ced6 bne 0x6ce8c                                       |         
                                                                 |     } while (r4 != 0);
    0x0006ced8 b.w 0x6bb44                                       |     goto label_8;
                                                                 | label_168:
    0x0006cedc ldr r5, [sp, 0x3c]                                |     r5 = var_3ch;
    0x0006cede mov sl, r1                                        |     sl = r1;
    0x0006cee0 str.w sb, [sp, 0x34]                              |     __asm ("str.w sb, [var_34h]");
    0x0006cee4 b 0x6cf50                                         |     goto label_130;
                                                                 | label_32:
    0x0006cee6 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0006cee8 beq.w 0x6d464                                     |         goto label_239;
                                                                 |     }
    0x0006ceec ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x0006ceee lsls r6, r3, 0x13                                 |     r6 = r3 << 0x13;
                                                                 |     if (r6 >= r3) {
    0x0006cef0 bpl.w 0x6d46c                                     |         goto label_240;
                                                                 |     }
    0x0006cef4 ldr.w sb, [pc, 0xb00]                             |     
    0x0006cef8 add sb, pc                                        |     sb = 0xda8f4;
                                                                 | label_33:
    0x0006cefa ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0006cefc mov r6, r1                                        |     r6 = r1;
    0x0006cefe ldr.w r1, [pc, 0xafc]                             |     r1 = *(0x0006d9fc);
    0x0006cf02 movs r2, 7                                        |     r2 = 7;
    0x0006cf04 mov r0, r6                                        |     r0 = r6;
    0x0006cf06 ldr.w r3, [r3, r8]                                |     r3 = *((r3 + r8));
    0x0006cf0a add r1, pc                                        |     r1 += pc;
    0x0006cf0c str r3, [sp, 0x28]                                |     x = r3;
    0x0006cf0e blx 0x9890                                        |     fcn_00009890 ();
    0x0006cf12 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006cf14 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006cf16 beq 0x6cfd2                                       |         goto label_241;
                                                                 |     }
                                                                 | label_38:
    0x0006cf18 ldr.w ip, [r7, 0x1c]                              |     ip = *((r7 + 0x1c));
    0x0006cf1c movs r1, 1                                        |     r1 = 1;
    0x0006cf1e ldr.w r2, [pc, 0xae0]                             |     
    0x0006cf22 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0006cf24 ubfx lr, ip, 0x10, 1                              |     lr = (ip >> 0x10) & ((1 << 1) - 1);
    0x0006cf28 ubfx ip, ip, 7, 1                                 |     ip = (ip >> 7) & ((1 << 1) - 1);
    0x0006cf2c str.w lr, [sp, 0x10]                              |     __asm ("str.w lr, [var_10h]");
    0x0006cf30 add r2, pc                                        |     r2 = 0xda936;
    0x0006cf32 str.w ip, [sp, 0xc]                               |     __asm ("str.w ip, [var_ch]");
    0x0006cf36 ldrsh.w r7, [r7, 0x22]                            |     r7 = *((r7 + 0x22));
    0x0006cf3a strd r6, sb, [sp]                                 |     __asm ("strd r6, sb, [sp]");
    0x0006cf3e str r7, [sp, 8]                                   |     var_8h = r7;
    0x0006cf40 bl 0x2a09c                                        |     fcn_0002a09c (r0, r1);
                                                                 |     do {
    0x0006cf44 ldr.w sl, [sl]                                    |         sl = *(sl);
    0x0006cf48 cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x0006cf4c beq.w 0x6d794                                     |             goto label_242;
                                                                 |         }
                                                                 | label_130:
    0x0006cf50 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0006cf52 ldr.w r7, [sl, 8]                                 |         r7 = *((sl + 8));
    0x0006cf56 ldr r1, [r7]                                      |         r1 = *(r7);
                                                                 |         if (r3 == 0) {
    0x0006cf58 cbz r3, 0x6cf66                                   |             goto label_243;
                                                                 |         }
    0x0006cf5a ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0006cf5c blx 0x9754                                        |         r0 = fcn_00009754 ();
    0x0006cf60 cmp r0, 0                                         |         
    0x0006cf62 bne 0x6cf44                                       |         
                                                                 |     } while (r0 != 0);
    0x0006cf64 ldr r1, [r7]                                      |     r1 = *(r7);
                                                                 | label_243:
    0x0006cf66 ldrb.w r3, [r7, 0x2b]                             |     r3 = *((r7 + 0x2b));
    0x0006cf6a cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x0006cf6c bne 0x6cee6                                       |         goto label_32;
                                                                 |     }
    0x0006cf6e ldr.w sb, [pc, 0xa94]                             |     sb = *(0x0006da04);
    0x0006cf72 add sb, pc                                        |     sb += pc;
    0x0006cf74 b 0x6cefa                                         |     goto label_33;
                                                                 | label_187:
    0x0006cf76 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006cf78 bne.w 0x6c39a                                     |         goto label_34;
                                                                 |     }
    0x0006cf7c ldr r5, [sp, 0x24]                                |     r5 = sig;
    0x0006cf7e ldrb r1, [r4, 4]                                  |     r1 = *((r4 + 4));
    0x0006cf80 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x0006cf82 mov r0, r5                                        |     r0 = r5;
    0x0006cf84 cmp r1, 0                                         |     
    0x0006cf86 it eq                                             |     
                                                                 |     if (r1 != 0) {
    0x0006cf88 moveq r1, 2                                       |         r1 = 2;
                                                                 |     }
    0x0006cf8a ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x0006cf8c strb.w r1, [r2, 0x4d]                             |     *((r2 + 0x4d)) = r1;
    0x0006cf90 ldr.w r2, [pc, 0xa74]                             |     
    0x0006cf94 strb.w r1, [r5, 0x54]                             |     *((r5 + 0x54)) = r1;
    0x0006cf98 add r2, pc                                        |     r2 = 0xda9a4;
    0x0006cf9a addw r2, r2, 0xeec                                |     __asm ("addw r2, r2, aav.0x000000ff");
    0x0006cf9e bl 0x1ffe8                                        |     fcn_0001ffe8 (r0, r1, r2, r3);
    0x0006cfa2 str r0, [r5, 8]                                   |     *((r5 + 8)) = r0;
    0x0006cfa4 b.w 0x6c3c0                                       |     goto label_35;
                                                                 | label_140:
    0x0006cfa8 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006cfaa bl 0x72b28                                        |     r0 = fcn_00072b28 (r0);
    0x0006cfae cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006cfb0 bne.w 0x6b78c                                     |         goto label_5;
                                                                 |     }
    0x0006cfb4 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006cfb6 ldrb r3, [r3, 5]                                  |     r3 = *((r3 + 5));
    0x0006cfb8 b.w 0x6b830                                       |     goto label_36;
                                                                 | label_169:
    0x0006cfbc ldr.w r0, [r4, 0x108]                             |     r0 = *((r4 + 0x108));
    0x0006cfc0 ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x0006cfc2 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0006cfc6 ldr.w r3, [r4, 0x108]                             |     r3 = *((r4 + 0x108));
    0x0006cfca movs r2, 7                                        |     r2 = 7;
    0x0006cfcc str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x0006cfce b.w 0x6bf6a                                       |     goto label_37;
                                                                 | label_241:
    0x0006cfd2 ldr.w r0, [pc, 0xa38]                             |     
    0x0006cfd6 add.w lr, r6, 6                                   |     lr = r6 + 6;
    0x0006cfda mov ip, lr                                        |     
    0x0006cfdc add r0, pc                                        |     r0 = 0xda9ee;
    0x0006cfde adds r0, 6                                        |     r0 += 6;
                                                                 |     do {
                                                                 | label_39:
    0x0006cfe0 ldrb r2, [ip, 1]!                                 |         r2 = *((ip += 1));
    0x0006cfe4 ldrb r1, [r0, 1]!                                 |         r1 = *((r0 += 1));
    0x0006cfe8 cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0006cfea beq 0x6d022                                       |             goto label_244;
                                                                 |         }
    0x0006cfec add r2, fp                                        |         r2 += fp;
    0x0006cfee add r1, fp                                        |         r1 += fp;
    0x0006cff0 ldrb.w r2, [r2, 0x140]                            |         r2 = *((r2 + 0x140));
    0x0006cff4 ldrb.w r1, [r1, 0x140]                            |         r1 = *((r1 + 0x140));
    0x0006cff8 cmp r2, r1                                        |         
    0x0006cffa beq 0x6cfe0                                       |         
                                                                 |     } while (r2 == r1);
    0x0006cffc ldr.w r0, [pc, 0xa10]                             |     
    0x0006d000 add r0, pc                                        |     r0 = 0xdaa14;
    0x0006d002 adds r0, 6                                        |     r0 += 6;
                                                                 |     do {
                                                                 | label_40:
    0x0006d004 ldrb r2, [lr, 1]!                                 |         r2 = *((lr += 1));
    0x0006d008 ldrb r1, [r0, 1]!                                 |         r1 = *((r0 += 1));
    0x0006d00c cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0006d00e beq 0x6d02e                                       |             goto label_245;
                                                                 |         }
    0x0006d010 add r2, r5                                        |         r2 += r5;
    0x0006d012 add r1, r5                                        |         r1 += r5;
    0x0006d014 ldrb.w ip, [r2, 0x140]                            |         ip = *((r2 + 0x140));
    0x0006d018 ldrb.w r2, [r1, 0x140]                            |         r2 = *((r1 + 0x140));
    0x0006d01c cmp ip, r2                                        |         
    0x0006d01e beq 0x6d004                                       |         
                                                                 |     } while (ip == r2);
    0x0006d020 b 0x6cf18                                         |     goto label_38;
                                                                 | label_244:
    0x0006d022 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0006d024 bne 0x6cfe0                                       |         goto label_39;
                                                                 |     }
    0x0006d026 ldr.w r6, [pc, 0x9ec]                             |     r6 = *(0x0006da14);
    0x0006d02a add r6, pc                                        |     r6 += pc;
    0x0006d02c b 0x6cf18                                         |     goto label_38;
                                                                 | label_245:
    0x0006d02e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0006d030 bne 0x6d004                                       |         goto label_40;
                                                                 |     }
    0x0006d032 ldr.w r6, [pc, 0x9e4]                             |     r6 = *(0x0006da18);
    0x0006d036 add r6, pc                                        |     r6 += pc;
    0x0006d038 b 0x6cf18                                         |     goto label_38;
                                                                 | label_141:
    0x0006d03a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006d03c ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x0006d03e subs r3, 1                                        |     r3--;
    0x0006d040 cmp r3, 0xfe                                      |     
                                                                 |     if (r3 <= 0xfe) {
    0x0006d042 bhi.w 0x6d44c                                     |         
    0x0006d046 adr r2, 8                                         |         r2 = 8;
    0x0006d048 ldr.w r3, [r2, r3, lsl 2]                         |         offset_7 = r3 << 2;
                                                                 |         r3 = *((r2 + offset_7));
    0x0006d04c add r2, r3                                        |         r2 += r3;
    0x0006d04e bx r2                                             |         return uint32_t (*r2)() ();
                                                                 |     }
                                                                 | label_142:
    0x0006d44c movs r3, 0                                        |     r3 = 0;
    0x0006d44e add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006d450 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006d452 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006d454 bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x0006d458 ldr r1, [sp, 0x98]                                |     r1 = var_98h;
    0x0006d45a ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006d45c blx 0x9ac8                                        |     stack_chk_fail ();
    0x0006d460 b.w 0x6baac                                       |     goto label_41;
                                                                 | label_239:
    0x0006d464 ldr.w sb, [pc, 0x5b4]                             |     
    0x0006d468 add sb, pc                                        |     sb = 0xdae88;
    0x0006d46a b 0x6cefa                                         |     goto label_33;
                                                                 | label_240:
    0x0006d46c ldr.w sb, [pc, 0x5b0]                             |     
    0x0006d470 add sb, pc                                        |     sb = 0xdae94;
    0x0006d472 b 0x6cefa                                         |     goto label_33;
                                                                 | label_208:
    0x0006d474 ldrh r6, [r5, 0x26]                               |     r6 = *((r5 + 0x26));
    0x0006d476 adds r6, 0x2e                                     |     r6 += 0x2e;
    0x0006d478 sxth r6, r6                                       |     __asm ("sxth r6, r6");
    0x0006d47a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0006d47c beq.w 0x6c814                                     |         goto label_42;
                                                                 |     }
    0x0006d480 movs r3, 0x70                                     |     r3 = 0x70;
    0x0006d482 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006d484 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x0006d486 mov r0, sb                                        |     r0 = sb;
    0x0006d488 str r3, [sp]                                      |     *(sp) = r3;
    0x0006d48a mov r3, r5                                        |     r3 = r5;
    0x0006d48c bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x0006d490 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x0006d494 movs r1, 0x20                                     |     r1 = 0x20;
    0x0006d496 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0006d498 mov r0, sl                                        |     r0 = sl;
    0x0006d49a str r6, [sp]                                      |     *(sp) = r6;
    0x0006d49c adds r3, 2                                        |     r3 += 2;
    0x0006d49e add r3, r7                                        |     r3 += r7;
    0x0006d4a0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d4a4 b.w 0x6c814                                       |     goto label_42;
                                                                 | label_206:
    0x0006d4a8 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x0006d4aa ldr r7, [sp, 0x28]                                |     r7 = x;
    0x0006d4ac ldr r5, [sp, 0x40]                                |     r5 = var_40h;
                                                                 | label_205:
    0x0006d4ae adds r7, 1                                        |     r7++;
    0x0006d4b0 cmp r6, r7                                        |     
                                                                 |     if (r6 >= r7) {
    0x0006d4b2 bge.w 0x6c7a6                                     |         goto label_43;
                                                                 |     }
                                                                 | label_111:
    0x0006d4b6 movs r1, 0xa6                                     |     r1 = 0xa6;
    0x0006d4b8 mov r0, sl                                        |     r0 = sl;
    0x0006d4ba bl 0x2a29c                                        |     fcn_0002a29c (r0, r1);
    0x0006d4be b.w 0x6b78c                                       |     goto label_5;
                                                                 | label_54:
    0x0006d4c2 ldrd sb, r7, [sp, 0x74]                           |     __asm ("ldrd sb, r7, [var_74h]");
    0x0006d4c6 ldrd r8, fp, [sp, 0x7c]                           |     __asm ("ldrd r8, fp, [var_7ch]");
                                                                 |     do {
                                                                 | label_53:
    0x0006d4ca ldr r3, [sp, 0x24]                                |         r3 = sig;
    0x0006d4cc ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0006d4ce b.w 0x6c9f2                                       |         goto label_44;
                                                                 | label_222:
    0x0006d4d2 ldr r5, [sp, 0x34]                                |         r5 = var_34h;
    0x0006d4d4 cmp.w ip, 0                                       |         
    0x0006d4d8 beq 0x6d4ca                                       |         
                                                                 |     } while (ip == 0);
    0x0006d4da ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0006d4dc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006d4de beq.w 0x6e1ce                                     |         goto label_246;
                                                                 |     }
    0x0006d4e2 add.w r2, ip, 2                                   |     r2 = ip + 2;
    0x0006d4e6 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006d4e8 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x0006d4ea str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006d4ec bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0006d4f0 mov r1, r0                                        |     r1 = r0;
    0x0006d4f2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006d4f4 beq.w 0x6e136                                     |         goto label_220;
                                                                 |     }
    0x0006d4f8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006d4fa str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x0006d4fc movs r3, 1                                        |     r3 = 1;
                                                                 | label_77:
    0x0006d4fe ldr r0, [r5, 0x10]                                |     r0 = *((r5 + 0x10));
    0x0006d500 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006d502 beq.w 0x6d7e0                                     |         goto label_247;
                                                                 |     }
    0x0006d506 str r5, [sp, 0x38]                                |     var_38h = r5;
    0x0006d508 ldrd r5, ip, [sp, 0x44]                           |     __asm ("ldrd r5, ip, [var_44h]");
    0x0006d50c b 0x6d516                                         |     
                                                                 |     while (r2 != 0) {
                                                                 | label_45:
    0x0006d50e ldr r0, [r0]                                      |         r0 = *(r0);
    0x0006d510 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0006d512 beq.w 0x6d7de                                     |             goto label_248;
                                                                 |         }
    0x0006d516 ldr.w lr, [r0, 8]                                 |         
    0x0006d51a cmp r5, lr                                        |         
    0x0006d51c ite eq                                            |         
                                                                 |         if (r5 != lr) {
    0x0006d51e moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r5 == lr) {
    0x0006d520 andne r2, ip, 1                                   |             r2 = ip & 1;
                                                                 |         }
    0x0006d524 cmp r2, 0                                         |         
    0x0006d526 bne 0x6d50e                                       |         
                                                                 |     }
    0x0006d528 ldr.w r2, [lr, 0x1c]                              |     r2 = *((lr + 0x1c));
    0x0006d52c lsls r2, r2, 0x18                                 |     r2 <<= 0x18;
    0x0006d52e ittt pl                                           |     
                                                                 |     if (r2 < r2) {
    0x0006d530 ldrpl r2, [lr, 0x14]                              |         r2 = *((lr + 0x14));
                                                                 |     }
                                                                 |     if (r2 < r2) {
    0x0006d534 addpl r3, 1                                       |         r3++;
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x0006d536 str.w r2, [r1, r3, lsl 2]                         |         __asm ("str.w r2, [r1, r3, lsl 2]");
                                                                 |     }
    0x0006d53a ldr.w r2, [lr, 8]                                 |     r2 = *((lr + 8));
    0x0006d53e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0006d540 beq 0x6d50e                                       |         goto label_45;
                                                                 |     }
    0x0006d542 add.w lr, r1, r3, lsl 2                           |     lr = r1 + (r3 << 2);
    0x0006d546 str r1, [sp, 0x34]                                |     var_34h = r1;
                                                                 |     do {
    0x0006d548 ldr r1, [r2, 0x2c]                                |         r1 = *((r2 + 0x2c));
    0x0006d54a adds r3, 1                                        |         r3++;
    0x0006d54c ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x0006d54e str r1, [lr, 4]!                                  |         *((lr += 4)) = r1;
    0x0006d552 cmp r2, 0                                         |         
    0x0006d554 bne 0x6d548                                       |         
                                                                 |     } while (r2 != 0);
    0x0006d556 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0006d558 b 0x6d50e                                         |     goto label_45;
                                                                 | label_214:
    0x0006d55a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006d55c bne.w 0x6c8f0                                     |         goto label_46;
                                                                 |     }
                                                                 | label_106:
    0x0006d560 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006d562 movs r1, 0                                        |     r1 = 0;
    0x0006d564 mov r0, r4                                        |     r0 = r4;
    0x0006d566 strb.w r1, [r3, 0x5a]                             |     *((r3 + 0x5a)) = r1;
    0x0006d56a bl 0x164dc                                        |     fcn_000164dc (r0, r1);
    0x0006d56e b.w 0x6bb44                                       |     goto label_8;
                                                                 | label_184:
    0x0006d572 ldr.w sl, [sp, 0x40]                              |     sl = var_40h;
    0x0006d576 mov r5, sb                                        |     r5 = sb;
    0x0006d578 ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
                                                                 | label_182:
    0x0006d57c ldr r3, [r5, 0x28]                                |     r3 = *((r5 + 0x28));
    0x0006d57e cmp r3, r8                                        |     
    0x0006d580 ldrd r4, r3, [sl, 0x6c]                           |     __asm ("ldrd r4, r3, [sl, 0x6c]");
    0x0006d584 it lt                                             |     
                                                                 |     if (r3 >= r8) {
    0x0006d586 strlt r8, [r5, 0x28]                              |         *((r5 + 0x28)) = r8;
                                                                 |     }
    0x0006d58a cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x0006d58c bge.w 0x6e11e                                     |         goto label_249;
                                                                 |     }
    0x0006d590 ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0006d594 add.w r2, r4, r4, lsl 2                           |     r2 = r4 + (r4 << 2);
    0x0006d598 add.w sb, r4, 1                                   |     sb = r4 + 1;
    0x0006d59c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0006d5a0 movs r0, 0x23                                     |     r0 = 0x23;
    0x0006d5a2 str.w sb, [sl, 0x6c]                              |     __asm ("str.w sb, [sl, 0x6c]");
    0x0006d5a6 str.w r0, [r3, r2, lsl 2]                         |     __asm ("str.w r0, [r3, r2, lsl 2]");
    0x0006d5aa movs r1, 0                                        |     r1 = 0;
    0x0006d5ac add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x0006d5b0 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x0006d5b2 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x0006d5b6 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_75:
    0x0006d5ba ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006d5bc ldr r6, [r3, 0x30]                                |     r6 = *((r3 + 0x30));
    0x0006d5be cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0006d5c0 beq.w 0x6d71e                                     |         goto label_250;
                                                                 |     }
    0x0006d5c4 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0006d5c6 mov.w r8, 0                                       |     r8 = 0;
    0x0006d5ca strd sb, r4, [sp, 0x68]                           |     __asm ("strd sb, r4, [sp, 0x68]");
    0x0006d5ce adds r2, r3, 3                                    |     r2 = r3 + 3;
    0x0006d5d0 adds r3, 2                                        |     r3 += 2;
    0x0006d5d2 str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0006d5d4 movs r2, 1                                        |     r2 = 1;
    0x0006d5d6 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x0006d5d8 add r3, sp, 0x94                                  |     r3 += var_94h;
    0x0006d5da str r2, [sp, 0x34]                                |     var_34h = r2;
    0x0006d5dc str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 | label_47:
    0x0006d5de ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x0006d5e0 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0006d5e2 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006d5e4 bl 0x38d4c                                        |     fcn_00038d4c (r0, r1, r2, r3);
    0x0006d5e8 strd r8, r8, [sp, 0x94]                           |     __asm ("strd r8, r8, [sp, 0x94]");
    0x0006d5ec mov r1, r0                                        |     r1 = r0;
    0x0006d5ee mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r0 != 0) {
    0x0006d5f0 cbz r0, 0x6d608                                   |         
    0x0006d5f2 add r3, sp, 0x98                                  |         r3 += var_98h;
    0x0006d5f4 str r0, [sp, 0x3c]                                |         var_3ch = r0;
    0x0006d5f6 str r3, [sp]                                      |         *(sp) = r3;
    0x0006d5f8 mov r2, r6                                        |         r2 = r6;
    0x0006d5fa ldr r3, [sp, 0x60]                                |         r3 = var_60h;
    0x0006d5fc mov r0, r5                                        |         r0 = r5;
    0x0006d5fe bl 0x20790                                        |         fcn_00020790 (r0, r1, r2, r3, r4, r5, r6);
    0x0006d602 ldrd r0, r7, [sp, 0x94]                           |         __asm ("ldrd r0, r7, [var_94h]");
    0x0006d606 ldr r1, [sp, 0x3c]                                |         r1 = var_3ch;
                                                                 |     }
    0x0006d608 ldr r3, [r5, 0x38]                                |     r3 = *((r5 + 0x38));
    0x0006d60a ldr r4, [r5, 0x2c]                                |     r4 = *((r5 + 0x2c));
    0x0006d60c mov r2, r3                                        |     r2 = r3;
    0x0006d60e str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0006d610 ldr r3, [r6, 0x14]                                |     r3 = *((r6 + 0x14));
    0x0006d612 add.w sb, r2, -1                                  |     sb = r2 + -1;
    0x0006d616 str.w sb, [r5, 0x38]                              |     __asm ("str.w sb, [r5, 0x38]");
    0x0006d61a add.w r2, fp, r3                                  |     r2 = fp + r3;
    0x0006d61e cmp r2, r4                                        |     
    0x0006d620 it gt                                             |     
                                                                 |     if (r2 <= r4) {
    0x0006d622 strgt r2, [r5, 0x2c]                              |         *((r5 + 0x2c)) = r2;
                                                                 |     }
    0x0006d624 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0006d626 ble 0x6d66e                                       |         goto label_251;
                                                                 |     }
    0x0006d628 movs r4, 0                                        |     r4 = 0;
    0x0006d62a add.w r3, r6, 0x24                                |     r3 = r6 + 0x24;
    0x0006d62e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0006d630 strd r0, r1, [sp, 0x44]                           |     __asm ("strd r0, r1, [sp, 0x44]");
    0x0006d634 str r5, [sp, 0x4c]                                |     var_4ch = r5;
                                                                 |     do {
    0x0006d636 cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0006d638 beq.w 0x6d75e                                     |             goto label_252;
                                                                 |         }
    0x0006d63c ldr.w r3, [r7, r4, lsl 2]                         |         offset_8 = r4 << 2;
                                                                 |         r3 = *((r7 + offset_8));
                                                                 | label_49:
    0x0006d640 add.w r5, fp, r4                                  |         r5 = fp + r4;
    0x0006d644 ldr r1, [sp, 0x28]                                |         r1 = x;
    0x0006d646 movs r2, 0                                        |         r2 = 0;
    0x0006d648 mov r0, sl                                        |         r0 = sl;
    0x0006d64a str r5, [sp]                                      |         *(sp) = r5;
    0x0006d64c adds r4, 1                                        |         r4++;
    0x0006d64e bl 0x5b0d4                                        |         fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x0006d652 mov r3, sb                                        |         r3 = sb;
    0x0006d654 mov r2, r5                                        |         r2 = r5;
    0x0006d656 movs r1, 0x32                                     |         r1 = 0x32;
    0x0006d658 mov r0, sl                                        |         r0 = sl;
    0x0006d65a str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x0006d65e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d662 ldr r3, [r6, 0x14]                                |         r3 = *((r6 + 0x14));
    0x0006d664 cmp r3, r4                                        |         
    0x0006d666 bgt 0x6d636                                       |         
                                                                 |     } while (r3 > r4);
    0x0006d668 ldrd r0, r1, [sp, 0x44]                           |     __asm ("ldrd r0, r1, [var_44h]");
    0x0006d66c ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
                                                                 | label_251:
    0x0006d66e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0006d670 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006d672 beq 0x6d766                                       |         goto label_253;
                                                                 |     }
    0x0006d674 mov r1, r0                                        |     r1 = r0;
    0x0006d676 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006d678 bl 0x319d4                                        |     fcn_000319d4 (r0, r1);
    0x0006d67c ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x0006d67e movs r1, 0x60                                     |     r1 = 0x60;
    0x0006d680 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0006d682 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0006d686 strd r0, r2, [sp, 4]                              |     __asm ("strd r0, r2, [sp, 4]");
    0x0006d68a mov r2, fp                                        |     r2 = fp;
    0x0006d68c mov r0, sl                                        |     r0 = sl;
    0x0006d68e bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006d692 ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x0006d694 mov r3, sb                                        |     r3 = sb;
    0x0006d696 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x0006d698 mov r0, sl                                        |     r0 = sl;
    0x0006d69a strd fp, r2, [sp]                                 |     __asm ("strd fp, r2, [sp]");
    0x0006d69e ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006d6a0 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                 | label_50:
    0x0006d6a4 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006d6a6 mov r0, sl                                        |     r0 = sl;
    0x0006d6a8 ldr r2, [r3, 0x1c]                                |     r2 = *((r3 + 0x1c));
    0x0006d6aa ands r2, r2, 0x80                                 |     r2 &= 0x80;
    0x0006d6ae ittee eq                                          |     
                                                                 |     if (r2 != r2) {
    0x0006d6b0 ldreq r3, [sp, 0x58]                              |         r3 = var_58h;
                                                                 |     }
                                                                 |     if (r2 != r2) {
    0x0006d6b2 moveq r1, 0x87                                    |         r1 = 0x87;
                                                                 |     }
                                                                 |     if (r2 == r2) {
    0x0006d6b4 ldrne r3, [sp, 0x58]                              |         r3 = var_58h;
                                                                 |     }
                                                                 |     if (r2 == r2) {
    0x0006d6b6 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x0006d6b8 itet ne                                           |     
                                                                 |     if (r2 == r2) {
    0x0006d6ba movne r1, 0x4b                                    |         r1 = 0x4b;
                                                                 |     }
                                                                 |     if (r2 != r2) {
    0x0006d6bc streq r2, [sp]                                    |         *(sp) = r2;
                                                                 |     }
                                                                 |     if (r2 == r2) {
    0x0006d6be strne r8, [sp]                                    |         *(sp) = r8;
                                                                 |     }
    0x0006d6c2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d6c6 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006d6c8 mov r0, sl                                        |     r0 = sl;
    0x0006d6ca ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0006d6cc ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x0006d6ce subs r2, 1                                        |     r2--;
    0x0006d6d0 str r2, [sp]                                      |     *(sp) = r2;
    0x0006d6d2 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0006d6d4 bl 0x2a09c                                        |     fcn_0002a09c (r0, r1);
    0x0006d6d8 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0006d6da movs r3, 4                                        |     r3 = 4;
    0x0006d6dc movs r1, 0x54                                     |     r1 = 0x54;
    0x0006d6de mov r0, sl                                        |     r0 = sl;
    0x0006d6e0 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0006d6e4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d6e8 ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x0006d6ec ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0006d6f0 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x0006d6f2 bmi 0x6d788                                       |         goto label_254;
                                                                 |     }
    0x0006d6f4 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006d6f6 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x0006d6f8 ldr.w r1, [sl, 0x6c]                              |     r1 = *((sl + 0x6c));
    0x0006d6fc lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0006d6fe rsbs r3, r3, 0                                    |     r3 -= ;
    0x0006d700 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 |     if (r7 != 0) {
                                                                 | label_51:
    0x0006d702 cbz r7, 0x6d70c                                   |         
    0x0006d704 ldr r0, [sp, 0x24]                                |         r0 = sig;
    0x0006d706 mov r1, r7                                        |         r1 = r7;
    0x0006d708 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x0006d70c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006d70e ldr r6, [r6, 4]                                   |     r6 = *((r6 + 4));
    0x0006d710 adds r3, 1                                        |     r3++;
    0x0006d712 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006d714 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0006d716 bne.w 0x6d5de                                     |         goto label_47;
                                                                 |     }
    0x0006d71a ldrd sb, r4, [sp, 0x68]                           |     __asm ("ldrd sb, r4, [var_68h]");
                                                                 | label_250:
    0x0006d71e movs r2, 0                                        |     r2 = 0;
    0x0006d720 mov r3, sb                                        |     r3 = sb;
    0x0006d722 str r2, [sp]                                      |     *(sp) = r2;
    0x0006d724 movs r1, 0x26                                     |     r1 = 0x26;
    0x0006d726 mov r0, sl                                        |     r0 = sl;
    0x0006d728 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d72c cmp r4, 0                                         |     
    0x0006d72e ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
                                                                 |     if (r4 < 0) {
    0x0006d732 bge 0x6d736                                       |         
    0x0006d734 subs r4, r2, 1                                    |         r4 = r2 - 1;
                                                                 |     }
    0x0006d736 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0006d73a ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0006d73e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006d740 bne.w 0x6e028                                     |         goto label_255;
                                                                 |     }
    0x0006d744 ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0006d748 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0006d74c add.w r3, r3, r4, lsl 2                           |     r3 += (r4 << 2);
                                                                 | label_66:
    0x0006d750 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
                                                                 | label_74:
    0x0006d752 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0006d754 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006d756 bne.w 0x6c1ea                                     |         goto label_48;
                                                                 |     }
    0x0006d75a b.w 0x6b78c                                       |     goto label_5;
                                                                 | label_252:
    0x0006d75e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0006d760 ldr.w r3, [r3, r4, lsl 3]                         |     offset_9 = r4 << 3;
                                                                 |     r3 = *((r3 + offset_9));
    0x0006d764 b 0x6d640                                         |     goto label_49;
                                                                 | label_253:
    0x0006d766 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006d768 beq 0x6d6a4                                       |         goto label_50;
                                                                 |     }
    0x0006d76a ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x0006d76e movs r1, 0x1d                                     |     r1 = 0x1d;
    0x0006d770 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006d772 mov r0, sl                                        |     r0 = sl;
    0x0006d774 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0006d778 adds r3, 2                                        |     r3 += 2;
    0x0006d77a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d77e mov r1, sb                                        |     r1 = sb;
    0x0006d780 mov r0, sl                                        |     r0 = sl;
    0x0006d782 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x0006d786 b 0x6d6a4                                         |     goto label_50;
                                                                 | label_254:
    0x0006d788 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006d78a mov r1, sl                                        |     r1 = sl;
    0x0006d78c rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x0006d78e bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x0006d792 b 0x6d702                                         |     goto label_51;
                                                                 | label_242:
    0x0006d794 ldr.w sb, [sp, 0x34]                              |     sb = var_34h;
    0x0006d798 b.w 0x6bede                                       |     goto label_11;
                                                                 | label_209:
    0x0006d79c mvn r3, 5                                         |     r3 = ~5;
    0x0006d7a0 str r0, [sp, 4]                                   |     var_4h = r0;
    0x0006d7a2 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0006d7a4 mov r2, r7                                        |     r2 = r7;
    0x0006d7a6 mov r3, r7                                        |     r3 = r7;
    0x0006d7a8 movs r1, 0x94                                     |     r1 = 0x94;
    0x0006d7aa mov r0, sl                                        |     r0 = sl;
    0x0006d7ac str r7, [sp]                                      |     *(sp) = r7;
    0x0006d7ae bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006d7b2 b.w 0x6c7ec                                       |     goto label_26;
                                                                 | label_195:
    0x0006d7b6 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x0006d7ba mov r0, sl                                        |     r0 = sl;
    0x0006d7bc ldr r2, [r3, 0x50]                                |     r2 = *((r3 + 0x50));
                                                                 | label_104:
    0x0006d7be asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0006d7c0 bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
                                                                 | label_109:
    0x0006d7c4 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006d7c6 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006d7c8 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006d7cc b.w 0x6b7a0                                       |     goto label_0;
                                                                 | label_210:
    0x0006d7d0 ldr.w r6, [sb, 0x2c]                              |     r6 = *((sb + 0x2c));
    0x0006d7d4 adds r6, 1                                        |     r6++;
    0x0006d7d6 str.w r6, [sb, 0x2c]                              |     __asm ("str.w r6, [sb, 0x2c]");
    0x0006d7da b.w 0x6c844                                       |     goto label_52;
                                                                 | label_248:
    0x0006d7de ldr r5, [sp, 0x38]                                |     r5 = var_38h;
                                                                 | label_247:
    0x0006d7e0 str r3, [r1]                                      |     *(r1) = r3;
    0x0006d7e2 adds r4, 8                                        |     r4 += 8;
    0x0006d7e4 str r1, [sp, 4]                                   |     var_4h = r1;
    0x0006d7e6 mov r0, sl                                        |     r0 = sl;
    0x0006d7e8 ldr r1, [sp, 0x28]                                |     r1 = x;
    0x0006d7ea ldr r2, [r1, 0x2c]                                |     r2 = *((r1 + 0x2c));
    0x0006d7ec cmp r4, r2                                        |     
    0x0006d7ee it lt                                             |     
                                                                 |     if (r4 >= r2) {
    0x0006d7f0 movlt r4, r2                                      |         r4 = r2;
                                                                 |     }
    0x0006d7f2 movs r2, 0                                        |     r2 = 0;
    0x0006d7f4 strb r2, [r1, 0x13]                               |     *((r1 + 0x13)) = r2;
    0x0006d7f6 str r2, [r1, 0x1c]                                |     *((r1 + 0x1c)) = r2;
    0x0006d7f8 mvn r2, 0xd                                       |     r2 = ~0xd;
    0x0006d7fc str r4, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r4;
    0x0006d7fe movs r1, 0x9b                                     |     r1 = 0x9b;
    0x0006d800 str r2, [sp, 8]                                   |     var_8h = r2;
    0x0006d802 movs r2, 1                                        |     r2 = 1;
    0x0006d804 str r2, [sp]                                      |     *(sp) = r2;
    0x0006d806 movs r2, 2                                        |     r2 = 2;
    0x0006d808 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006d80c ldr.w r4, [sl, 0x6c]                              |     r4 = *((sl + 0x6c));
    0x0006d810 cmp r4, 0                                         |     
                                                                 |     if (r4 > 0) {
    0x0006d812 ble 0x6d824                                       |         
    0x0006d814 ldr.w r3, [sl, 0x68]                              |         r3 = *((sl + 0x68));
    0x0006d818 movs r2, 0x14                                     |         r2 = 0x14;
    0x0006d81a mla r3, r2, r4, r3                                |         __asm ("mla r3, r2, r4, r3");
    0x0006d81e uxtb r2, r7                                       |         r2 = (int8_t) r7;
    0x0006d820 strh r2, [r3, -0x12]                              |         *((r3 - 0x12)) = r2;
                                                                 |     }
    0x0006d824 ldr.w r3, [sl, 0x70]                              |     r3 = *((sl + 0x70));
    0x0006d828 cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x0006d82a bge.w 0x6e3b0                                     |         goto label_256;
                                                                 |     }
    0x0006d82e ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0006d832 add.w r2, r4, r4, lsl 2                           |     r2 = r4 + (r4 << 2);
    0x0006d836 adds r0, r4, 1                                    |     r0 = r4 + 1;
    0x0006d838 str.w r0, [sl, 0x6c]                              |     __asm ("str.w r0, [sl, 0x6c]");
    0x0006d83c movs r0, 0x32                                     |     r0 = 0x32;
    0x0006d83e str.w r0, [r3, r2, lsl 2]                         |     __asm ("str.w r0, [r3, r2, lsl 2]");
    0x0006d842 movs r1, 0                                        |     r1 = 0;
    0x0006d844 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x0006d848 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x0006d84a vst1.32 {d10}, [r2]                               |     __asm ("vst1.32 {d10}, [r2]");
    0x0006d84e strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_94:
    0x0006d852 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006d854 ldr r1, [pc, 0x1cc]                               |     
    0x0006d856 ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x0006d858 add r1, pc                                        |     r1 = 0xdb280;
    0x0006d85a ldr r2, [r3, r6]                                  |     r2 = *((r3 + r6));
    0x0006d85c bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x0006d860 movs r2, 0                                        |     r2 = 0;
    0x0006d862 mvn r3, 5                                         |     r3 = ~5;
    0x0006d866 movs r1, 0x75                                     |     r1 = 0x75;
    0x0006d868 str r0, [sp, 4]                                   |     var_4h = r0;
    0x0006d86a str r2, [sp]                                      |     *(sp) = r2;
    0x0006d86c mov r0, sl                                        |     r0 = sl;
    0x0006d86e str r3, [sp, 8]                                   |     var_8h = r3;
    0x0006d870 movs r3, 3                                        |     r3 = 3;
    0x0006d872 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006d876 movs r3, 3                                        |     r3 = 3;
    0x0006d878 movs r2, 2                                        |     r2 = 2;
    0x0006d87a str r3, [sp]                                      |     *(sp) = r3;
    0x0006d87c movs r1, 0x6f                                     |     r1 = 0x6f;
    0x0006d87e mov r0, sl                                        |     r0 = sl;
    0x0006d880 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d884 mov r0, sl                                        |     r0 = sl;
    0x0006d886 bl 0x2aaa4                                        |     fcn_0002aaa4 (r0);
    0x0006d88a ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0006d88e cmp r4, 0                                         |     
    0x0006d890 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x0006d894 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0006d898 it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x0006d89a addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x0006d89e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006d8a0 bne.w 0x6e0aa                                     |         goto label_257;
                                                                 |     }
    0x0006d8a4 ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0006d8a8 movs r1, 0x14                                     |     r1 = 0x14;
    0x0006d8aa mla r3, r1, r4, r3                                |     __asm ("mla r3, r1, r4, r3");
                                                                 | label_70:
    0x0006d8ae str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0006d8b0 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0006d8b2 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006d8b4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006d8b6 beq.w 0x6d4ca                                     |         goto label_53;
                                                                 |     }
    0x0006d8ba ldr r3, [pc, 0x16c]                               |     
    0x0006d8bc strd r8, fp, [sp, 0x7c]                           |     __asm ("strd r8, fp, [var_0hx7c]");
    0x0006d8c0 strd sb, r7, [sp, 0x74]                           |     __asm ("strd sb, r7, [sp, 0x74]");
    0x0006d8c4 add r3, pc                                        |     r3 = 0xdb2f2;
    0x0006d8c6 ldr.w fp, [sp, 0x28]                              |     fp = x;
    0x0006d8ca adds r3, 4                                        |     r3 += 4;
    0x0006d8cc str r3, [sp, 0x58]                                |     var_58h = r3;
    0x0006d8ce b 0x6d8dc                                         |     goto label_258;
                                                                 | label_55:
    0x0006d8d0 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006d8d2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0006d8d4 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006d8d6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006d8d8 beq.w 0x6d4c2                                     |         goto label_54;
                                                                 |     }
                                                                 | label_258:
    0x0006d8dc ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006d8de ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x0006d8e2 ldrb.w r3, [sb, 0x2b]                             |     r3 = *((sb + 0x2b));
    0x0006d8e6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006d8e8 bne 0x6d8d0                                       |         goto label_55;
                                                                 |     }
    0x0006d8ea ldrd r2, r3, [sp, 0x44]                           |     __asm ("ldrd r2, r3, [var_44h]");
    0x0006d8ee cmp r2, sb                                        |     
    0x0006d8f0 ite eq                                            |     
                                                                 |     if (r2 != sb) {
    0x0006d8f2 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 == sb) {
    0x0006d8f4 andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x0006d8f8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006d8fa bne 0x6d8d0                                       |         goto label_55;
                                                                 |     }
    0x0006d8fc ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x0006d900 ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 != r3) {
    0x0006d904 bne.w 0x6e06a                                     |         goto label_259;
                                                                 |     }
                                                                 | label_68:
    0x0006d908 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_67:
    0x0006d90a add r3, sp, 0x94                                  |     r3 += var_94h;
    0x0006d90c movs r7, 0                                        |     r7 = 0;
    0x0006d90e str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0006d910 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x0006d912 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0006d914 movs r3, 1                                        |     r3 = 1;
    0x0006d916 movs r2, 0x70                                     |     r2 = 0x70;
    0x0006d918 mov r1, sb                                        |     r1 = sb;
    0x0006d91a str r3, [sp]                                      |     *(sp) = r3;
    0x0006d91c mov r0, fp                                        |     r0 = fp;
    0x0006d91e mov r3, r7                                        |     r3 = r7;
    0x0006d920 str r7, [sp, 4]                                   |     var_4h = r7;
    0x0006d922 bl 0x2bc74                                        |     fcn_0002bc74 (r0, r1, r2, r3, r4, r5, r6);
    0x0006d926 movs r3, 7                                        |     r3 = 7;
    0x0006d928 mov r2, r7                                        |     r2 = r7;
    0x0006d92a movs r1, 0x47                                     |     r1 = 0x47;
    0x0006d92c mov r0, sl                                        |     r0 = sl;
    0x0006d92e str r7, [sp]                                      |     *(sp) = r7;
    0x0006d930 movs r6, 8                                        |     r6 = 8;
    0x0006d932 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d936 ldr.w r5, [sb, 8]                                 |     r5 = *((sb + 8));
                                                                 |     if (r5 == 0) {
    0x0006d93a cbz r5, 0x6d952                                   |         goto label_260;
                                                                 |     }
                                                                 |     do {
    0x0006d93c mov r3, r6                                        |         r3 = r6;
    0x0006d93e movs r2, 0                                        |         r2 = 0;
    0x0006d940 movs r1, 0x47                                     |         r1 = 0x47;
    0x0006d942 mov r0, sl                                        |         r0 = sl;
    0x0006d944 str r7, [sp]                                      |         *(sp) = r7;
    0x0006d946 adds r6, 1                                        |         r6++;
    0x0006d948 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d94c ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x0006d94e cmp r5, 0                                         |         
    0x0006d950 bne 0x6d93c                                       |         
                                                                 |     } while (r5 != 0);
                                                                 | label_260:
    0x0006d952 ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x0006d954 movs r5, 0                                        |     r5 = 0;
    0x0006d956 movs r1, 0x23                                     |     r1 = 0x23;
    0x0006d958 mov r0, sl                                        |     r0 = sl;
    0x0006d95a str r5, [sp]                                      |     *(sp) = r5;
    0x0006d95c mov r2, r3                                        |     r2 = r3;
    0x0006d95e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0006d960 mov r3, r5                                        |     r3 = r5;
    0x0006d962 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d966 ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x0006d96a mov r2, r3                                        |     r2 = r3;
    0x0006d96c str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0006d96e ldr.w r3, [sl, 0x70]                              |     r3 = *((sl + 0x70));
    0x0006d972 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0006d974 bge.w 0x6e0e6                                     |         goto label_261;
                                                                 |     }
    0x0006d978 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x0006d97a ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0006d97e add.w r2, r1, r1, lsl 2                           |     r2 = r1 + (r1 << 2);
    0x0006d982 adds r1, 1                                        |     r1++;
    0x0006d984 str.w r1, [sl, 0x6c]                              |     __asm ("str.w r1, [sl, 0x6c]");
    0x0006d988 movs r1, 0x56                                     |     r1 = 0x56;
    0x0006d98a str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x0006d98e add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x0006d990 lsls r2, r0, 0xe                                  |     r2 = r0 << 0xe;
    0x0006d992 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x0006d994 vst1.32 {d9}, [r2]                                |     __asm ("vst1.32 {d9}, [r2]");
    0x0006d998 strd r5, r5, [r3, 0xc]                            |     __asm ("strd r5, r5, [r3, 0xc]");
                                                                 | label_72:
    0x0006d99c ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0006d99e cmp r3, 0x71                                      |     
                                                                 |     if (r3 != 0x71) {
    0x0006d9a0 beq 0x6d9ce                                       |         
    0x0006d9a2 ldrsh.w r3, [sb, 0x24]                            |         r3 = *((sb + 0x24));
    0x0006d9a6 movs r2, 3                                        |         r2 = 3;
    0x0006d9a8 str r2, [sp]                                      |         *(sp) = r2;
    0x0006d9aa movs r1, 0x5e                                     |         r1 = 0x5e;
    0x0006d9ac ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x0006d9ae mov r0, sl                                        |         r0 = sl;
    0x0006d9b0 subs r3, 1                                        |         r3--;
    0x0006d9b2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006d9b6 ldr.w r2, [sl, 0x6c]                              |         r2 = *((sl + 0x6c));
    0x0006d9ba cmp r2, 0                                         |         
                                                                 |         if (r2 <= 0) {
    0x0006d9bc ble 0x6d9ce                                       |             goto label_262;
                                                                 |         }
    0x0006d9be ldr.w r3, [sl, 0x68]                              |         r3 = *((sl + 0x68));
    0x0006d9c2 movs r1, 0x14                                     |         r1 = 0x14;
    0x0006d9c4 mla r3, r1, r2, r3                                |         __asm ("mla r3, r1, r2, r3");
    0x0006d9c8 movs r2, 0x80                                     |         r2 = 0x80;
    0x0006d9ca strh r2, [r3, -0x12]                              |         *((r3 - 0x12)) = r2;
                                                                 |     }
                                                                 | label_262:
    0x0006d9ce ldrsh.w r2, [sb, 0x22]                            |     r2 = *((sb + 0x22));
    0x0006d9d2 ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x0006d9d6 cmp r2, 0                                         |     
    0x0006d9d8 and r3, r3, 0x10000                               |     r3 &= 0x10000;
    0x0006d9dc itt gt                                            |     
                                                                 |     if (r2 <= 0) {
    0x0006d9de movgt r6, 0                                       |         r6 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x0006d9e0 movgt r7, r6                                      |         r7 = r6;
                                                                 |     }
    0x0006d9e2 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     if (r2 > 0) {
    0x0006d9e4 bgt.w 0x6db74                                     |         goto label_263;
                                                                 |     }
    0x0006d9e8 b 0x6dc50                                         |     goto label_264;
                                                                 | label_56:
    0x0006da2c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006da2e beq.w 0x6db6c                                     |         goto label_265;
                                                                 |     }
                                                                 | label_57:
    0x0006da32 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x0006da36 add.w r8, r3, -1                                  |     r8 = r3 + -1;
    0x0006da3a str.w r8, [fp, 0x38]                              |     __asm ("str.w r8, [arg_38h]");
                                                                 | label_58:
    0x0006da3e movs r3, 3                                        |     r3 = 3;
    0x0006da40 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0006da42 str r3, [sp]                                      |     *(sp) = r3;
    0x0006da44 mov r1, sb                                        |     r1 = sb;
    0x0006da46 mov r3, r6                                        |     r3 = r6;
    0x0006da48 mov r0, sl                                        |     r0 = sl;
    0x0006da4a bl 0x5b0d4                                        |     fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x0006da4e ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0006da52 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
    0x0006da56 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0006da5a mov r4, r2                                        |     r4 = r2;
    0x0006da5c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006da5e bne.w 0x6db9a                                     |         goto label_266;
                                                                 |     }
    0x0006da62 ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0006da66 subs r1, r2, 1                                    |     r1 = r2 - 1;
    0x0006da68 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x0006da6c add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 | label_59:
    0x0006da70 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0006da72 cmp r2, 0                                         |     
    0x0006da74 sub.w r3, r3, 0x5e                                |     r3 -= 0x5e;
    0x0006da78 clz r3, r3                                        |     r3 &= r3;
    0x0006da7c lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x0006da80 it le                                             |     
                                                                 |     if (r2 > 0) {
    0x0006da82 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0006da84 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006da86 bne.w 0x6dc3c                                     |         goto label_267;
                                                                 |     }
                                                                 | label_60:
    0x0006da8a ldrb r3, [r5, 4]                                  |     r3 = *((r5 + 4));
    0x0006da8c lsls r0, r3, 0x1c                                 |     r0 = r3 << 0x1c;
                                                                 |     if (r0 != r3) {
    0x0006da8e bne.w 0x6db9e                                     |         void (*0x6db9e)() ();
                                                                 |     }
                                                                 |     do {
                                                                 | label_265:
    0x0006db6c adds r6, 1                                        |         r6++;
    0x0006db6e adds r7, 0xc                                      |         r7 += 0xc;
    0x0006db70 cmp r2, r6                                        |         
                                                                 |         if (r2 <= r6) {
    0x0006db72 ble 0x6dc50                                       |             goto label_264;
                                                                 |         }
                                                                 | label_263:
    0x0006db74 ldrsh.w r3, [sb, 0x20]                            |         r3 = *((sb + 0x20));
    0x0006db78 ldr.w r5, [sb, 4]                                 |         r5 = *((sb + 4));
    0x0006db7c cmp r3, r6                                        |         
    0x0006db7e add r5, r7                                        |         r5 += r7;
    0x0006db80 beq 0x6db6c                                       |         
                                                                 |     } while (r3 == r6);
    0x0006db82 ldrb r3, [r5, 4]                                  |     r3 = *((r5 + 4));
    0x0006db84 tst.w r3, 0xf                                     |     
    0x0006db88 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
                                                                 |     if ((r3 & 0xf) == 0) {
    0x0006db8a beq.w 0x6da2c                                     |         goto label_56;
                                                                 |     }
    0x0006db8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006db90 bne.w 0x6da32                                     |         goto label_57;
                                                                 |     }
    0x0006db94 ldr.w r8, [sp, 0x38]                              |     r8 = var_38h;
    0x0006db98 b 0x6da3e                                         |     goto label_58;
                                                                 | label_266:
    0x0006db9a ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0006db9c b 0x6da70                                         |     goto label_59;
                                                                 | label_267:
    0x0006dc3c ldr.w r3, [sl, 0x68]                              |     r3 = *((sl + 0x68));
    0x0006dc40 add.w r1, r2, r2, lsl 2                           |     r1 = r2 + (r2 << 2);
    0x0006dc44 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
    0x0006dc48 movs r1, 0x80                                     |     r1 = 0x80;
    0x0006dc4a strh r1, [r3, -0x12]                              |     *((r3 - 0x12)) = r1;
    0x0006dc4e b 0x6da8a                                         |     goto label_60;
                                                                 | label_264:
    0x0006dc50 ldr.w r1, [sb, 0x10]                              |     r1 = *((sb + 0x10));
                                                                 |     if (r1 != 0) {
    0x0006dc54 cbz r1, 0x6dc64                                   |         
    0x0006dc56 ldr r3, [sp, 0x24]                                |         r3 = sig;
    0x0006dc58 ldr r2, [r3, 0x20]                                |         r2 = *((r3 + 0x20));
    0x0006dc5a and r2, r2, 0x200                                 |         r2 &= 0x200;
    0x0006dc5e cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0006dc60 beq.w 0x6e0bc                                     |             goto label_268;
                                                                 |         }
                                                                 |     }
                                                                 | label_71:
    0x0006dc64 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0006dc66 cmp r3, 0x71                                      |     
                                                                 |     if (r3 != 0x71) {
    0x0006dc68 bne.w 0x6ddb4                                     |         goto label_269;
                                                                 |     }
                                                                 | label_61:
    0x0006dc6c ldr r4, [sp, 0x54]                                |     r4 = var_54h;
    0x0006dc6e movs r3, 0                                        |     r3 = 0;
    0x0006dc70 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0006dc72 movs r1, 0x26                                     |     r1 = 0x26;
    0x0006dc74 str r3, [sp]                                      |     *(sp) = r3;
    0x0006dc76 mov r0, sl                                        |     r0 = sl;
    0x0006dc78 mov r3, r4                                        |     r3 = r4;
    0x0006dc7a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006dc7e subs.w r8, r4, 1                                  |     r8 = r4 - 1;
    0x0006dc82 ldr.w r2, [sl, 0x6c]                              |     r2 = *((sl + 0x6c));
                                                                 |     if (r8 < r4) {
    0x0006dc86 bpl 0x6dc8c                                       |         
    0x0006dc88 add.w r8, r2, -1                                  |         r8 = r2 + -1;
                                                                 |     }
    0x0006dc8c ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0006dc90 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0006dc94 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006dc96 bne.w 0x6ddaa                                     |         void (*0x6ddaa)() ();
                                                                 |     }
                                                                 | label_269:
    0x0006ddb4 ldr.w r7, [sb, 8]                                 |     r7 = *((sb + 8));
    0x0006ddb8 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0006ddba beq.w 0x6dc6c                                     |         goto label_61;
                                                                 |     }
    0x0006ddbe ldr.w r3, [pc, 0x92c]                             |     r3 = *(0x0006e6ec);
    0x0006ddc2 mov.w r5, -1                                      |     r5 = -1;
    0x0006ddc6 add r3, pc                                        |     r3 += pc;
    0x0006ddc8 adds r3, 4                                        |     r3 += 4;
    0x0006ddca str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x0006ddcc ldr.w r3, [pc, 0x920]                             |     
    0x0006ddd0 add r3, pc                                        |     
    0x0006ddd2 adds r3, 4                                        |     r3 += 4;
    0x0006ddd4 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x0006ddd6 ldr.w r3, [pc, 0x91c]                             |     r3 = *(0x0006e6f4);
    0x0006ddda add r3, pc                                        |     
    0x0006dddc str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0006ddde ldr.w r3, [pc, 0x918]                             |     r3 = *(0x0006e6f8);
    0x0006dde2 add r3, pc                                        |     r3 = 0x1b8088;
    0x0006dde4 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0006dde6 movs r3, 0                                        |     r3 = 0;
    0x0006dde8 mov r8, r3                                        |     r8 = r3;
                                                                 | label_62:
    0x0006ddea ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0006ddec ldr.w r4, [fp, 0x38]                              |     r4 = *(arg_38h);
    0x0006ddf0 cmp r2, r7                                        |     
    0x0006ddf2 add.w r4, r4, -1                                  |     r4 += -1;
    0x0006ddf6 str.w r4, [fp, 0x38]                              |     __asm ("str.w r4, [arg_38h]");
                                                                 |     if (r2 == r7) {
    0x0006ddfa beq 0x6dee0                                       |         goto label_270;
                                                                 |     }
    0x0006ddfc movs r6, 0                                        |     r6 = 0;
    0x0006ddfe strd r3, r5, [sp, 8]                              |     __asm ("strd r3, r5, [sp, 8]");
    0x0006de02 add r3, sp, 0x98                                  |     r3 += var_98h;
    0x0006de04 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0006de06 mov r1, r7                                        |     r1 = r7;
    0x0006de08 str r6, [sp]                                      |     *(sp) = r6;
    0x0006de0a str r3, [sp, 4]                                   |     var_4h = r3;
    0x0006de0c mov r0, fp                                        |     r0 = fp;
    0x0006de0e mov r3, r6                                        |     r3 = r6;
    0x0006de10 bl 0x60fc4                                        |     fcn_00060fc4 (r0, r1, r2, r3, r4, r5, r6);
    0x0006de14 movs r3, 1                                        |     r3 = 1;
    0x0006de16 mov r5, r0                                        |     r5 = r0;
    0x0006de18 add.w r2, r8, 8                                   |     r2 = r8 + 8;
    0x0006de1c movs r1, 0x56                                     |     r1 = 0x56;
    0x0006de1e str r6, [sp]                                      |     *(sp) = r6;
    0x0006de20 mov r0, sl                                        |     r0 = sl;
    0x0006de22 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006de26 ldr r2, [sp, 0x94]                                |     r2 = var_94h;
    0x0006de28 movs r6, 3                                        |     r6 = 3;
    0x0006de2a mov r3, r4                                        |     r3 = r4;
    0x0006de2c mov r0, sl                                        |     r0 = sl;
    0x0006de2e add r2, r8                                        |     r2 += r8;
    0x0006de30 mov r1, r2                                        |     r1 = r2;
    0x0006de32 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x0006de34 ldrh r2, [r7, 0x34]                               |     r2 = *((r7 + 0x34));
    0x0006de36 strd r5, r2, [sp]                                 |     __asm ("strd r5, r2, [sp]");
    0x0006de3a mov r2, r1                                        |     r2 = r1;
    0x0006de3c movs r1, 0x1c                                     |     r1 = 0x1c;
    0x0006de3e bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0006de42 mov r1, r6                                        |     r1 = r6;
    0x0006de44 mov r4, r0                                        |     r4 = r0;
    0x0006de46 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0006de48 mov r0, sl                                        |     r0 = sl;
    0x0006de4a bl 0x2a930                                        |     fcn_0002a930 (r0, r1, r2);
    0x0006de4e mov r3, r6                                        |     r3 = r6;
    0x0006de50 movs r1, 0x6f                                     |     r1 = 0x6f;
    0x0006de52 movs r2, 7                                        |     r2 = 7;
    0x0006de54 str r6, [sp]                                      |     *(sp) = r6;
    0x0006de56 mov r0, sl                                        |     r0 = sl;
    0x0006de58 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006de5c ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0006de5e movs r1, 4                                        |     r1 = 4;
    0x0006de60 mov r0, sl                                        |     r0 = sl;
    0x0006de62 bl 0x2a930                                        |     fcn_0002a930 (r0, r1, r2);
    0x0006de66 mov r3, r6                                        |     r3 = r6;
    0x0006de68 movs r2, 4                                        |     r2 = 4;
    0x0006de6a movs r1, 0x6f                                     |     r1 = 0x6f;
    0x0006de6c str r6, [sp]                                      |     *(sp) = r6;
    0x0006de6e mov r0, sl                                        |     r0 = sl;
    0x0006de70 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006de74 ldr r2, [r7]                                      |     r2 = *(r7);
    0x0006de76 movs r1, 4                                        |     r1 = 4;
    0x0006de78 mov r0, sl                                        |     r0 = sl;
    0x0006de7a bl 0x2a930                                        |     fcn_0002a930 (r0, r1, r2);
    0x0006de7e mov r3, r6                                        |     r3 = r6;
    0x0006de80 movs r2, 4                                        |     r2 = 4;
    0x0006de82 movs r1, 0x6f                                     |     r1 = 0x6f;
    0x0006de84 str r6, [sp]                                      |     *(sp) = r6;
    0x0006de86 str r0, [sp, 0x50]                                |     var_50h = r0;
    0x0006de88 mov r0, sl                                        |     r0 = sl;
    0x0006de8a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006de8e mov r0, sl                                        |     r0 = sl;
    0x0006de90 bl 0x2aaa4                                        |     fcn_0002aaa4 (r0);
    0x0006de94 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x0006de98 cmp r4, 0                                         |     
    0x0006de9a ldr.w r3, [sl, 0x6c]                              |     r3 = *((sl + 0x6c));
    0x0006de9e mov r6, r0                                        |     r6 = r0;
    0x0006dea0 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x0006dea4 mov r0, r3                                        |     r0 = r3;
    0x0006dea6 it lt                                             |     
                                                                 |     if (r4 < 0) {
    0x0006dea8 addlt r4, r3, -1                                  |         r4 = r3 + -1;
                                                                 |         goto label_271;
                                                                 |     }
                                                                 |     if (r2 != 0) {
                                                                 | label_271:
    0x0006deac cbnz r2, 0x6df0e                                  |         void (*0x6df0e)() ();
                                                                 |     }
                                                                 | label_270:
    0x0006dee0 ldr r7, [r7, 0x14]                                |     r7 = *((r7 + 0x14));
    0x0006dee2 add.w r8, r8, 1                                   |     r8++;
    0x0006dee6 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x0006dee8 bne.w 0x6ddea                                     |         goto label_62;
                                                                 |     }
                                                                 | label_223:
    0x0006e012 mov r1, r2                                        |     r1 = r2;
    0x0006e014 b.w 0x6ca8a                                       |     goto label_63;
                                                                 | label_180:
    0x0006e018 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006e01a cmp r6, 1                                         |     
    0x0006e01c ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x0006e01e ldr r1, [r3]                                      |     r1 = *(r3);
                                                                 |     if (r6 == 1) {
    0x0006e020 beq.w 0x6c290                                     |         goto label_64;
                                                                 |     }
    0x0006e024 b.w 0x6c276                                       |     goto label_65;
                                                                 | label_255:
    0x0006e028 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0006e02a b.w 0x6d750                                       |     goto label_66;
                                                                 | label_259:
    0x0006e06a ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x0006e06e str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0006e070 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006e072 beq.w 0x6d90a                                     |         goto label_67;
                                                                 |     }
    0x0006e076 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006e078 b 0x6e082                                         |     goto label_272;
                                                                 | label_69:
    0x0006e07a ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0006e07c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006e07e beq.w 0x6d908                                     |         goto label_68;
                                                                 |     }
                                                                 | label_272:
    0x0006e082 ldrb.w r2, [r3, 0x37]                             |     r2 = *((r3 + 0x37));
    0x0006e086 and r2, r2, 3                                     |     r2 &= 3;
    0x0006e08a cmp r2, 2                                         |     
                                                                 |     if (r2 != 2) {
    0x0006e08c bne 0x6e07a                                       |         goto label_69;
                                                                 |     }
    0x0006e08e b 0x6d908                                         |     goto label_68;
                                                                 | label_257:
    0x0006e0aa ldr.w r3, [pc, 0x658]                             |     r3 = *(0x0006e704);
    0x0006e0ae add r3, pc                                        |     r3 += pc;
    0x0006e0b0 adds r3, 4                                        |     r3 += 4;
    0x0006e0b2 b.w 0x6d8ae                                       |     goto label_70;
                                                                 | label_268:
    0x0006e0bc mov r4, r3                                        |     r4 = r3;
    0x0006e0be mov r0, r3                                        |     r0 = r3;
    0x0006e0c0 bl 0x2dffc                                        |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x0006e0c4 ldrb.w r3, [r4, 0x57]                             |     r3 = *((r4 + 0x57));
    0x0006e0c8 mov r7, r0                                        |     r7 = r0;
    0x0006e0ca cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006e0cc beq.w 0x6e59c                                     |         goto label_273;
                                                                 |     }
    0x0006e0d0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006e0d2 beq.w 0x6dc64                                     |         goto label_71;
                                                                 |     }
                                                                 | label_101:
    0x0006e0d6 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e0d8 mov r1, r7                                        |     r1 = r7;
    0x0006e0da bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
    0x0006e0de b 0x6dc64                                         |     goto label_71;
                                                                 | label_261:
    0x0006e0e6 movs r3, 1                                        |     r3 = 1;
    0x0006e0e8 movs r2, 7                                        |     r2 = 7;
    0x0006e0ea movs r1, 0x56                                     |     r1 = 0x56;
    0x0006e0ec mov r0, sl                                        |     r0 = sl;
    0x0006e0ee str r5, [sp]                                      |     *(sp) = r5;
    0x0006e0f0 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0006e0f4 str r0, [sp, 0x54]                                |     var_54h = r0;
    0x0006e0f6 b 0x6d99c                                         |     goto label_72;
                                                                 | label_177:
    0x0006e0f8 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
                                                                 |     do {
    0x0006e0fa ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
    0x0006e0fc ldr r3, [r3]                                      |         r3 = *(r3);
                                                                 |         if (r2 == 0) {
    0x0006e0fe cbz r2, 0x6e118                                   |             goto label_274;
                                                                 |         }
    0x0006e100 ldrb.w r1, [r2, 0x2b]                             |         r1 = *((r2 + 0x2b));
                                                                 |         if (r1 == 0) {
    0x0006e104 cbnz r1, 0x6e10a                                  |             
    0x0006e106 ldr r1, [r2, 0x30]                                |             r1 = *((r2 + 0x30));
                                                                 |             if (r1 != 0) {
    0x0006e108 cbnz r1, 0x6e112                                  |                 goto label_275;
                                                                 |             }
                                                                 |         }
    0x0006e10a cmp r3, 0                                         |         
    0x0006e10c bne 0x6e0fa                                       |         
                                                                 |     } while (r3 != 0);
    0x0006e10e b.w 0x6b78c                                       |     goto label_5;
                                                                 | label_275:
    0x0006e112 str r2, [sp, 0x28]                                |     x = r2;
    0x0006e114 b.w 0x6c21a                                       |     goto label_73;
                                                                 | label_274:
    0x0006e118 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0006e11a b.w 0x6d752                                       |     goto label_74;
                                                                 | label_249:
    0x0006e11e movs r3, 0                                        |     r3 = 0;
    0x0006e120 movs r1, 0x23                                     |     r1 = 0x23;
    0x0006e122 mov r2, r3                                        |     r2 = r3;
    0x0006e124 mov r0, sl                                        |     r0 = sl;
    0x0006e126 str r3, [sp]                                      |     *(sp) = r3;
    0x0006e128 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0006e12c mov r4, r0                                        |     r4 = r0;
    0x0006e12e add.w sb, r0, 1                                   |     sb = r0 + 1;
    0x0006e132 b.w 0x6d5ba                                       |     goto label_75;
                                                                 |     do {
                                                                 | label_220:
    0x0006e136 mov r5, fp                                        |         r5 = fp;
                                                                 | label_219:
    0x0006e138 ldr.w r2, [pc, 0x5cc]                             |         
    0x0006e13c movs r1, 7                                        |         r1 = 7;
    0x0006e13e mov r0, sl                                        |         r0 = sl;
    0x0006e140 add r2, pc                                        |         
    0x0006e142 add.w r2, r2, 0x1e0                               |         r2 = 0xdca2c;
    0x0006e146 bl 0x299cc                                        |         r0 = fcn_000299cc (r0, r1, r2);
                                                                 |         if (r0 != 0) {
    0x0006e14a cbz r0, 0x6e16c                                   |             
    0x0006e14c rsb.w r2, r5, 1                                   |             r2 = 1 - r5;
    0x0006e150 str r2, [r0, 8]                                   |             *((r0 + 8)) = r2;
    0x0006e152 ldr.w r2, [pc, 0x5b8]                             |             r2 = *(0x0006e70c);
    0x0006e156 add r2, pc                                        |             r2 += pc;
    0x0006e158 str r2, [r0, 0x38]                                |             *((r0 + 0x38)) = r2;
    0x0006e15a ldr.w r2, [pc, 0x5b4]                             |             r2 = *(0x0006e710);
    0x0006e15e add r2, pc                                        |             r2 += pc;
    0x0006e160 str r2, [r0, 0x74]                                |             *((r0 + 0x74)) = r2;
    0x0006e162 movs r2, 0xff                                     |             r2 = 0xff;
    0x0006e164 strb.w r2, [r0, 0x29]                             |             *((r0 + 0x29)) = r2;
    0x0006e168 strb.w r2, [r0, 0x65]                             |             *((r0 + 0x65)) = r2;
                                                                 |         }
    0x0006e16c ldr.w r3, [sl, 0x6c]                              |         r3 = *((sl + 0x6c));
    0x0006e170 subs r2, r3, 2                                    |         r2 = r3 - 2;
    0x0006e172 ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x0006e176 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
    0x0006e17a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0006e17c bne 0x6e276                                       |             goto label_276;
                                                                 |         }
    0x0006e17e ldr.w r3, [sl, 0x68]                              |         r3 = *((sl + 0x68));
                                                                 | label_84:
    0x0006e182 str r2, [r3, 0xc]                                 |         *((r3 + 0xc)) = r2;
    0x0006e184 b.w 0x6b78c                                       |         goto label_5;
                                                                 | label_162:
    0x0006e1a0 mov r0, r1                                        |         r0 = r1;
    0x0006e1a2 strd r3, r2, [sp, 0x50]                           |         __asm ("strd r3, r2, [var_50h]");
    0x0006e1a6 str r1, [sp, 0x4c]                                |         var_4ch = r1;
    0x0006e1a8 blx 0x9e8c                                        |         fcn_00009e8c ();
    0x0006e1ac ldr r1, [sp, 0x4c]                                |         r1 = var_4ch;
    0x0006e1ae adds r0, 1                                        |         r0++;
    0x0006e1b0 ldrd r3, r2, [sp, 0x50]                           |         __asm ("ldrd r3, r2, [var_50h]");
    0x0006e1b4 add r0, r1                                        |         r0 += r1;
    0x0006e1b6 b.w 0x6bdec                                       |         goto label_76;
                                                                 | label_228:
    0x0006e1ba movs r3, 0                                        |         r3 = 0;
    0x0006e1bc mov r0, sl                                        |         r0 = sl;
    0x0006e1be str r3, [sp]                                      |         *(sp) = r3;
    0x0006e1c0 movs r3, 1                                        |         r3 = 1;
    0x0006e1c2 mov r2, r3                                        |         r2 = r3;
    0x0006e1c4 movs r1, 0x54                                     |         r1 = 0x54;
    0x0006e1c6 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0006e1ca b.w 0x6b78c                                       |         goto label_5;
                                                                 | label_246:
    0x0006e1ce add.w r2, ip, 1                                   |         r2 = ip + 1;
    0x0006e1d2 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x0006e1d4 ldr r0, [sp, 0x24]                                |         r0 = sig;
    0x0006e1d6 lsls r2, r2, 2                                    |         r2 <<= 2;
    0x0006e1d8 bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
    0x0006e1dc mov r1, r0                                        |         r1 = r0;
    0x0006e1de cmp r0, 0                                         |         
    0x0006e1e0 beq 0x6e136                                       |         
                                                                 |     } while (r0 == 0);
    0x0006e1e2 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0006e1e4 b.w 0x6d4fe                                       |     goto label_77;
                                                                 | label_138:
    0x0006e1e8 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_160:
    0x0006e1ec movs r5, 0                                        |     r5 = 0;
    0x0006e1ee b.w 0x6bdb4                                       |     goto label_78;
                                                                 | label_199:
    0x0006e1f2 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0006e1f6 movs r3, 0                                        |     r3 = 0;
    0x0006e1f8 vstr d16, [sp, 0x98]                              |     __asm ("vstr d16, [sp, 0x98]");
    0x0006e1fc b.w 0x6c6cc                                       |     goto label_79;
                                                                 | label_237:
    0x0006e212 mvn r3, 0x80000000                                |     r3 = ~0x80000000;
    0x0006e216 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006e218 b.w 0x6cdbe                                       |     goto label_80;
                                                                 | label_226:
    0x0006e21c cmp r7, 2                                         |     
                                                                 |     if (r7 != 2) {
    0x0006e21e bne.w 0x6cb72                                     |         goto label_81;
                                                                 |     }
    0x0006e222 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006e224 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0006e226 lsls r5, r3, 3                                    |     r5 = r3 << 3;
                                                                 |     if (r5 < r3) {
    0x0006e228 bmi.w 0x6cb66                                     |         goto label_82;
                                                                 |     }
    0x0006e22c b.w 0x6cb72                                       |     goto label_81;
                                                                 | label_224:
    0x0006e234 ldr.w r1, [pc, 0x4dc]                             |     r1 = *(0x0006e714);
    0x0006e238 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e23a add r1, pc                                        |     r1 += pc;
    0x0006e23c blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x0006e240 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006e242 bne.w 0x6e894                                     |         goto label_277;
                                                                 |     }
    0x0006e246 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0006e248 movs r4, 2                                        |     r4 = 2;
    0x0006e24a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006e24c bne.w 0x6caa2                                     |         goto label_83;
                                                                 |     }
                                                                 | label_118:
    0x0006e250 ldr r7, [sp, 0x24]                                |     r7 = sig;
    0x0006e252 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x0006e254 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0006e256 ble.w 0x6caa2                                     |         goto label_83;
                                                                 |     }
    0x0006e25a ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
                                                                 |     do {
    0x0006e25c ldr r3, [r7, 0x10]                                |         r3 = *((r7 + 0x10));
    0x0006e25e mov r1, r4                                        |         r1 = r4;
    0x0006e260 add.w r3, r3, r6, lsl 4                           |         r3 += (r6 << 4);
    0x0006e264 adds r6, 1                                        |         r6++;
    0x0006e266 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x0006e268 bl 0x167d8                                        |         fcn_000167d8 (r0, r1);
    0x0006e26c ldr r3, [r7, 0x14]                                |         r3 = *((r7 + 0x14));
    0x0006e26e cmp r3, r6                                        |         
    0x0006e270 bgt 0x6e25c                                       |         
                                                                 |     } while (r3 > r6);
    0x0006e272 b.w 0x6caa2                                       |     goto label_83;
                                                                 | label_276:
    0x0006e276 ldr.w r3, [pc, 0x4a0]                             |     r3 = *(0x0006e718);
    0x0006e27a add r3, pc                                        |     r3 += pc;
    0x0006e27c adds r3, 4                                        |     r3 += 4;
    0x0006e27e b 0x6e182                                         |     goto label_84;
                                                                 | label_218:
    0x0006e280 str r4, [sp, 0x8c]                                |     var_8ch = r4;
                                                                 | label_216:
    0x0006e282 mov r5, r4                                        |     r5 = r4;
    0x0006e284 b.w 0x6c9b6                                       |     goto label_85;
                                                                 | label_159:
    0x0006e288 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x0006e28a movs r4, 1                                        |     r4 = 1;
    0x0006e28c subs r2, 2                                        |     r2 -= 2;
    0x0006e28e b 0x6e296                                         |     
                                                                 |     while (r1 != r8) {
    0x0006e290 adds r4, 1                                        |         r4++;
    0x0006e292 cmp r4, r5                                        |         
                                                                 |         if (r4 > r5) {
    0x0006e294 bgt 0x6e29e                                       |             goto label_278;
                                                                 |         }
    0x0006e296 ldrsh r1, [r2, 2]!                                |         r1 = *((r2 += 2));
    0x0006e29a cmp r1, r8                                        |         
    0x0006e29c bne 0x6e290                                       |         
                                                                 |     }
                                                                 | label_278:
    0x0006e29e str r7, [sp, 0x34]                                |     var_34h = r7;
    0x0006e2a0 b.w 0x6bd8a                                       |     goto label_86;
                                                                 | label_193:
    0x0006e2a4 movs r3, 1                                        |     r3 = 1;
    0x0006e2a6 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e2a8 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006e2aa str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006e2ac bl 0xd180                                         |     r0 = fcn_0000d180 (r0, r1);
    0x0006e2b0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006e2b2 bne.w 0x6e7cc                                     |         goto label_279;
                                                                 |     }
                                                                 | label_113:
    0x0006e2b6 ldr r2, [sp, 0x98]                                |     r2 = var_98h;
    0x0006e2b8 movs r1, 1                                        |     r1 = 1;
    0x0006e2ba ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e2bc subs r2, 0                                        |     
    0x0006e2be it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0006e2c0 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0006e2c2 bl 0xf160                                         |     fcn_0000f160 (r0, r1, r2, r3, r4, r5);
    0x0006e2c6 ldr r2, [sp, 0x24]                                |     r2 = sig;
    0x0006e2c8 ldrd r3, r2, [r2, 0x20]                           |     __asm ("ldrd r3, r2, [r2, 0x20]");
    0x0006e2cc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006e2ce beq.w 0x6e7c6                                     |         goto label_280;
                                                                 |     }
    0x0006e2d2 orr r3, r3, 0x20                                  |     r3 |= 0x20;
                                                                 | label_112:
    0x0006e2d6 ldr r1, [sp, 0x24]                                |     r1 = sig;
    0x0006e2d8 str r3, [r1, 0x20]                                |     *((r1 + 0x20)) = r3;
    0x0006e2da ldrb.w r3, [r1, 0x55]                             |     r3 = *((r1 + 0x55));
    0x0006e2de str r2, [r1, 0x24]                                |     *((r1 + 0x24)) = r2;
    0x0006e2e0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006e2e2 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e2e6 mov r0, r1                                        |     r0 = r1;
    0x0006e2e8 bl 0x17744                                        |     fcn_00017744 (r0, r1);
    0x0006e2ec b.w 0x6bb44                                       |     goto label_8;
                                                                 | label_221:
    0x0006e2f0 bl 0x4a260                                        |     fcn_0004a260 (r0);
    0x0006e2f4 b.w 0x6ca28                                       |     goto label_87;
                                                                 | label_179:
    0x0006e2f8 movs r6, 0                                        |     r6 = 0;
    0x0006e2fa str r6, [sp, 0x3c]                                |     var_3ch = r6;
    0x0006e2fc b.w 0x6c248                                       |     goto label_88;
                                                                 | label_203:
    0x0006e300 movs r3, 0                                        |     r3 = 0;
    0x0006e302 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006e304 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e306 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006e308 bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x0006e30c ldr r2, [sp, 0x98]                                |     r2 = var_98h;
    0x0006e30e lsls r1, r2, 0x1e                                 |     r1 = r2 << 0x1e;
                                                                 |     if (r1 >= r2) {
    0x0006e310 bpl.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e314 mov r5, r2                                        |     r5 = r2;
    0x0006e316 b.w 0x6c780                                       |     goto label_89;
                                                                 | label_231:
    0x0006e31a ldr.w r1, [pc, 0x400]                             |     
    0x0006e31e ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x0006e320 add r1, pc                                        |     r1 = 0xdca42;
    0x0006e322 mov r0, r5                                        |     r0 = r5;
    0x0006e324 bl 0xa580                                         |     r0 = fcn_0000a580 (r0);
    0x0006e328 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006e32a beq.w 0x6e66e                                     |         goto label_281;
                                                                 |     }
    0x0006e32e ldr r1, [pc, 0x3f0]                               |     
    0x0006e330 mov r0, r5                                        |     r0 = r5;
    0x0006e332 add r1, pc                                        |     r1 = 0xdca58;
    0x0006e334 bl 0xa580                                         |     fcn_0000a580 (r0);
    0x0006e338 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0006e33a mov r2, r0                                        |     r2 = r0;
    0x0006e33c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006e33e bne.w 0x6cc08                                     |         goto label_90;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0006e342 cbnz r3, 0x6e37e                                  |         goto label_282;
                                                                 |     }
                                                                 | label_108:
    0x0006e344 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006e346 uxtb r1, r2                                       |     r1 = (int8_t) r2;
    0x0006e348 ldr r0, [r3, 0x14]                                |     r0 = *((r3 + 0x14));
    0x0006e34a cmp r0, 2                                         |     
                                                                 |     if (r0 <= 2) {
    0x0006e34c ble 0x6e378                                       |         goto label_283;
                                                                 |     }
    0x0006e34e ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0006e350 sub.w r4, r3, 0x20                                |     r4 = r3 - 0x20;
    0x0006e354 add.w r4, r4, r0, lsl 4                           |     r4 += (r0 << 4);
                                                                 |     do {
    0x0006e358 ldr r0, [r3, 0x24]                                |         r0 = *((r3 + 0x24));
    0x0006e35a ldr r0, [r0, 4]                                   |         r0 = *((r0 + 4));
    0x0006e35c ldr r0, [r0]                                      |         r0 = *(r0);
    0x0006e35e ldrb r5, [r0, 0xc]                                |         r5 = *((r0 + 0xc));
                                                                 |         if (r5 == 0) {
    0x0006e360 cbnz r5, 0x6e372                                  |             
    0x0006e362 ldr.w r5, [r0, 0xf8]                              |             r5 = *((r0 + 0xf8));
                                                                 |             if (r5 != 0) {
    0x0006e366 cbz r5, 0x6e370                                   |                 
    0x0006e368 ldrb.w r5, [r5, 0x2b]                             |                 r5 = *((r5 + 0x2b));
    0x0006e36c cmp r5, 2                                         |                 
                                                                 |                 if (r5 == 2) {
    0x0006e36e beq 0x6e372                                       |                     goto label_284;
                                                                 |                 }
                                                                 |             }
    0x0006e370 strb r1, [r0, 4]                                  |             *((r0 + 4)) = r1;
                                                                 |         }
                                                                 | label_284:
    0x0006e372 adds r3, 0x10                                     |         r3 += 0x10;
    0x0006e374 cmp r4, r3                                        |         
    0x0006e376 bne 0x6e358                                       |         
                                                                 |     } while (r4 != r3);
                                                                 | label_283:
    0x0006e378 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006e37a strb.w r1, [r3, 0x59]                             |     *((r3 + 0x59)) = r1;
                                                                 | label_282:
    0x0006e37e ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0006e382 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0006e384 ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 | label_105:
    0x0006e386 ldrb r1, [r3, 0xc]                                |     r1 = *((r3 + 0xc));
                                                                 |     if (r1 == 0) {
    0x0006e388 cbnz r1, 0x6e39a                                  |         
    0x0006e38a ldr.w r1, [r3, 0xf8]                              |         r1 = *((r3 + 0xf8));
                                                                 |         if (r1 != 0) {
    0x0006e38e cbz r1, 0x6e398                                   |             
    0x0006e390 ldrb.w r1, [r1, 0x2b]                             |             r1 = *((r1 + 0x2b));
    0x0006e394 cmp r1, 2                                         |             
                                                                 |             if (r1 == 2) {
    0x0006e396 beq 0x6e39a                                       |                 goto label_99;
                                                                 |             }
                                                                 |         }
    0x0006e398 strb r2, [r3, 4]                                  |         *((r3 + 4)) = r2;
                                                                 |     }
                                                                 | label_99:
    0x0006e39a ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x0006e39c b.w 0x6cc14                                       |     goto label_91;
                                                                 | label_158:
    0x0006e3a0 movs r3, 2                                        |     r3 = 2;
    0x0006e3a2 b.w 0x6bd7a                                       |     goto label_92;
                                                                 | label_157:
    0x0006e3a6 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x0006e3a8 adds r3, 1                                        |     r3++;
    0x0006e3aa str r3, [sp, 0x28]                                |     x = r3;
    0x0006e3ac b.w 0x6bd44                                       |     goto label_93;
                                                                 | label_256:
    0x0006e3b0 movs r3, 0                                        |     r3 = 0;
    0x0006e3b2 movs r2, 2                                        |     r2 = 2;
    0x0006e3b4 movs r1, 0x32                                     |     r1 = 0x32;
    0x0006e3b6 mov r0, sl                                        |     r0 = sl;
    0x0006e3b8 str r3, [sp]                                      |     *(sp) = r3;
    0x0006e3ba bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0006e3be mov r4, r0                                        |     r4 = r0;
    0x0006e3c0 b.w 0x6d852                                       |     goto label_94;
                                                                 | label_202:
    0x0006e3c8 movs r5, 0                                        |     r5 = 0;
    0x0006e3ca add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006e3cc ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e3ce str r5, [sp, 0x98]                                |     var_98h = r5;
    0x0006e3d0 bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x0006e3d4 ldr r1, [sp, 0x98]                                |     r1 = var_98h;
    0x0006e3d6 mov r0, r4                                        |     r0 = r4;
    0x0006e3d8 ldr r4, [sp, 0x24]                                |     r4 = sig;
    0x0006e3da mov r3, r5                                        |     r3 = r5;
    0x0006e3dc mov r2, r5                                        |     r2 = r5;
    0x0006e3de str r1, [r4, 0x64]                                |     *((r4 + 0x64)) = r1;
    0x0006e3e0 bl 0x19d84                                        |     r0 = fcn_00019d84 (r0, r1, r2, r3);
    0x0006e3e4 cmp r0, 7                                         |     
                                                                 |     if (r0 == 7) {
    0x0006e3e6 beq.w 0x6e7d8                                     |         goto label_285;
                                                                 |     }
                                                                 | label_115:
    0x0006e3ea ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e3ec mov r0, r4                                        |     r0 = r4;
    0x0006e3ee bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e3f2 b.w 0x6b798                                       |     goto label_6;
                                                                 | label_211:
    0x0006e3f6 add r7, sp, 0x98                                  |     r7 += var_98h;
    0x0006e3f8 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e3fa mov r1, r7                                        |     r1 = r7;
    0x0006e3fc bl 0xf79c                                         |     fcn_0000f79c (r0, r1);
    0x0006e400 ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x0006e402 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0006e404 bge 0x6e412                                       |         
    0x0006e406 ldr r3, [pc, 0x31c]                               |         
    0x0006e408 add r3, pc                                        |         r3 = 0xdcb32;
    0x0006e40a ldrd r2, r3, [r3, 0xa8]                           |         __asm ("ldrd r2, r3, [r3, 0xa8]");
    0x0006e40e strd r2, r3, [sp, 0x98]                           |         __asm ("strd r2, r3, [sp, 0x98]");
                                                                 |     }
    0x0006e412 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 |     if (r3 == 0) {
    0x0006e414 cbnz r3, 0x6e420                                  |         
    0x0006e416 ldrd r2, r3, [sp, 0x98]                           |         __asm ("ldrd r2, r3, [var_98h]");
    0x0006e41a ldr r1, [sp, 0x24]                                |         r1 = sig;
    0x0006e41c strd r2, r3, [r1, 0x30]                           |         __asm ("strd r2, r3, [r1, 0x30]");
                                                                 |     }
    0x0006e420 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006e422 ldr r6, [r3, 0x14]                                |     r6 = *((r3 + 0x14));
    0x0006e424 subs r6, 1                                        |     r6--;
                                                                 |     if (r6 < 1) {
    0x0006e426 bmi.w 0x6c8a6                                     |         goto label_95;
                                                                 |     }
    0x0006e42a mov r8, r3                                        |     r8 = r3;
    0x0006e42c b 0x6e434                                         |     goto label_286;
                                                                 | label_96:
    0x0006e42e subs r6, 1                                        |     r6--;
                                                                 |     if (r6 <= 1) {
    0x0006e430 blo.w 0x6c8a6                                     |         goto label_95;
                                                                 |     }
                                                                 | label_286:
    0x0006e434 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0006e438 add.w r3, r3, r6, lsl 4                           |     r3 += (r6 << 4);
    0x0006e43c ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x0006e43e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0006e440 beq 0x6e42e                                       |         goto label_96;
                                                                 |     }
    0x0006e442 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006e444 cmp r3, r6                                        |     
                                                                 |     if (r3 == r6) {
    0x0006e446 beq 0x6e44e                                       |         goto label_287;
                                                                 |     }
    0x0006e448 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0006e44a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006e44c bne 0x6e42e                                       |         goto label_96;
                                                                 |     }
                                                                 | label_287:
    0x0006e44e ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x0006e450 ldr.w sb, [r5, 4]                                 |     sb = *((r5 + 4));
    0x0006e454 vldr d8, [sp, 0x98]                               |     __asm ("vldr d8, [sp, 0x98]");
                                                                 |     if (r3 != 0) {
    0x0006e458 cbz r3, 0x6e46a                                   |         
    0x0006e45a ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x0006e45c adds r3, 1                                        |         r3++;
    0x0006e45e str r3, [r5, 0xc]                                 |         *((r5 + 0xc)) = r3;
    0x0006e460 ldrb r3, [r5, 0xa]                                |         r3 = *((r5 + 0xa));
                                                                 |         if (r3 != 0) {
    0x0006e462 cbnz r3, 0x6e46a                                  |             goto label_288;
                                                                 |         }
    0x0006e464 mov r0, r5                                        |         r0 = r5;
    0x0006e466 bl 0x11258                                        |         fcn_00011258 (r0);
                                                                 |     }
                                                                 | label_288:
    0x0006e46a ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x0006e46e ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x0006e470 vstr d8, [r0, 0x88]                               |     __asm ("vstr d8, [r0, 0x88]");
    0x0006e474 ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 |     if (r3 != 0) {
    0x0006e476 cbz r3, 0x6e482                                   |         
    0x0006e478 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0006e47a cmp r3, 2                                         |         
                                                                 |         if (r3 <= 2) {
    0x0006e47c ble 0x6e482                                       |             goto label_289;
                                                                 |         }
    0x0006e47e bl 0x127e4                                        |         fcn_000127e4 (r0);
                                                                 |     }
                                                                 | label_289:
    0x0006e482 ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x0006e484 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006e486 beq 0x6e42e                                       |         goto label_96;
                                                                 |     }
    0x0006e488 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0006e48a subs r3, 1                                        |     r3--;
    0x0006e48c str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x0006e48e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006e490 bne 0x6e42e                                       |         goto label_96;
                                                                 |     }
    0x0006e492 mov r0, r5                                        |     r0 = r5;
    0x0006e494 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0006e498 b 0x6e42e                                         |     goto label_96;
                                                                 | label_114:
    0x0006e49a ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e49c bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e4a0 b.w 0x6b798                                       |     goto label_6;
                                                                 | label_188:
    0x0006e4a4 ldr r2, [sp, 0x28]                                |     r2 = x;
    0x0006e4a6 movs r1, 9                                        |     r1 = 9;
    0x0006e4a8 ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x0006e4aa adds r3, 2                                        |     r3 += 2;
    0x0006e4ac str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0006e4ae ldr r2, [pc, 0x278]                               |     
    0x0006e4b0 add r2, pc                                        |     
    0x0006e4b2 add.w r2, r2, 0x1a8                               |     r2 = 0xdcd86;
    0x0006e4b6 bl 0x299cc                                        |     fcn_000299cc (r0, r1, r2);
    0x0006e4ba ldr r4, [sp, 0x34]                                |     r4 = var_34h;
    0x0006e4bc movw r2, 0xf830                                   |     
    0x0006e4c0 mov r3, r0                                        |     r3 = r0;
    0x0006e4c2 movt r2, 0xffff                                   |     r2 = 0xfffff830;
    0x0006e4c6 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e4c8 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e4ca str r4, [r3, 4]                                   |     *((r3 + 4)) = r4;
    0x0006e4cc str r4, [r3, 0x18]                                |     *((r3 + 0x18)) = r4;
    0x0006e4ce str r2, [r3, 0x7c]                                |     *((r3 + 0x7c)) = r2;
    0x0006e4d0 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e4d4 b.w 0x6b7a0                                       |     goto label_0;
                                                                 | label_212:
    0x0006e4d8 ldrd r2, r3, [sp, 0x98]                           |     __asm ("ldrd r2, r3, [var_98h]");
    0x0006e4dc mov r0, sl                                        |     r0 = sl;
    0x0006e4de bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006e4e2 b.w 0x6b78c                                       |     goto label_5;
                                                                 | label_143:
    0x0006e4e6 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006e4e8 ldr r0, [pc, 0x240]                               |     
    0x0006e4ea ldr r4, [sp, 0x3c]                                |     r4 = var_3ch;
    0x0006e4ec subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x0006e4ee movs r3, 0                                        |     r3 = 0;
    0x0006e4f0 add r0, pc                                        |     r0 = 0xdcc20;
    0x0006e4f2 b 0x6e522                                         |     
                                                                 |     while (r6 < r2) {
    0x0006e4f4 ubfx r2, r5, 6, 1                                 |         r2 = (r5 >> 6) & ((1 << 1) - 1);
    0x0006e4f8 lsls r7, r4, 0x1f                                 |         r7 = r4 << 0x1f;
    0x0006e4fa add.w r2, r2, r2, lsl 3                           |         r2 += (r2 << 3);
    0x0006e4fe add r2, r5                                        |         r2 += r5;
    0x0006e500 and r2, r2, 0xf                                   |         r2 &= 0xf;
    0x0006e504 add.w r3, r2, r3, lsl 4                           |         r3 = r2 + (r3 << 4);
    0x0006e508 itt mi                                            |         
                                                                 |         if (r7 >= r4) {
    0x0006e50a addmi r2, sp, 0xe8                                |             r2 += var_e8h;
                                                                 |         }
                                                                 |         if (r7 >= r4) {
    0x0006e50c addmi r2, r2, r4, asr 1                           |             r2 += (r4 >> 1);
                                                                 |         }
    0x0006e510 add.w r4, r4, 1                                   |         r4++;
    0x0006e514 and r3, r3, 0xff                                  |         r3 &= 0xff;
    0x0006e518 it mi                                             |         
                                                                 |         if (r7 >= r4) {
    0x0006e51a strbmi r3, [r2, -0x2c]                            |             *((r2 - 0x2c)) = r3;
                                                                 |         }
    0x0006e51e cmp r4, 0x50                                      |         
                                                                 |         if (r4 == 0x50) {
    0x0006e520 beq 0x6e530                                       |             goto label_290;
                                                                 |         }
    0x0006e522 ldrb r5, [r1, 1]!                                 |         r5 = *((r1 += 1));
    0x0006e526 adds r2, r0, r5                                   |         r2 = r0 + r5;
    0x0006e528 ldrb.w r2, [r2, 0x40]                             |         r2 = *((r2 + 0x40));
    0x0006e52c lsls r6, r2, 0x1c                                 |         r6 = r2 << 0x1c;
    0x0006e52e bmi 0x6e4f4                                       |         
                                                                 |     }
                                                                 | label_290:
    0x0006e530 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0006e532 asrs r4, r4, 1                                    |     r4 >>= 1;
    0x0006e534 add r2, sp, 0xbc                                  |     r2 += var_bch;
    0x0006e536 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x0006e538 b.w 0x6baf6                                       |     goto label_97;
                                                                 | label_233:
    0x0006e53c ldr r1, [pc, 0x1f0]                               |     
    0x0006e53e add r1, pc                                        |     r1 = 0xdcc72;
    0x0006e540 b.w 0x6cc1e                                       |     goto label_98;
                                                                 | label_232:
    0x0006e544 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0006e548 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0006e54a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0006e54c b 0x6e39a                                         |     goto label_99;
                                                                 | label_181:
    0x0006e54e bl 0x4a260                                        |     fcn_0004a260 (r0);
    0x0006e552 b.w 0x6c290                                       |     goto label_64;
                                                                 | label_227:
    0x0006e556 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0006e558 movs r3, 1                                        |     r3 = 1;
    0x0006e55a mov.w r7, -1                                      |     r7 = -1;
    0x0006e55e str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x0006e560 b.w 0x6cb72                                       |     goto label_81;
                                                                 | label_197:
    0x0006e564 bic.w r3, r3, r4                                  |     r3 = BIT_MASK (r3, r4);
    0x0006e568 str r3, [r2, 0x20]                                |     *((r2 + 0x20)) = r3;
    0x0006e56a ldr r3, [r2, 0x24]                                |     r3 = *((r2 + 0x24));
    0x0006e56c bic.w r3, r3, r5                                  |     r3 = BIT_MASK (r3, r5);
    0x0006e570 str r3, [r2, 0x24]                                |     *((r2 + 0x24)) = r3;
    0x0006e572 sub.w r3, r4, 0x80000                             |     r3 = r4 - 0x80000;
    0x0006e576 orrs r3, r5                                       |     r3 |= r5;
                                                                 |     if (r3 == r5) {
    0x0006e578 beq.w 0x6e888                                     |         goto label_291;
                                                                 |     }
    0x0006e57c lsls r1, r4, 0x1f                                 |     r1 = r4 << 0x1f;
                                                                 |     if (r1 >= r4) {
    0x0006e57e bpl.w 0x6c648                                     |         goto label_100;
                                                                 |     }
    0x0006e582 ldr r1, [pc, 0x1b0]                               |     
    0x0006e584 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e586 add r1, pc                                        |     r1 = 0xdccc0;
    0x0006e588 blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x0006e58c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006e58e bne.w 0x6c648                                     |         goto label_100;
                                                                 |     }
    0x0006e592 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e594 bl 0x1741c                                        |     fcn_0001741c (r0);
    0x0006e598 b.w 0x6c648                                       |     goto label_100;
                                                                 | label_273:
    0x0006e59c ldr r5, [r0]                                      |     r5 = *(r0);
    0x0006e59e ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x0006e5a2 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0006e5a4 subs r6, r5, 1                                    |     r6 = r5 - 1;
    0x0006e5a6 cmp r6, 0                                         |     
    0x0006e5a8 sub.w r8, r3, 2                                   |     r8 = r3 - 2;
    0x0006e5ac add.w r2, r2, 1                                   |     r2++;
    0x0006e5b0 it gt                                             |     
                                                                 |     if (r6 <= 0) {
    0x0006e5b2 addgt r5, r0, r5, lsl 4                           |         r5 = r0 + (r5 << 4);
                                                                 |     }
    0x0006e5b6 add.w r4, r3, -1                                  |     r4 = r3 + -1;
    0x0006e5ba str.w r2, [fp, 0x34]                              |     __asm ("str.w r2, [arg_34h]");
    0x0006e5be str.w r8, [fp, 0x38]                              |     __asm ("str.w r8, [arg_38h]");
                                                                 |     if (r6 <= 0) {
    0x0006e5c2 ble 0x6e5da                                       |         goto label_292;
                                                                 |     }
                                                                 |     do {
    0x0006e5c4 ldr r1, [r5, -0x8]                                |         r1 = *((r5 - 0x8));
    0x0006e5c8 movs r3, 0                                        |         r3 = 0;
    0x0006e5ca mov r2, r4                                        |         r2 = r4;
    0x0006e5cc mov r0, fp                                        |         r0 = fp;
    0x0006e5ce bl 0x59230                                        |         fcn_00059230 (r0, r1, r2, r3);
    0x0006e5d2 subs r6, 1                                        |         r6--;
    0x0006e5d4 sub.w r5, r5, 0x10                                |         r5 -= 0x10;
    0x0006e5d8 bne 0x6e5c4                                       |         
                                                                 |     } while (r6 != 1);
                                                                 | label_292:
    0x0006e5da movs r3, 0x10                                     |     r3 = 0x10;
    0x0006e5dc mov r2, r8                                        |     r2 = r8;
    0x0006e5de ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x0006e5e0 mov r0, fp                                        |     r0 = fp;
    0x0006e5e2 bl 0x58ed8                                        |     fcn_00058ed8 (r0, r1, r2, r3, r4);
    0x0006e5e6 mov r1, r4                                        |     r1 = r4;
    0x0006e5e8 mov r0, sl                                        |     r0 = sl;
    0x0006e5ea bl 0x2bf5c                                        |     fcn_0002bf5c (r0, r1);
    0x0006e5ee ldr r1, [pc, 0x148]                               |     
    0x0006e5f0 movs r5, 0                                        |     r5 = 0;
    0x0006e5f2 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x0006e5f6 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e5f8 add r1, pc                                        |     r1 = 0xdcd36;
    0x0006e5fa str.w r5, [fp, 0x34]                              |     __asm ("str.w r5, [arg_34h]");
    0x0006e5fe bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x0006e602 mvn r3, 5                                         |     r3 = ~5;
    0x0006e606 mov r2, r5                                        |     r2 = r5;
    0x0006e608 movs r1, 0x75                                     |     r1 = 0x75;
    0x0006e60a strd r5, r0, [sp]                                 |     __asm ("strd r5, r0, [sp]");
    0x0006e60e str r3, [sp, 8]                                   |     var_8h = r3;
    0x0006e610 mov r0, sl                                        |     r0 = sl;
    0x0006e612 movs r3, 3                                        |     r3 = 3;
    0x0006e614 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0006e618 mov r0, sl                                        |     r0 = sl;
    0x0006e61a bl 0x2aaa4                                        |     fcn_0002aaa4 (r0);
    0x0006e61e mov r1, r8                                        |     r1 = r8;
    0x0006e620 mov r0, sl                                        |     r0 = sl;
    0x0006e622 bl 0x2bf5c                                        |     fcn_0002bf5c (r0, r1);
    0x0006e626 b 0x6e0d6                                         |     goto label_101;
                                                                 | label_145:
    0x0006e628 blx 0x97ac                                        |     fcn_000097ac ();
    0x0006e62c b.w 0x6bb06                                       |     goto label_102;
                                                                 | label_150:
    0x0006e630 ldr r3, [pc, 0x108]                               |     r3 = *(0x6e73c);
    0x0006e632 ldr r3, [r5, r3]                                  |     r3 = *((r5 + r3));
    0x0006e634 ldr r1, [r3]                                      |     r1 = *(0x6e73c);
    0x0006e636 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006e638 beq.w 0x6bc9a                                     |         goto label_103;
                                                                 |     }
    0x0006e63c mov r0, sl                                        |     r0 = sl;
    0x0006e63e bl 0x2b16c                                        |     fcn_0002b16c (r0, r1, r2);
    0x0006e642 b.w 0x6bc9a                                       |     goto label_103;
                                                                 | label_147:
    0x0006e646 ldr r4, [sp, 0x24]                                |     r4 = sig;
    0x0006e648 mov r0, sl                                        |     r0 = sl;
    0x0006e64a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006e64c ldrb.w r2, [r4, 0x56]                             |     r2 = *((r4 + 0x56));
    0x0006e650 bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006e654 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e656 mov r0, r4                                        |     r0 = r4;
    0x0006e658 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e65c b.w 0x6b7a0                                       |     goto label_0;
                                                                 | label_213:
    0x0006e660 mov r0, r4                                        |     r0 = r4;
    0x0006e662 bl 0x159e4                                        |     r0 = fcn_000159e4 (r0);
    0x0006e666 mov r2, r0                                        |     r2 = r0;
    0x0006e668 mov r0, sl                                        |     r0 = sl;
    0x0006e66a b.w 0x6d7be                                       |     goto label_104;
                                                                 | label_281:
    0x0006e66e ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 |     if (r3 == 0) {
    0x0006e670 cbz r3, 0x6e6c4                                   |         goto label_293;
                                                                 |     }
    0x0006e672 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0006e676 movs r2, 1                                        |     r2 = 1;
    0x0006e678 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0006e67a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0006e67c b 0x6e386                                         |     goto label_105;
                                                                 | label_215:
    0x0006e67e ldr r1, [pc, 0xc0]                                |     
    0x0006e680 ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x0006e682 add r1, pc                                        |     r1 = 0xdcdc8;
    0x0006e684 mov r0, r5                                        |     r0 = r5;
    0x0006e686 bl 0xa580                                         |     r0 = fcn_0000a580 (r0);
    0x0006e68a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006e68c beq.w 0x6e9f8                                     |         goto label_294;
                                                                 |     }
    0x0006e690 movs r3, 0                                        |     r3 = 0;
    0x0006e692 mov r0, r5                                        |     r0 = r5;
    0x0006e694 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006e696 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0006e698 bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x0006e69c ldr r5, [sp, 0x98]                                |     r5 = var_98h;
    0x0006e69e cmp r5, 2                                         |     
                                                                 |     if (r5 > 2) {
    0x0006e6a0 bhi.w 0x6d560                                     |         goto label_106;
                                                                 |     }
    0x0006e6a4 ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006e6a6 mov r0, r4                                        |     r0 = r4;
    0x0006e6a8 mov r1, r5                                        |     r1 = r5;
    0x0006e6aa strb.w r5, [r3, 0x5a]                             |     *((r3 + 0x5a)) = r5;
    0x0006e6ae bl 0x164dc                                        |     r0 = fcn_000164dc (r0, r1);
    0x0006e6b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006e6b4 bne.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e6b8 subs r5, 1                                        |     r5--;
    0x0006e6ba cmp r5, 1                                         |     
                                                                 |     if (r5 > 1) {
    0x0006e6bc bhi.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e6c0 b.w 0x6c936                                       |     goto label_107;
                                                                 | label_293:
    0x0006e6c4 movs r2, 1                                        |     r2 = 1;
    0x0006e6c6 b 0x6e344                                         |     goto label_108;
                                                                 | label_186:
    0x0006e744 ldr r4, [sp, 0x28]                                |     r4 = x;
    0x0006e746 mov r0, r4                                        |     r0 = r4;
    0x0006e748 bl 0x72b28                                        |     r0 = fcn_00072b28 (r0);
    0x0006e74c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0006e74e bne.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006e752 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0006e754 ldr r3, [pc, 0x390]                               |     
    0x0006e756 ldrb.w r2, [r2, 0x54]                             |     r2 = *((r2 + 0x54));
    0x0006e75a add r3, pc                                        |     r3 = 0xdd246;
    0x0006e75c add.w r3, r3, r2, lsl 3                           |     r3 += (r2 << 3);
    0x0006e760 ldr.w r1, [r3, 0x9e0]                             |     r1 = *((r3 + 0x9e0));
    0x0006e764 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006e766 beq.w 0x6d7c4                                     |         goto label_109;
                                                                 |     }
    0x0006e76a mov r0, sl                                        |     r0 = sl;
    0x0006e76c bl 0x2b16c                                        |     fcn_0002b16c (r0, r1, r2);
    0x0006e770 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e772 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e774 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e778 b.w 0x6b7a0                                       |     goto label_0;
                                                                 | label_204:
    0x0006e77c ldr r3, [sp, 0x24]                                |     r3 = sig;
    0x0006e77e ldr r6, [r3, 0x14]                                |     r6 = *((r3 + 0x14));
    0x0006e780 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006e782 subs r6, 1                                        |     r6--;
    0x0006e784 cmp r3, r6                                        |     
                                                                 |     if (r3 <= r6) {
    0x0006e786 ble.w 0x6c796                                     |         goto label_110;
                                                                 |     }
    0x0006e78a b.w 0x6d4b6                                       |     goto label_111;
                                                                 | label_200:
    0x0006e78e ldr r2, [pc, 0x35c]                               |     
    0x0006e790 mov r0, sl                                        |     r0 = sl;
    0x0006e792 movs r1, 2                                        |     r1 = 2;
    0x0006e794 add r2, pc                                        |     
    0x0006e796 add.w r2, r2, 0x204                               |     r2 = 0xdd48a;
    0x0006e79a bl 0x299cc                                        |     fcn_000299cc (r0, r1, r2);
    0x0006e79e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0006e7a0 mov r4, r0                                        |     r4 = r0;
    0x0006e7a2 str r5, [r0, 0x1c]                                |     *((r0 + 0x1c)) = r5;
    0x0006e7a4 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0006e7a6 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x0006e7a8 str r3, [r0, 0x18]                                |     *((r0 + 0x18)) = r3;
    0x0006e7aa ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e7ac str r6, [sp, 0x98]                                |     var_98h = r6;
    0x0006e7ae bl 0xd180                                         |     fcn_0000d180 (r0, r1);
    0x0006e7b2 ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x0006e7b4 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e7b6 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e7b8 str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x0006e7ba movs r3, 1                                        |     r3 = 1;
    0x0006e7bc strh r3, [r4, 0x16]                               |     *((r4 + 0x16)) = r3;
    0x0006e7be bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e7c2 b.w 0x6b798                                       |     goto label_6;
                                                                 | label_280:
    0x0006e7c6 bic r3, r3, 0x20                                  |     r3 = BIT_MASK (r3, 0x20);
    0x0006e7ca b 0x6e2d6                                         |     goto label_112;
                                                                 | label_279:
    0x0006e7cc ldr r1, [sp, 0x98]                                |     r1 = var_98h;
    0x0006e7ce ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
    0x0006e7d2 bl 0x16738                                        |     fcn_00016738 (r0, r1);
    0x0006e7d6 b 0x6e2b6                                         |     goto label_113;
                                                                 | label_285:
    0x0006e7d8 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e7da ldrb.w r3, [r0, 0x57]                             |     r3 = *((r0 + 0x57));
    0x0006e7de cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006e7e0 bne.w 0x6e49a                                     |         goto label_114;
                                                                 |     }
    0x0006e7e4 ldr r4, [sp, 0x24]                                |     r4 = sig;
    0x0006e7e6 ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x0006e7ea cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0006e7ec bne.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e7f0 mov r0, r4                                        |     r0 = r4;
    0x0006e7f2 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x0006e7f6 b 0x6e3ea                                         |     goto label_115;
                                                                 | label_196:
    0x0006e7f8 ldr r6, [sp, 0x40]                                |     r6 = var_40h;
    0x0006e7fa mov r0, sl                                        |     r0 = sl;
    0x0006e7fc mov r1, r6                                        |     r1 = r6;
    0x0006e7fe bl 0x2872c                                        |     fcn_0002872c (r0, r1);
    0x0006e802 ldr r5, [sp, 0x24]                                |     r5 = sig;
    0x0006e804 mov r0, sl                                        |     r0 = sl;
    0x0006e806 ldr r4, [r6, 8]                                   |     r4 = *((r6 + 8));
    0x0006e808 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0006e80a ldrd r2, r1, [r5, 0x20]                           |     __asm ("ldrd r2, r1, [r5, 0x20]");
    0x0006e80e ands r2, r4                                       |     r2 &= r4;
    0x0006e810 ldr r4, [r6, 0xc]                                 |     r4 = *((r6 + 0xc));
    0x0006e812 ands r1, r4                                       |     r1 &= r4;
    0x0006e814 orrs r2, r1                                       |     r2 |= r1;
    0x0006e816 ite ne                                            |     
                                                                 |     if (r2 == r1) {
    0x0006e818 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r2 != r1) {
    0x0006e81a moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x0006e81c bl 0x2a9a4                                        |     fcn_0002a9a4 (r0, r1, r2, r3);
    0x0006e820 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e822 mov r0, r5                                        |     r0 = r5;
    0x0006e824 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e828 b.w 0x6b7a0                                       |     goto label_0;
                                                                 | label_192:
    0x0006e82c ldr r5, [pc, 0x2c0]                               |     
    0x0006e82e movs r6, 4                                        |     r6 = 4;
    0x0006e830 add r5, pc                                        |     
    0x0006e832 add.w r5, r5, 0x768                               |     r5 = 0xdda8c;
    0x0006e836 b.w 0x6c53c                                       |     goto label_116;
                                                                 | label_194:
    0x0006e83a ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
    0x0006e83e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0006e840 bl 0x16738                                        |     r0 = fcn_00016738 (r0, r1);
    0x0006e844 asrs r3, r0, 0x1f                                 |     r3 = r0 >> 0x1f;
    0x0006e846 mov r2, r0                                        |     r2 = r0;
    0x0006e848 b.w 0x6c5ce                                       |     goto label_25;
                                                                 | label_198:
    0x0006e84c movs r3, 0                                        |     r3 = 0;
    0x0006e84e ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0006e850 str r3, [sp]                                      |     *(sp) = r3;
    0x0006e852 movs r1, 0xb1                                     |     r1 = 0xb1;
    0x0006e854 mov r3, r4                                        |     r3 = r4;
    0x0006e856 mov r0, sl                                        |     r0 = sl;
    0x0006e858 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0006e85c b.w 0x6c6da                                       |     goto label_117;
                                                                 | label_151:
    0x0006e860 ldr r1, [pc, 0x290]                               |     
    0x0006e862 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006e864 add r1, pc                                        |     r1 = 0xdd35c;
    0x0006e866 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0006e86a ldr r3, [pc, 0x28c]                               |     
    0x0006e86c add r3, pc                                        |     r3 = 0xdd36a;
    0x0006e86e ldrb r0, [r3, 4]                                  |     r0 = *((r3 + 4));
                                                                 |     if (r0 != 0) {
    0x0006e870 cbz r0, 0x6e878                                   |         
    0x0006e872 ldr r3, [r3, 0x48]                                |         r3 = *((r3 + 0x48));
    0x0006e874 movs r0, 0xb                                      |         r0 = 0xb;
    0x0006e876 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                 |     }
    0x0006e878 blx 0x9d10                                        |     fcn_00009d10 ();
    0x0006e87c ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e87e ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e880 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e884 b.w 0x6b798                                       |     goto label_6;
                                                                 | label_291:
    0x0006e888 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0006e88c vstr d16, [r2, 0x208]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x0006e890 b.w 0x6c648                                       |     goto label_100;
                                                                 | label_277:
    0x0006e894 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e896 movs r2, 0                                        |     r2 = 0;
    0x0006e898 movs r1, 1                                        |     r1 = 1;
    0x0006e89a bl 0xf160                                         |     fcn_0000f160 (r0, r1, r2, r3, r4, r5);
    0x0006e89e ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0006e8a0 subs r4, r0, 0                                    |     r4 = r0 - 0;
    0x0006e8a2 it ne                                             |     
                                                                 |     if (r4 == r0) {
    0x0006e8a4 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
    0x0006e8a6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0006e8a8 beq.w 0x6e250                                     |         goto label_118;
                                                                 |     }
    0x0006e8ac b.w 0x6caa2                                       |     goto label_83;
                                                                 | label_161:
    0x0006e8b0 mov r5, r2                                        |     r5 = r2;
    0x0006e8b2 b.w 0x6bdb4                                       |     goto label_78;
                                                                 | label_171:
    0x0006e8b6 mov.w r0, -1                                      |     r0 = -1;
    0x0006e8ba mov.w r1, -1                                      |     r1 = -1;
    0x0006e8be blx 0x9cb8                                        |     r0 = fcn_00009cb8 ();
    0x0006e8c2 mov r2, r0                                        |     r2 = r0;
    0x0006e8c4 mov r3, r1                                        |     r3 = r1;
    0x0006e8c6 ldrd r0, r1, [sp, 0x98]                           |     __asm ("ldrd r0, r1, [var_98h]");
    0x0006e8ca cmp r0, 1                                         |     
    0x0006e8cc sbcs r4, r1, 0                                    |     __asm ("sbcs r4, r1, 0");
                                                                 |     if (r0 < 1) {
    0x0006e8d0 blt.w 0x6bfac                                     |         goto label_119;
                                                                 |     }
    0x0006e8d4 orrs.w r4, r2, r3                                 |     r4 = r2 | r3;
                                                                 |     if (r4 == r2) {
    0x0006e8d8 beq 0x6e8e4                                       |         goto label_295;
                                                                 |     }
    0x0006e8da cmp r0, r2                                        |     
    0x0006e8dc sbcs.w r3, r1, r3                                 |     __asm ("sbcs.w r3, r1, r3");
                                                                 |     if (r0 >= r2) {
    0x0006e8e0 bge.w 0x6bfac                                     |         goto label_119;
                                                                 |     }
                                                                 | label_295:
    0x0006e8e4 blx 0x9cb8                                        |     fcn_00009cb8 ();
    0x0006e8e8 b.w 0x6bfac                                       |     goto label_119;
                                                                 | label_170:
    0x0006e8ec ldrd r0, r1, [sp, 0x98]                           |     __asm ("ldrd r0, r1, [var_98h]");
    0x0006e8f0 blx 0x9540                                        |     fcn_00009540 ();
    0x0006e8f4 b.w 0x6bf88                                       |     goto label_120;
                                                                 | label_217:
    0x0006e8f8 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0006e8fa adds r0, r1, 1                                    |     r0 = r1 + 1;
    0x0006e8fc ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006e8fe ittt ne                                           |     
                                                                 |     if (r0 == r1) {
    0x0006e900 ldrne r3, [sp, 0x24]                              |         r3 = sig;
                                                                 |     }
                                                                 |     if (r0 == r1) {
    0x0006e902 ldrne r2, [r3, 0x10]                              |         r2 = *((r3 + 0x10));
                                                                 |     }
                                                                 |     if (r0 == r1) {
    0x0006e904 lslne r3, r1, 4                                   |         r3 = r1 << 4;
                                                                 |     }
    0x0006e906 mov.w r1, 0                                       |     r1 = 0;
    0x0006e90a it ne                                             |     
                                                                 |     if (r0 == r1) {
    0x0006e90c ldrne r3, [r2, r3]                                |         r3 = *((r2 + r3));
                                                                 |     }
    0x0006e90e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0006e910 bl 0x730f4                                        |     fcn_000730f4 (r0, r1, r2, r3, r4, r5);
    0x0006e914 ldr r5, [sp, 0x8c]                                |     r5 = var_8ch;
    0x0006e916 str r0, [sp, 0x44]                                |     var_44h = r0;
    0x0006e918 b.w 0x6c9ba                                       |     goto label_121;
                                                                 | label_164:
    0x0006e91c ldr r1, [pc, 0x1dc]                               |     
    0x0006e91e ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006e920 add r1, pc                                        |     r1 = 0xdd420;
    0x0006e922 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0006e926 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0006e928 ldr r0, [sp, 0x24]                                |     r0 = sig;
    0x0006e92a bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0006e92e b.w 0x6b798                                       |     goto label_6;
                                                                 | label_163:
    0x0006e932 ldrb.w r2, [r8, 8]                                |     r2 = *((r8 + 8));
    0x0006e936 mov r0, sl                                        |     r0 = sl;
    0x0006e938 subs r2, 1                                        |     r2--;
    0x0006e93a b.w 0x6d7be                                       |     goto label_104;
                                                                 | label_146:
    0x0006e93e ldr r1, [pc, 0x1c0]                               |     
    0x0006e940 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e942 add r1, pc                                        |     r1 = 0xdd448;
    0x0006e944 bl 0xa580                                         |     r0 = fcn_0000a580 (r0);
                                                                 |     if (r0 == 0) {
    0x0006e948 cbnz r0, 0x6e9a0                                  |         
    0x0006e94a movs r3, 2                                        |         r3 = 2;
    0x0006e94c str r3, [sp, 0x3c]                                |         var_3ch = r3;
    0x0006e94e b.w 0x6bb72                                       |         goto label_122;
                                                                 | label_148:
    0x0006e952 movs r4, 1                                        |         r4 = 1;
    0x0006e954 b.w 0x6bbd6                                       |         goto label_123;
                                                                 | label_144:
    0x0006e958 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x0006e95a mov.w r4, -1                                      |         r4 = -1;
    0x0006e95e b.w 0x6baf6                                       |         goto label_97;
                                                                 | label_152:
    0x0006e962 ldr r0, [sp, 0x28]                                |         r0 = x;
    0x0006e964 bl 0x525a8                                        |         fcn_000525a8 (r0);
    0x0006e968 b.w 0x6bc82                                       |         goto label_124;
                                                                 | label_153:
    0x0006e96c ldr r0, [pc, 0x194]                               |         
    0x0006e96e ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0006e970 add r0, pc                                        |         r0 = 0xdd478;
    0x0006e972 blx 0x97f0                                        |         fcn_000097f0 ();
    0x0006e976 str r0, [r4]                                      |         *(r4) = r0;
    0x0006e978 b.w 0x6bc9a                                       |         goto label_103;
                                                                 | label_238:
    0x0006e97c mov.w r1, 0x8000                                  |         
    0x0006e980 movt r1, 0xffff                                   |         r1 = 0x-8000;
    0x0006e984 b.w 0x6ce5a                                       |         goto label_125;
                                                                 | label_178:
    0x0006e988 movs r3, 0                                        |         r3 = 0;
    0x0006e98a mov.w r6, 0x8000                                  |         r6 = 0x8000;
    0x0006e98e movt r3, 0xfff8                                   |         r3 = (r3 & 0xFFFF) | 0xfff80000;
    0x0006e992 sub.w r2, r2, 0x80000                             |         r2 -= 0x80000;
    0x0006e996 movt r6, 0xffff                                   |         r6 = (r6 & 0xFFFF) | 0xffff0000;
    0x0006e99a str r3, [sp, 0x3c]                                |         var_3ch = r3;
    0x0006e99c b.w 0x6c248                                       |         goto label_88;
                                                                 |     }
    0x0006e9a0 ldr r1, [pc, 0x164]                               |     
    0x0006e9a2 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0006e9a4 add r1, pc                                        |     r1 = 0xdd4b0;
    0x0006e9a6 bl 0xa580                                         |     fcn_0000a580 (r0);
    0x0006e9aa ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0006e9ac cmp r0, 0                                         |     
    0x0006e9ae it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x0006e9b0 moveq r3, 3                                       |         r3 = 3;
                                                                 |     }
    0x0006e9b2 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0006e9b4 b.w 0x6bb72                                       |     goto label_122;
                                                                 | label_235:
    0x0006e9b8 mov.w r1, 0x8000                                  |     
    0x0006e9bc movt r1, 0xffff                                   |     r1 = 0x-8000;
    0x0006e9c0 b.w 0x6cc52                                       |     goto label_126;
                                                                 | label_234:
    0x0006e9c4 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0006e9c6 movs r1, 2                                        |     r1 = 2;
    0x0006e9c8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0006e9ca ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0006e9cc bl 0x730f4                                        |     r0 = fcn_000730f4 (r0, r1, r2, r3, r4, r5);
    0x0006e9d0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0006e9d2 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e9d6 ldr r2, [r0, 0x1c]                                |     r2 = *((r0 + 0x1c));
    0x0006e9d8 lsls r4, r2, 0x18                                 |     r4 = r2 << 0x18;
                                                                 |     if (r4 >= r2) {
    0x0006e9da bpl.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e9de ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
                                                                 | label_128:
    0x0006e9e0 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0006e9e2 beq.w 0x6bb44                                     |         goto label_8;
                                                                 |     }
    0x0006e9e6 ldrb.w r3, [r4, 0x37]                             |     r3 = *((r4 + 0x37));
    0x0006e9ea and r3, r3, 3                                     |     r3 &= 3;
    0x0006e9ee cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0006e9f0 beq.w 0x6cc42                                     |         goto label_127;
                                                                 |     }
    0x0006e9f4 ldr r4, [r4, 0x14]                                |     r4 = *((r4 + 0x14));
    0x0006e9f6 b 0x6e9e0                                         |     goto label_128;
                                                                 | label_294:
    0x0006e9f8 movs r5, 2                                        |     r5 = 2;
    0x0006e9fa b.w 0x6c920                                       |     goto label_129;
                                                                 | label_167:
    0x0006e9fe mov sl, r1                                        |     sl = r1;
    0x0006ea00 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0006ea02 beq.w 0x6bede                                     |         goto label_11;
                                                                 |     }
    0x0006ea06 ldr r5, [sp, 0x3c]                                |     r5 = var_3ch;
    0x0006ea08 str.w sb, [sp, 0x34]                              |     __asm ("str.w sb, [var_34h]");
    0x0006ea0c b.w 0x6cf50                                       |     goto label_130;
                                                                 | label_173:
    0x0006ea10 mov.w r1, 0x8000                                  |     
    0x0006ea14 movt r1, 0xffff                                   |     r1 = 0x-8000;
    0x0006ea18 b.w 0x6c05a                                       |     goto label_131;
                                                                 | label_176:
    0x0006ead6 ldr r3, [pc, 0x38]                                |     
    0x0006ead8 add r3, pc                                        |     r3 = 0xdd5ee;
    0x0006eada b.w 0x6c14e                                       |     goto label_16;
                                                                 | label_175:
    0x0006eade ldr r2, [pc, 0x34]                                |     
    0x0006eae0 add r2, pc                                        |     r2 = 0xdd5fa;
    0x0006eae2 b.w 0x6c136                                       |     goto label_132;
    0x0006fa66 movs r3, 0                                        |     r3 = 0;
    0x0006fa68 strd r3, r3, [sp, 0x10]                           |     __asm ("strd r3, r3, [sp, 0x10]");
    0x0006fa6c mov r1, r3                                        |     r1 = r3;
    0x0006fa6e strd r3, r3, [sp, 8]                              |     __asm ("strd r3, r3, [sp, 8]");
    0x0006fa72 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x0006fa74 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x0006fa78 mov r2, r3                                        |     r2 = r3;
    0x0006fa7a bl 0x86864                                        |     fcn_00086864 (r0, r1, r2, r3, r4, r5, r6);
    0x0006fa7e b.w 0x6ee00                                       |     return void (*0x6ee00)() ();
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x71c8c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.00071c8c ()                                      | void fcn_00071c8c (int16_t arg_150h, int16_t arg_154h, int16_t arg_158h, 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_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_ch_2;
                                                                 |     int8_t var_11h;
                                                                 |     int8_t var_18h_2;
                                                                 |     int8_t var_19h;
                                                                 |     int32_t var_7ch;
                                                                 |     int16_t var_cch;
                                                                 |     int16_t var_d8h;
                                                                 |     int16_t var_f8h;
                                                                 |     int32_t var_e8h;
                                                                 |     int16_t var_124h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00071c8c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00071c90 mov sb, r2                                        |     sb = r2;
    0x00071c92 ldr r2, [pc, 0x3f4]                               |     
    0x00071c94 mov sl, r3                                        |     sl = r3;
    0x00071c96 sub sp, 0x12c                                     |     
    0x00071c98 mov r6, r0                                        |     r6 = r0;
    0x00071c9a ldr r3, [pc, 0x3f0]                               |     r3 = *(0x7208e);
    0x00071c9c add r0, sp, 0x18                                  |     r0 += var_18h;
    0x00071c9e add r2, pc                                        |     r2 = 0xe3d2c;
    0x00071ca0 str r1, [sp, 4]                                   |     var_4h = r1;
    0x00071ca2 movs r1, 0                                        |     r1 = 0;
    0x00071ca4 ldr r5, [sp, 0x150]                               |     r5 = *(arg_150h);
    0x00071ca6 ldr r3, [r2, r3]                                  |     
    0x00071ca8 movs r2, 0x94                                     |     r2 = 0x94;
    0x00071caa ldr r4, [sp, 0x158]                               |     r4 = *(arg_158h);
    0x00071cac add r7, sp, 0x14                                  |     r7 += var_14h;
    0x00071cae ldr r3, [r3]                                      |     r3 = *(0xe3d2c);
    0x00071cb0 str r3, [sp, 0x124]                               |     var_124h = r3;
    0x00071cb2 mov.w r3, 0                                       |     r3 = 0;
    0x00071cb6 ldr r3, [sp, 0x154]                               |     r3 = *(arg_154h);
    0x00071cb8 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00071cba blx 0x97d4                                        |     fcn_000097d4 ();
    0x00071cbe movs r2, 0x4c                                     |     r2 = 0x4c;
    0x00071cc0 movs r1, 0                                        |     r1 = 0;
    0x00071cc2 add r0, sp, 0xd8                                  |     r0 += var_d8h;
    0x00071cc4 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00071cc8 ldrb.w r3, [r6, 0x57]                             |     r3 = *((r6 + 0x57));
    0x00071ccc ldr.w r2, [r6, 0x108]                             |     r2 = *((r6 + 0x108));
    0x00071cd0 str r5, [sp, 0xf8]                                |     var_f8h = r5;
    0x00071cd2 str.w r7, [r6, 0x108]                             |     __asm ("str.w r7, aav.0x000000ff");
    0x00071cd6 str r2, [sp, 0xcc]                                |     var_cch = r2;
    0x00071cd8 str r6, [r7]                                      |     *(r7) = r6;
    0x00071cda cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00071cdc bne.w 0x71e94                                     |         goto label_13;
                                                                 |     }
                                                                 | label_4:
    0x00071ce0 tst.w sl, 1                                       |     
                                                                 |     if ((sl & 1) != 0) {
    0x00071ce4 beq 0x71cfc                                       |         
    0x00071ce6 ldrb r3, [r7, 0x18]                               |         r3 = var_18h_2;
    0x00071ce8 adds r3, 1                                        |         r3++;
    0x00071cea strb r3, [r7, 0x18]                               |         var_18h_2 = r3;
    0x00071cec ldr.w r3, [r6, 0x130]                             |         r3 = *((r6 + 0x130));
    0x00071cf0 adds r3, 1                                        |         r3++;
    0x00071cf2 str.w r3, [r6, 0x130]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00071cf6 movs r3, 0                                        |         r3 = 0;
    0x00071cf8 strh.w r3, [r6, 0x134]                            |         *((r6 + 0x134)) = r3;
                                                                 |     }
    0x00071cfc ldrb.w r5, [r6, 0x5f]                             |     r5 = *((r6 + 0x5f));
    0x00071d00 ubfx r3, sl, 2, 1                                 |     r3 = (sl >> 2) & ((1 << 1) - 1);
    0x00071d04 strb r3, [r7, 0x19]                               |     var_19h = r3;
                                                                 |     if (r5 != 0) {
    0x00071d06 cbnz r5, 0x71d60                                  |         goto label_14;
                                                                 |     }
    0x00071d08 ldr r1, [r6, 0x14]                                |     r1 = *((r6 + 0x14));
    0x00071d0a cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x00071d0c ble 0x71d60                                       |         goto label_14;
                                                                 |     }
    0x00071d0e mov fp, r5                                        |     
    0x00071d10 str r4, [sp, 0xc]                                 |     var_ch = r4;
                                                                 |     do {
    0x00071d12 ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x00071d14 lsl.w r8, fp, 4                                   |         r8 = fp << 4;
    0x00071d18 add r3, r8                                        |         r3 += r8;
    0x00071d1a ldr r5, [r3, 4]                                   |         r5 = *((r3 + 4));
                                                                 |         if (r5 != 0) {
    0x00071d1c cbz r5, 0x71d56                                   |             
    0x00071d1e ldrb r3, [r5, 9]                                  |             r3 = *((r5 + 9));
                                                                 |             if (r3 != 0) {
    0x00071d20 cbz r3, 0x71d32                                   |                 
    0x00071d22 ldr r3, [r5, 0xc]                                 |                 r3 = *((r5 + 0xc));
    0x00071d24 adds r3, 1                                        |                 r3++;
    0x00071d26 str r3, [r5, 0xc]                                 |                 *((r5 + 0xc)) = r3;
    0x00071d28 ldrb r3, [r5, 0xa]                                |                 r3 = *((r5 + 0xa));
                                                                 |                 if (r3 != 0) {
    0x00071d2a cbnz r3, 0x71d32                                  |                     goto label_15;
                                                                 |                 }
    0x00071d2c mov r0, r5                                        |                 r0 = r5;
    0x00071d2e bl 0x11258                                        |                 fcn_00011258 (r0);
                                                                 |             }
                                                                 | label_15:
    0x00071d32 movs r2, 1                                        |             r2 = 1;
    0x00071d34 mov r0, r5                                        |             r0 = r5;
    0x00071d36 mov r1, r2                                        |             r1 = r2;
    0x00071d38 bl 0xb890                                         |             fcn_0000b890 (r0, r1, r2);
    0x00071d3c ldrb r2, [r5, 9]                                  |             r2 = *((r5 + 9));
    0x00071d3e mov r4, r0                                        |             r4 = r0;
                                                                 |             if (r2 != 0) {
    0x00071d40 cbz r2, 0x71d4e                                   |                 
    0x00071d42 ldr r2, [r5, 0xc]                                 |                 r2 = *((r5 + 0xc));
    0x00071d44 subs r2, 1                                        |                 r2--;
    0x00071d46 str r2, [r5, 0xc]                                 |                 *((r5 + 0xc)) = r2;
    0x00071d48 cmp r2, 0                                         |                 
                                                                 |                 if (r2 == 0) {
    0x00071d4a beq.w 0x71e58                                     |                     goto label_16;
                                                                 |                 }
                                                                 |             }
    0x00071d4e cmp r4, 0                                         |             
                                                                 |             if (r4 != 0) {
    0x00071d50 bne.w 0x71e64                                     |                 goto label_17;
                                                                 |             }
                                                                 | label_0:
    0x00071d54 ldr r1, [r6, 0x14]                                |             r1 = *((r6 + 0x14));
                                                                 |         }
    0x00071d56 add.w fp, fp, 1                                   |         
    0x00071d5a cmp r1, fp                                        |         
    0x00071d5c bgt 0x71d12                                       |         
                                                                 |     } while (r1 > fp);
    0x00071d5e ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
                                                                 | label_14:
    0x00071d60 mov r0, r6                                        |     r0 = r6;
    0x00071d62 bl 0x14240                                        |     fcn_00014240 (r0);
    0x00071d66 cmp.w sb, 0                                       |     
                                                                 |     if (sb < 0) {
    0x00071d6a blt.w 0x71e8a                                     |         goto label_18;
                                                                 |     }
                                                                 |     if (sb != 0) {
    0x00071d6e bne.w 0x71e7c                                     |         goto label_19;
                                                                 |     }
                                                                 | label_2:
    0x00071d72 ldr r3, [r6, 0x7c]                                |     r3 = *((r6 + 0x7c));
    0x00071d74 cmp sb, r3                                        |     
                                                                 |     if (sb > r3) {
    0x00071d76 bgt.w 0x71f36                                     |         goto label_20;
                                                                 |     }
    0x00071d7a ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00071d7c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00071d7e beq.w 0x71f2c                                     |         goto label_21;
                                                                 |     }
    0x00071d82 asr.w r3, sb, 0x1f                                |     r3 = sb >> 0x1f;
    0x00071d86 adds.w r2, sb, 1                                  |     r2 = sb + 1;
    0x00071d8a mov r0, r6                                        |     r0 = r6;
    0x00071d8c adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00071d90 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00071d94 mov r5, r0                                        |     r5 = r0;
    0x00071d96 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00071d98 beq.w 0x71f2c                                     |         goto label_21;
                                                                 |     }
    0x00071d9c ldr.w r8, [sp, 4]                                 |     r8 = var_4h;
    0x00071da0 mov r2, sb                                        |     r2 = sb;
    0x00071da2 mov r1, r8                                        |     r1 = r8;
    0x00071da4 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00071da8 movs r3, 0                                        |     r3 = 0;
    0x00071daa mov r1, r5                                        |     r1 = r5;
    0x00071dac strb.w r3, [r5, sb]                               |     *((r5 + sb)) = r3;
    0x00071db0 mov r0, r7                                        |     r0 = r7;
    0x00071db2 bl 0x71754                                        |     fcn_00071754 (r0, r1, r2, r3, r4, r5, r6);
    0x00071db6 ldr.w r3, [r7, 0xe8]                              |     r3 = var_e8h;
    0x00071dba mov r1, r5                                        |     r1 = r5;
    0x00071dbc mov r0, r6                                        |     r0 = r6;
    0x00071dbe subs r3, r3, r5                                   |     r3 -= r5;
    0x00071dc0 add r3, r8                                        |     r3 += r8;
    0x00071dc2 str.w r3, [r7, 0xe8]                              |     __asm ("str.w r3, [var_e8h]");
    0x00071dc6 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
                                                                 |     if (r4 != 0) {
                                                                 | label_3:
    0x00071dca cbz r4, 0x71dd2                                   |         
    0x00071dcc ldr.w r3, [r7, 0xe8]                              |         r3 = var_e8h;
    0x00071dd0 str r3, [r4]                                      |         *(r4) = r3;
                                                                 |     }
    0x00071dd2 ldrb.w r3, [r6, 0xb1]                             |     r3 = *((r6 + 0xb1));
    0x00071dd6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00071dd8 beq 0x71ed4                                       |         goto label_22;
                                                                 |     }
                                                                 | label_6:
    0x00071dda ldrb.w r3, [r6, 0x57]                             |     r3 = *((r6 + 0x57));
    0x00071dde cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00071de0 beq 0x71ea0                                       |         goto label_23;
                                                                 |     }
    0x00071de2 movs r2, 7                                        |     r2 = 7;
    0x00071de4 movs r3, 0                                        |     r3 = 0;
    0x00071de6 str r2, [r7, 0xc]                                 |     var_ch_2 = r2;
    0x00071de8 strb r3, [r7, 0x11]                               |     var_11h = r3;
                                                                 | label_8:
    0x00071dea ldr r4, [r7, 8]                                   |     r4 = var_8h_2;
                                                                 |     if (r4 != 0) {
    0x00071dec cbz r4, 0x71dfe                                   |         
    0x00071dee ldrb.w r3, [r4, 0x95]                             |         r3 = *((r4 + 0x95));
    0x00071df2 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00071df4 bne.w 0x71f24                                     |             goto label_24;
                                                                 |         }
                                                                 | label_7:
    0x00071df8 mov r0, r4                                        |         r0 = r4;
    0x00071dfa bl 0x18864                                        |         fcn_00018864 (r0);
                                                                 |     }
    0x00071dfe ldr r3, [r7, 4]                                   |     r3 = var_18h;
    0x00071e00 ldr.w r8, [r7, 0xc]                               |     r8 = var_ch_2;
    0x00071e04 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00071e06 beq.w 0x71f4e                                     |         goto label_25;
                                                                 |     }
    0x00071e0a ldr r2, [pc, 0x284]                               |     
    0x00071e0c mov r1, r8                                        |     r1 = r8;
    0x00071e0e mov r0, r6                                        |     r0 = r6;
    0x00071e10 add r2, pc                                        |     r2 = 0xe3ea6;
    0x00071e12 bl 0x27670                                        |     fcn_00027670 (r0, r1, r2);
    0x00071e16 ldr r1, [r7, 4]                                   |     r1 = var_18h;
                                                                 |     if (r1 != 0) {
    0x00071e18 cbz r1, 0x71e20                                   |         
    0x00071e1a mov r0, r6                                        |         r0 = r6;
    0x00071e1c bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
                                                                 | label_5:
    0x00071e20 ldr r1, [r7, 0x7c]                                |     r1 = var_7ch;
                                                                 |     if (r1 == 0) {
    0x00071e22 cbz r1, 0x71e34                                   |         goto label_1;
                                                                 |     }
                                                                 |     do {
    0x00071e24 ldr r3, [r1, 4]                                   |         r3 = *((r1 + 4));
    0x00071e26 mov r0, r6                                        |         r0 = r6;
    0x00071e28 str r3, [r7, 0x7c]                                |         var_7ch = r3;
    0x00071e2a bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x00071e2e ldr r1, [r7, 0x7c]                                |         r1 = var_7ch;
    0x00071e30 cmp r1, 0                                         |         
    0x00071e32 bne 0x71e24                                       |         
                                                                 |     } while (r1 != 0);
                                                                 | label_1:
    0x00071e34 mov r0, r7                                        |     r0 = r7;
    0x00071e36 bl 0x16d8c                                        |     fcn_00016d8c (r0);
    0x00071e3a ldr r2, [pc, 0x258]                               |     
    0x00071e3c ldr r3, [pc, 0x24c]                               |     r3 = *(0x7208c);
    0x00071e3e add r2, pc                                        |     r2 = 0xe3ed8;
    0x00071e40 ldr r3, [r2, r3]                                  |     r3 = *(0xe3ed8);
    0x00071e42 ldr r2, [r3]                                      |     r2 = *(0xe3ed8);
    0x00071e44 ldr r3, [sp, 0x124]                               |     r3 = var_124h;
    0x00071e46 eors r2, r3                                       |     r2 ^= r3;
    0x00071e48 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00071e4c bne.w 0x72082                                     |         goto label_26;
                                                                 |     }
    0x00071e50 mov r0, r8                                        |     r0 = r8;
    0x00071e52 add sp, 0x12c                                     |     
    0x00071e54 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_16:
    0x00071e58 mov r0, r5                                        |     r0 = r5;
    0x00071e5a bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00071e5e cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00071e60 beq.w 0x71d54                                     |         goto label_0;
                                                                 |     }
                                                                 | label_17:
    0x00071e64 ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
    0x00071e66 mov fp, r8                                        |     
    0x00071e68 mov r0, r6                                        |     r0 = r6;
    0x00071e6a mov r1, r4                                        |     r1 = r4;
    0x00071e6c mov r8, r4                                        |     r8 = r4;
    0x00071e6e ldr.w r3, [r2, fp]                                |     r3 = *((r2 + fp));
    0x00071e72 ldr r2, [pc, 0x224]                               |     
    0x00071e74 add r2, pc                                        |     r2 = 0xe3f12;
    0x00071e76 bl 0x27670                                        |     fcn_00027670 (r0, r1, r2);
    0x00071e7a b 0x71e34                                         |     goto label_1;
                                                                 | label_19:
    0x00071e7c ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00071e7e add r3, sb                                        |     r3 += sb;
    0x00071e80 ldrb r3, [r3, -0x1]                               |     r3 = *((r3 - 0x1));
    0x00071e84 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00071e86 bne.w 0x71d72                                     |         goto label_2;
                                                                 |     }
                                                                 | label_18:
    0x00071e8a ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x00071e8c mov r0, r7                                        |     r0 = r7;
    0x00071e8e bl 0x71754                                        |     fcn_00071754 (r0, r1, r2, r3, r4, r5, r6);
    0x00071e92 b 0x71dca                                         |     goto label_3;
                                                                 | label_13:
    0x00071e94 ldr r1, [pc, 0x204]                               |     
    0x00071e96 mov r0, r7                                        |     r0 = r7;
    0x00071e98 add r1, pc                                        |     r1 = 0xe3f38;
    0x00071e9a bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00071e9e b 0x71ce0                                         |     goto label_4;
                                                                 | label_23:
    0x00071ea0 ldr r3, [r7, 0xc]                                 |     r3 = var_ch_2;
    0x00071ea2 cmp r3, 0                                         |     
    0x00071ea4 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00071ea6 cmpne r3, 0x65                                    |         __asm ("cmpne r3, 0x65");
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00071ea8 bne 0x71f6c                                       |         goto label_27;
                                                                 |     }
    0x00071eaa ldr.w r0, [r6, 0x120]                             |     r0 = *((r6 + 0x120));
    0x00071eae ldr r3, [r7, 8]                                   |     r3 = var_8h_2;
    0x00071eb0 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00071eb2 vmov.i64 d16, 0xffffffff00000000                  |     __asm ("vmov.i64 d16, aav.0x000000ff");
    0x00071eb6 str r3, [r2]                                      |     *(r2) = r3;
    0x00071eb8 vstr d16, [r6, 0x40]                              |     __asm ("vstr d16, [r6, 0x40]");
                                                                 |     if (r0 != 0) {
    0x00071ebc cbz r0, 0x71ece                                   |         
    0x00071ebe ldrh r3, [r0, 0x10]                               |         r3 = *((r0 + 0x10));
    0x00071ec0 tst.w r3, 0x9000                                  |         
    0x00071ec4 itt eq                                            |         
                                                                 |         if ((r3 & 0x9000) != 0) {
    0x00071ec6 moveq r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if ((r3 & 0x9000) == 0) {
    0x00071ec8 strheq r3, [r0, 0x10]                             |             __asm ("strheq r3, [r0, 0x10]");
                                                                 |         }
                                                                 |         if ((r3 & 0x9000) != 0) {
    0x00071eca bne.w 0x72074                                     |             goto label_28;
                                                                 |         }
                                                                 |     }
                                                                 | label_12:
    0x00071ece mov.w r8, 0                                       |     r8 = 0;
    0x00071ed2 b 0x71e20                                         |     goto label_5;
                                                                 | label_22:
    0x00071ed4 ldr r5, [r7, 8]                                   |     r5 = var_8h_2;
    0x00071ed6 uxtb.w r2, sl                                     |     r2 = (int8_t) sl;
    0x00071eda cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00071edc beq.w 0x71dda                                     |         goto label_6;
                                                                 |     }
    0x00071ee0 tst.w sl, 0x80                                    |     
    0x00071ee4 ldr.w r4, [r7, 0xe8]                              |     r4 = var_e8h;
    0x00071ee8 it eq                                             |     
                                                                 |     if ((sl & 0x80) != 0) {
    0x00071eea streq r3, [r5, 0xd8]                              |         *((r5 + 0xd8)) = r3;
                                                                 |     }
    0x00071eee ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00071ef0 strb.w r2, [r5, 0x94]                             |     *((r5 + 0x94)) = r2;
                                                                 |     if (r3 != 0) {
    0x00071ef4 cbz r3, 0x71f1c                                   |         
    0x00071ef6 subs r4, r4, r3                                   |         r4 -= r3;
    0x00071ef8 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00071efa asrs r3, r4, 0x1f                                 |         r3 = r4 >> 0x1f;
    0x00071efc adds r2, r4, 1                                    |         r2 = r4 + 1;
    0x00071efe adc r3, r3, 0                                     |         __asm ("adc r3, r3, 0");
    0x00071f02 bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
    0x00071f06 mov r8, r0                                        |         r8 = r0;
                                                                 |         if (r0 != 0) {
    0x00071f08 cbz r0, 0x71f18                                   |             
    0x00071f0a ldr r1, [sp, 4]                                   |             r1 = var_4h;
    0x00071f0c mov r2, r4                                        |             r2 = r4;
    0x00071f0e blx 0x9e2c                                        |             fcn_00009e2c ();
    0x00071f12 movs r3, 0                                        |             r3 = 0;
    0x00071f14 strb.w r3, [r8, r4]                               |             *((r8 + r4)) = r3;
                                                                 |         }
    0x00071f18 str.w r8, [sp, 4]                                 |         __asm ("str.w r8, [var_4h]");
                                                                 |     }
    0x00071f1c ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00071f1e str.w r3, [r5, 0xc4]                              |     __asm ("str.w r3, [r5, 0xc4]");
    0x00071f22 b 0x71dda                                         |     goto label_6;
                                                                 | label_24:
    0x00071f24 mov r0, r4                                        |     r0 = r4;
    0x00071f26 bl 0x520bc                                        |     fcn_000520bc (r0);
    0x00071f2a b 0x71df8                                         |     goto label_7;
                                                                 | label_21:
    0x00071f2c ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00071f2e add r3, sb                                        |     r3 += sb;
    0x00071f30 str.w r3, [r7, 0xe8]                              |     __asm ("str.w r3, [var_e8h]");
    0x00071f34 b 0x71dca                                         |     goto label_3;
                                                                 | label_20:
    0x00071f36 ldr r2, [pc, 0x168]                               |     
    0x00071f38 movs r1, 0x12                                     |     r1 = 0x12;
    0x00071f3a mov r0, r6                                        |     r0 = r6;
    0x00071f3c add r2, pc                                        |     r2 = 0xe3fe2;
    0x00071f3e bl 0x27670                                        |     fcn_00027670 (r0, r1, r2);
    0x00071f42 movs r1, 0x12                                     |     r1 = 0x12;
    0x00071f44 mov r0, r6                                        |     r0 = r6;
    0x00071f46 bl 0x14ab4                                        |     r0 = fcn_00014ab4 (r0, r1);
    0x00071f4a mov r8, r0                                        |     r8 = r0;
    0x00071f4c b 0x71e34                                         |     goto label_1;
                                                                 | label_25:
    0x00071f4e str.w r8, [r6, 0x40]                              |     __asm ("str.w r8, [r6, 0x40]");
    0x00071f52 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00071f56 bne 0x71f62                                       |         
    0x00071f58 ldr.w r3, [r6, 0x120]                             |         r3 = *((r6 + 0x120));
    0x00071f5c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00071f5e beq.w 0x7207a                                     |             goto label_29;
                                                                 |         }
                                                                 |     }
    0x00071f62 mov r1, r8                                        |     r1 = r8;
    0x00071f64 mov r0, r6                                        |     r0 = r6;
    0x00071f66 bl 0x14a2c                                        |     fcn_00014a2c (r0, r1);
    0x00071f6a b 0x71e20                                         |     goto label_5;
                                                                 | label_27:
    0x00071f6c ldrb r3, [r7, 0x11]                               |     r3 = var_11h;
    0x00071f6e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00071f70 beq.w 0x71dea                                     |         goto label_8;
                                                                 |     }
    0x00071f74 ldrb.w r5, [r6, 0xb1]                             |     r5 = *((r6 + 0xb1));
    0x00071f78 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00071f7a bne.w 0x71dea                                     |         goto label_8;
                                                                 |     }
    0x00071f7e ldr.w r8, [r7]                                    |     r8 = *(r7);
    0x00071f82 ldr.w r2, [r8, 0x14]                              |     r2 = *((r8 + 0x14));
    0x00071f86 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00071f88 ble.w 0x71dea                                     |         goto label_8;
                                                                 |     }
    0x00071f8c mov.w fp, 0x11                                    |     
    0x00071f90 movw sl, 0xc0a                                    |     sl = 0xc0a;
    0x00071f94 strd r7, r6, [sp, 4]                              |     __asm ("strd r7, r6, [var_4h]");
                                                                 |     do {
    0x00071f98 ldr.w r1, [r8, 0x10]                              |         r1 = *((r8 + 0x10));
    0x00071f9c lsls r7, r5, 4                                    |         r7 = r5 << 4;
    0x00071f9e add r1, r7                                        |         r1 += r7;
    0x00071fa0 ldr r4, [r1, 4]                                   |         r4 = *((r1 + 4));
    0x00071fa2 cmp r4, 0                                         |         
                                                                 |         if (r4 != 0) {
    0x00071fa4 beq 0x72010                                       |             
    0x00071fa6 ldrb r2, [r4, 8]                                  |             r2 = *((r4 + 8));
    0x00071fa8 cmp r2, 0                                         |             
                                                                 |             if (r2 != 0) {
    0x00071faa bne 0x7201c                                       |                 goto label_30;
                                                                 |             }
    0x00071fac mov r1, r2                                        |             r1 = r2;
    0x00071fae mov r0, r4                                        |             r0 = r4;
    0x00071fb0 bl 0x4b890                                        |             r0 = fcn_0004b890 (r0, r1, r2, r3);
    0x00071fb4 cmp r0, sl                                        |             
    0x00071fb6 it ne                                             |             
                                                                 |             if (r0 != sl) {
    0x00071fb8 cmpne r0, 7                                       |                 __asm ("cmpne r0, 7");
                                                                 |             }
                                                                 |             if (r0 == sl) {
    0x00071fba beq 0x72058                                       |                 goto label_31;
                                                                 |             }
                                                                 |             if (r0 != 0) {
    0x00071fbc cbnz r0, 0x72016                                  |                 goto label_32;
                                                                 |             }
    0x00071fbe ldrb r2, [r4, 9]                                  |             r2 = *((r4 + 9));
    0x00071fc0 movs r6, 1                                        |             r6 = 1;
    0x00071fc2 ldr.w sb, [r4, 4]                                 |             sb = *((r4 + 4));
                                                                 |             if (r2 == 0) {
    0x00071fc6 cbz r2, 0x72028                                   |                 goto label_33;
                                                                 |             }
                                                                 | label_9:
    0x00071fc8 ldr r2, [r4, 0xc]                                 |             r2 = *((r4 + 0xc));
    0x00071fca ldrb r0, [r4, 0xa]                                |             r0 = *((r4 + 0xa));
    0x00071fcc adds r3, r2, 1                                    |             r3 = r2 + 1;
    0x00071fce str r3, [r4, 0xc]                                 |             *((r4 + 0xc)) = r3;
                                                                 |             if (r0 != 0) {
    0x00071fd0 cbnz r0, 0x72034                                  |                 goto label_34;
                                                                 |             }
    0x00071fd2 mov r0, r4                                        |             r0 = r4;
    0x00071fd4 bl 0x11258                                        |             fcn_00011258 (r0);
    0x00071fd8 ldr.w r2, [sb, 0xc]                               |             r2 = *((sb + 0xc));
    0x00071fdc ldr r2, [r2, 0x38]                                |             r2 = *((r2 + 0x38));
    0x00071fde ldr r1, [r2, 0x28]                                |             r1 = *((r2 + 0x28));
    0x00071fe0 ldrb r2, [r4, 9]                                  |             r2 = *((r4 + 9));
    0x00071fe2 rev r1, r1                                        |             r1 = SWAP32 (r1);
                                                                 |             if (r2 != 0) {
    0x00071fe4 cbz r2, 0x71fee                                   |                 
    0x00071fe6 ldr r2, [r4, 0xc]                                 |                 r2 = *((r4 + 0xc));
    0x00071fe8 subs r2, 1                                        |                 r2--;
    0x00071fea str r2, [r4, 0xc]                                 |                 *((r4 + 0xc)) = r2;
                                                                 |                 if (r2 == 0) {
    0x00071fec cbz r2, 0x72044                                   |                     goto label_35;
                                                                 |                 }
                                                                 |             }
                                                                 | label_10:
    0x00071fee ldr.w r2, [r8, 0x10]                              |             r2 = *((r8 + 0x10));
    0x00071ff2 add r2, r7                                        |             r2 += r7;
    0x00071ff4 ldr r3, [r2, 0xc]                                 |             r3 = *((r2 + 0xc));
    0x00071ff6 ldr r3, [r3]                                      |             r3 = *(r3);
    0x00071ff8 cmp r3, r1                                        |             
                                                                 |             if (r3 != r1) {
    0x00071ffa beq 0x7200a                                       |                 
    0x00071ffc mov r1, r5                                        |                 r1 = r5;
    0x00071ffe mov r0, r8                                        |                 r0 = r8;
    0x00072000 bl 0x174c0                                        |                 fcn_000174c0 (r0, r1);
    0x00072004 ldr r3, [sp, 4]                                   |                 r3 = var_4h;
    0x00072006 str.w fp, [r3, 0xc]                               |                 __asm ("str.w fp, [r3, 0xc]");
                                                                 |             }
                                                                 |             if (r6 != 0) {
    0x0007200a cbnz r6, 0x72050                                  |                 goto label_36;
                                                                 |             }
                                                                 | label_11:
    0x0007200c ldr.w r2, [r8, 0x14]                              |             r2 = *((r8 + 0x14));
                                                                 |         }
    0x00072010 adds r5, 1                                        |         r5++;
    0x00072012 cmp r5, r2                                        |         
    0x00072014 blt 0x71f98                                       |         
                                                                 |     } while (r5 < r2);
                                                                 | label_32:
    0x00072016 ldrd r7, r6, [sp, 4]                              |     __asm ("ldrd r7, r6, [var_4h]");
    0x0007201a b 0x71dea                                         |     goto label_8;
                                                                 | label_30:
    0x0007201c ldrb r2, [r4, 9]                                  |     r2 = *((r4 + 9));
    0x0007201e movs r6, 0                                        |     r6 = 0;
    0x00072020 ldr.w sb, [r4, 4]                                 |     sb = *((r4 + 4));
    0x00072024 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00072026 bne 0x71fc8                                       |         goto label_9;
                                                                 |     }
                                                                 | label_33:
    0x00072028 ldr.w r2, [sb, 0xc]                               |     r2 = *((sb + 0xc));
    0x0007202c ldr r2, [r2, 0x38]                                |     r2 = *((r2 + 0x38));
    0x0007202e ldr r1, [r2, 0x28]                                |     r1 = *((r2 + 0x28));
    0x00072030 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00072032 b 0x71fee                                         |     goto label_10;
                                                                 | label_34:
    0x00072034 ldr.w r1, [sb, 0xc]                               |     r1 = *((sb + 0xc));
    0x00072038 ldr r1, [r1, 0x38]                                |     r1 = *((r1 + 0x38));
    0x0007203a ldr r1, [r1, 0x28]                                |     r1 = *((r1 + 0x28));
    0x0007203c str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x0007203e rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00072040 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00072042 bne 0x71fee                                       |         goto label_10;
                                                                 |     }
                                                                 | label_35:
    0x00072044 mov r0, r4                                        |     r0 = r4;
    0x00072046 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00072048 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0007204c ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0007204e b 0x71fee                                         |     goto label_10;
                                                                 | label_36:
    0x00072050 mov r0, r4                                        |     r0 = r4;
    0x00072052 bl 0x506b4                                        |     fcn_000506b4 (r0, r1);
    0x00072056 b 0x7200c                                         |     goto label_11;
                                                                 | label_31:
    0x00072058 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x0007205c ldrd r7, r6, [sp, 4]                              |     __asm ("ldrd r7, r6, [var_4h]");
                                                                 |     if (r3 == 0) {
    0x00072060 cbnz r3, 0x7206e                                  |         
    0x00072062 ldrb.w r3, [r8, 0x58]                             |         r3 = *((r8 + 0x58));
                                                                 |         if (r3 != 0) {
    0x00072066 cbnz r3, 0x7206e                                  |             goto label_37;
                                                                 |         }
    0x00072068 mov r0, r8                                        |         r0 = r8;
    0x0007206a bl 0x1d600                                        |         fcn_0001d600 (r0);
                                                                 |     }
                                                                 | label_37:
    0x0007206e movs r3, 7                                        |     r3 = 7;
    0x00072070 str r3, [r7, 0xc]                                 |     *((r7 + 0xc)) = r3;
    0x00072072 b 0x71dea                                         |     goto label_8;
                                                                 | label_28:
    0x00072074 bl 0x1390c                                        |     fcn_0001390c (r0);
    0x00072078 b 0x71ece                                         |     goto label_12;
                                                                 | label_29:
    0x0007207a mov.w r3, -1                                      |     r3 = -1;
    0x0007207e str r3, [r6, 0x44]                                |     *((r6 + 0x44)) = r3;
    0x00072080 b 0x71ece                                         |     goto label_12;
                                                                 | label_26:
    0x00072082 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00072086 nop                                               |     
    0x00072088 cdp p0, 6, c0, c2, c2, 0                          |     __asm ("cdp p0, 6, c0, c2, c2, 0");
    0x0007208c lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x0007208e movs r0, r0                                       |     
    0x00072090 invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x720a4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000720a4 ()                                      | void fcn_000720a4 (int16_t arg_38h, int16_t arg_3ch, 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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000720a4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000720a8 sub sp, 0x14                                      |     
    0x000720aa mov r7, r2                                        |     r7 = r2;
    0x000720ac ldr r2, [sp, 0x3c]                                |     r2 = *(arg_3ch);
    0x000720ae mov r8, r3                                        |     r8 = r3;
    0x000720b0 movs r3, 0                                        |     r3 = 0;
    0x000720b2 mov r6, r1                                        |     r6 = r1;
    0x000720b4 mov r4, r0                                        |     r4 = r0;
    0x000720b6 str r3, [r2]                                      |     *(r2) = r3;
    0x000720b8 bl 0x215c8                                        |     r0 = fcn_000215c8 (r0);
    0x000720bc cmp r0, 0                                         |     
    0x000720be it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x000720c0 cmpne r6, 0                                       |         __asm ("cmpne r6, 0");
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x000720c2 beq 0x7216c                                       |         goto label_4;
                                                                 |     }
    0x000720c4 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x000720c6 blx 0xa12c                                        |     fcn_0000a12c ();
    0x000720ca ldrb.w r3, [r4, 0x5f]                             |     r3 = *((r4 + 0x5f));
    0x000720ce cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000720d0 beq 0x72198                                       |         goto label_5;
                                                                 |     }
                                                                 | label_2:
    0x000720d2 movs r5, 0                                        |     r5 = 0;
    0x000720d4 movw fp, 0x201                                    |     fp = 0x201;
                                                                 | label_1:
    0x000720d8 ldr r0, [sp, 0x40]                                |     r0 = *(arg_40h);
    0x000720da mov r3, r8                                        |     r3 = r8;
    0x000720dc mov r2, r7                                        |     r2 = r7;
    0x000720de mov r1, r6                                        |     r1 = r6;
    0x000720e0 str r0, [sp, 8]                                   |     var_8h = r0;
    0x000720e2 ldr r0, [sp, 0x3c]                                |     r0 = *(arg_3ch);
    0x000720e4 str r0, [sp, 4]                                   |     var_4h = r0;
    0x000720e6 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x000720e8 str r0, [sp]                                      |     *(sp) = r0;
    0x000720ea mov r0, r4                                        |     r0 = r4;
    0x000720ec bl 0x71c8c                                        |     r0 = fcn_00071c8c (r0, r1, r2, r3, r4, r5, r6);
    0x000720f0 mov sl, r0                                        |     sl = r0;
    0x000720f2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000720f4 beq 0x721a0                                       |         goto label_6;
                                                                 |     }
    0x000720f6 ldrb.w r3, [r4, 0x57]                             |     r3 = *((r4 + 0x57));
                                                                 |     if (r3 != 0) {
    0x000720fa cbnz r3, 0x72142                                  |         goto label_7;
                                                                 |     }
    0x000720fc cmp r0, fp                                        |     
                                                                 |     if (r0 == fp) {
    0x000720fe beq 0x7213a                                       |         goto label_8;
                                                                 |     }
    0x00072100 cmp r0, 0x11                                      |     
                                                                 |     if (r0 != 0x11) {
    0x00072102 bne 0x72142                                       |         goto label_7;
                                                                 |     }
    0x00072104 ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
                                                                 |     if (r3 != 0) {
    0x00072106 cbnz r3, 0x72134                                  |         goto label_9;
                                                                 |     }
    0x00072108 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x0007210a cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0007210c ble 0x72134                                       |         goto label_9;
                                                                 |     }
    0x0007210e mov sb, r3                                        |     sb = r3;
    0x00072110 b 0x72116                                         |     
                                                                 |     while (r3 >= r3) {
    0x00072112 cmp sb, r2                                        |         
                                                                 |         if (sb >= r2) {
    0x00072114 bge 0x72134                                       |             goto label_9;
                                                                 |         }
                                                                 | label_0:
    0x00072116 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00072118 add.w r3, r3, sb, lsl 4                           |         r3 += (sb << 4);
    0x0007211c add.w sb, sb, 1                                   |         sb++;
    0x00072120 ldr r0, [r3, 0xc]                                 |         r0 = *((r3 + 0xc));
    0x00072122 ldrh.w r3, [r0, 0x4e]                             |         r3 = *((r0 + 0x4e));
    0x00072126 lsls r3, r3, 0x1c                                 |         r3 <<= 0x1c;
    0x00072128 bpl 0x72112                                       |         
                                                                 |     }
    0x0007212a bl 0x17310                                        |     fcn_00017310 (r0);
    0x0007212e ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x00072130 cmp sb, r2                                        |     
                                                                 |     if (sb < r2) {
    0x00072132 blt 0x72116                                       |         goto label_0;
                                                                 |     }
                                                                 |     if (r5 == 0) {
                                                                 | label_9:
    0x00072134 cbnz r5, 0x72142                                  |         
    0x00072136 movs r5, 1                                        |         r5 = 1;
    0x00072138 b 0x720d8                                         |         goto label_1;
                                                                 | label_8:
    0x0007213a cmp r5, 0x19                                      |         
                                                                 |         if (r5 == 0x19) {
    0x0007213c beq 0x72142                                       |             goto label_7;
                                                                 |         }
    0x0007213e adds r5, 1                                        |         r5++;
    0x00072140 b 0x720d8                                         |         goto label_1;
                                                                 |     }
                                                                 | label_7:
    0x00072142 ldrb.w r3, [r4, 0x5f]                             |     r3 = *((r4 + 0x5f));
                                                                 |     if (r3 == 0) {
    0x00072146 cbnz r3, 0x7214e                                  |         
    0x00072148 mov r0, r4                                        |         r0 = r4;
    0x0007214a bl 0x133b8                                        |         fcn_000133b8 (r0);
                                                                 |     }
                                                                 | label_3:
    0x0007214e mov r1, sl                                        |     r1 = sl;
    0x00072150 mov r0, r4                                        |     r0 = r4;
    0x00072152 bl 0x14ab4                                        |     r0 = fcn_00014ab4 (r0, r1);
    0x00072156 mov sl, r0                                        |     sl = r0;
                                                                 |     do {
    0x00072158 movs r3, 0                                        |         r3 = 0;
    0x0007215a ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x0007215c str.w r3, [r4, 0x1c4]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00072160 blx 0x9d10                                        |         fcn_00009d10 ();
    0x00072164 mov r0, sl                                        |         r0 = sl;
    0x00072166 add sp, 0x14                                      |         
    0x00072168 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_4:
    0x0007216c blx 0xa230                                        |         fcn_0000a230 ();
    0x00072170 ldr r2, [pc, 0x44]                                |         
    0x00072172 add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x00072176 ldr r1, [pc, 0x44]                                |         
    0x00072178 movw r3, 0x25ab                                   |         
    0x0007217c movt r3, 2                                        |         r3 = 0x225ab;
    0x00072180 movs r0, 0x15                                     |         r0 = 0x15;
    0x00072182 add r2, pc                                        |         r2 = 0xe433e;
    0x00072184 mov.w sl, 0x15                                    |         sl = 0x15;
    0x00072188 add r1, pc                                        |         r1 = 0xe434a;
    0x0007218a str r4, [sp]                                      |         *(sp) = r4;
    0x0007218c blx 0x9f00                                        |         fcn_00009f00 ();
    0x00072190 mov r0, sl                                        |         r0 = sl;
    0x00072192 add sp, 0x14                                      |         
    0x00072194 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_5:
    0x00072198 mov r0, r4                                        |         r0 = r4;
    0x0007219a bl 0x14528                                        |         fcn_00014528 (r0);
    0x0007219e b 0x720d2                                         |         goto label_2;
                                                                 | label_6:
    0x000721a0 ldrb.w r3, [r4, 0x5f]                             |         r3 = *((r4 + 0x5f));
                                                                 |         if (r3 == 0) {
    0x000721a4 cbnz r3, 0x721ac                                  |             
    0x000721a6 mov r0, r4                                        |             r0 = r4;
    0x000721a8 bl 0x133b8                                        |             fcn_000133b8 (r0);
                                                                 |         }
    0x000721ac ldrb.w r3, [r4, 0x57]                             |         r3 = *((r4 + 0x57));
    0x000721b0 cmp r3, 0                                         |         
    0x000721b2 beq 0x72158                                       |         
                                                                 |     } while (r3 == 0);
    0x000721b4 b 0x7214e                                         |     goto label_3;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x72b60 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00072b60 ()                                      | void fcn_00072b60 (int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00072b60 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00072b64 mov r8, r2                                        |     r8 = r2;
    0x00072b66 ldr.w r2, [pc, 0x534]                             |     r2 = *(0x0007309c);
    0x00072b6a mov sb, r3                                        |     sb = r3;
    0x00072b6c sub sp, 0x2c                                      |     
    0x00072b6e mov r4, r0                                        |     r4 = r0;
    0x00072b70 ldr.w r3, [pc, 0x52c]                             |     
    0x00072b74 mov r5, r1                                        |     r5 = r1;
    0x00072b76 add r2, pc                                        |     r2 += pc;
    0x00072b78 ldr r6, [r0]                                      |     r6 = *(r0);
    0x00072b7a ldr.w fp, [sp, 0x50]                              |     fp = *(arg_50h);
    0x00072b7e ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00072b80 ldr r3, [r3]                                      |     r3 = *(0x730a0);
    0x00072b82 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00072b84 mov.w r3, 0                                       |     r3 = 0;
    0x00072b88 ldrd sl, r3, [sp, 0x54]                           |     __asm ("ldrd sl, r3, [arg_54h]");
    0x00072b8c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00072b8e ldrb.w r3, [r6, 0xb1]                             |     r3 = *((r6 + 0xb1));
                                                                 |     if (r3 != 0) {
    0x00072b92 cbz r3, 0x72b9e                                   |         
    0x00072b94 ldr.w r3, [r6, 0xac]                              |         r3 = *((r6 + 0xac));
    0x00072b98 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00072b9a beq.w 0x72eae                                     |             goto label_18;
                                                                 |         }
                                                                 |     }
    0x00072b9e mov r1, r5                                        |     r1 = r5;
    0x00072ba0 add r3, sp, 0x20                                  |     r3 += var_20h;
    0x00072ba2 mov r2, r8                                        |     r2 = r8;
    0x00072ba4 mov r0, r4                                        |     r0 = r4;
    0x00072ba6 bl 0x20164                                        |     r0 = fcn_00020164 (r0, r1, r2, r3);
    0x00072baa subs r7, r0, 0                                    |     r7 = r0 - 0;
                                                                 |     if (r7 < r0) {
    0x00072bac blt.w 0x72ed8                                     |         goto label_7;
                                                                 |     }
    0x00072bb0 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00072bb4 beq 0x72bc8                                       |         
    0x00072bb6 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x00072bba cmp r3, 0                                         |         
    0x00072bbc it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00072bbe cmpne r7, 1                                       |             __asm ("cmpne r7, 1");
                                                                 |         }
    0x00072bc0 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x00072bc2 moveq r7, 1                                       |             r7 = 1;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x00072bc4 bne.w 0x72f6c                                     |             goto label_19;
                                                                 |         }
                                                                 |     }
    0x00072bc8 ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x00072bca mov r0, r6                                        |     r0 = r6;
    0x00072bcc mov r1, r5                                        |     r1 = r5;
    0x00072bce bl 0x1e9ec                                        |     fcn_0001e9ec (r0, r1);
    0x00072bd2 ldrb.w r3, [r4, 0xd0]                             |     r3 = *((r4 + 0xd0));
    0x00072bd6 mov r8, r0                                        |     r8 = r0;
    0x00072bd8 cmp r3, 3                                         |     
    0x00072bda it ne                                             |     
                                                                 |     if (r3 != 3) {
    0x00072bdc cmpne r3, 1                                       |         __asm ("cmpne r3, 1");
                                                                 |     }
                                                                 |     if (r3 > 3) {
    0x00072bde bhi.w 0x72ef4                                     |         goto label_20;
                                                                 |     }
                                                                 | label_1:
    0x00072be2 ldm.w r5, {r0, r1}                                |     r0 = *(r5);
                                                                 |     r1 = *((r5 + 4));
    0x00072be6 add.w r3, r4, 0xbc                                |     r3 = r4 + 0xbc;
    0x00072bea stm.w r3, {r0, r1}                                |     *(r3) = r0;
                                                                 |     *((r3 + 4)) = r1;
    0x00072bee cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00072bf2 beq.w 0x72ed8                                     |         goto label_7;
                                                                 |     }
                                                                 | label_0:
    0x00072bf6 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00072bfa bne.w 0x72e72                                     |         goto label_21;
                                                                 |     }
    0x00072bfe ldr.w r2, [pc, 0x4a4]                             |     
    0x00072c02 mov r3, r8                                        |     r3 = r8;
    0x00072c04 mov r1, r8                                        |     r1 = r8;
    0x00072c06 mov r0, r4                                        |     r0 = r4;
    0x00072c08 add r2, pc                                        |     r2 = 0xe5cb2;
    0x00072c0a bl 0x39074                                        |     r0 = fcn_00039074 (r0, r1, r2, r3);
    0x00072c0e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00072c10 bne.w 0x72e86                                     |         goto label_2;
                                                                 |     }
                                                                 |     do {
    0x00072c14 ldr r2, [r6, 0x10]                                |         r2 = *((r6 + 0x10));
    0x00072c16 lsls r1, r7, 4                                    |         r1 = r7 << 4;
    0x00072c18 ldrb.w r3, [r6, 0xb0]                             |         r3 = *((r6 + 0xb0));
    0x00072c1c str r1, [sp, 0x18]                                |         var_18h = r1;
    0x00072c1e ldr r2, [r2, r1]                                  |         r2 = *((r2 + r1));
    0x00072c20 cmp r3, 1                                         |         
    0x00072c22 str r2, [sp, 0x14]                                |         var_14h = r2;
                                                                 |         if (r3 == 1) {
    0x00072c24 beq.w 0x72f92                                     |             goto label_22;
                                                                 |         }
    0x00072c28 ldr.w r2, [pc, 0x47c]                             |         
    0x00072c2c cmp.w sb, 1                                       |         
    0x00072c30 add r2, pc                                        |         r2 = 0xe5cdc;
                                                                 |         if (sb != 1) {
    0x00072c32 beq 0x72c3a                                       |             
    0x00072c34 ldr.w r2, [pc, 0x474]                             |             
    0x00072c38 add r2, pc                                        |             r2 = 0xe5ce8;
                                                                 |         }
                                                                 | label_5:
    0x00072c3a ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00072c3c movs r1, 0x12                                     |         r1 = 0x12;
    0x00072c3e mov r0, r4                                        |         r0 = r4;
    0x00072c40 str r3, [sp]                                      |         *(sp) = r3;
    0x00072c42 movs r3, 0                                        |         r3 = 0;
    0x00072c44 bl 0x200fc                                        |         r0 = fcn_000200fc (r0, r1);
    0x00072c48 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00072c4a bne.w 0x72e86                                     |             goto label_2;
                                                                 |         }
    0x00072c4e cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x00072c52 beq.w 0x72f42                                     |             goto label_23;
                                                                 |         }
                                                                 | label_3:
    0x00072c56 ldrb.w r3, [r4, 0xd0]                             |         r3 = *((r4 + 0xd0));
    0x00072c5a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00072c5c beq.w 0x72f00                                     |             goto label_24;
                                                                 |         }
                                                                 | label_8:
    0x00072c60 mov r0, r6                                        |         r0 = r6;
    0x00072c62 movs r2, 0x40                                     |         r2 = 0x40;
    0x00072c64 movs r3, 0                                        |         r3 = 0;
    0x00072c66 bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
    0x00072c6a mov r5, r0                                        |         r5 = r0;
    0x00072c6c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00072c6e beq.w 0x72f9a                                     |             goto label_25;
                                                                 |         }
    0x00072c72 movs r2, 0x3c                                     |         r2 = 0x3c;
    0x00072c74 movs r1, 0                                        |         r1 = 0;
    0x00072c76 adds r0, 4                                        |         r0 += 4;
    0x00072c78 blx 0x97d4                                        |         fcn_000097d4 ();
    0x00072c7c ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x00072c7e ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00072c80 str.w r8, [r5]                                    |         __asm ("str.w r8, [r5]");
    0x00072c84 add r3, r2                                        |         r3 += r2;
    0x00072c86 movs r2, 0xc8                                     |         r2 = 0xc8;
    0x00072c88 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x00072c8a strh r2, [r5, 0x26]                               |         *((r5 + 0x26)) = r2;
    0x00072c8c str r3, [r5, 0x3c]                                |         *((r5 + 0x3c)) = r3;
    0x00072c8e movw r3, 0xffff                                   |         r3 = 0xffff;
    0x00072c92 strh r3, [r5, 0x20]                               |         *((r5 + 0x20)) = r3;
    0x00072c94 movs r3, 1                                        |         r3 = 1;
    0x00072c96 str r3, [r5, 0x18]                                |         *((r5 + 0x18)) = r3;
    0x00072c98 str.w r5, [r4, 0xec]                              |         __asm ("str.w r5, [r4, 0xec]");
    0x00072c9c ldrb.w r2, [r6, 0xb1]                             |         r2 = *((r6 + 0xb1));
    0x00072ca0 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00072ca2 bne.w 0x72ed8                                     |             goto label_7;
                                                                 |         }
    0x00072ca6 ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x00072ca8 str r2, [sp, 0x10]                                |         var_10h = r2;
    0x00072caa cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00072cac beq.w 0x72fa6                                     |             goto label_26;
                                                                 |         }
                                                                 | label_6:
    0x00072cb0 mov r2, r7                                        |         r2 = r7;
    0x00072cb2 movs r1, 1                                        |         r1 = 1;
    0x00072cb4 mov r0, r4                                        |         r0 = r4;
    0x00072cb6 bl 0x4a5bc                                        |         fcn_0004a5bc (r0, r1, r2);
    0x00072cba cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x00072cbe bne.w 0x73044                                     |             goto label_27;
                                                                 |         }
                                                                 | label_12:
    0x00072cc2 ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x00072cc4 movs r2, 2                                        |         r2 = 2;
    0x00072cc6 ldr.w r8, [sp, 0x10]                              |         r8 = var_10h;
    0x00072cca movs r1, 0x63                                     |         r1 = 0x63;
    0x00072ccc str r2, [sp]                                      |         *(sp) = r2;
    0x00072cce mov r2, r7                                        |         r2 = r7;
    0x00072cd0 add.w sb, r3, 3                                   |         sb = r3 + 3;
    0x00072cd4 adds r5, r3, 1                                    |         r5 = r3 + 1;
    0x00072cd6 adds r3, 2                                        |         r3 += 2;
    0x00072cd8 mov r0, r8                                        |         r0 = r8;
    0x00072cda str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00072cdc strd r5, r3, [r4, 0x58]                           |         __asm ("strd r5, r3, [r4, 0x58]");
    0x00072ce0 mov r3, sb                                        |         r3 = sb;
    0x00072ce2 str.w sb, [r4, 0x2c]                              |         __asm ("str.w sb, [r4, 0x2c]");
    0x00072ce6 str r5, [sp, 0x14]                                |         var_14h = r5;
    0x00072ce8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00072cec ldr.w r2, [r8, 0x98]                              |         r2 = *((r8 + 0x98));
    0x00072cf0 movs r3, 1                                        |         r3 = 1;
    0x00072cf2 lsls r3, r7                                       |         r3 <<= r7;
    0x00072cf4 cmp r7, 1                                         |         
    0x00072cf6 orr.w r2, r2, r3                                  |         r2 |= r3;
    0x00072cfa str.w r2, [r8, 0x98]                              |         __asm ("str.w r2, [r8, 0x98]");
                                                                 |         if (r7 != 1) {
    0x00072cfe beq 0x72d1a                                       |             
    0x00072d00 ldr.w r2, [r8]                                    |             r2 = *(r8);
    0x00072d04 ldr r1, [sp, 0x18]                                |             r1 = var_18h;
    0x00072d06 ldr r2, [r2, 0x10]                                |             r2 = *((r2 + 0x10));
    0x00072d08 add r2, r1                                        |             r2 += r1;
    0x00072d0a ldr r2, [r2, 4]                                   |             r2 = *((r2 + 4));
    0x00072d0c ldrb r2, [r2, 9]                                  |             r2 = *((r2 + 9));
                                                                 |             if (r2 == 0) {
    0x00072d0e cbz r2, 0x72d1a                                   |                 goto label_28;
                                                                 |             }
    0x00072d10 ldr.w r2, [r8, 0x9c]                              |             r2 = *((r8 + 0x9c));
    0x00072d14 orrs r2, r3                                       |             r2 |= r3;
    0x00072d16 str.w r2, [r8, 0x9c]                              |             __asm ("str.w r2, [r8, 0x9c]");
                                                                 |         }
                                                                 | label_28:
    0x00072d1a ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00072d1c ldrd r8, r3, [r3, 0x6c]                           |         __asm ("ldrd r8, r3, [r3, 0x6c]");
    0x00072d20 cmp r8, r3                                        |         
                                                                 |         if (r8 >= r3) {
    0x00072d22 bge.w 0x7304e                                     |             goto label_29;
                                                                 |         }
    0x00072d26 ldr r5, [sp, 0x10]                                |         r5 = var_10h;
    0x00072d28 add.w r3, r8, r8, lsl 2                           |         r3 = r8 + (r8 << 2);
    0x00072d2c add.w r2, r8, 1                                   |         r2 = r8 + 1;
    0x00072d30 lsls r3, r3, 2                                    |         r3 <<= 2;
    0x00072d32 movs r1, 0                                        |         r1 = 0;
    0x00072d34 ldr r0, [r5, 0x68]                                |         r0 = *((r5 + 0x68));
    0x00072d36 mov.w ip, 0xf                                     |         
    0x00072d3a str r2, [r5, 0x6c]                                |         *((r5 + 0x6c)) = r2;
    0x00072d3c adds r2, r0, r3                                   |         r2 = r0 + r3;
    0x00072d3e strd sb, r1, [r2, 4]                              |         __asm ("strd sb, r1, [r2, 4]");
    0x00072d42 strd r1, r1, [r2, 0xc]                            |         __asm ("strd r1, r1, [r2, 0xc]");
    0x00072d46 str.w ip, [r0, r3]                                |         __asm ("str.w ip, [r0, r3]");
                                                                 | label_13:
    0x00072d4a ldr r3, [r6, 0x20]                                |         r3 = *((r6 + 0x20));
    0x00072d4c movs r1, 0x64                                     |         r1 = 0x64;
    0x00072d4e ldr r5, [sp, 0x10]                                |         r5 = var_10h;
    0x00072d50 lsls r2, r3, 0x1e                                 |         r2 = r3 << 0x1e;
    0x00072d52 mov r2, r7                                        |         r2 = r7;
    0x00072d54 ite mi                                            |         
                                                                 |         if (r2 >= r3) {
    0x00072d56 movmi r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r2 < r3) {
    0x00072d58 movpl r3, 4                                       |             r3 = 4;
                                                                 |         }
    0x00072d5a str r3, [sp]                                      |         *(sp) = r3;
    0x00072d5c mov r0, r5                                        |         r0 = r5;
    0x00072d5e movs r3, 2                                        |         r3 = 2;
    0x00072d60 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00072d64 ldrb.w r3, [r6, 0x54]                             |         r3 = *((r6 + 0x54));
    0x00072d68 mov r2, r7                                        |         r2 = r7;
    0x00072d6a movs r1, 0x64                                     |         r1 = 0x64;
    0x00072d6c mov r0, r5                                        |         r0 = r5;
    0x00072d6e str r3, [sp]                                      |         *(sp) = r3;
    0x00072d70 movs r3, 5                                        |         r3 = 5;
    0x00072d72 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00072d76 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00072d78 cmp.w r8, 0                                       |         
    0x00072d7c ldr r0, [r5, 0x6c]                                |         r0 = *((r5 + 0x6c));
    0x00072d7e ldr r3, [r2]                                      |         r3 = *(r2);
    0x00072d80 it lt                                             |         
                                                                 |         if (r8 >= 0) {
    0x00072d82 addlt r8, r0, -1                                  |             r8 = r0 + -1;
                                                                 |         }
    0x00072d86 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
    0x00072d8a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00072d8c bne.w 0x7300a                                     |             goto label_30;
                                                                 |         }
    0x00072d90 ldr r3, [r2, 0x68]                                |         r3 = *((r2 + 0x68));
    0x00072d92 add.w r8, r8, r8, lsl 2                           |         r8 += (r8 << 2);
    0x00072d96 add.w r3, r3, r8, lsl 2                           |         r3 += (r8 << 2);
                                                                 | label_10:
    0x00072d9a orrs.w r1, fp, sl                                 |         r1 = fp | sl;
    0x00072d9e str r0, [r3, 8]                                   |         *((r3 + 8)) = r0;
                                                                 |         if (r1 == fp) {
    0x00072da0 beq.w 0x72fda                                     |             goto label_31;
                                                                 |         }
    0x00072da4 movs r2, 0                                        |         r2 = 0;
    0x00072da6 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00072da8 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00072daa movs r1, 0x47                                     |         r1 = 0x47;
    0x00072dac str r2, [sp]                                      |         *(sp) = r2;
    0x00072dae bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_9:
    0x00072db2 ldr r6, [r4, 8]                                   |         r6 = *((r4 + 8));
    0x00072db4 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00072db6 beq.w 0x73012                                     |             goto label_32;
                                                                 |         }
                                                                 | label_11:
    0x00072dba cmp r7, 1                                         |         
                                                                 |         if (r7 != 1) {
    0x00072dbc beq 0x72dde                                       |             
    0x00072dbe ldr r3, [r4]                                      |             r3 = *(r4);
    0x00072dc0 ldr r2, [sp, 0x18]                                |             r2 = var_18h;
    0x00072dc2 ldr r3, [r3, 0x10]                                |             r3 = *((r3 + 0x10));
    0x00072dc4 add r3, r2                                        |             r3 += r2;
    0x00072dc6 ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x00072dc8 ldrb r3, [r3, 9]                                  |             r3 = *((r3 + 9));
                                                                 |             if (r3 == 0) {
    0x00072dca cbz r3, 0x72dde                                   |                 goto label_33;
                                                                 |             }
    0x00072dcc ldr r3, [pc, 0x2e0]                               |             
    0x00072dce mov r1, r7                                        |             r1 = r7;
    0x00072dd0 mov r0, r4                                        |             r0 = r4;
    0x00072dd2 add r3, pc                                        |             r3 = 0xe5e86;
    0x00072dd4 str r3, [sp]                                      |             *(sp) = r3;
    0x00072dd6 movs r3, 1                                        |             r3 = 1;
    0x00072dd8 mov r2, r3                                        |             r2 = r3;
    0x00072dda bl 0x2ba0c                                        |             fcn_0002ba0c (r0, r1, r2, r3, r4);
                                                                 |         }
                                                                 | label_33:
    0x00072dde movs r3, 5                                        |         r3 = 5;
    0x00072de0 mov r0, r6                                        |         r0 = r6;
    0x00072de2 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00072de4 movs r2, 0                                        |         r2 = 0;
    0x00072de6 movs r3, 1                                        |         r3 = 1;
    0x00072de8 movs r1, 0x71                                     |         r1 = 0x71;
    0x00072dea str r7, [sp]                                      |         *(sp) = r7;
    0x00072dec bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00072df0 ldr r3, [r4, 0x28]                                |         r3 = *((r4 + 0x28));
                                                                 |         if (r3 == 0) {
    0x00072df2 cbnz r3, 0x72df8                                  |             
    0x00072df4 movs r3, 1                                        |             r3 = 1;
    0x00072df6 str r3, [r4, 0x28]                                |             *((r4 + 0x28)) = r3;
                                                                 |         }
    0x00072df8 ldr r6, [sp, 0x10]                                |         r6 = var_10h;
    0x00072dfa movs r4, 0                                        |         r4 = 0;
    0x00072dfc ldr r5, [sp, 0x14]                                |         r5 = var_14h;
    0x00072dfe mov r2, r4                                        |         r2 = r4;
    0x00072e00 movs r1, 0x7f                                     |         r1 = 0x7f;
    0x00072e02 str r4, [sp]                                      |         *(sp) = r4;
    0x00072e04 mov r0, r6                                        |         r0 = r6;
    0x00072e06 mov r3, r5                                        |         r3 = r5;
    0x00072e08 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00072e0c mov.w r3, -1                                      |         r3 = -1;
    0x00072e10 movs r2, 6                                        |         r2 = 6;
    0x00072e12 str r3, [sp, 8]                                   |         var_8h = r3;
    0x00072e14 movs r1, 0x4d                                     |         r1 = 0x4d;
    0x00072e16 ldr r3, [pc, 0x29c]                               |         
    0x00072e18 mov r0, r6                                        |         r0 = r6;
    0x00072e1a str r4, [sp]                                      |         *(sp) = r4;
    0x00072e1c add r3, pc                                        |         
    0x00072e1e add.w r3, r3, 0x224                               |         r3 = 0xe60fa;
    0x00072e22 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00072e24 mov r3, sb                                        |         r3 = sb;
    0x00072e26 bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00072e2a mov r3, sb                                        |         r3 = sb;
    0x00072e2c mov r2, r4                                        |         r2 = r4;
    0x00072e2e movs r1, 0x80                                     |         r1 = 0x80;
    0x00072e30 mov r0, r6                                        |         r0 = r6;
    0x00072e32 str r5, [sp]                                      |         *(sp) = r5;
    0x00072e34 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00072e38 ldr r3, [r6, 0x6c]                                |         r3 = *((r6 + 0x6c));
    0x00072e3a cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x00072e3c ble 0x72e4e                                       |             
    0x00072e3e ldr r2, [r6, 0x68]                                |             r2 = *((r6 + 0x68));
    0x00072e40 add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x00072e44 movs r1, 8                                        |             r1 = 8;
    0x00072e46 add.w r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
    0x00072e4a strh r1, [r2, -0x12]                              |             *((r2 - 0x12)) = r1;
                                                                 |         }
    0x00072e4e ldr r2, [pc, 0x268]                               |         
    0x00072e50 ldr r3, [pc, 0x24c]                               |         r3 = *(0x730a0);
    0x00072e52 add r2, pc                                        |         r2 = 0xe5f10;
    0x00072e54 ldr r3, [r2, r3]                                  |         r3 = *(0xe5f10);
    0x00072e56 ldr r2, [r3]                                      |         r2 = *(0xe5f10);
    0x00072e58 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00072e5a eors r2, r3                                       |         r2 ^= r3;
    0x00072e5c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00072e60 bne.w 0x73098                                     |             goto label_34;
                                                                 |         }
    0x00072e64 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00072e66 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00072e68 add sp, 0x2c                                      |         
    0x00072e6a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00072e6e b.w 0x2a29c                                       |         void (*0x2a29c)() ();
                                                                 | label_21:
    0x00072e72 ldr r2, [pc, 0x248]                               |         
    0x00072e74 mov r3, r8                                        |         r3 = r8;
    0x00072e76 mov r1, r8                                        |         r1 = r8;
    0x00072e78 mov r0, r4                                        |         r0 = r4;
    0x00072e7a add r2, pc                                        |         r2 = 0xe5f3c;
    0x00072e7c bl 0x39074                                        |         r0 = fcn_00039074 (r0, r1, r2, r3);
    0x00072e80 cmp r0, 0                                         |         
    0x00072e82 beq.w 0x72c14                                     |         
                                                                 |     } while (r0 == 0);
                                                                 | label_2:
    0x00072e86 movs r3, 1                                        |     r3 = 1;
    0x00072e88 ldr r2, [pc, 0x234]                               |     
    0x00072e8a strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00072e8c ldr r3, [pc, 0x210]                               |     r3 = *(0x730a0);
    0x00072e8e add r2, pc                                        |     r2 = 0xe5f52;
    0x00072e90 ldr r3, [r2, r3]                                  |     r3 = *(0xe5f52);
    0x00072e92 ldr r2, [r3]                                      |     r2 = *(0xe5f52);
    0x00072e94 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00072e96 eors r2, r3                                       |     r2 ^= r3;
    0x00072e98 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00072e9c bne.w 0x73098                                     |         goto label_34;
                                                                 |     }
    0x00072ea0 mov r1, r8                                        |     r1 = r8;
    0x00072ea2 mov r0, r6                                        |     r0 = r6;
    0x00072ea4 add sp, 0x2c                                      |     
    0x00072ea6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00072eaa b.w 0x137d0                                       |     void (*0x137d0)() ();
                                                                 | label_18:
    0x00072eae ldrb.w r7, [r6, 0xb0]                             |     r7 = *((r6 + 0xb0));
    0x00072eb2 cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x00072eb4 beq 0x72f66                                       |         goto label_35;
                                                                 |     }
    0x00072eb6 ldr r1, [pc, 0x20c]                               |     
    0x00072eb8 add r1, pc                                        |     r1 = 0xe5f82;
                                                                 | label_4:
    0x00072eba mov r0, r6                                        |     r0 = r6;
    0x00072ebc bl 0x1e948                                        |     r0 = fcn_0001e948 (r0, r1);
    0x00072ec0 mov r8, r0                                        |     r8 = r0;
    0x00072ec2 ldm.w r5, {r0, r1}                                |     r0 = *(r5);
                                                                 |     r1 = *((r5 + 4));
    0x00072ec6 add.w r3, r4, 0xbc                                |     r3 = r4 + 0xbc;
    0x00072eca str r5, [sp, 0x20]                                |     var_20h = r5;
    0x00072ecc stm.w r3, {r0, r1}                                |     *(r3) = r0;
                                                                 |     *((r3 + 4)) = r1;
    0x00072ed0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00072ed4 bne.w 0x72bf6                                     |         goto label_0;
                                                                 |     }
                                                                 | label_7:
    0x00072ed8 ldr r2, [pc, 0x1ec]                               |     
    0x00072eda ldr r3, [pc, 0x1c4]                               |     r3 = *(0x730a2);
    0x00072edc add r2, pc                                        |     r2 = 0xe5fa8;
    0x00072ede ldr r3, [r2, r3]                                  |     r3 = *(0xe5fa8);
    0x00072ee0 ldr r2, [r3]                                      |     r2 = *(0xe5fa8);
    0x00072ee2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00072ee4 eors r2, r3                                       |     r2 ^= r3;
    0x00072ee6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00072eea bne.w 0x73098                                     |         goto label_34;
                                                                 |     }
    0x00072eee add sp, 0x2c                                      |     
    0x00072ef0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_20:
    0x00072ef4 mov r1, r0                                        |     r1 = r0;
    0x00072ef6 mov r2, r5                                        |     r2 = r5;
    0x00072ef8 mov r0, r4                                        |     r0 = r4;
    0x00072efa bl 0x1ee7c                                        |     fcn_0001ee7c (r0, r1, r2);
    0x00072efe b 0x72be2                                         |     goto label_1;
                                                                 | label_24:
    0x00072f00 ldr r3, [r6, 0x10]                                |     r3 = *((r6 + 0x10));
    0x00072f02 mov r0, r4                                        |     r0 = r4;
    0x00072f04 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00072f06 ldr.w sb, [r3, r2]                                |     sb = *((r3 + r2));
    0x00072f0a bl 0x72b28                                        |     r0 = fcn_00072b28 (r0);
    0x00072f0e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00072f10 bne 0x72e86                                       |         goto label_2;
                                                                 |     }
    0x00072f12 mov r2, sb                                        |     r2 = sb;
    0x00072f14 mov r1, r8                                        |     r1 = r8;
    0x00072f16 mov r0, r6                                        |     r0 = r6;
    0x00072f18 bl 0x38d4c                                        |     r0 = fcn_00038d4c (r0, r1, r2, r3);
    0x00072f1c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00072f1e beq 0x72fbc                                       |         goto label_36;
                                                                 |     }
    0x00072f20 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00072f22 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00072f24 bne 0x73020                                       |         goto label_37;
                                                                 |     }
    0x00072f26 ldrb.w r3, [r0, 0x2b]                             |     r3 = *((r0 + 0x2b));
    0x00072f2a cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00072f2c beq.w 0x7306c                                     |         goto label_38;
                                                                 |     }
    0x00072f30 ldr r2, [pc, 0x198]                               |     
    0x00072f32 add r2, pc                                        |     r2 = 0xe6002;
                                                                 | label_15:
    0x00072f34 ldr r1, [pc, 0x198]                               |     
    0x00072f36 mov r3, r5                                        |     r3 = r5;
    0x00072f38 mov r0, r4                                        |     r0 = r4;
    0x00072f3a add r1, pc                                        |     r1 = 0xe600e;
    0x00072f3c bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00072f40 b 0x72e86                                         |     goto label_2;
                                                                 | label_23:
    0x00072f42 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00072f44 mov r2, r8                                        |     r2 = r8;
    0x00072f46 mov r0, r4                                        |     r0 = r4;
    0x00072f48 str r3, [sp]                                      |     *(sp) = r3;
    0x00072f4a ldr r3, [pc, 0x188]                               |     
    0x00072f4c add r3, pc                                        |     r3 = 0xe6026;
    0x00072f4e add.w r3, r3, fp, lsl 1                           |     r3 += (fp << 1);
    0x00072f52 add r3, sb                                        |     r3 += sb;
    0x00072f54 ldrb.w r1, [r3, 0x220]                            |     r1 = *((r3 + 0x220));
    0x00072f58 mov r3, sl                                        |     r3 = sl;
    0x00072f5a bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00072f5e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00072f60 beq.w 0x72c56                                     |         goto label_3;
                                                                 |     }
    0x00072f64 b 0x72e86                                         |     goto label_2;
                                                                 | label_35:
    0x00072f66 ldr r1, [pc, 0x170]                               |     
    0x00072f68 add r1, pc                                        |     r1 = 0xe6046;
    0x00072f6a b 0x72eba                                         |     goto label_4;
                                                                 | label_19:
    0x00072f6c ldr r2, [pc, 0x16c]                               |     
    0x00072f6e ldr r3, [pc, 0x130]                               |     r3 = *(0x730a2);
    0x00072f70 add r2, pc                                        |     r2 = 0xe6050;
    0x00072f72 ldr r3, [r2, r3]                                  |     r3 = *(0xe6050);
    0x00072f74 ldr r2, [r3]                                      |     r2 = *(0xe6050);
    0x00072f76 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00072f78 eors r2, r3                                       |     r2 ^= r3;
    0x00072f7a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00072f7e bne.w 0x73098                                     |         goto label_34;
                                                                 |     }
    0x00072f82 ldr r1, [pc, 0x15c]                               |     
    0x00072f84 mov r0, r4                                        |     r0 = r4;
    0x00072f86 add r1, pc                                        |     r1 = 0xe606c;
    0x00072f88 add sp, 0x2c                                      |     
    0x00072f8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00072f8e b.w 0x1d554                                       |     void (*0x1d554)() ();
                                                                 | label_22:
    0x00072f92 ldr r2, [pc, 0x150]                               |     
    0x00072f94 mov sb, r3                                        |     sb = r3;
    0x00072f96 add r2, pc                                        |     r2 = 0xe6080;
    0x00072f98 b 0x72c3a                                         |     goto label_5;
                                                                 | label_25:
    0x00072f9a ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00072f9c movs r2, 7                                        |     r2 = 7;
    0x00072f9e str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x00072fa0 adds r3, 1                                        |     r3++;
    0x00072fa2 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x00072fa4 b 0x72e86                                         |     goto label_2;
                                                                 | label_26:
    0x00072fa6 ldr r2, [r4, 0x74]                                |     r2 = *((r4 + 0x74));
    0x00072fa8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00072faa beq 0x73060                                       |         goto label_39;
                                                                 |     }
                                                                 | label_14:
    0x00072fac mov r0, r4                                        |     r0 = r4;
    0x00072fae bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x00072fb2 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x00072fb4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00072fb6 bne.w 0x72cb0                                     |         goto label_6;
                                                                 |     }
    0x00072fba b 0x72ed8                                         |     goto label_7;
                                                                 | label_36:
    0x00072fbc mov r2, sb                                        |     r2 = sb;
    0x00072fbe mov r1, r8                                        |     r1 = r8;
    0x00072fc0 mov r0, r6                                        |     r0 = r6;
    0x00072fc2 bl 0x18a0c                                        |     r0 = fcn_00018a0c (r0, r1, r2, r3);
    0x00072fc6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00072fc8 beq.w 0x72c60                                     |         goto label_8;
                                                                 |     }
    0x00072fcc ldr r1, [pc, 0x118]                               |     
    0x00072fce mov r2, r8                                        |     r2 = r8;
    0x00072fd0 mov r0, r4                                        |     r0 = r4;
    0x00072fd2 add r1, pc                                        |     r1 = 0xe60be;
    0x00072fd4 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00072fd8 b 0x72e86                                         |     goto label_2;
                                                                 | label_31:
    0x00072fda ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00072fdc ldr r3, [r3, 0x70]                                |     r3 = *((r3 + 0x70));
    0x00072fde cmp r0, r3                                        |     
                                                                 |     if (r0 >= r3) {
    0x00072fe0 bge 0x73080                                       |         goto label_40;
                                                                 |     }
    0x00072fe2 ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x00072fe4 add.w r3, r0, r0, lsl 2                           |     r3 = r0 + (r0 << 2);
    0x00072fe8 adds r2, r0, 1                                    |     r2 = r0 + 1;
    0x00072fea lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00072fec mov.w ip, 1                                       |     
    0x00072ff0 ldr r6, [r5, 0x68]                                |     r6 = *((r5 + 0x68));
    0x00072ff2 str r2, [r5, 0x6c]                                |     *((r5 + 0x6c)) = r2;
    0x00072ff4 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x00072ff6 adds r2, r6, r3                                   |     r2 = r6 + r3;
    0x00072ff8 str r1, [r2, 0x10]                                |     *((r2 + 0x10)) = r1;
    0x00072ffa strd r5, ip, [r2, 8]                              |     __asm ("strd r5, ip, [r2, 8]");
    0x00072ffe str r7, [r2, 4]                                   |     *((r2 + 4)) = r7;
    0x00073000 movs r2, 0x93                                     |     r2 = 0x93;
    0x00073002 str r2, [r6, r3]                                  |     *((r6 + r3)) = r2;
                                                                 | label_16:
    0x00073004 str.w r0, [r4, 0x84]                              |     __asm ("str.w r0, [r4, 0x84]");
    0x00073008 b 0x72db2                                         |     goto label_9;
                                                                 | label_30:
    0x0007300a ldr r3, [pc, 0xe0]                                |     
    0x0007300c add r3, pc                                        |     r3 = 0xe60fe;
    0x0007300e adds r3, 4                                        |     r3 += 4;
    0x00073010 b 0x72d9a                                         |     goto label_10;
                                                                 | label_32:
    0x00073012 ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x00073014 cbz r3, 0x73072                                   |     
                                                                 |     while (1) {
    0x00073016 mov r0, r4                                        |         r0 = r4;
    0x00073018 bl 0x29b0c                                        |         r0 = fcn_00029b0c (r0);
    0x0007301c mov r6, r0                                        |         r6 = r0;
    0x0007301e b 0x72dba                                         |         goto label_11;
                                                                 | label_37:
    0x00073020 ldr r0, [r4, 0x74]                                |         r0 = *((r4 + 0x74));
    0x00073022 movs r3, 1                                        |         r3 = 1;
    0x00073024 lsls r3, r7                                       |         r3 <<= r7;
    0x00073026 cmp r0, 0                                         |         
    0x00073028 it eq                                             |         
                                                                 |         if (r0 != 0) {
    0x0007302a moveq r0, r4                                      |             r0 = r4;
                                                                 |         }
    0x0007302c ldr r2, [r0, 0x54]                                |         r2 = *((r0 + 0x54));
    0x0007302e tst r2, r3                                        |         
                                                                 |         if ((r2 & r3) == 0) {
    0x00073030 bne 0x7303c                                       |             
    0x00073032 cmp r7, 1                                         |             
    0x00073034 orr.w r2, r2, r3                                  |             r2 |= r3;
    0x00073038 str r2, [r0, 0x54]                                |             *((r0 + 0x54)) = r2;
                                                                 |             if (r7 == 1) {
    0x0007303a beq 0x73092                                       |                 goto label_41;
                                                                 |             }
                                                                 |         }
                                                                 | label_17:
    0x0007303c mov r0, r4                                        |         r0 = r4;
    0x0007303e bl 0x2b228                                        |         fcn_0002b228 (r0, r1);
    0x00073040 invalid                                           |         
                                                                 | label_27:
    0x00073044 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00073046 movs r1, 0xaa                                     |         r1 = 0xaa;
    0x00073048 bl 0x2a29c                                        |         fcn_0002a29c (r0, r1);
    0x0007304c b 0x72cc2                                         |         goto label_12;
                                                                 | label_29:
    0x0007304e movs r3, 0                                        |         r3 = 0;
    0x00073050 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00073052 mov r2, sb                                        |         r2 = sb;
    0x00073054 movs r1, 0xf                                      |         r1 = 0xf;
    0x00073056 str r3, [sp]                                      |         *(sp) = r3;
    0x00073058 bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007305c mov r8, r0                                        |         r8 = r0;
    0x0007305e b 0x72d4a                                         |         goto label_13;
                                                                 | label_39:
    0x00073060 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00073062 ldr r2, [r2, 0x50]                                |         r2 = *((r2 + 0x50));
    0x00073064 lsls r1, r2, 0x1c                                 |         r1 = r2 << 0x1c;
    0x00073066 it pl                                             |         
                                                                 |         if (r1 < r2) {
    0x00073068 strbpl r3, [r4, 0x17]                             |             *((r4 + 0x17)) = r3;
                                                                 |         }
    0x0007306a b 0x72fac                                         |         goto label_14;
                                                                 | label_38:
    0x0007306c ldr r2, [pc, 0x80]                                |         
    0x0007306e add r2, pc                                        |         r2 = 0xe6162;
    0x00073070 b 0x72f34                                         |         goto label_15;
    0x00073072 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00073074 ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x00073076 lsls r3, r3, 0x1c                                 |         r3 <<= 0x1c;
    0x00073078 itt pl                                            |         
                                                                 |         if (r3 < r3) {
    0x0007307a movpl r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r3 < r3) {
    0x0007307c strbpl r3, [r4, 0x17]                             |             *((r4 + 0x17)) = r3;
                                                                 |         }
    0x0007307e b 0x73016                                         |         
                                                                 |     }
                                                                 | label_40:
    0x00073080 movs r2, 1                                        |     r2 = 1;
    0x00073082 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00073084 str r2, [sp]                                      |     *(sp) = r2;
    0x00073086 movs r1, 0x93                                     |     r1 = 0x93;
    0x00073088 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0007308a mov r2, r7                                        |     r2 = r7;
    0x0007308c bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00073090 b 0x73004                                         |     goto label_16;
                                                                 | label_41:
    0x00073092 bl 0x4a260                                        |     fcn_0004a260 (r0);
    0x00073096 b 0x7303c                                         |     goto label_17;
                                                                 | label_34:
    0x00073098 blx 0x9b44                                        |     fcn_00009b44 ();
    0x0007309c svc 0x8a                                          |     __asm ("svc 0x8a");
    0x0007309e movs r2, r0                                       |     r2 = r0;
    0x000730a0 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x000730a2 movs r0, r0                                       |     
    0x000730a4 push {r2, r3, r5, r6}                             |     
    0x000730a6 movs r1, r0                                       |     r1 = r0;
    0x000730a8 invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x74ad0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00074ad0 ()                                      | void fcn_00074ad0 (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00074ad0 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00074ad4 mov r4, r1                                        |     r4 = r1;
    0x00074ad6 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00074ad8 sub sp, 0xc                                       |     
    0x00074ada ldrb.w r1, [r5, 0x57]                             |     r1 = *((r5 + 0x57));
    0x00074ade cbz r1, 0x74aee                                   |     
                                                                 |     while (r0 == 0) {
                                                                 | label_0:
    0x00074ae0 mov r1, r4                                        |         r1 = r4;
    0x00074ae2 mov r0, r5                                        |         r0 = r5;
    0x00074ae4 add sp, 0xc                                       |         
    0x00074ae6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00074aea b.w 0x16a58                                       |         void (*0x16a58)() ();
    0x00074aee add.w r2, r4, 8                                   |         r2 = r4 + 8;
    0x00074af2 mov sl, r0                                        |         sl = r0;
    0x00074af4 bl 0x73364                                        |         r0 = fcn_00073364 (r0, r1, r2);
    0x00074af8 mov r6, r0                                        |         r6 = r0;
    0x00074afa cmp r0, 0                                         |         
    0x00074afc beq 0x74ae0                                       |         
                                                                 |     }
    0x00074afe ldrb.w r3, [r0, 0x2b]                             |     r3 = *((r0 + 0x2b));
    0x00074b02 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00074b04 beq.w 0x74c68                                     |         goto label_4;
                                                                 |     }
    0x00074b08 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00074b0a beq.w 0x74c58                                     |         goto label_5;
                                                                 |     }
    0x00074b0e mov r1, r0                                        |     r1 = r0;
    0x00074b10 mov r0, sl                                        |     r0 = sl;
    0x00074b12 bl 0x20728                                        |     r0 = fcn_00020728 (r0, r1);
    0x00074b16 mov sb, r0                                        |     sb = r0;
    0x00074b18 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00074b1a bne 0x74ae0                                       |         goto label_0;
                                                                 |     }
    0x00074b1c ldr.w r3, [sl, 0x74]                              |     r3 = *((sl + 0x74));
    0x00074b20 movs r2, 1                                        |     r2 = 1;
    0x00074b22 cmp r3, 0                                         |     
    0x00074b24 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00074b26 moveq r3, sl                                      |         r3 = sl;
                                                                 |     }
    0x00074b28 strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
    0x00074b2a ldr r1, [r6, 0x3c]                                |     r1 = *((r6 + 0x3c));
    0x00074b2c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00074b2e beq.w 0x74c74                                     |         goto label_6;
                                                                 |     }
    0x00074b32 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00074b34 mov r7, r0                                        |     r7 = r0;
    0x00074b36 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00074b38 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00074b3a beq 0x74b46                                       |         goto label_3;
                                                                 |     }
                                                                 |     do {
    0x00074b3c ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
    0x00074b3e adds r3, 0x10                                     |         r3 += 0x10;
    0x00074b40 adds r7, 1                                        |         r7++;
    0x00074b42 cmp r1, r2                                        |         
    0x00074b44 bne 0x74b3c                                       |         
                                                                 |     } while (r1 != r2);
                                                                 | label_3:
    0x00074b46 mov r0, r5                                        |     r0 = r5;
    0x00074b48 movs r2, 0x40                                     |     r2 = 0x40;
    0x00074b4a movs r3, 0                                        |     r3 = 0;
    0x00074b4c bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00074b50 mov r8, r0                                        |     r8 = r0;
    0x00074b52 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00074b54 beq 0x74ae0                                       |         goto label_0;
                                                                 |     }
    0x00074b56 movs r2, 0x40                                     |     r2 = 0x40;
    0x00074b58 movs r1, 0                                        |     r1 = 0;
    0x00074b5a blx 0x97d4                                        |     fcn_000097d4 ();
    0x00074b5e ldrsh.w r2, [r6, 0x22]                            |     r2 = *((r6 + 0x22));
    0x00074b62 mov r0, r5                                        |     r0 = r5;
    0x00074b64 str.w r8, [sl, 0xec]                              |     __asm ("str.w r8, [sl, 0xec]");
    0x00074b68 adds r3, r2, 6                                    |     r3 = r2 + 6;
    0x00074b6a strh.w r2, [r8, 0x22]                             |     *((r8 + 0x22)) = r2;
    0x00074b6e subs r2, 1                                        |     r2--;
    0x00074b70 it pl                                             |     
                                                                 |     if (r2 < 1) {
    0x00074b72 movpl r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x00074b74 movs r2, 1                                        |     r2 = 1;
    0x00074b76 asrs r3, r3, 3                                    |     r3 >>= 3;
    0x00074b78 str.w r2, [r8, 0x18]                              |     __asm ("str.w r2, [r8, 0x18]");
    0x00074b7c adds r3, 1                                        |     r3++;
    0x00074b7e lsl.w sl, r3, 4                                   |     sl = r3 << 4;
    0x00074b82 add.w sl, sl, r3, lsl 3                           |     sl += (r3 << 3);
    0x00074b86 movs r3, 0                                        |     r3 = 0;
    0x00074b88 lsl.w sl, sl, 2                                   |     sl <<= 2;
    0x00074b8c mov r2, sl                                        |     r2 = sl;
    0x00074b8e bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00074b92 mov fp, r0                                        |     
                                                                 |     if (r0 != 0) {
    0x00074b94 cbz r0, 0x74b9e                                   |         
    0x00074b96 mov r2, sl                                        |         r2 = sl;
    0x00074b98 movs r1, 0                                        |         r1 = 0;
    0x00074b9a blx 0x97d4                                        |         fcn_000097d4 ();
                                                                 |     }
    0x00074b9e ldr r1, [pc, 0xe0]                                |     
    0x00074ba0 mov r0, r5                                        |     r0 = r5;
    0x00074ba2 str.w fp, [r8, 4]                                 |     __asm ("str.w fp, [r8, 4]");
    0x00074ba6 ldr r2, [r6]                                      |     r2 = *(r6);
    0x00074ba8 add r1, pc                                        |     r1 = 0xe982e;
    0x00074baa bl 0x20e84                                        |     r0 = fcn_00020e84 (r0);
    0x00074bae mov r3, r0                                        |     r3 = r0;
    0x00074bb0 str.w r0, [r8]                                    |     __asm ("str.w r0, [r8]");
    0x00074bb4 ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
    0x00074bb8 cmp r3, 0                                         |     
    0x00074bba it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00074bbc cmpne r0, 0                                       |         __asm ("cmpne r0, 0");
                                                                 |     }
    0x00074bbe ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00074bc0 moveq fp, 1                                       |         
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00074bc4 mov.w fp, 0                                       |         goto label_7;
                                                                 |     }
                                                                 |     if (r3 == 0) {
                                                                 | label_7:
    0x00074bc8 beq 0x74ae0                                       |         goto label_0;
                                                                 |     }
    0x00074bca ldrsh.w r2, [r8, 0x22]                            |     r2 = *((r8 + 0x22));
    0x00074bce ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x00074bd0 add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x00074bd4 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00074bd6 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00074bda ldrsh.w r3, [r8, 0x22]                            |     r3 = *((r8 + 0x22));
    0x00074bde cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00074be0 ble 0x74c30                                       |         goto label_8;
                                                                 |     }
    0x00074be2 ldr.w sl, [pc, 0xa0]                              |     sl = *(0x00074c84);
    0x00074be6 add sl, pc                                        |     sl += pc;
                                                                 | label_1:
    0x00074be8 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00074bec mov r0, r5                                        |     r0 = r5;
    0x00074bee ldr.w r1, [r3, fp]                                |     r1 = *((r3 + fp));
    0x00074bf2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00074bf4 bl 0x1e948                                        |     fcn_0001e948 (r0, r1);
    0x00074bf8 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00074bfa mov r2, r0                                        |     r2 = r0;
    0x00074bfc add.w r1, r3, fp                                  |     r1 = r3 + fp;
    0x00074c00 str.w r0, [r3, fp]                                |     __asm ("str.w r0, [r3, fp]");
                                                                 |     if (r0 == 0) {
    0x00074c04 cbz r0, 0x74c1e                                   |         goto label_2;
                                                                 |     }
    0x00074c06 ldrb r3, [r0]                                     |     r3 = *(r0);
                                                                 |     if (r3 == 0) {
    0x00074c08 cbz r3, 0x74c64                                   |         goto label_9;
                                                                 |     }
    0x00074c0a movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x00074c0c add r3, sl                                        |         r3 += sl;
    0x00074c0e ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x00074c12 add r2, r3                                        |         r2 += r3;
    0x00074c14 ldrb r3, [r0, 1]!                                 |         r3 = *((r0 += 1));
    0x00074c18 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x00074c1a cmp r3, 0                                         |         
    0x00074c1c bne 0x74c0c                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_2:
    0x00074c1e strb r2, [r1, 7]                                  |     *((r1 + 7)) = r2;
    0x00074c20 add.w sb, sb, 1                                   |     sb++;
    0x00074c24 ldrsh.w r3, [r8, 0x22]                            |     r3 = *((r8 + 0x22));
    0x00074c28 add.w fp, fp, 0xc                                 |     
    0x00074c2c cmp r3, sb                                        |     
                                                                 |     if (r3 > sb) {
    0x00074c2e bgt 0x74be8                                       |         goto label_1;
                                                                 |     }
                                                                 | label_8:
    0x00074c30 movs r2, 0                                        |     r2 = 0;
    0x00074c32 ldr r1, [r6, 0x34]                                |     r1 = *((r6 + 0x34));
    0x00074c34 mov r0, r5                                        |     r0 = r5;
    0x00074c36 bl 0x2dffc                                        |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x00074c3a ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00074c3c ldr r2, [r6, 0x2c]                                |     r2 = *((r6 + 0x2c));
    0x00074c3e str.w r0, [r8, 0x34]                              |     __asm ("str.w r0, [r8, 0x34]");
    0x00074c42 add.w r3, r3, r7, lsl 4                           |     r3 += (r7 << 4);
    0x00074c46 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00074c48 str.w r2, [r8, 0x2c]                              |     __asm ("str.w r2, [r8, 0x2c]");
    0x00074c4c movs r2, 1                                        |     r2 = 1;
    0x00074c4e str.w r2, [r8, 0x18]                              |     __asm ("str.w r2, [r8, 0x18]");
    0x00074c52 str.w r3, [r8, 0x3c]                              |     __asm ("str.w r3, [r8, 0x3c]");
    0x00074c56 b 0x74ae0                                         |     goto label_0;
                                                                 | label_5:
    0x00074c58 ldr r1, [pc, 0x2c]                                |     
    0x00074c5a mov r0, sl                                        |     r0 = sl;
    0x00074c5c add r1, pc                                        |     r1 = 0xe98e8;
    0x00074c5e bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00074c62 b 0x74ae0                                         |     goto label_0;
                                                                 | label_9:
    0x00074c64 mov r2, r3                                        |     r2 = r3;
    0x00074c66 b 0x74c1e                                         |     goto label_2;
                                                                 | label_4:
    0x00074c68 ldr r1, [pc, 0x20]                                |     
    0x00074c6a mov r0, sl                                        |     r0 = sl;
    0x00074c6c add r1, pc                                        |     r1 = 0xe98fc;
    0x00074c6e bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00074c72 b 0x74ae0                                         |     goto label_0;
                                                                 | label_6:
    0x00074c74 mov.w r7, 0x8000                                  |     
    0x00074c78 movt r7, 0xffff                                   |     r7 = 0x-8000;
    0x00074c7c b 0x74b46                                         |     goto label_3;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x7517c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0007517c ()                                      | void fcn_0007517c (int16_t arg_1h, int16_t arg_20h, int16_t arg_22h, int16_t arg_148h, int16_t arg_14ch, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     arithmetic var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     arithmetic var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_c8h;
                                                                 |     int16_t var_cch;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     int16_t var_dch;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_8h_3;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_f0h;
                                                                 |     int16_t var_f4h;
                                                                 |     int16_t var_f8h;
                                                                 |     int16_t var_fch;
                                                                 |     int32_t var_100h;
                                                                 |     int32_t var_100h_2;
                                                                 |     int16_t var_108h;
                                                                 |     int16_t var_10ch;
                                                                 |     int16_t var_110h;
                                                                 |     int16_t var_114h;
                                                                 |     int16_t var_118h;
                                                                 |     int16_t var_11ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0007517c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00075180 sub sp, 0x124                                     |     
    0x00075182 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00075184 ldr.w r2, [pc, 0xae4]                             |     r2 = *(0x00075c6c);
    0x00075188 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x0007518a ldr.w r3, [pc, 0xae4]                             |     
    0x0007518e add r2, pc                                        |     r2 += pc;
    0x00075190 str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x00075192 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00075194 ldr r2, [r0, 0x24]                                |     r2 = *(arg_148hx24);
    0x00075196 ldr r3, [r3]                                      |     r3 = *(0x75c72);
    0x00075198 str r3, [sp, 0x11c]                               |     var_11ch = r3;
    0x0007519a mov.w r3, 0                                       |     r3 = 0;
    0x0007519e movs r3, 0                                        |     r3 = 0;
    0x000751a0 str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x000751a2 strd r3, r3, [sp, 0xcc]                           |     __asm ("strd r3, r3, [var_cch]");
    0x000751a6 ldr r3, [sp, 0x14c]                               |     r3 = *(arg_14ch);
    0x000751a8 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x000751aa str r1, [sp, 0x38]                                |     var_38h = r1;
    0x000751ac str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x000751ae ldr r3, [r0]                                      |     r3 = *(r0);
    0x000751b0 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000751b2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000751b4 beq.w 0x75318                                     |         goto label_103;
                                                                 |     }
                                                                 | label_0:
    0x000751b8 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x000751ba ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x000751bc bl 0x16a58                                        |     fcn_00016a58 (r0, r1);
    0x000751c0 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000751c2 cmp r3, 0                                         |     
    0x000751c4 bne.w 0x7530e                                     |     
                                                                 |     while (1) {
    0x000751c8 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
                                                                 |         if (r3 != 0) {
    0x000751ca cbz r3, 0x751d4                                   |             
    0x000751cc ldr r0, [sp, 0x30]                                |             r0 = var_30h;
    0x000751ce mov r1, r3                                        |             r1 = r3;
    0x000751d0 bl 0x16c0c                                        |             fcn_00016c0c (r0, r1);
                                                                 |         }
    0x000751d4 ldr.w r2, [pc, 0xa9c]                             |         
    0x000751d8 ldr.w r3, [pc, 0xa94]                             |         r3 = *(0x75c70);
    0x000751dc add r2, pc                                        |         r2 = 0xeae54;
    0x000751de ldr r3, [r2, r3]                                  |         r3 = *(0xeae54);
    0x000751e0 ldr r2, [r3]                                      |         r2 = *(0xeae54);
    0x000751e2 ldr r3, [sp, 0x11c]                               |         r3 = var_11ch;
    0x000751e4 eors r2, r3                                       |         r2 ^= r3;
    0x000751e6 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000751ea bne.w 0x7655c                                     |             goto label_104;
                                                                 |         }
    0x000751ee add sp, 0x124                                     |         
    0x000751f0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_72:
    0x000751f4 ldr.w r0, [r8]                                    |         r0 = *(r8);
    0x000751f8 ldrb.w r3, [r0, 0x57]                             |         r3 = *((r0 + 0x57));
    0x000751fc str r3, [sp, 0x58]                                |         var_58h = r3;
                                                                 |         if (r3 == 0) {
    0x000751fe cbnz r3, 0x7521e                                  |             
    0x00075200 movs r4, 0x14                                     |             r4 = 0x14;
    0x00075202 ldr.w r7, [r8, 0x68]                              |             r7 = *((r8 + 0x68));
    0x00075206 mul r4, r4, sb                                    |             r4 *= sb;
    0x0007520a adds r5, r7, r4                                   |             r5 = r7 + r4;
    0x0007520c ldr r2, [r5, 0x10]                                |             r2 = *((r5 + 0x10));
    0x0007520e ldrsb.w r1, [r5, 1]                               |             r1 = *((r5 + 1));
    0x00075212 bl 0x187b8                                        |             fcn_000187b8 (r0);
    0x00075216 ldr r3, [sp, 0x58]                                |             r3 = var_58h;
    0x00075218 str r3, [r5, 0x10]                                |             *((r5 + 0x10)) = r3;
    0x0007521a movs r3, 0xb8                                     |             r3 = 0xb8;
    0x0007521c strh r3, [r7, r4]                                 |             *((r7 + r4)) = r3;
                                                                 |         }
    0x0007521e movs r3, 0                                        |         r3 = 0;
    0x00075220 ldr r2, [sp, 0x48]                                |         r2 = var_48h;
    0x00075222 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00075224 mov r0, r8                                        |         r0 = r8;
    0x00075226 str r3, [sp]                                      |         *(sp) = r3;
    0x00075228 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_69:
    0x0007522c mov r1, sl                                        |         r1 = sl;
    0x0007522e ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x00075230 bl 0x1fe7c                                        |         fcn_0001fe7c (r0, r1);
    0x00075234 ldrd r1, r3, [r8, 0x6c]                           |         __asm ("ldrd r1, r3, [r8, 0x6c]");
    0x00075238 cmp r1, r3                                        |         
                                                                 |         if (r1 >= r3) {
    0x0007523a bge.w 0x769c0                                     |             goto label_105;
                                                                 |         }
    0x0007523e add.w r2, r1, r1, lsl 2                           |         r2 = r1 + (r1 << 2);
    0x00075242 ldr.w r4, [r8, 0x68]                              |         r4 = *((r8 + 0x68));
    0x00075246 ldr r7, [sp, 0x40]                                |         r7 = var_40h;
    0x00075248 adds r3, r1, 1                                    |         r3 = r1 + 1;
    0x0007524a lsls r2, r2, 2                                    |         r2 <<= 2;
    0x0007524c str.w r3, [r8, 0x6c]                              |         __asm ("str.w r3, [r8, 0x6c]");
    0x00075250 movs r0, 0                                        |         r0 = 0;
    0x00075252 adds r3, r4, r2                                   |         r3 = r4 + r2;
    0x00075254 movs r5, 7                                        |         r5 = 7;
    0x00075256 str r7, [r3, 8]                                   |         *((r3 + 8)) = r7;
    0x00075258 ldr r7, [sp, 0x44]                                |         r7 = var_44h;
    0x0007525a strd r7, r0, [r3, 0xc]                            |         __asm ("strd r7, r0, [r3, 0xc]");
    0x0007525e str r5, [r4, r2]                                  |         *((r4 + r2)) = r5;
    0x00075260 str r0, [r3, 4]                                   |         *((r3 + 4)) = r0;
                                                                 | label_78:
    0x00075262 mvn r3, 0xa                                       |         r3 = ~0xa;
    0x00075266 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x00075268 mov r0, r8                                        |         r0 = r8;
    0x0007526a bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
    0x0007526e ldr r3, [sp, 0x148]                               |         r3 = *(arg_148h);
    0x00075270 cmp r3, 0xb                                       |         
    0x00075272 it eq                                             |         
                                                                 |         if (r3 != 0xb) {
    0x00075274 moveq r3, 2                                       |             r3 = 2;
                                                                 |         }
    0x00075276 str r3, [sp, 0x148]                               |         *(arg_148h) = r3;
    0x00075278 ldr.w r3, [r8, 0x6c]                              |         r3 = *((r8 + 0x6c));
    0x0007527c cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x0007527e ble 0x75292                                       |             
    0x00075280 ldr.w r2, [r8, 0x68]                              |             r2 = *((r8 + 0x68));
    0x00075284 add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x00075288 add.w r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
    0x0007528c ldr r3, [sp, 0x148]                               |             r3 = *(arg_148h);
    0x0007528e strh r3, [r2, -0x12]                              |             *((r2 - 0x12)) = r3;
                                                                 |         }
    0x00075292 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00075294 ldr r3, [r2, 0x74]                                |         r3 = *((r2 + 0x74));
    0x00075296 cmp r3, 0                                         |         
    0x00075298 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x0007529a movne r2, r3                                      |             r2 = r3;
                                                                 |         }
    0x0007529c movs r3, 1                                        |         r3 = 1;
    0x0007529e strb r3, [r2, 0x15]                               |         *((r2 + 0x15)) = r3;
    0x000752a0 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x000752a2 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000752a4 bne.w 0x769e0                                     |             goto label_106;
                                                                 |         }
    0x000752a8 mov r2, fp                                        |         r2 = fp;
    0x000752aa str r3, [sp]                                      |         *(sp) = r3;
    0x000752ac movs r1, 0x26                                     |         r1 = 0x26;
    0x000752ae add.w r3, sb, 1                                   |         r3 = sb + 1;
    0x000752b2 mov r0, r8                                        |         r0 = r8;
    0x000752b4 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000752b8 ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x000752bc cmp.w sb, 0                                       |         
    0x000752c0 ldr.w r2, [r8, 0x6c]                              |         r2 = *((r8 + 0x6c));
    0x000752c4 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
    0x000752c8 it lt                                             |         
                                                                 |         if (sb >= 0) {
    0x000752ca addlt sb, r2, -1                                  |             sb = r2 + -1;
                                                                 |         }
    0x000752ce cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000752d0 bne.w 0x769d6                                     |             goto label_107;
                                                                 |         }
    0x000752d4 ldr.w r3, [r8, 0x68]                              |         r3 = *((r8 + 0x68));
    0x000752d8 movs r1, 0x14                                     |         r1 = 0x14;
    0x000752da mla r3, r1, sb, r3                                |         __asm ("mla r3, r1, sb, r3");
                                                                 | label_79:
    0x000752de str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x000752e0 movs r3, 0                                        |         r3 = 0;
    0x000752e2 mov r2, fp                                        |         r2 = fp;
    0x000752e4 mov r0, r8                                        |         r0 = r8;
    0x000752e6 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x000752e8 str r3, [sp]                                      |         *(sp) = r3;
    0x000752ea bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_4:
    0x000752ee ldr r3, [sp, 0xd4]                                |         r3 = var_d4h;
    0x000752f0 ldr r1, [sp, 0x3c]                                |         r1 = var_3ch;
                                                                 |         if (r3 != 0) {
    0x000752f2 cbz r3, 0x752fe                                   |             
                                                                 | label_20:
    0x000752f4 ldr r2, [sp, 0xd0]                                |             r2 = var_d0h;
    0x000752f6 str.w r2, [r3, 0xf8]                              |             __asm ("str.w r2, [r3, 0xf8]");
    0x000752fa movs r3, 0                                        |             r3 = 0;
    0x000752fc str r3, [sp, 0xd4]                                |             var_d4h = r3;
                                                                 |         }
                                                                 | label_21:
    0x000752fe ldr r4, [sp, 0x30]                                |         r4 = var_30h;
    0x00075300 mov r0, r4                                        |         r0 = r4;
    0x00075302 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x00075306 ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x00075308 mov r0, r4                                        |         r0 = r4;
    0x0007530a bl 0x16a58                                        |         fcn_00016a58 (r0, r1);
    0x0007530e ldrd r0, r1, [sp, 0x30]                           |         __asm ("ldrd r0, r1, [var_34h]");
    0x00075312 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
    0x00075316 b 0x751c8                                         |         
                                                                 |     }
                                                                 | label_103:
    0x00075318 mov r4, r0                                        |     r4 = r0;
    0x0007531a mov r5, r2                                        |     r5 = r2;
    0x0007531c bl 0x745a0                                        |     r0 = fcn_000745a0 (r0, r1);
    0x00075320 mov sl, r0                                        |     sl = r0;
    0x00075322 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00075324 beq.w 0x75918                                     |         goto label_108;
                                                                 |     }
    0x00075328 ldr r1, [r0, 0x3c]                                |     r1 = *((r0 + 0x3c));
    0x0007532a ldr r0, [r4]                                      |     r0 = *(r4);
    0x0007532c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007532e beq.w 0x75d5a                                     |         goto label_109;
                                                                 |     }
    0x00075332 ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x00075334 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00075336 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00075338 beq.w 0x75a30                                     |         goto label_110;
                                                                 |     }
    0x0007533c mov r8, r5                                        |     r8 = r5;
                                                                 |     do {
    0x0007533e ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
    0x00075340 adds r3, 0x10                                     |         r3 += 0x10;
    0x00075342 add.w r8, r8, 1                                   |         r8++;
    0x00075346 cmp r1, r2                                        |         
    0x00075348 bne 0x7533e                                       |         
                                                                 |     } while (r1 != r2);
                                                                 | label_19:
    0x0007534a ldr.w r3, [sl, 0x38]                              |     r3 = *((sl + 0x38));
    0x0007534e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075350 beq.w 0x758fe                                     |         goto label_111;
                                                                 |     }
                                                                 | label_10:
    0x00075354 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00075356 ldrb.w r3, [r3, 0x97]                             |     r3 = *((r3 + 0x97));
    0x0007535a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007535c bne.w 0x7590c                                     |         goto label_112;
                                                                 |     }
    0x00075360 add r3, sp, 0xc8                                  |     r3 += var_c8h;
    0x00075362 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075364 str r3, [sp]                                      |     *(sp) = r3;
    0x00075366 movs r2, 0x81                                     |     r2 = 0x81;
    0x00075368 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0007536a mov r1, sl                                        |     r1 = sl;
    0x0007536c bl 0x2042c                                        |     fcn_0002042c (r0, r1, r2, r3);
    0x00075370 str r0, [sp, 0x7c]                                |     var_7ch = r0;
                                                                 | label_11:
    0x00075372 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00075374 mov r1, sl                                        |     r1 = sl;
    0x00075376 ldrb.w r2, [sl, 0x2b]                             |     r2 = *((sl + 0x2b));
    0x0007537a ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007537c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0007537e str r2, [sp, 0x68]                                |     var_68h = r2;
    0x00075380 cmp r3, 1                                         |     
    0x00075382 ittt gt                                           |     
                                                                 |     if (r3 <= 1) {
    0x00075384 ldrgt r3, [sp, 0x34]                              |         r3 = var_34h;
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x00075386 ldrgt r3, [r3]                                    |         r3 = *(r3);
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x00075388 strgt r3, [sp, 0x44]                              |         var_44h = r3;
                                                                 |     }
    0x0007538a bl 0x68bfc                                        |     r0 = fcn_00068bfc (r0, r1, r2);
    0x0007538e mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 0) {
    0x00075390 cbz r0, 0x753a6                                   |         goto label_113;
                                                                 |     }
    0x00075392 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x00075394 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075396 beq.w 0x751b8                                     |         goto label_0;
                                                                 |     }
    0x0007539a ldr r2, [sp, 0xd0]                                |     r2 = var_d0h;
    0x0007539c str.w r2, [r3, 0xf8]                              |     __asm ("str.w r2, [r3, 0xf8]");
    0x000753a0 movs r3, 0                                        |     r3 = 0;
    0x000753a2 str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x000753a4 b 0x751b8                                         |     goto label_0;
                                                                 | label_113:
    0x000753a6 ldr r2, [sp, 0xc8]                                |     r2 = var_c8h;
    0x000753a8 mov r1, sl                                        |     r1 = sl;
    0x000753aa ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000753ac bl 0x20534                                        |     fcn_00020534 (r0, r1, r2);
    0x000753b0 str r0, [sp, 0xac]                                |     var_ach = r0;
    0x000753b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000753b4 bne.w 0x7592a                                     |         goto label_114;
                                                                 |     }
    0x000753b8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000753ba ldr.w r5, [sl, 0x1c]                              |     r5 = *((sl + 0x1c));
    0x000753be ldr r3, [r2, 0x28]                                |     r3 = *((r2 + 0x28));
    0x000753c0 ands r5, r5, 0x80                                 |     r5 &= 0x80;
    0x000753c4 mov r1, r3                                        |     r1 = r3;
    0x000753c6 str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x000753c8 add.w r1, r1, 1                                   |     r1++;
    0x000753cc ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x000753d0 str r1, [sp, 0x78]                                |     var_78h = r1;
    0x000753d2 str r1, [r2, 0x28]                                |     *((r2 + 0x28)) = r1;
                                                                 |     if (r5 == r5) {
    0x000753d4 beq.w 0x7593c                                     |         goto label_115;
                                                                 |     }
    0x000753d8 mov r1, r3                                        |     r1 = r3;
                                                                 |     if (r3 != 0) {
    0x000753da cbnz r3, 0x753e4                                  |         goto label_116;
                                                                 |     }
    0x000753dc b.w 0x75d86                                       |     goto label_117;
                                                                 |     do {
    0x000753e0 ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
                                                                 |         if (r1 == 0) {
    0x000753e2 cbz r1, 0x753f0                                   |             goto label_118;
                                                                 |         }
                                                                 | label_116:
    0x000753e4 ldrb.w r2, [r1, 0x37]                             |         r2 = *((r1 + 0x37));
    0x000753e8 and r2, r2, 3                                     |         r2 &= 3;
    0x000753ec cmp r2, 2                                         |         
    0x000753ee bne 0x753e0                                       |         
                                                                 |     } while (r2 != 2);
                                                                 | label_118:
    0x000753f0 str r1, [sp, 0x54]                                |     var_54h = r1;
                                                                 | label_13:
    0x000753f2 ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x000753f4 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x000753f6 ldr r0, [sp, 0x54]                                |     r0 = var_54h;
                                                                 |     do {
    0x000753f8 cmp r3, r0                                        |         
    0x000753fa it eq                                             |         
                                                                 |         if (r3 != r0) {
    0x000753fc moveq r1, r2                                      |             r1 = r2;
                                                                 |         }
    0x000753fe ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x00075400 adds r2, 1                                        |         r2++;
    0x00075402 cmp r3, 0                                         |         
    0x00075404 bne 0x753f8                                       |         
                                                                 |     } while (r3 != 0);
    0x00075406 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00075408 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x0007540a str r2, [r3, 0x28]                                |     *((r3 + 0x28)) = r2;
    0x0007540c ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0007540e subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x00075410 subs r5, r3, 1                                    |     r5 = r3 - 1;
    0x00075412 adds r3, 1                                        |     r3++;
    0x00075414 str r5, [sp, 0xa4]                                |     var_a4h = r5;
                                                                 | label_26:
    0x00075416 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
                                                                 |     if (r2 != 0) {
    0x00075418 cbz r2, 0x75428                                   |         
    0x0007541a ldr r1, [r2, 0x28]                                |         r1 = *((r2 + 0x28));
    0x0007541c ldr r2, [r2, 0x2c]                                |         r2 = *((r2 + 0x2c));
    0x0007541e str r1, [sp, 0x50]                                |         var_50h = r1;
    0x00075420 str r2, [sp, 0x78]                                |         var_78h = r2;
    0x00075422 ldr r1, [sp, 0x6c]                                |         r1 = var_6ch;
    0x00075424 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00075426 str r1, [r2, 0x28]                                |         *((r2 + 0x28)) = r1;
                                                                 |     }
    0x00075428 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0007542a movs r4, 0                                        |     r4 = 0;
    0x0007542c ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0007542e ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x00075430 str r1, [r2, 0x30]                                |     *((r2 + 0x30)) = r1;
    0x00075432 ldrsh.w r2, [sl, 0x22]                            |     r2 = *((sl + 0x22));
    0x00075436 ldr r1, [sp, 0xa4]                                |     r1 = var_a4h;
    0x00075438 add r2, r1                                        |     r2 += r1;
    0x0007543a adds r2, 1                                        |     r2++;
    0x0007543c add.w r2, r3, r2, lsl 2                           |     r2 = r3 + (r2 << 2);
    0x00075440 mov r3, r4                                        |     r3 = r4;
    0x00075442 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x00075446 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00075448 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0007544a beq.w 0x75a36                                     |         goto label_119;
                                                                 |     }
    0x0007544e ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00075450 adds r5, 1                                        |     r5++;
    0x00075452 ldrsh.w r3, [sl, 0x22]                            |     r3 = *((sl + 0x22));
    0x00075456 movs r1, 1                                        |     r1 = 1;
    0x00075458 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x0007545c mov r2, r5                                        |     r2 = r5;
    0x0007545e str r3, [sp, 0x88]                                |     var_88h = r3;
    0x00075460 add.w r3, r3, r5, lsl 2                           |     r3 += (r5 << 2);
    0x00075464 mov r6, r3                                        |     r6 = r3;
    0x00075466 mov r0, r3                                        |     r0 = r3;
    0x00075468 str r3, [sp, 0x94]                                |     var_94h = r3;
    0x0007546a blx 0x97d4                                        |     fcn_000097d4 ();
    0x0007546e strb r4, [r6, r5]                                 |     *((r6 + r5)) = r4;
    0x00075470 ldrsh.w r2, [sl, 0x22]                            |     r2 = *((sl + 0x22));
    0x00075474 cmp r2, 0                                         |     
                                                                 |     if (r2 > 0) {
    0x00075476 ble 0x75482                                       |         
    0x00075478 ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x0007547a lsls r2, r2, 2                                    |         r2 <<= 2;
    0x0007547c movs r1, 0xff                                     |         r1 = 0xff;
    0x0007547e blx 0x97d4                                        |         fcn_000097d4 ();
                                                                 |     }
    0x00075482 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00075484 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00075486 str r2, [sp, 0xf8]                                |     var_f8h = r2;
    0x00075488 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0007548a str r3, [sp, 0xf4]                                |     var_f4h = r3;
    0x0007548c str r2, [sp, 0xfc]                                |     var_fch = r2;
    0x0007548e ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00075490 movs r3, 0                                        |     r3 = 0;
    0x00075492 strd r3, r3, [sp, 0x100]                          |     __asm ("strd r3, r3, [var_100h]");
    0x00075496 str r3, [sp, 0x108]                               |     var_108h = r3;
    0x00075498 str r3, [sp, 0x110]                               |     var_110h = r3;
    0x0007549a mov.w r3, 0x200                                   |     r3 = 0x200;
    0x0007549e str r2, [sp, 0x40]                                |     var_40h = r2;
    0x000754a0 str r3, [sp, 0x10c]                               |     var_10ch = r3;
    0x000754a2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000754a4 beq.w 0x7595a                                     |         goto label_120;
                                                                 |     }
                                                                 | label_15:
    0x000754a8 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x000754aa ldr r3, [r6]                                      |     r3 = *(r6);
    0x000754ac cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000754ae ble.w 0x76584                                     |         goto label_121;
                                                                 |     }
    0x000754b2 ldr.w r4, [pc, 0x7c4]                             |     r4 = *(0x00075c78);
    0x000754b6 mov.w fp, 0                                       |     
    0x000754ba lsl.w r3, r8, 4                                   |     r3 = r8 << 4;
    0x000754be str.w fp, [sp, 0x60]                              |     __asm ("str.w fp, [var_60h]");
    0x000754c2 str.w fp, [sp, 0x58]                              |     __asm ("str.w fp, [var_58h]");
    0x000754c6 str.w fp, [sp, 0xa8]                              |     __asm ("str.w fp, [var_a8h]");
    0x000754ca add r4, pc                                        |     r4 += pc;
    0x000754cc str r5, [sp, 0x70]                                |     var_70h = r5;
    0x000754ce mov r5, fp                                        |     r5 = fp;
    0x000754d0 mov fp, sl                                        |     
    0x000754d2 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x000754d4 mov.w r3, -1                                      |     r3 = -1;
    0x000754d8 str.w r8, [sp, 0x80]                              |     __asm ("str.w r8, [var_80h]");
    0x000754dc str r3, [sp, 0x74]                                |     var_74h = r3;
                                                                 | label_5:
    0x000754de ldr.w sb, [r6, 0xc]                               |     sb = *((r6 + 0xc));
    0x000754e2 mov r2, sb                                        |     r2 = sb;
    0x000754e4 mov r8, sb                                        |     r8 = sb;
    0x000754e6 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x000754ea beq 0x75514                                       |         goto label_12;
                                                                 |     }
    0x000754ec ldrb.w r3, [sb]                                   |     r3 = *(sb);
    0x000754f0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000754f2 beq.w 0x75914                                     |         goto label_122;
                                                                 |     }
    0x000754f6 ldr.w r1, [pc, 0x784]                             |     r1 = *(0x00075c7c);
    0x000754fa mov.w r8, 0                                       |     r8 = 0;
    0x000754fe add r1, pc                                        |     r1 += pc;
                                                                 |     do {
    0x00075500 add r3, r1                                        |         r3 += r1;
    0x00075502 ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x00075506 add r8, r3                                        |         r8 += r3;
    0x00075508 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x0007550c uxtb.w r8, r8                                     |         r8 = (int8_t) r8;
    0x00075510 cmp r3, 0                                         |         
    0x00075512 bne 0x75500                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_12:
    0x00075514 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00075516 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075518 beq.w 0x758ea                                     |         goto label_123;
                                                                 |     }
                                                                 | label_9:
    0x0007551c ldrsh.w lr, [fp, 0x22]                            |     
    0x00075520 cmp.w lr, 0                                       |     
                                                                 |     if (lr <= 0) {
    0x00075524 ble.w 0x758be                                     |         goto label_124;
                                                                 |     }
    0x00075528 ldr.w r1, [fp, 4]                                 |     r1 = *(arg_14ch);
    0x0007552c movs r7, 0                                        |     r7 = 0;
    0x0007552e mov ip, r1                                        |     
    0x00075530 mov r2, r1                                        |     r2 = r1;
    0x00075532 b 0x75540                                         |     
                                                                 |     while (r3 != r8) {
                                                                 | label_1:
    0x00075534 adds r7, 1                                        |         r7++;
    0x00075536 add.w ip, ip, 0xc                                 |         
    0x0007553a cmp r7, lr                                        |         
                                                                 |         if (r7 == lr) {
    0x0007553c beq.w 0x758be                                     |             goto label_124;
                                                                 |         }
    0x00075540 ldrb.w r3, [ip, 7]                                |         r3 = *((ip + 7));
    0x00075544 cmp r3, r8                                        |         
    0x00075546 bne 0x75534                                       |         
                                                                 |     }
    0x00075548 ldr.w r3, [ip]                                    |     r3 = *(ip);
    0x0007554c add.w sl, sb, -1                                  |     sl = sb + -1;
    0x00075550 subs r0, r3, 1                                    |     r0 = r3 - 1;
    0x00075552 str r3, [sp, 0x48]                                |     var_48h = r3;
                                                                 | label_3:
    0x00075554 ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x00075558 ldrb r1, [sl, 1]!                                 |     r1 = *((sl += 1));
    0x0007555c cmp r3, r1                                        |     
                                                                 |     if (r3 == r1) {
    0x0007555e beq 0x7557c                                       |         goto label_125;
                                                                 |     }
                                                                 | label_2:
    0x00075560 add r3, r4                                        |     r3 += r4;
    0x00075562 add r1, r4                                        |     r1 += r4;
    0x00075564 ldrb.w r3, [r3, 0x140]                            |     r3 = *((r3 + 0x140));
    0x00075568 ldrb.w r1, [r1, 0x140]                            |     r1 = *((r1 + 0x140));
    0x0007556c cmp r3, r1                                        |     
                                                                 |     if (r3 != r1) {
    0x0007556e bne 0x75534                                       |         goto label_1;
                                                                 |     }
    0x00075570 ldrb r3, [r0, 1]!                                 |     r3 = *((r0 += 1));
    0x00075574 ldrb r1, [sl, 1]!                                 |     r1 = *((sl += 1));
    0x00075578 cmp r3, r1                                        |     
                                                                 |     if (r3 != r1) {
    0x0007557a bne 0x75560                                       |         goto label_2;
                                                                 |     }
                                                                 | label_125:
    0x0007557c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007557e bne 0x75554                                       |         goto label_3;
                                                                 |     }
    0x00075580 mov r1, r2                                        |     r1 = r2;
    0x00075582 ldrsh.w r2, [fp, 0x20]                            |     r2 = *(arg_20h);
    0x00075586 cmp r2, r7                                        |     
                                                                 |     if (r2 == r7) {
    0x00075588 beq.w 0x75948                                     |         goto label_126;
                                                                 |     }
    0x0007558c ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0007558e ldrh.w r2, [ip, 0xa]                              |     r2 = *((ip + 0xa));
                                                                 |     if (r3 != 0) {
    0x00075592 cbz r3, 0x7559a                                   |         
    0x00075594 lsls r3, r2, 0x1f                                 |         r3 = r2 << 0x1f;
                                                                 |         if (r3 < r2) {
    0x00075596 bmi.w 0x75954                                     |             goto label_127;
                                                                 |         }
                                                                 |     }
    0x0007559a tst.w r2, 0x60                                    |     
                                                                 |     if ((r2 & 0x60) != 0) {
    0x0007559e bne.w 0x76568                                     |         goto label_128;
                                                                 |     }
                                                                 | label_14:
    0x000755a2 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000755a4 cmp lr, r7                                        |     
    0x000755a6 str.w r5, [r3, r7, lsl 2]                         |     __asm ("str.w r5, [r3, r7, lsl 2]");
                                                                 |     if (lr <= r7) {
    0x000755aa ble.w 0x758be                                     |         goto label_124;
                                                                 |     }
    0x000755ae add.w r3, r7, r7, lsl 1                           |     r3 = r7 + (r7 << 1);
    0x000755b2 ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x000755b6 ldr.w r3, [r1, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r3 = *((r1 + offset_0));
                                                                 | label_8:
    0x000755ba ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x000755bc ldr r0, [sp, 0x64]                                |     r0 = var_64h;
    0x000755be ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x000755c0 ldr r1, [r1, r0]                                  |     r1 = *((r1 + r0));
    0x000755c2 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000755c4 str r1, [sp]                                      |     *(sp) = r1;
    0x000755c6 movs r1, 0x17                                     |     r1 = 0x17;
    0x000755c8 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x000755cc cmp r0, 1                                         |     
                                                                 |     if (r0 == 1) {
    0x000755ce beq.w 0x752ee                                     |         goto label_4;
                                                                 |     }
    0x000755d2 cmp r0, 2                                         |     
    0x000755d4 add.w r5, r5, 1                                   |     r5++;
    0x000755d8 itt eq                                            |     
                                                                 |     if (r0 != 2) {
    0x000755da ldreq r2, [sp, 0x3c]                              |         r2 = var_3ch;
                                                                 |     }
                                                                 |     if (r0 != 2) {
    0x000755dc moveq r3, -1                                      |         r3 = -1;
                                                                 |     }
    0x000755e0 add.w r6, r6, 0x10                                |     r6 += 0x10;
    0x000755e4 it eq                                             |     
                                                                 |     if (r0 != 2) {
    0x000755e6 streq r3, [r2, r7, lsl 2]                         |         offset_1 = r7 << 2;
                                                                 |         *((r2 + offset_1)) = r3;
                                                                 |     }
    0x000755ea ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000755ec ldr r3, [r3]                                      |     r3 = *(r3);
    0x000755ee cmp r5, r3                                        |     
                                                                 |     if (r5 < r3) {
    0x000755f0 blt.w 0x754de                                     |         goto label_5;
                                                                 |     }
    0x000755f4 ldr r3, [sp, 0xa8]                                |     r3 = var_a8h;
    0x000755f6 mov sl, fp                                        |     sl = fp;
    0x000755f8 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x000755fa ldr r5, [sp, 0x70]                                |     r5 = var_70h;
    0x000755fc ldr.w r8, [sp, 0x80]                              |     r8 = var_80h;
    0x00075600 add r3, r2                                        |     r3 += r2;
    0x00075602 str r3, [sp, 0x98]                                |     var_98h = r3;
    0x00075604 str r3, [sp, 0xb0]                                |     var_b0h = r3;
                                                                 | label_62:
    0x00075606 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x0007560a tst.w r3, 0x60                                    |     
                                                                 |     if ((r3 & 0x60) != 0) {
    0x0007560e bne.w 0x75c90                                     |         goto label_129;
                                                                 |     }
    0x00075612 ldrb.w r2, [sl, 0x2b]                             |     r2 = *((sl + 0x2b));
                                                                 | label_28:
    0x00075616 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00075618 cmp r2, 1                                         |     
    0x0007561a mov.w r0, -1                                      |     r0 = -1;
    0x0007561e ldr r4, [sp, 0x38]                                |     r4 = var_38h;
    0x00075620 it ne                                             |     
                                                                 |     if (r2 == 1) {
    0x00075622 movne r0, 0                                       |         r0 = 0;
                                                                 |     }
    0x00075624 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00075626 ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x00075628 clz r3, r2                                        |     r3 &= r2;
    0x0007562c lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0007562e str r0, [r4, 0x38]                                |     *((r4 + 0x38)) = r0;
    0x00075630 str r0, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r0;
    0x00075632 ands.w r3, r3, r1, lsr 14                         |     r3 &= (r1 >> 14);
                                                                 |     if (r3 != r3) {
    0x00075636 bne.w 0x75d96                                     |         goto label_130;
                                                                 |     }
                                                                 | label_33:
    0x0007563a movs r3, 0                                        |     r3 = 0;
    0x0007563c str r3, [sp, 0x70]                                |     var_70h = r3;
                                                                 | label_32:
    0x0007563e ldr r3, [sp, 0x148]                               |     r3 = *(arg_148h);
    0x00075640 ldr.w r4, [sl, 8]                                 |     r4 = *((sl + 8));
    0x00075644 cmp r3, 5                                         |     
    0x00075646 itt eq                                            |     
                                                                 |     if (r3 != 5) {
    0x00075648 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != 5) {
    0x0007564a streq r3, [sp, 0xcc]                              |         var_cch = r3;
                                                                 |     }
    0x0007564c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0007564e beq.w 0x76560                                     |         goto label_131;
                                                                 |     }
    0x00075652 ldr.w r3, [pc, 0x62c]                             |     r3 = *(0x00075c80);
    0x00075656 mov.w sb, 0                                       |     sb = 0;
    0x0007565a ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x0007565c strd sl, r5, [sp, 0x80]                           |     __asm ("strd sl, r5, [var_80h]");
    0x00075660 add r3, pc                                        |     r3 += pc;
    0x00075662 ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00075664 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00075666 ldr.w r3, [pc, 0x61c]                             |     r3 = *(0x00075c84);
    0x0007566a add r3, pc                                        |     r3 += pc;
    0x0007566c str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0007566e ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x00075670 cmp r2, 1                                         |     
    0x00075672 it le                                             |     
                                                                 |     if (r2 <= 1) {
    0x00075674 cmple r3, 0                                       |         __asm ("cmple r3, 0");
                                                                 |     }
    0x00075676 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00075678 ite ne                                            |     
                                                                 |     if (r2 == 1) {
    0x0007567a movne r7, 1                                       |         r7 = 1;
                                                                 |     }
                                                                 |     if (r2 != 1) {
    0x0007567c moveq r7, 0                                       |         r7 = 0;
                                                                 |     }
    0x0007567e sub.w fp, r3, 4                                   |     
                                                                 |     do {
    0x00075682 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00075684 cmp r3, r4                                        |         
    0x00075686 ite ne                                            |         
                                                                 |         if (r3 == r4) {
    0x00075688 movne r3, r7                                      |             r3 = r7;
                                                                 |         }
                                                                 |         if (r3 != r4) {
    0x0007568a orreq r3, r7, 1                                   |             r3 = r7 | 1;
                                                                 |         }
    0x0007568e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00075690 beq.w 0x7598a                                     |             goto label_132;
                                                                 |         }
                                                                 | label_16:
    0x00075694 ldr r3, [r5, 0x2c]                                |         r3 = *((r5 + 0x2c));
    0x00075696 ldrh r1, [r4, 0x34]                               |         r1 = *((r4 + 0x34));
    0x00075698 adds r3, 1                                        |         r3++;
    0x0007569a add r1, r3                                        |         r1 += r3;
    0x0007569c str r1, [r5, 0x2c]                                |         *((r5 + 0x2c)) = r1;
                                                                 | label_30:
    0x0007569e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000756a0 beq.w 0x759e4                                     |             goto label_133;
                                                                 |         }
                                                                 | label_17:
    0x000756a4 ldr r4, [r4, 0x14]                                |         r4 = *((r4 + 0x14));
    0x000756a6 add.w sb, sb, 1                                   |         sb++;
    0x000756aa str r3, [fp, 4]!                                  |         *(arg_14ch) = r3;
    0x000756ae cmp r4, 0                                         |         
    0x000756b0 bne 0x75682                                       |         
                                                                 |     } while (r4 != 0);
    0x000756b2 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x000756b4 ldrd sl, r5, [sp, 0x80]                           |     __asm ("ldrd sl, r5, [var_80h]");
    0x000756b8 add.w r3, r3, sb, lsl 2                           |     r3 += (sb << 2);
    0x000756bc str r3, [sp, 0xbc]                                |     var_bch = r3;
                                                                 | label_61:
    0x000756be ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000756c0 ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x000756c2 adds r3, 1                                        |     r3++;
    0x000756c4 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x000756c6 ldr r2, [sp, 0xbc]                                |     r2 = var_bch;
    0x000756c8 str r3, [r2]                                      |     *(r2) = r3;
    0x000756ca ldr r3, [sp, 0xcc]                                |     r3 = var_cch;
    0x000756cc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000756ce bne.w 0x75fc0                                     |         goto label_134;
                                                                 |     }
                                                                 | label_41:
    0x000756d2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000756d4 ldrb r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
                                                                 |     if (r3 == 0) {
    0x000756d6 cbnz r3, 0x756e6                                  |         
    0x000756d8 ldr r2, [sp, 0x40]                                |         r2 = var_40h;
    0x000756da ldrb.w r3, [r2, 0x96]                             |         r3 = *((r2 + 0x96));
    0x000756de orr r3, r3, 0x10                                  |         r3 |= 0x10;
    0x000756e2 strb.w r3, [r2, 0x96]                             |         *((r2 + 0x96)) = r3;
                                                                 |     }
    0x000756e6 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x000756e8 ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x000756ea ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x000756ec orrs r3, r2                                       |     r3 |= r2;
    0x000756ee mov r2, r8                                        |     r2 = r8;
    0x000756f0 ite ne                                            |     
                                                                 |     if (r3 == r2) {
    0x000756f2 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x000756f4 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000756f6 mov r1, r3                                        |     r1 = r3;
    0x000756f8 mov r0, r4                                        |     r0 = r4;
    0x000756fa mov r5, r3                                        |     r5 = r3;
    0x000756fc str r3, [sp, 0xc4]                                |     x = r3;
    0x000756fe bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x00075702 ldrb.w r1, [sl, 0x2b]                             |     r1 = *((sl + 0x2b));
    0x00075706 cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x00075708 beq.w 0x75fb2                                     |         goto label_135;
                                                                 |     }
    0x0007570c mov r0, r5                                        |     r0 = r5;
    0x0007570e ldr r5, [sp, 0xa8]                                |     r5 = var_a8h;
    0x00075710 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00075712 ldr r2, [sp, 0xbc]                                |     r2 = var_bch;
    0x00075714 orrs r0, r5                                       |     r0 |= r5;
    0x00075716 add.w fp, r3, 1                                   |     
    0x0007571a ldr r4, [r2]                                      |     r4 = *(r2);
    0x0007571c ldrsh.w r2, [sl, 0x22]                            |     r2 = *((sl + 0x22));
                                                                 |     if (r0 == r5) {
    0x00075720 beq.w 0x75f9e                                     |         goto label_136;
                                                                 |     }
    0x00075724 adds r3, 2                                        |     r3 += 2;
    0x00075726 ldr r0, [sp, 0xc4]                                |     r0 = x;
    0x00075728 str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x0007572a ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x0007572c cmp r3, 0                                         |     
    0x0007572e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00075730 orrne r0, r0, 1                                   |         r0 |= 1;
                                                                 |     }
    0x00075734 add.w r3, fp, r2                                  |     r3 = fp + r2;
    0x00075738 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0007573a beq.w 0x76400                                     |         goto label_137;
                                                                 |     }
                                                                 | label_93:
    0x0007573e adds r3, 1                                        |     r3++;
    0x00075740 str r3, [sp, 0x64]                                |     var_64h = r3;
                                                                 | label_39:
    0x00075742 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075744 add r2, r3                                        |     r2 += r3;
    0x00075746 adds r3, 1                                        |     r3++;
    0x00075748 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x0007574a str r2, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r2;
                                                                 | label_40:
    0x0007574c ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0007574e cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00075750 beq.w 0x75f64                                     |         goto label_138;
                                                                 |     }
    0x00075754 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00075756 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075758 beq.w 0x75f88                                     |         goto label_139;
                                                                 |     }
                                                                 | label_38:
    0x0007575c cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x0007575e beq.w 0x7666a                                     |         goto label_140;
                                                                 |     }
    0x00075762 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00075764 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00075766 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x00075768 ldr r1, [r2, 0x38]                                |     r1 = *((r2 + 0x38));
    0x0007576a ands r3, r3, 1                                    |     r3 &= 1;
    0x0007576e add.w sb, r1, -1                                  |     sb = r1 + -1;
    0x00075772 str r1, [sp, 0xc0]                                |     var_c0h = r1;
    0x00075774 str.w sb, [r2, 0x38]                              |     __asm ("str.w sb, [r2, 0x38]");
                                                                 |     if (r3 == r3) {
    0x00075778 beq.w 0x75c48                                     |         goto label_64;
                                                                 |     }
    0x0007577c ldr r3, [r2, 0x78]                                |     r3 = *((r2 + 0x78));
    0x0007577e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075780 beq.w 0x765ac                                     |         goto label_141;
                                                                 |     }
    0x00075784 movs r3, 0                                        |     r3 = 0;
    0x00075786 str r3, [sp, 0x8c]                                |     var_8ch = r3;
                                                                 | label_24:
    0x00075788 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 == 0) {
    0x0007578a cbnz r3, 0x75796                                  |         
    0x0007578c ldr.w r3, [sl, 0x1c]                              |         r3 = *((sl + 0x1c));
    0x00075790 lsls r5, r3, 0x18                                 |         r5 = r3 << 0x18;
                                                                 |         if (r5 >= r3) {
    0x00075792 bpl.w 0x75fce                                     |             goto label_142;
                                                                 |         }
                                                                 |     }
    0x00075796 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00075798 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007579a beq.w 0x762f8                                     |         goto label_143;
                                                                 |     }
    0x0007579e ldrsh.w r3, [r3, 0x32]                            |     r3 = *((r3 + 0x32));
    0x000757a2 strd r3, r3, [sp, 0x80]                           |     __asm ("strd r3, r3, [var_80h]");
                                                                 | label_48:
    0x000757a6 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x000757a8 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x000757aa ldr r2, [r1, 0x2c]                                |     r2 = *((r1 + 0x2c));
    0x000757ac adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x000757ae adds r2, 1                                        |     r2++;
    0x000757b0 str r2, [sp, 0x90]                                |     var_90h = r2;
    0x000757b2 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x000757b4 add r3, r2                                        |     r3 += r2;
    0x000757b6 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000757ba ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000757bc str.w r8, [r1, 0x2c]                              |     __asm ("str.w r8, [r1, 0x2c]");
    0x000757c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000757c2 beq.w 0x760a4                                     |         goto label_144;
                                                                 |     }
    0x000757c6 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000757c8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000757ca beq.w 0x76c3a                                     |         goto label_145;
                                                                 |     }
    0x000757ce movs r6, 0                                        |     r6 = 0;
                                                                 | label_99:
    0x000757d0 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000757d2 ldr.w r8, [sp, 0x90]                              |     r8 = var_90h;
    0x000757d6 ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x000757d8 cmp r3, 0                                         |     
    0x000757da it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x000757dc moveq r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x000757de movs r2, 1                                        |     r2 = 1;
    0x000757e0 strb r2, [r3, 0x14]                               |     *((r3 + 0x14)) = r2;
    0x000757e2 movs r3, 0                                        |     r3 = 0;
    0x000757e4 str r2, [sp, 0xb8]                                |     var_b8h = r2;
    0x000757e6 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x000757e8 str r3, [sp, 0xa0]                                |     var_a0h = r3;
                                                                 | label_42:
    0x000757ea ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000757ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000757ee beq.w 0x761fc                                     |         goto label_146;
                                                                 |     }
                                                                 | label_57:
    0x000757f2 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000757f4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000757f6 beq.w 0x7609c                                     |         goto label_147;
                                                                 |     }
    0x000757fa ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000757fc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000757fe bne.w 0x76c32                                     |         goto label_148;
                                                                 |     }
    0x00075802 str r3, [sp, 0x6c]                                |     var_6ch = r3;
                                                                 | label_56:
    0x00075804 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075806 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
                                                                 |     if (r3 != 0) {
    0x00075808 cbz r3, 0x75812                                   |         
    0x0007580a ldrd r1, r2, [sp, 0x60]                           |         __asm ("ldrd r1, r2, [var_64h]");
    0x0007580e bl 0x5aa10                                        |         fcn_0005aa10 (r0, r1, r2);
                                                                 |     }
                                                                 | label_47:
    0x00075812 movs r3, 0                                        |     r3 = 0;
    0x00075814 ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x00075816 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00075818 movs r1, 0xc                                      |     r1 = 0xc;
    0x0007581a str r3, [sp]                                      |     *(sp) = r3;
    0x0007581c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_44:
    0x00075820 ldr r3, [sp, 0xc4]                                |     r3 = x;
    0x00075822 ldr r2, [sp, 0xa8]                                |     r2 = var_a8h;
    0x00075824 orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x00075826 beq.w 0x75a9a                                     |         goto label_149;
                                                                 |     }
    0x0007582a ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0007582c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007582e bne.w 0x75e46                                     |         goto label_150;
                                                                 |     }
                                                                 | label_35:
    0x00075832 movs r4, 0                                        |     r4 = 0;
                                                                 | label_34:
    0x00075834 ldr r3, [sp, 0x148]                               |     r3 = *(arg_148h);
    0x00075836 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00075838 ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x0007583a strd sl, r3, [sp, 4]                              |     __asm ("strd sl, r3, [var_8h]");
    0x0007583e movs r3, 3                                        |     r3 = 3;
    0x00075840 str r3, [sp]                                      |     *(sp) = r3;
    0x00075842 movs r3, 0                                        |     r3 = 0;
    0x00075844 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075846 bl 0x774e0                                        |     fcn_000774e0 (r0, r1, r2, r3, r4, r5, r6);
    0x0007584a ldrsh.w r3, [sl, 0x22]                            |     r3 = *((sl + 0x22));
    0x0007584e orr.w r7, r0, r4                                  |     r7 = r0 | r4;
    0x00075852 cmp r3, 0                                         |     
    0x00075854 itt gt                                            |     
                                                                 |     if (r3 <= 0) {
    0x00075856 movgt r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00075858 movgt r5, r4                                      |         r5 = r4;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0007585a bgt 0x7587a                                       |         goto label_151;
                                                                 |     }
    0x0007585c b 0x75a76                                         |     goto label_152;
                                                                 |     do {
                                                                 | label_6:
    0x0007585e str r3, [sp]                                      |         *(sp) = r3;
    0x00075860 mov r1, sl                                        |         r1 = sl;
    0x00075862 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x00075864 mov r3, r4                                        |         r3 = r4;
    0x00075866 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00075868 bl 0x5b0d4                                        |         fcn_0005b0d4 (r0, r1, r2, r3, r4);
                                                                 | label_7:
    0x0007586c ldrsh.w r3, [sl, 0x22]                            |         r3 = *((sl + 0x22));
    0x00075870 adds r4, 1                                        |         r4++;
    0x00075872 adds r5, 0xc                                      |         r5 += 0xc;
    0x00075874 cmp r4, r3                                        |         
                                                                 |         if (r4 >= r3) {
    0x00075876 bge.w 0x75a76                                     |             goto label_152;
                                                                 |         }
                                                                 | label_151:
    0x0007587a ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x0007587e sxth r1, r4                                       |         __asm ("sxth r1, r4");
    0x00075880 add r3, r5                                        |         r3 += r5;
    0x00075882 ldrh r2, [r3, 0xa]                                |         r2 = *((r3 + 0xa));
    0x00075884 ldr.w r3, [sl, 0x1c]                              |         r3 = *((sl + 0x1c));
    0x00075888 lsls r0, r3, 0x1a                                 |         r0 = r3 << 0x1a;
                                                                 |         if (r0 < r3) {
    0x0007588a bpl 0x75898                                       |             
    0x0007588c mov r0, sl                                        |             r0 = sl;
    0x0007588e str r2, [sp, 0x60]                                |             var_60h = r2;
    0x00075890 bl 0xf6c8                                         |             fcn_0000f6c8 (r0, r1);
    0x00075894 ldr r2, [sp, 0x60]                                |             r2 = var_60h;
    0x00075896 mov r1, r0                                        |             r1 = r0;
                                                                 |         }
    0x00075898 ldr r3, [sp, 0xb4]                                |         r3 = var_b4h;
    0x0007589a adds r3, r1, r3                                   |         r3 = r1 + r3;
    0x0007589c adds r1, r7, 1                                    |         r1 = r7 + 1;
    0x0007589e beq 0x7585e                                       |         
                                                                 |     } while (r1 == r7);
    0x000758a0 cmp r4, 0x1f                                      |     
                                                                 |     if (r4 > 0x1f) {
    0x000758a2 bgt 0x758ac                                       |         goto label_153;
                                                                 |     }
    0x000758a4 movs r1, 1                                        |     r1 = 1;
    0x000758a6 lsls r1, r4                                       |     r1 <<= r4;
    0x000758a8 tst r1, r7                                        |     
                                                                 |     if ((r1 & r7) != 0) {
    0x000758aa bne 0x7585e                                       |         goto label_6;
                                                                 |     }
                                                                 | label_153:
    0x000758ac ands r2, r2, 1                                    |     r2 &= 1;
                                                                 |     if (r2 != r2) {
    0x000758b0 bne 0x7585e                                       |         goto label_6;
                                                                 |     }
    0x000758b2 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000758b4 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x000758b6 str r2, [sp]                                      |     *(sp) = r2;
    0x000758b8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000758bc b 0x7586c                                         |     goto label_7;
                                                                 | label_124:
    0x000758be ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000758c0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000758c2 bne.w 0x75a4a                                     |         goto label_154;
                                                                 |     }
    0x000758c6 mov r0, sb                                        |     r0 = sb;
    0x000758c8 bl 0x1a774                                        |     r0 = fcn_0001a774 (r0);
    0x000758cc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000758ce beq.w 0x75a4a                                     |         goto label_154;
                                                                 |     }
    0x000758d2 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x000758d4 movs r1, 1                                        |     r1 = 1;
    0x000758d6 ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x000758da mov.w r7, -1                                      |     r7 = -1;
    0x000758de str r5, [sp, 0x74]                                |     var_74h = r5;
    0x000758e0 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x000758e2 ldr r3, [pc, 0x3a4]                               |     
    0x000758e4 str r1, [sp, 0x58]                                |     var_58h = r1;
    0x000758e6 add r3, pc                                        |     r3 = 0xeb574;
    0x000758e8 b 0x755ba                                         |     goto label_8;
                                                                 | label_123:
    0x000758ea ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x000758ec add r0, sp, 0xf4                                  |     r0 += var_f4h;
    0x000758ee bl 0x2cfe8                                        |     r0 = fcn_0002cfe8 (r0, r1);
    0x000758f2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000758f4 bne.w 0x752ee                                     |         goto label_4;
                                                                 |     }
    0x000758f8 ldr.w sb, [r6, 0xc]                               |     sb = *((r6 + 0xc));
    0x000758fc b 0x7551c                                         |     goto label_9;
                                                                 | label_111:
    0x000758fe ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x00075900 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
                                                                 |     if (r3 == 0) {
    0x00075902 cbz r3, 0x7590c                                   |         goto label_112;
                                                                 |     }
    0x00075904 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00075906 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075908 bne.w 0x75354                                     |         goto label_10;
                                                                 |     }
                                                                 | label_112:
    0x0007590c movs r3, 0                                        |     r3 = 0;
    0x0007590e str r3, [sp, 0xc8]                                |     var_c8h = r3;
    0x00075910 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x00075912 b 0x75372                                         |     goto label_11;
                                                                 | label_122:
    0x00075914 mov r8, r3                                        |     r8 = r3;
    0x00075916 b 0x75514                                         |     goto label_12;
                                                                 | label_108:
    0x00075918 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x0007591a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007591c beq.w 0x751b8                                     |         goto label_0;
                                                                 |     }
    0x00075920 ldr r2, [sp, 0xd0]                                |     r2 = var_d0h;
    0x00075922 str r0, [sp, 0xd4]                                |     var_d4h = r0;
    0x00075924 str.w r2, [r3, 0xf8]                              |     __asm ("str.w r2, [r3, 0xf8]");
    0x00075928 b 0x751b8                                         |     goto label_0;
                                                                 | label_114:
    0x0007592a ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x0007592c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007592e beq.w 0x751b8                                     |         goto label_0;
                                                                 |     }
    0x00075932 ldr r2, [sp, 0xd0]                                |     r2 = var_d0h;
    0x00075934 str r4, [sp, 0xd4]                                |     var_d4h = r4;
    0x00075936 str.w r2, [r3, 0xf8]                              |     __asm ("str.w r2, [r3, 0xf8]");
    0x0007593a b 0x751b8                                         |     goto label_0;
                                                                 | label_115:
    0x0007593c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007593e beq.w 0x75c5c                                     |         goto label_155;
                                                                 |     }
    0x00075942 ldr r2, [sp, 0xac]                                |     r2 = var_ach;
    0x00075944 str r2, [sp, 0x54]                                |     var_54h = r2;
    0x00075946 b 0x753f2                                         |     goto label_13;
                                                                 | label_126:
    0x00075948 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0007594a str r5, [sp, 0x74]                                |     var_74h = r5;
    0x0007594c str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0007594e movs r3, 1                                        |     r3 = 1;
    0x00075950 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00075952 b 0x755a2                                         |     goto label_14;
                                                                 | label_127:
    0x00075954 movs r3, 1                                        |     r3 = 1;
    0x00075956 str r3, [sp, 0xa8]                                |     var_a8h = r3;
    0x00075958 b 0x755a2                                         |     goto label_14;
                                                                 | label_120:
    0x0007595a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0007595c ldr r3, [r3, 0x74]                                |     r3 = *((r3 + 0x74));
    0x0007595e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075960 beq.w 0x75c4c                                     |         goto label_156;
                                                                 |     }
                                                                 | label_25:
    0x00075964 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075966 bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x0007596a str r0, [sp, 0x40]                                |     var_40h = r0;
    0x0007596c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007596e bne.w 0x754a8                                     |         goto label_15;
                                                                 |     }
    0x00075972 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
                                                                 |     if (r3 != 0) {
    0x00075974 cbz r3, 0x75980                                   |         
    0x00075976 ldr r2, [sp, 0x40]                                |         r2 = var_40h;
    0x00075978 str r2, [sp, 0xd4]                                |         var_d4h = r2;
    0x0007597a ldr r2, [sp, 0xd0]                                |         r2 = var_d0h;
    0x0007597c str.w r2, [r3, 0xf8]                              |         __asm ("str.w r2, [r3, 0xf8]");
                                                                 |     }
    0x00075980 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00075982 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x00075984 bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x00075988 b 0x751b8                                         |     goto label_0;
                                                                 | label_132:
    0x0007598a ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 == 0) {
    0x0007598c cbz r1, 0x759b6                                   |         goto label_157;
                                                                 |     }
    0x0007598e ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x00075990 add r0, sp, 0xd8                                  |     r0 += var_d8h;
    0x00075992 str r3, [sp, 0xd8]                                |     var_d8h = r3;
    0x00075994 strd r3, r3, [sp, 0xe0]                           |     __asm ("strd r3, r3, [var_8h_2]");
    0x00075998 str r2, [sp, 0xdc]                                |     var_dch = r2;
    0x0007599a ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0007599c strd r3, r3, [sp, 0xe8]                           |     __asm ("strd r3, r3, [var_ech]");
    0x000759a0 str r2, [sp, 0xf0]                                |     var_f0h = r2;
    0x000759a2 bl 0x2cd88                                        |     fcn_0002cd88 (r0, r1);
    0x000759a6 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000759a8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000759aa beq 0x75a68                                       |         goto label_158;
                                                                 |     }
    0x000759ac ldrh.w r3, [sp, 0xec]                             |     r3 = var_ech;
                                                                 | label_22:
    0x000759b0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000759b2 bne.w 0x75694                                     |         goto label_16;
                                                                 |     }
                                                                 | label_157:
    0x000759b6 ldrh r3, [r4, 0x32]                               |     r3 = *((r4 + 0x32));
                                                                 |     if (r3 == 0) {
    0x000759b8 cbz r3, 0x759e4                                   |         goto label_133;
                                                                 |     }
    0x000759ba movs r6, 0                                        |     r6 = 0;
    0x000759bc add.w sl, sp, 0xd8                                |     sl += var_d8h;
    0x000759c0 mov r3, r6                                        |     r3 = r6;
                                                                 |     do {
    0x000759c2 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x000759c4 ldrsh.w r2, [r2, r6, lsl 1]                       |         offset_2 = r6 << 1;
                                                                 |         r2 = *((r2 + offset_2));
    0x000759c8 cmp r2, 0                                         |         
                                                                 |         if (r2 < 0) {
    0x000759ca blt 0x759f0                                       |             goto label_159;
                                                                 |         }
    0x000759cc ldr r1, [sp, 0x3c]                                |         r1 = var_3ch;
    0x000759ce ldr.w r2, [r1, r2, lsl 2]                         |         offset_3 = r2 << 2;
                                                                 |         r2 = *((r1 + offset_3));
    0x000759d2 mvns r2, r2                                       |         r2 = ~r2;
    0x000759d4 lsrs r2, r2, 0x1f                                 |         r2 >>= 0x1f;
                                                                 | label_18:
    0x000759d6 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x000759d8 bne.w 0x75d66                                     |             goto label_160;
                                                                 |         }
    0x000759dc ldrh r2, [r4, 0x32]                               |         r2 = *((r4 + 0x32));
    0x000759de adds r6, 1                                        |         r6++;
    0x000759e0 cmp r6, r2                                        |         
    0x000759e2 blt 0x759c2                                       |         
                                                                 |     } while (r6 < r2);
                                                                 | label_133:
    0x000759e4 ldr r2, [sp, 0x94]                                |     r2 = var_94h;
    0x000759e6 movs r3, 0                                        |     r3 = 0;
    0x000759e8 adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x000759ea strb.w r3, [r1, sb]                               |     *((r1 + sb)) = r3;
    0x000759ee b 0x756a4                                         |     goto label_17;
                                                                 | label_159:
    0x000759f0 ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x000759f2 add.w r2, r2, r6, lsl 4                           |     r2 += (r6 << 4);
    0x000759f6 ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x000759f8 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000759fa str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x000759fe strd r3, r3, [sl, 8]                              |     __asm ("strd r3, r3, [var_8h_2]");
    0x00075a02 strd r3, r3, [sl, 0x10]                           |     __asm ("strd r3, r3, [var_ech]");
    0x00075a06 str r2, [sp, 0xdc]                                |     var_dch = r2;
    0x00075a08 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00075a0a str r2, [sp, 0xf0]                                |     var_f0h = r2;
    0x00075a0c mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 != 0) {
    0x00075a0e cbz r1, 0x75a1c                                   |         
    0x00075a10 mov r0, sl                                        |         r0 = sl;
    0x00075a12 bl 0x2cd88                                        |         fcn_0002cd88 (r0, r1);
    0x00075a16 ldrh.w r2, [sp, 0xec]                             |         r2 = var_ech;
    0x00075a1a movs r3, 0                                        |         r3 = 0;
                                                                 |     }
    0x00075a1c ldr r1, [sp, 0x58]                                |     r1 = var_58h;
                                                                 |     if (r1 == 0) {
    0x00075a1e cbnz r1, 0x75a28                                  |         
    0x00075a20 bic r2, r2, 2                                     |         r2 = BIT_MASK (r2, 2);
    0x00075a24 lsls r2, r2, 0x10                                 |         r2 <<= 0x10;
    0x00075a26 lsrs r2, r2, 0x10                                 |         r2 >>= 0x10;
                                                                 |     }
    0x00075a28 subs r2, 0                                        |     
    0x00075a2a it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x00075a2c movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00075a2e b 0x759d6                                         |     goto label_18;
                                                                 | label_110:
    0x00075a30 ldr.w r8, [sp, 0x44]                              |     r8 = var_44h;
    0x00075a34 b 0x7534a                                         |     goto label_19;
                                                                 | label_119:
    0x00075a36 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x00075a38 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075a3a beq.w 0x751b8                                     |         goto label_0;
                                                                 |     }
    0x00075a3e ldr r2, [sp, 0xd0]                                |     r2 = var_d0h;
    0x00075a40 str r0, [sp, 0xd4]                                |     var_d4h = r0;
    0x00075a42 str.w r2, [r3, 0xf8]                              |     __asm ("str.w r2, [r3, 0xf8]");
    0x00075a46 b.w 0x751b8                                       |     goto label_0;
                                                                 | label_154:
    0x00075a4a ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x00075a4c mov r2, sb                                        |     r2 = sb;
    0x00075a4e ldr r1, [pc, 0x23c]                               |     
    0x00075a50 mov r0, r4                                        |     r0 = r4;
    0x00075a52 add r1, pc                                        |     r1 = 0xeb6e4;
    0x00075a54 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00075a58 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x00075a5a movs r2, 1                                        |     r2 = 1;
    0x00075a5c ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00075a5e strb r2, [r4, 0x11]                               |     *((r4 + 0x11)) = r2;
    0x00075a60 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075a62 bne.w 0x752f4                                     |         goto label_20;
                                                                 |     }
    0x00075a66 b 0x752fe                                         |     goto label_21;
                                                                 | label_158:
    0x00075a68 ldrh.w r3, [sp, 0xec]                             |     r3 = var_ech;
    0x00075a6c bic r3, r3, 2                                     |     r3 = BIT_MASK (r3, 2);
    0x00075a70 lsls r3, r3, 0x10                                 |     r3 <<= 0x10;
    0x00075a72 lsrs r3, r3, 0x10                                 |     r3 >>= 0x10;
    0x00075a74 b 0x759b0                                         |     goto label_22;
                                                                 | label_152:
    0x00075a76 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00075a78 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x00075a7a eor r3, r3, 1                                     |     r3 ^= 1;
    0x00075a7e cmp r2, 0                                         |     
    0x00075a80 ite ne                                            |     
                                                                 |     if (r2 == 0) {
    0x00075a82 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x00075a84 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00075a88 cbz r3, 0x75a9a                                   |         
    0x00075a8a movs r3, 0                                        |         r3 = 0;
    0x00075a8c ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00075a8e str r3, [sp]                                      |         *(sp) = r3;
    0x00075a90 mov r2, fp                                        |         r2 = fp;
    0x00075a92 ldr r3, [sp, 0x64]                                |         r3 = var_64h;
    0x00075a94 movs r1, 0x50                                     |         r1 = 0x50;
    0x00075a96 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_149:
    0x00075a9a ldr r3, [sp, 0x148]                               |     r3 = *(arg_148h);
    0x00075a9c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00075a9e ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x00075aa0 strd sl, r3, [sp, 4]                              |     __asm ("strd sl, r3, [var_8h]");
    0x00075aa4 movs r3, 1                                        |     r3 = 1;
    0x00075aa6 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075aa8 str r3, [sp]                                      |     *(sp) = r3;
    0x00075aaa bl 0x774e0                                        |     fcn_000774e0 (r0, r1, r2, r3, r4, r5, r6);
    0x00075aae str r0, [sp, 0x58]                                |     var_58h = r0;
    0x00075ab0 ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x00075ab4 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00075ab6 ble 0x75b82                                       |         goto label_161;
                                                                 |     }
    0x00075ab8 ldr r4, [sp, 0x9c]                                |     r4 = var_9ch;
    0x00075aba movs r5, 0                                        |     r5 = 0;
    0x00075abc b 0x75aca                                         |     
                                                                 |     while ((r3 & 0x60) != 0) {
    0x00075abe lsls r7, r3, 0x1a                                 |         r7 = r3 << 0x1a;
    0x00075ac0 it pl                                             |         
                                                                 |         if (r7 < r3) {
    0x00075ac2 addpl r4, 1                                       |             r4++;
                                                                 |         }
                                                                 | label_23:
    0x00075ac4 adds r5, 1                                        |         r5++;
    0x00075ac6 cmp r5, r0                                        |         
                                                                 |         if (r5 >= r0) {
    0x00075ac8 bge 0x75b82                                       |             goto label_161;
                                                                 |         }
    0x00075aca ldrsh.w r3, [sl, 0x20]                            |         r3 = *((sl + 0x20));
    0x00075ace cmp r3, r5                                        |         
                                                                 |         if (r3 == r5) {
    0x00075ad0 beq 0x75b18                                       |             goto label_162;
                                                                 |         }
    0x00075ad2 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x00075ad6 add.w r2, r5, r5, lsl 1                           |         r2 = r5 + (r5 << 1);
    0x00075ada add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00075ade ldrh r3, [r3, 0xa]                                |         r3 = *((r3 + 0xa));
    0x00075ae0 tst.w r3, 0x60                                    |         
    0x00075ae4 bne 0x75abe                                       |         
                                                                 |     }
    0x00075ae6 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00075ae8 adds r7, r4, 1                                    |     r7 = r4 + 1;
    0x00075aea ldr.w r3, [r3, r5, lsl 2]                         |     offset_4 = r5 << 2;
                                                                 |     r3 = *((r3 + offset_4));
    0x00075aee cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00075af0 blt 0x75b30                                       |         
    0x00075af2 ldr r2, [sp, 0x44]                                |         r2 = var_44h;
    0x00075af4 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00075af6 beq 0x75b60                                       |             goto label_163;
                                                                 |         }
    0x00075af8 ldr r2, [sp, 0x84]                                |         r2 = var_84h;
    0x00075afa ldr r1, [sp, 0x68]                                |         r1 = var_68h;
    0x00075afc str r4, [sp]                                      |         *(sp) = r4;
    0x00075afe mov r4, r7                                        |         r4 = r7;
    0x00075b00 cmp r1, 2                                         |         
    0x00075b02 it ne                                             |         
                                                                 |         if (r1 == 2) {
    0x00075b04 movne r0, r2                                      |             r0 = r2;
                                                                 |         }
    0x00075b06 mov r2, r6                                        |         r2 = r6;
    0x00075b08 add r3, r0                                        |         r3 += r0;
    0x00075b0a movs r1, 0x5e                                     |         r1 = 0x5e;
    0x00075b0c ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00075b0e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00075b12 ldrsh.w r0, [sl, 0x22]                            |         r0 = *((sl + 0x22));
    0x00075b16 b 0x75ac4                                         |         goto label_23;
                                                                 | label_162:
    0x00075b18 movs r3, 0                                        |         r3 = 0;
    0x00075b1a ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00075b1c str r3, [sp]                                      |         *(sp) = r3;
    0x00075b1e movs r2, 0                                        |         r2 = 0;
    0x00075b20 mov r3, r4                                        |         r3 = r4;
    0x00075b22 movs r1, 0x4b                                     |         r1 = 0x4b;
    0x00075b24 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00075b28 adds r4, 1                                        |         r4++;
    0x00075b2a ldrsh.w r0, [sl, 0x22]                            |         r0 = *((sl + 0x22));
    0x00075b2e b 0x75ac4                                         |         goto label_23;
                                                                 |     }
    0x00075b30 ldr r3, [sp, 0xc8]                                |     r3 = var_c8h;
    0x00075b32 mvns r3, r3                                       |     r3 = ~r3;
    0x00075b34 and r3, r3, 1                                     |     r3 &= 1;
    0x00075b38 cmp r5, 0x1f                                      |     
    0x00075b3a it gt                                             |     
                                                                 |     if (r5 <= 0x1f) {
    0x00075b3c orrgt r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00075b40 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075b42 beq.w 0x7630e                                     |         goto label_164;
                                                                 |     }
                                                                 | label_50:
    0x00075b46 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00075b48 mov r3, r5                                        |     r3 = r5;
    0x00075b4a str r4, [sp]                                      |     *(sp) = r4;
    0x00075b4c mov r1, sl                                        |     r1 = sl;
    0x00075b4e ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00075b50 mov r4, r7                                        |     r4 = r7;
    0x00075b52 bl 0x5b0d4                                        |     fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x00075b56 movs r3, 0                                        |     r3 = 0;
    0x00075b58 ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x00075b5c str r3, [sp, 0xb8]                                |     var_b8h = r3;
    0x00075b5e b 0x75ac4                                         |     goto label_23;
                                                                 | label_163:
    0x00075b60 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00075b62 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x00075b64 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00075b66 beq.w 0x7632c                                     |         goto label_165;
                                                                 |     }
    0x00075b6a ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x00075b6c mov r2, r4                                        |     r2 = r4;
    0x00075b6e ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075b70 mov r4, r7                                        |     r4 = r7;
    0x00075b72 add.w r3, r1, r3, lsl 4                           |     r3 = r1 + (r3 << 4);
    0x00075b76 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00075b78 bl 0x5aa10                                        |     fcn_0005aa10 (r0, r1, r2);
    0x00075b7c ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x00075b80 b 0x75ac4                                         |     goto label_23;
                                                                 | label_161:
    0x00075b82 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00075b86 tst.w r3, 0x60                                    |     
                                                                 |     if ((r3 & 0x60) != 0) {
    0x00075b8a bne.w 0x76302                                     |         goto label_166;
                                                                 |     }
                                                                 | label_49:
    0x00075b8e ldr r3, [sp, 0xc8]                                |     r3 = var_c8h;
    0x00075b90 lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
                                                                 |     if (r1 < r3) {
    0x00075b92 bmi.w 0x76332                                     |         goto label_167;
                                                                 |     }
    0x00075b96 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00075b98 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x00075b9a bne.w 0x75e96                                     |         goto label_168;
                                                                 |     }
                                                                 | label_37:
    0x00075b9e ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00075ba0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075ba2 bne.w 0x7608a                                     |         goto label_169;
                                                                 |     }
                                                                 | label_43:
    0x00075ba6 ldr r3, [sp, 0x148]                               |     r3 = *(arg_148h);
    0x00075ba8 movs r2, 0x81                                     |     r2 = 0x81;
    0x00075baa ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x00075bac ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075bae str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00075bb0 movs r3, 2                                        |     r3 = 2;
    0x00075bb2 str r3, [sp]                                      |     *(sp) = r3;
    0x00075bb4 strd sl, fp, [sp, 4]                              |     __asm ("strd sl, fp, [var_8h]");
    0x00075bb8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00075bba str.w sb, [sp, 0x10]                              |     __asm ("str.w sb, [var_10h]");
    0x00075bbe bl 0x77618                                        |     fcn_00077618 (r0, r1, r2, r3, r4, r5, r6);
    0x00075bc2 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x00075bc4 cmp r4, 1                                         |     
                                                                 |     if (r4 != 1) {
    0x00075bc6 beq 0x75bfc                                       |         
    0x00075bc8 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x00075bca cmp r4, 2                                         |         
    0x00075bcc mvn.w r2, sb                                      |         r2 = ~sb;
    0x00075bd0 ldr r0, [r3, 0xc]                                 |         r0 = *((r3 + 0xc));
    0x00075bd2 ldrd r1, r3, [r0, 0x38]                           |         __asm ("ldrd r1, r3, [r0, 0x38]");
    0x00075bd6 add r3, r1                                        |         r3 += r1;
                                                                 |         if (r4 == 2) {
    0x00075bd8 beq.w 0x75e6a                                     |             goto label_170;
                                                                 |         }
    0x00075bdc cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x00075bde blt.w 0x7652e                                     |             goto label_171;
                                                                 |         }
    0x00075be2 ldr r1, [sp, 0x40]                                |         r1 = var_40h;
    0x00075be4 ldr r3, [r0, 0x40]                                |         r3 = *((r0 + 0x40));
    0x00075be6 ldr r1, [r1, 0x6c]                                |         r1 = *((r1 + 0x6c));
    0x00075be8 str.w r1, [r3, r2, lsl 2]                         |         __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_59:
    0x00075bec movs r1, 0                                        |         r1 = 0;
    0x00075bee ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x00075bf0 str r1, [sp]                                      |         *(sp) = r1;
    0x00075bf2 mov r2, r6                                        |         r2 = r6;
    0x00075bf4 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00075bf6 movs r1, 0x26                                     |         r1 = 0x26;
    0x00075bf8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_36:
    0x00075bfc ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00075bfe ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00075c00 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00075c04 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00075c06 bmi.w 0x763d4                                     |         goto label_172;
                                                                 |     }
    0x00075c0a ldr r3, [sp, 0xc0]                                |     r3 = var_c0h;
    0x00075c0c ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00075c0e ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00075c10 ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x00075c12 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00075c14 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00075c16 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_54:
    0x00075c18 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00075c1a ldrb r3, [r2, 0x12]                               |     r3 = *((r2 + 0x12));
                                                                 |     if (r3 == 0) {
    0x00075c1c cbnz r3, 0x75c28                                  |         
    0x00075c1e ldr r3, [r2, 0x78]                                |         r3 = *((r2 + 0x78));
    0x00075c20 ldr r2, [sp, 0x5c]                                |         r2 = var_5ch;
    0x00075c22 orrs r2, r3                                       |         r2 |= r3;
                                                                 |         if (r2 == r3) {
    0x00075c24 beq.w 0x76c5c                                     |             goto label_173;
                                                                 |         }
                                                                 |     }
                                                                 | label_96:
    0x00075c28 ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00075c2a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075c2c bne.w 0x763e6                                     |         goto label_174;
                                                                 |     }
    0x00075c30 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x00075c32 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00075c34 beq.w 0x763e0                                     |         goto label_74;
                                                                 |     }
    0x00075c38 ldr r2, [sp, 0x8c]                                |     r2 = var_8ch;
    0x00075c3a str r2, [sp, 0xd4]                                |     var_d4h = r2;
                                                                 | label_75:
    0x00075c3c ldr r2, [sp, 0xd0]                                |     r2 = var_d0h;
    0x00075c3e ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00075c40 str.w r2, [r3, 0xf8]                              |     __asm ("str.w r2, [r3, 0xf8]");
    0x00075c44 b.w 0x752fe                                       |     goto label_21;
                                                                 | label_64:
    0x00075c48 str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x00075c4a b 0x75788                                         |     goto label_24;
                                                                 | label_156:
    0x00075c4c ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00075c4e ldr r3, [r2]                                      |     r3 = *(r2);
    0x00075c50 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00075c52 lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x00075c54 itt pl                                            |     
                                                                 |     if (r1 < r3) {
    0x00075c56 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x00075c58 strbpl r3, [r2, 0x17]                             |         *((r2 + 0x17)) = r3;
                                                                 |     }
    0x00075c5a b 0x75964                                         |     goto label_25;
                                                                 | label_155:
    0x00075c5c ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00075c5e str r5, [sp, 0x54]                                |     var_54h = r5;
    0x00075c60 str r5, [sp, 0xa4]                                |     var_a4h = r5;
    0x00075c62 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00075c64 movs r3, 2                                        |     r3 = 2;
    0x00075c66 b.w 0x75416                                       |     goto label_26;
                                                                 | label_129:
    0x00075c90 ldr.w fp, [pc, 0xb14]                             |     fp = *(0x000767a8);
    0x00075c94 movw sb, 0x869f                                   |     
    0x00075c98 ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x00075c9c movt sb, 1                                        |     sb = 0x1869f;
    0x00075ca0 ldrb.w r2, [sl, 0x2b]                             |     r2 = *((sl + 0x2b));
    0x00075ca4 add fp, pc                                        |     
    0x00075ca6 str r5, [sp, 0x64]                                |     var_64h = r5;
    0x00075ca8 str.w r8, [sp, 0x70]                              |     __asm ("str.w r8, [var_70h]");
                                                                 | label_27:
    0x00075cac cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00075cae ble 0x75d40                                       |         goto label_175;
                                                                 |     }
    0x00075cb0 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00075cb2 mov.w r8, 0                                       |     r8 = 0;
    0x00075cb6 mov r4, r8                                        |     r4 = r8;
    0x00075cb8 mov r5, r8                                        |     r5 = r8;
    0x00075cba mov r1, r2                                        |     r1 = r2;
    0x00075cbc add r7, sp, 0xd8                                  |     r7 += var_d8h;
    0x00075cbe subs r6, r3, 4                                    |     r6 = r3 - 4;
    0x00075cc0 str r7, [sp, 0x48]                                |     var_48h = r7;
                                                                 |     do {
    0x00075cc2 ldr r3, [r6, 4]!                                  |         r3 = *((r6 += 4));
    0x00075cc6 cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x00075cc8 bge 0x75d30                                       |             
    0x00075cca ldr.w r3, [sl, 4]                                 |             r3 = *((sl + 4));
    0x00075cce add.w ip, r3, r5                                  |             
    0x00075cd0 lsrs r5, r0, 0x10                                 |             r5 = r0 >> 0x10;
    0x00075cd2 ldrh.w r3, [ip, 0xa]                              |             r3 = *((ip + 0xa));
    0x00075cd6 and r3, r3, 0x60                                  |             r3 &= 0x60;
                                                                 |             if (r3 == 0) {
    0x00075cda cbz r3, 0x75d30                                   |                 goto label_29;
                                                                 |             }
    0x00075cdc ldrh.w r2, [ip, 8]                                |             r2 = *((ip + 8));
                                                                 |             if (r2 == 0) {
    0x00075ce0 cbz r2, 0x75d30                                   |                 goto label_29;
                                                                 |             }
                                                                 |             if (r1 != 0) {
    0x00075ce2 cbnz r1, 0x75d30                                  |                 goto label_29;
                                                                 |             }
    0x00075ce4 ldr.w r3, [sl, 0x34]                              |             r3 = *((sl + 0x34));
                                                                 |             if (r3 == 0) {
    0x00075ce8 cbz r3, 0x75d30                                   |                 goto label_29;
                                                                 |             }
    0x00075cea ldr r7, [r3]                                      |             r7 = *(r3);
    0x00075cec cmp r7, r2                                        |             
                                                                 |             if (r7 < r2) {
    0x00075cee blt 0x75d30                                       |                 goto label_29;
                                                                 |             }
    0x00075cf0 add.w ip, r3, r2, lsl 4                           |             
    0x00075cf4 ldr r2, [sp, 0x48]                                |             r2 = var_48h;
    0x00075cf6 ldr r3, [ip, -0x8]                                |             r3 = *((ip - 0x8));
    0x00075cfa str r1, [r2]                                      |             *(r2) = r1;
    0x00075cfc strd r1, r1, [r2, 8]                              |             __asm ("strd r1, r1, [r2, 8]");
    0x00075d00 strd r1, r1, [r2, 0x10]                           |             __asm ("strd r1, r1, [r2, 0x10]");
    0x00075d04 ldr r2, [sp, 0x3c]                                |             r2 = var_3ch;
    0x00075d06 str.w fp, [sp, 0xdc]                              |             __asm ("str.w fp, [var_dch]");
    0x00075d0a str r2, [sp, 0xf0]                                |             var_f0h = r2;
                                                                 |             if (r3 != 0) {
    0x00075d0c cbz r3, 0x75d28                                   |                 
    0x00075d0e mov r1, r3                                        |                 r1 = r3;
    0x00075d10 ldr r0, [sp, 0x48]                                |                 r0 = var_48h;
    0x00075d12 bl 0x2cd88                                        |                 fcn_0002cd88 (r0, r1);
    0x00075d16 ldr r2, [sp, 0x58]                                |                 r2 = var_58h;
    0x00075d18 ldrh.w r3, [sp, 0xec]                             |                 r3 = var_ech;
                                                                 |                 if (r2 == 0) {
    0x00075d1c cbnz r2, 0x75d26                                  |                     
    0x00075d1e bic r3, r3, 2                                     |                     r3 = BIT_MASK (r3, 2);
    0x00075d22 lsls r3, r3, 0x10                                 |                     r3 <<= 0x10;
    0x00075d24 lsrs r3, r3, 0x10                                 |                     r3 >>= 0x10;
                                                                 |                 }
                                                                 |                 if (r3 != 0) {
    0x00075d26 cbnz r3, 0x75d48                                  |                     goto label_176;
                                                                 |                 }
                                                                 |             }
    0x00075d28 ldrb.w r1, [sl, 0x2b]                             |             r1 = *((sl + 0x2b));
    0x00075d2c ldrsh.w r0, [sl, 0x22]                            |             r0 = *((sl + 0x22));
                                                                 |         }
                                                                 | label_29:
    0x00075d30 adds r4, 1                                        |         r4++;
    0x00075d32 adds r5, 0xc                                      |         r5 += 0xc;
    0x00075d34 cmp r4, r0                                        |         
    0x00075d36 blt 0x75cc2                                       |         
                                                                 |     } while (r4 < r0);
    0x00075d38 mov r2, r1                                        |     r2 = r1;
    0x00075d3a cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00075d3e bne 0x75cac                                       |         goto label_27;
                                                                 |     }
                                                                 | label_175:
    0x00075d40 ldr r5, [sp, 0x64]                                |     r5 = var_64h;
    0x00075d42 ldr.w r8, [sp, 0x70]                              |     r8 = var_70h;
    0x00075d46 b 0x75616                                         |     goto label_28;
                                                                 | label_176:
    0x00075d48 str.w sb, [r6]                                    |     __asm ("str.w sb, [r6]");
    0x00075d4c mov.w r8, 1                                       |     r8 = 1;
    0x00075d50 ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x00075d54 ldrb.w r1, [sl, 0x2b]                             |     r1 = *((sl + 0x2b));
    0x00075d58 b 0x75d30                                         |     goto label_29;
                                                                 | label_109:
    0x00075d5a mov.w r8, 0x8000                                  |     
    0x00075d5e movt r8, 0xffff                                   |     r8 = 0x-8000;
    0x00075d62 b.w 0x7534a                                       |     goto label_19;
                                                                 | label_160:
    0x00075d66 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x00075d68 ldr r2, [sp, 0x148]                               |     r2 = *(arg_148h);
    0x00075d6a ldrh r1, [r4, 0x34]                               |     r1 = *((r4 + 0x34));
    0x00075d6c adds r3, 1                                        |     r3++;
    0x00075d6e cmp r2, 0xb                                       |     
    0x00075d70 add r1, r3                                        |     r1 += r3;
    0x00075d72 str r1, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r1;
                                                                 |     if (r2 != 0xb) {
    0x00075d74 bne.w 0x7569e                                     |         goto label_30;
                                                                 |     }
    0x00075d78 ldrb.w r1, [r4, 0x36]                             |     r1 = *((r4 + 0x36));
    0x00075d7c cmp r1, 5                                         |     
    0x00075d7e itt eq                                            |     
                                                                 |     if (r1 != 5) {
    0x00075d80 moveq r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r1 != 5) {
    0x00075d82 streq r1, [sp, 0xcc]                              |         var_cch = r1;
                                                                 |     }
    0x00075d84 b 0x7569e                                         |     goto label_30;
                                                                 | label_117:
    0x00075d86 ldr r5, [sp, 0xac]                                |     r5 = var_ach;
    0x00075d88 movs r3, 2                                        |     r3 = 2;
    0x00075d8a ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x00075d8c str r5, [sp, 0x54]                                |     var_54h = r5;
    0x00075d8e str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00075d90 str r5, [sp, 0xa4]                                |     var_a4h = r5;
    0x00075d92 b.w 0x75416                                       |     goto label_26;
                                                                 | label_130:
    0x00075d96 ldr.w r6, [sl, 0x30]                              |     r6 = *((sl + 0x30));
    0x00075d9a ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00075d9e cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00075da0 beq.w 0x76538                                     |         goto label_177;
                                                                 |     }
    0x00075da4 ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x00075da6 movs r3, 1                                        |     r3 = 1;
    0x00075da8 ldr.w sb, [sp, 0x98]                              |     sb = var_98h;
    0x00075dac movs r4, 0                                        |     r4 = 0;
    0x00075dae mov fp, r3                                        |     
                                                                 | label_31:
    0x00075db0 ldr r1, [r6, 0x14]                                |     r1 = *((r6 + 0x14));
    0x00075db2 cmp r1, 0                                         |     
    0x00075db4 itt gt                                            |     
                                                                 |     if (r1 <= 0) {
    0x00075db6 movgt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r1 <= 0) {
    0x00075db8 addgt r0, r6, 0x24                                |         r0 = r6 + 0x24;
                                                                 |     }
                                                                 |     if (r1 > 0) {
    0x00075dbc bgt 0x75de0                                       |         goto label_178;
                                                                 |     }
    0x00075dbe b 0x75e00                                         |     goto label_179;
                                                                 |     do {
    0x00075dc0 ldrsh.w r2, [sl, 0x20]                            |         r2 = *((sl + 0x20));
    0x00075dc4 cmp.w sb, 0                                       |         
    0x00075dc8 sub.w r2, r2, ip                                  |         r2 -= ip;
    0x00075dcc clz r2, r2                                        |         r2 &= r2;
    0x00075dd0 lsr.w r2, r2, 5                                   |         r2 >>= 5;
    0x00075dd4 it eq                                             |         
                                                                 |         if (sb != 0) {
    0x00075dd6 moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x00075dd8 cbnz r2, 0x75dec                                  |             goto label_180;
                                                                 |         }
    0x00075dda adds r3, 1                                        |         r3++;
    0x00075ddc cmp r3, r1                                        |         
                                                                 |         if (r3 == r1) {
    0x00075dde beq 0x75e00                                       |             goto label_179;
                                                                 |         }
                                                                 | label_178:
    0x00075de0 ldr.w ip, [r0, r3, lsl 3]                         |         offset_5 = r3 << 3;
                                                                 |         ip = *((r0 + offset_5));
    0x00075de4 ldr.w r2, [r7, ip, lsl 2]                         |         offset_6 = ip << 2;
                                                                 |         r2 = *((r7 + offset_6));
    0x00075de8 cmp r2, 0                                         |         
    0x00075dea blt 0x75dc0                                       |         
                                                                 |     } while (r2 < 0);
                                                                 | label_180:
    0x00075dec ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x00075dee movs r4, 1                                        |     r4 = 1;
    0x00075df0 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00075df4 blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x00075df8 cmp r0, 0                                         |     
    0x00075dfa it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00075dfc moveq fp, 2                                       |         
                                                                 |     }
                                                                 | label_179:
    0x00075e00 ldr r6, [r6, 4]                                   |     r6 = *((r6 + 4));
    0x00075e02 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00075e04 bne 0x75db0                                       |         goto label_31;
                                                                 |     }
    0x00075e06 ldr.w r0, [sl, 0x3c]                              |     r0 = *((sl + 0x3c));
    0x00075e0a mov r2, r6                                        |     r2 = r6;
    0x00075e0c ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00075e10 str.w fp, [sp, 0x70]                              |     __asm ("str.w fp, [var_70h]");
    0x00075e14 adds r0, 0x38                                     |     r0 += 0x38;
    0x00075e16 bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x00075e1a ldr r7, [r0, 8]                                   |     r7 = *((r0 + 8));
                                                                 |     if (r7 == 0) {
    0x00075e1c cbz r7, 0x75e3c                                   |         goto label_181;
                                                                 |     }
                                                                 |     do {
                                                                 | label_60:
    0x00075e1e ldr r3, [sp, 0xb0]                                |         r3 = var_b0h;
    0x00075e20 mov r1, r7                                        |         r1 = r7;
    0x00075e22 ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x00075e24 mov r0, sl                                        |         r0 = sl;
    0x00075e26 bl 0x14364                                        |         r0 = fcn_00014364 (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x00075e2a cbz r0, 0x75e36                                   |             
    0x00075e2c ldrb r3, [r7, 0x1a]                               |             r3 = *((r7 + 0x1a));
    0x00075e2e cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00075e30 bne.w 0x76554                                     |                 goto label_182;
                                                                 |             }
    0x00075e34 movs r4, 1                                        |             r4 = 1;
                                                                 |         }
    0x00075e36 ldr r7, [r7, 0xc]                                 |         r7 = *((r7 + 0xc));
    0x00075e38 cmp r7, 0                                         |         
    0x00075e3a bne 0x75e1e                                       |         
                                                                 |     } while (r7 != 0);
                                                                 | label_181:
    0x00075e3c cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00075e3e bne.w 0x7563e                                     |         goto label_32;
                                                                 |     }
    0x00075e42 b.w 0x7563a                                       |     goto label_33;
                                                                 | label_150:
    0x00075e46 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075e48 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00075e4a ldr r4, [r3, 0x20]                                |     r4 = *((r3 + 0x20));
    0x00075e4c and r4, r4, 0x4000                                |     r4 &= 0x4000;
    0x00075e50 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00075e52 beq.w 0x75834                                     |         goto label_34;
                                                                 |     }
    0x00075e54 add r4, sp, 0x3bc                                 |     r4 = sp + 0x3bc;
    0x00075e56 ldrb.w r3, [sl, 0x2b]                             |     r3 = *((sl + 0x2b));
    0x00075e5a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075e5c bne.w 0x75832                                     |         goto label_35;
                                                                 |     }
    0x00075e60 mov r1, sl                                        |     r1 = sl;
    0x00075e62 bl 0x20a40                                        |     r0 = fcn_00020a40 (r0, r1);
    0x00075e66 mov r4, r0                                        |     r4 = r0;
    0x00075e68 b 0x75834                                         |     goto label_34;
                                                                 | label_170:
    0x00075e6a cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00075e6c blt.w 0x76662                                     |         goto label_183;
                                                                 |     }
    0x00075e70 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00075e72 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00075e74 ldr r1, [r1, 0x6c]                                |     r1 = *((r1 + 0x6c));
    0x00075e76 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_67:
    0x00075e7a ldr r0, [sp, 0xa0]                                |     r0 = var_a0h;
    0x00075e7c bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00075e80 b 0x75bfc                                         |     goto label_36;
                                                                 | label_51:
    0x00075e82 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00075e86 tst.w r3, 0x60                                    |     
                                                                 |     if ((r3 & 0x60) != 0) {
    0x00075e8a beq 0x75e96                                       |         
    0x00075e8c ldr r1, [sp, 0x9c]                                |         r1 = var_9ch;
    0x00075e8e mov r2, sl                                        |         r2 = sl;
    0x00075e90 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x00075e92 bl 0x5b358                                        |         fcn_0005b358 (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_168:
    0x00075e96 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00075e98 mov r1, sl                                        |     r1 = sl;
    0x00075e9a ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x00075e9c ldr r5, [sp, 0x50]                                |     r5 = var_50h;
    0x00075e9e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00075ea0 ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x00075ea2 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00075ea4 ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x00075ea6 subs r4, r3, 0                                    |     r4 = r3 - 0;
    0x00075ea8 strd fp, r3, [sp, 8]                              |     __asm ("strd fp, r3, [var_8h]");
    0x00075eac ldr r3, [sp, 0x148]                               |     r3 = *(arg_148h);
    0x00075eae it ne                                             |     
                                                                 |     if (r4 == r3) {
    0x00075eb0 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
    0x00075eb2 str r2, [sp]                                      |     *(sp) = r2;
    0x00075eb4 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075eb6 ldr r2, [sp, 0x88]                                |     r2 = var_88h;
    0x00075eb8 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00075eba str.w sb, [sp, 0x14]                              |     __asm ("str.w sb, [var_14h]");
    0x00075ebe str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00075ec0 movs r3, 0                                        |     r3 = 0;
    0x00075ec2 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00075ec4 add r3, sp, 0xcc                                  |     r3 += var_cch;
    0x00075ec6 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00075ec8 mov r3, r5                                        |     r3 = r5;
    0x00075eca bl 0x77d08                                        |     fcn_00077d08 (r0, r1, r2, r3, r4, r5, r6);
    0x00075ece ldr r2, [sp, 0xcc]                                |     r2 = var_cch;
    0x00075ed0 cmp r2, 0                                         |     
    0x00075ed2 ite eq                                            |     
                                                                 |     if (r2 != 0) {
    0x00075ed4 moveq r3, r4                                      |         r3 = r4;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x00075ed6 orrne r3, r4, 1                                   |         r3 = r4 | 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00075eda cbz r3, 0x75ef6                                   |         
    0x00075edc ldr r1, [sp, 0x54]                                |         r1 = var_54h;
    0x00075ede cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00075ee0 beq.w 0x76c16                                     |             goto label_184;
                                                                 |         }
    0x00075ee4 ldr r1, [sp, 0x80]                                |         r1 = var_80h;
    0x00075ee6 mov r3, sb                                        |         r3 = sb;
    0x00075ee8 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x00075eea mov r2, r5                                        |         r2 = r5;
    0x00075eec strd r8, r1, [sp]                                 |         __asm ("strd r8, r1, [sp]");
    0x00075ef0 movs r1, 0x1b                                     |         r1 = 0x1b;
    0x00075ef2 bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                 |     }
                                                                 | label_92:
    0x00075ef6 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00075ef8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075efa bne.w 0x76ad8                                     |         goto label_185;
                                                                 |     }
                                                                 | label_83:
    0x00075efe ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00075f00 ldr.w r2, [sl, 0x1c]                              |     r2 = *((sl + 0x1c));
    0x00075f04 ldr.w r1, [sl, 8]                                 |     r1 = *((sl + 8));
    0x00075f08 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00075f0a ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00075f0c ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075f0e str r3, [sp]                                      |     *(sp) = r3;
    0x00075f10 mov.w r3, -1                                      |     r3 = -1;
    0x00075f14 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00075f16 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00075f18 bl 0x66f00                                        |     fcn_00066f00 (r0, r1, r2, r3, r4, r5, r6);
    0x00075f1c ldr r3, [sp, 0xb8]                                |     r3 = var_b8h;
    0x00075f1e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075f20 bne.w 0x76ac6                                     |         goto label_186;
                                                                 |     }
                                                                 | label_82:
    0x00075f24 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00075f26 cmp r3, 1                                         |     
    0x00075f28 it gt                                             |     
                                                                 |     if (r3 <= 1) {
    0x00075f2a orrgt r4, r4, 1                                   |         r4 |= 1;
                                                                 |     }
    0x00075f2e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00075f30 bne.w 0x76ab4                                     |         goto label_187;
                                                                 |     }
                                                                 | label_81:
    0x00075f34 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00075f36 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075f38 bne.w 0x769fa                                     |         goto label_188;
                                                                 |     }
    0x00075f3c ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00075f3e cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00075f40 beq.w 0x76784                                     |         goto label_189;
                                                                 |     }
    0x00075f44 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00075f46 ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x00075f48 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00075f4a str r3, [sp, 4]                                   |     var_4h = r3;
    0x00075f4c ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00075f4e strd r1, r1, [sp, 0xc]                            |     __asm ("strd r1, r1, [var_ch]");
    0x00075f52 movs r1, 4                                        |     r1 = 4;
    0x00075f54 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00075f56 mov r1, sl                                        |     r1 = sl;
    0x00075f58 str r3, [sp]                                      |     *(sp) = r3;
    0x00075f5a ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075f5c ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00075f5e bl 0x29ef0                                        |     fcn_00029ef0 (r0, r1, r2, r3, r4, r5, r6);
    0x00075f62 b 0x75b9e                                         |     goto label_37;
                                                                 | label_138:
    0x00075f64 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00075f66 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x00075f6a ldr.w r3, [r0, 0xf8]                              |     r3 = *((r0 + 0xf8));
    0x00075f6e str r0, [sp, 0xd4]                                |     var_d4h = r0;
    0x00075f70 str.w r2, [r0, 0xf8]                              |     __asm ("str.w r2, [r0, 0xf8]");
    0x00075f74 str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x00075f76 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00075f78 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00075f7a bne.w 0x7575c                                     |         goto label_38;
                                                                 |     }
    0x00075f7e ldrd r2, r3, [sp, 0x4c]                           |     __asm ("ldrd r2, r3, [var_4ch]");
    0x00075f82 mov r1, sl                                        |     r1 = sl;
    0x00075f84 bl 0x68ae0                                        |     fcn_00068ae0 (r0, r1, r2, r3);
                                                                 | label_139:
    0x00075f88 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x00075f8a add r0, sp, 0xf4                                  |     r0 += var_f4h;
    0x00075f8c bl 0x2cfe8                                        |     r0 = fcn_0002cfe8 (r0, r1);
    0x00075f90 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00075f92 bne.w 0x752ee                                     |         goto label_4;
                                                                 |     }
    0x00075f96 ldrb.w r1, [sl, 0x2b]                             |     r1 = *((sl + 0x2b));
    0x00075f9a b.w 0x7575c                                       |     goto label_38;
                                                                 | label_136:
    0x00075f9e ldr r5, [sp, 0x98]                                |     r5 = var_98h;
    0x00075fa0 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00075fa2 bne.w 0x76c2a                                     |         goto label_190;
                                                                 |     }
    0x00075fa6 mov r3, fp                                        |     r3 = fp;
    0x00075fa8 str r5, [sp, 0xb4]                                |     var_b4h = r5;
    0x00075faa str.w fp, [sp, 0x64]                              |     __asm ("str.w fp, [var_64h]");
    0x00075fae b.w 0x75742                                       |     goto label_39;
                                                                 | label_135:
    0x00075fb2 movs r4, 0                                        |     r4 = 0;
    0x00075fb4 mov fp, r4                                        |     
    0x00075fb6 str r4, [sp, 0xb4]                                |     var_b4h = r4;
    0x00075fb8 str r4, [sp, 0x9c]                                |     var_9ch = r4;
    0x00075fba str r4, [sp, 0x64]                                |     var_64h = r4;
    0x00075fbc b.w 0x7574c                                       |     goto label_40;
                                                                 | label_134:
    0x00075fc0 ldr r0, [sp, 0x94]                                |     r0 = var_94h;
    0x00075fc2 mov r2, r5                                        |     r2 = r5;
    0x00075fc4 movs r1, 1                                        |     r1 = 1;
    0x00075fc6 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00075fca b.w 0x756d2                                       |     goto label_41;
                                                                 | label_142:
    0x00075fce ldr r5, [sp, 0x40]                                |     r5 = var_40h;
    0x00075fd0 mov r3, r4                                        |     r3 = r4;
    0x00075fd2 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00075fd4 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x00075fd6 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00075fda mov r0, r5                                        |     r0 = r5;
    0x00075fdc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00075fe0 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00075fe2 ldrd r5, r3, [r5, 0x6c]                           |     __asm ("ldrd r5, r3, [r5, 0x6c]");
    0x00075fe6 ldr r6, [r1, 0x28]                                |     r6 = *((r1 + 0x28));
    0x00075fe8 cmp r5, r3                                        |     
    0x00075fea add.w r2, r6, 1                                   |     r2 = r6 + 1;
    0x00075fee str r2, [r1, 0x28]                                |     *((r1 + 0x28)) = r2;
                                                                 |     if (r5 >= r3) {
    0x00075ff0 bge.w 0x76c02                                     |         goto label_191;
                                                                 |     }
    0x00075ff4 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00075ff6 add.w r3, r5, r5, lsl 2                           |     r3 = r5 + (r5 << 2);
    0x00075ffa ldr r7, [sp, 0x44]                                |     r7 = var_44h;
    0x00075ffc adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x00075ffe lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00076000 ldr r1, [r0, 0x68]                                |     r1 = *((r0 + 0x68));
    0x00076002 str r2, [r0, 0x6c]                                |     *((r0 + 0x6c)) = r2;
    0x00076004 movs r0, 0x76                                     |     r0 = 0x76;
    0x00076006 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00076008 str r6, [r2, 4]                                   |     *((r2 + 4)) = r6;
    0x0007600a strd r7, r4, [r2, 8]                              |     __asm ("strd r7, r4, [r2, 8]");
    0x0007600e str r7, [r2, 0x10]                                |     *((r2 + 0x10)) = r7;
    0x00076010 str r0, [r1, r3]                                  |     *((r1 + r3)) = r0;
                                                                 | label_91:
    0x00076012 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00076014 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00076016 beq.w 0x76bf6                                     |         goto label_192;
                                                                 |     }
    0x0007601a mov.w r8, 0                                       |     r8 = 0;
    0x0007601e str.w r8, [sp, 0x90]                              |     __asm ("str.w r8, [var_90h]");
    0x00076022 str.w r8, [sp, 0x84]                              |     __asm ("str.w r8, [var_84h]");
                                                                 | label_95:
    0x00076026 movs r3, 0x10                                     |     r3 = 0x10;
    0x00076028 mov r2, sb                                        |     r2 = sb;
    0x0007602a ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0007602c ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007602e bl 0x59230                                        |     fcn_00059230 (r0, r1, r2, r3);
    0x00076032 movs r3, 0                                        |     r3 = 0;
    0x00076034 movs r2, 1                                        |     r2 = 1;
    0x00076036 str r3, [sp, 0xb8]                                |     var_b8h = r3;
    0x00076038 str r2, [sp, 0x48]                                |     var_48h = r2;
    0x0007603a str r3, [sp, 0xa0]                                |     var_a0h = r3;
                                                                 | label_45:
    0x0007603c ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00076040 ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 == r3) {
    0x00076044 beq.w 0x76c42                                     |         goto label_193;
                                                                 |     }
                                                                 | label_46:
    0x00076048 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x0007604a cmp r3, 0                                         |     
    0x0007604c str r3, [sp, 0x80]                                |     var_80h = r3;
    0x0007604e itt gt                                            |     
                                                                 |     if (r3 <= 0) {
    0x00076050 ldrgt r7, [sp, 0x54]                              |         r7 = var_54h;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00076052 movgt r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00076054 ble 0x76074                                       |         goto label_194;
                                                                 |     }
                                                                 |     do {
    0x00076056 ldr r2, [sp, 0x90]                                |         r2 = var_90h;
    0x00076058 mov r1, sl                                        |         r1 = sl;
    0x0007605a ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x0007605c ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x0007605e add r2, r4                                        |         r2 += r4;
    0x00076060 ldrsh.w r3, [r3, r4, lsl 1]                       |         offset_7 = r4 << 1;
                                                                 |         r3 = *((r3 + offset_7));
    0x00076064 adds r4, 1                                        |         r4++;
    0x00076066 str r2, [sp]                                      |         *(sp) = r2;
    0x00076068 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x0007606a bl 0x5b0d4                                        |         fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x0007606e ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00076070 cmp r4, r3                                        |         
    0x00076072 bne 0x76056                                       |         
                                                                 |     } while (r4 != r3);
                                                                 | label_194:
    0x00076074 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00076076 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00076078 beq.w 0x76614                                     |         goto label_195;
                                                                 |     }
    0x0007607c cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0007607e bne.w 0x765e4                                     |         goto label_196;
                                                                 |     }
                                                                 | label_65:
    0x00076082 ldr.w r8, [sp, 0x90]                              |     r8 = var_90h;
    0x00076086 b.w 0x757ea                                       |     goto label_42;
                                                                 | label_169:
    0x0007608a movs r3, 0                                        |     r3 = 0;
    0x0007608c ldr r2, [sp, 0x8c]                                |     r2 = var_8ch;
    0x0007608e str r3, [sp]                                      |     *(sp) = r3;
    0x00076090 movs r1, 0x56                                     |     r1 = 0x56;
    0x00076092 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076094 movs r3, 1                                        |     r3 = 1;
    0x00076096 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007609a b 0x75ba6                                         |     goto label_43;
                                                                 | label_147:
    0x0007609c ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0007609e str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x000760a0 b.w 0x75820                                       |     goto label_44;
                                                                 | label_144:
    0x000760a4 mov r3, r2                                        |     r3 = r2;
    0x000760a6 ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x000760a8 adds r7, r3, r2                                   |     r7 = r3 + r2;
    0x000760aa ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000760ac ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000760ae cmp r3, 2                                         |     
    0x000760b0 it eq                                             |     
                                                                 |     if (r3 == 2) {
    0x000760b2 ldrsheq r3, [sl, 0x22]                            |         __asm ("ldrsheq r3, [sl, 0x22]");
                                                                 |     }
    0x000760b6 ldr r6, [r2, 0x28]                                |     r6 = *((r2 + 0x28));
    0x000760b8 it eq                                             |     
                                                                 |     if (r3 != 2) {
    0x000760ba addeq r7, r7, r3                                  |         r7 += r3;
                                                                 |     }
    0x000760bc adds r3, r6, 1                                    |     r3 = r6 + 1;
    0x000760be str r3, [r2, 0x28]                                |     *((r2 + 0x28)) = r3;
    0x000760c0 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
                                                                 |     if (r3 != 0) {
    0x000760c2 cbz r3, 0x760da                                   |         
    0x000760c4 ldr r2, [sp, 0x90]                                |         r2 = var_90h;
    0x000760c6 movs r1, 0x4b                                     |         r1 = 0x4b;
    0x000760c8 ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x000760ca ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x000760cc adds r3, r2, r3                                   |         r3 = r2 + r3;
    0x000760ce subs r3, 1                                        |         r3--;
    0x000760d0 str r3, [sp]                                      |         *(sp) = r3;
    0x000760d2 mov r3, r2                                        |         r3 = r2;
    0x000760d4 movs r2, 0                                        |         r2 = 0;
    0x000760d6 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
    0x000760da ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000760dc ldrd r5, r3, [r3, 0x6c]                           |     __asm ("ldrd r5, r3, [r3, 0x6c]");
    0x000760e0 cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x000760e2 bge.w 0x7664e                                     |         goto label_197;
                                                                 |     }
    0x000760e6 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000760e8 add.w r3, r5, r5, lsl 2                           |     r3 = r5 + (r5 << 2);
    0x000760ec adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x000760ee lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000760f0 mov.w lr, 0                                       |     lr = 0;
    0x000760f4 ldr r1, [r0, 0x68]                                |     r1 = *((r0 + 0x68));
    0x000760f6 mov.w ip, 0x76                                    |     
    0x000760fa str r2, [r0, 0x6c]                                |     *((r0 + 0x6c)) = r2;
    0x000760fc adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x000760fe strd r6, r7, [r2, 4]                              |     __asm ("strd r6, r7, [r2, 4]");
    0x00076102 strd lr, lr, [r2, 0xc]                            |     __asm ("strd lr, lr, [r2, 0xc]");
    0x00076106 str.w ip, [r1, r3]                                |     __asm ("str.w ip, [r1, r3]");
                                                                 | label_66:
    0x0007610a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
                                                                 |     if (r3 != 0) {
    0x0007610c cbz r3, 0x76140                                   |         
    0x0007610e ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x00076110 mov r1, r3                                        |         r1 = r3;
    0x00076112 bl 0x27d1c                                        |         r0 = fcn_00027d1c (r0, r1);
    0x00076116 mov r2, r0                                        |         r2 = r0;
                                                                 |         if (r0 == 0) {
    0x00076118 cbz r0, 0x76140                                   |             goto label_100;
                                                                 |         }
    0x0007611a ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0007611c strh r7, [r0, 8]                                  |         *((r0 + 8)) = r7;
    0x0007611e ldr r0, [r3]                                      |         r0 = *(r3);
    0x00076120 ldrb.w r3, [r0, 0x57]                             |         r3 = *((r0 + 0x57));
    0x00076124 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00076126 bne.w 0x76cce                                     |             goto label_198;
                                                                 |         }
    0x0007612a ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x0007612c movs r1, 0x14                                     |         r1 = 0x14;
    0x0007612e ldr r3, [r0, 0x6c]                                |         r3 = *((r0 + 0x6c));
    0x00076130 mul r3, r1, r3                                    |         r3 = r1 * r3;
    0x00076134 ldr r1, [r0, 0x68]                                |         r1 = *((r0 + 0x68));
    0x00076136 subs r3, 0x14                                     |         r3 -= 0x14;
    0x00076138 add r3, r1                                        |         r3 += r1;
    0x0007613a str r2, [r3, 0x10]                                |         *((r3 + 0x10)) = r2;
    0x0007613c movs r2, 0xf8                                     |         r2 = 0xf8;
    0x0007613e strb r2, [r3, 1]                                  |         *((r3 + 1)) = r2;
                                                                 |     }
                                                                 | label_100:
    0x00076140 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00076142 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00076144 bne.w 0x76caa                                     |         goto label_199;
                                                                 |     }
                                                                 | label_90:
    0x00076148 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0007614a ldr r2, [sp, 0x98]                                |     r2 = var_98h;
    0x0007614c ldrb r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x0007614e orrs r3, r2                                       |     r3 |= r2;
    0x00076150 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00076152 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00076154 bne.w 0x76ca4                                     |         goto label_200;
                                                                 |     }
    0x00076158 ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x0007615a ldr r3, [sp, 0xcc]                                |     r3 = var_cch;
    0x0007615c orrs r3, r2                                       |     r3 |= r2;
    0x0007615e ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x00076160 orrs r3, r2                                       |     r3 |= r2;
    0x00076162 ite ne                                            |     
                                                                 |     if (r3 == r2) {
    0x00076164 movne r3, 4                                       |         r3 = 4;
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00076166 moveq r3, 0xc                                     |         r3 = 0xc;
                                                                 |     }
                                                                 | label_98:
    0x00076168 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0007616a ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0007616c ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0007616e ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00076170 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00076172 movs r3, 0                                        |     r3 = 0;
    0x00076174 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076176 strd r3, r3, [sp]                                 |     __asm ("strd r3, r3, [sp]");
    0x0007617a bl 0x61f10                                        |     fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x0007617e str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x00076180 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00076182 beq.w 0x76c94                                     |         goto label_201;
                                                                 |     }
    0x00076186 ldr r2, [sp, 0xa0]                                |     r2 = var_a0h;
    0x00076188 add r3, sp, 0x114                                 |     r3 += var_114h;
    0x0007618a ldr r1, [r2, 0x1c]                                |     r1 = *((r2 + 0x1c));
    0x0007618c ldr r0, [r2, 0x18]                                |     r0 = *((r2 + 0x18));
    0x0007618e stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x00076190 ldrb.w r1, [r2, 0x32]                             |     r1 = *((r2 + 0x32));
    0x00076194 ldrb.w r3, [r2, 0x34]                             |     r3 = *((r2 + 0x34));
    0x00076198 cmp r1, 1                                         |     
    0x0007619a str r1, [sp, 0x48]                                |     var_48h = r1;
    0x0007619c and r3, r3, 1                                     |     r3 &= 1;
    0x000761a0 str r3, [sp, 0xb8]                                |     var_b8h = r3;
                                                                 |     if (r1 == 1) {
    0x000761a2 beq.w 0x7603c                                     |         goto label_45;
                                                                 |     }
    0x000761a6 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000761a8 ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x000761aa cmp r3, 0                                         |     
    0x000761ac it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x000761ae moveq r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x000761b0 cmp r1, 2                                         |     
    0x000761b2 mov.w r2, 1                                       |     r2 = 1;
    0x000761b6 strb r2, [r3, 0x14]                               |     *((r3 + 0x14)) = r2;
                                                                 |     if (r1 == 2) {
    0x000761b8 beq.w 0x76c6e                                     |         goto label_202;
                                                                 |     }
                                                                 | label_97:
    0x000761bc ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x000761c0 ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 != r3) {
    0x000761c4 bne.w 0x76048                                     |         goto label_46;
                                                                 |     }
    0x000761c8 str r3, [sp]                                      |     *(sp) = r3;
    0x000761ca movs r1, 0x87                                     |     r1 = 0x87;
    0x000761cc ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000761ce mov r3, fp                                        |     r3 = fp;
    0x000761d0 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000761d2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000761d6 ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x000761d8 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000761da bne.w 0x76c50                                     |         goto label_203;
                                                                 |     }
    0x000761de ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x000761e0 mov r3, r4                                        |     r3 = r4;
    0x000761e2 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000761e4 ldr r2, [r1, 0x2c]                                |     r2 = *((r1 + 0x2c));
    0x000761e6 adds r2, 1                                        |     r2++;
    0x000761e8 str r2, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r2;
    0x000761ea ldr r1, [sp, 0xbc]                                |     r1 = var_bch;
    0x000761ec str r2, [r1]                                      |     *(r1) = r2;
    0x000761ee mov r2, r6                                        |     r2 = r6;
    0x000761f0 movs r1, 0x80                                     |     r1 = 0x80;
    0x000761f2 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x000761f6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000761fa str r7, [sp, 0x80]                                |     var_80h = r7;
                                                                 | label_146:
    0x000761fc ldrd r2, r3, [sp, 0x44]                           |     __asm ("ldrd r2, r3, [var_44h]");
    0x00076200 subs r3, 2                                        |     r3 -= 2;
    0x00076202 it ne                                             |     
                                                                 |     if (r3 == 2) {
    0x00076204 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00076206 cmp r2, 0                                         |     
    0x00076208 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0007620a movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0007620c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007620e bne.w 0x76cda                                     |         goto label_204;
                                                                 |     }
                                                                 | label_101:
    0x00076212 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00076214 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x00076216 beq 0x7625c                                       |         
    0x00076218 ldr r3, [sp, 0x48]                                |         r3 = var_48h;
                                                                 |         if (r3 != 0) {
    0x0007621a cbz r3, 0x76244                                   |             
    0x0007621c ldr r3, [sp, 0x114]                               |             r3 = var_114h;
    0x0007621e cmp r3, 0                                         |             
                                                                 |             if (r3 >= 0) {
    0x00076220 blt 0x7622c                                       |                 
    0x00076222 ldr r2, [sp, 0x6c]                                |                 r2 = var_6ch;
    0x00076224 ldr r1, [sp, 0x94]                                |                 r1 = var_94h;
    0x00076226 subs r3, r3, r2                                   |                 r3 -= r2;
    0x00076228 movs r2, 0                                        |                 r2 = 0;
    0x0007622a strb r2, [r1, r3]                                 |                 *((r1 + r3)) = r2;
                                                                 |             }
    0x0007622c ldr r3, [sp, 0x118]                               |             r3 = var_118h;
    0x0007622e cmp r3, 0                                         |             
                                                                 |             if (r3 >= 0) {
    0x00076230 blt 0x7623c                                       |                 
    0x00076232 ldr r2, [sp, 0x6c]                                |                 r2 = var_6ch;
    0x00076234 ldr r1, [sp, 0x94]                                |                 r1 = var_94h;
    0x00076236 subs r3, r3, r2                                   |                 r3 -= r2;
    0x00076238 movs r2, 0                                        |                 r2 = 0;
    0x0007623a strb r2, [r1, r3]                                 |                 *((r1 + r3)) = r2;
                                                                 |             }
    0x0007623c ldr r3, [sp, 0x48]                                |             r3 = var_48h;
    0x0007623e cmp r3, 2                                         |             
                                                                 |             if (r3 == 2) {
    0x00076240 beq.w 0x76b5e                                     |                 goto label_205;
                                                                 |             }
                                                                 |         }
                                                                 | label_86:
    0x00076244 ldr r3, [sp, 0x94]                                |         r3 = var_94h;
    0x00076246 movs r2, 0x71                                     |         r2 = 0x71;
    0x00076248 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007624a mov r1, sl                                        |         r1 = sl;
    0x0007624c str r3, [sp, 4]                                   |         var_4h = r3;
    0x0007624e ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x00076250 str r3, [sp]                                      |         *(sp) = r3;
    0x00076252 movs r3, 0                                        |         r3 = 0;
    0x00076254 strd r3, r3, [sp, 8]                              |         __asm ("strd r3, r3, [var_8h]");
    0x00076258 bl 0x2bc74                                        |         fcn_0002bc74 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     }
    0x0007625c ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0007625e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00076260 bne.w 0x764c8                                     |         goto label_206;
                                                                 |     }
    0x00076264 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00076266 ldr r4, [sp, 0x44]                                |     r4 = var_44h;
    0x00076268 orrs r3, r4                                       |     r3 |= r4;
    0x0007626a mov r3, sb                                        |     r3 = sb;
                                                                 |     if (r3 == r4) {
    0x0007626c beq.w 0x76466                                     |         goto label_207;
                                                                 |     }
    0x00076270 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00076272 ldr r7, [sp, 0x40]                                |     r7 = var_40h;
    0x00076274 ldr r2, [r1, 0x38]                                |     r2 = *((r1 + 0x38));
    0x00076276 mov r0, r7                                        |     r0 = r7;
    0x00076278 subs r5, r2, 1                                    |     r5 = r2 - 1;
    0x0007627a ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0007627c str r5, [r1, 0x38]                                |     *((r1 + 0x38)) = r5;
    0x0007627e movs r1, 0x23                                     |     r1 = 0x23;
    0x00076280 str r2, [sp]                                      |     *(sp) = r2;
    0x00076282 mov r2, r6                                        |     r2 = r6;
    0x00076284 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076288 ldr r3, [r7, 0x6c]                                |     r3 = *((r7 + 0x6c));
    0x0007628a str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x0007628c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0007628e beq.w 0x76438                                     |         goto label_208;
                                                                 |     }
    0x00076292 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00076294 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00076296 beq.w 0x7642a                                     |         goto label_209;
                                                                 |     }
    0x0007629a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0007629c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007629e beq.w 0x76408                                     |         goto label_210;
                                                                 |     }
    0x000762a2 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x000762a4 cmp r3, 0                                         |     
    0x000762a6 it gt                                             |     
                                                                 |     if (r3 <= 0) {
    0x000762a8 ldrgt r4, [sp, 0x48]                              |         r4 = var_48h;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x000762aa ble 0x762c6                                       |         goto label_211;
                                                                 |     }
                                                                 |     do {
    0x000762ac ldr r3, [sp, 0x90]                                |         r3 = var_90h;
    0x000762ae mov r2, r6                                        |         r2 = r6;
    0x000762b0 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x000762b2 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x000762b4 add r3, r4                                        |         r3 += r4;
    0x000762b6 str r3, [sp]                                      |         *(sp) = r3;
    0x000762b8 mov r3, r4                                        |         r3 = r4;
    0x000762ba bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000762be ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x000762c0 adds r4, 1                                        |         r4++;
    0x000762c2 cmp r4, r3                                        |         
    0x000762c4 bne 0x762ac                                       |         
                                                                 |     } while (r4 != r3);
                                                                 | label_211:
    0x000762c6 ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x000762c8 movs r1, 0x1b                                     |     r1 = 0x1b;
    0x000762ca ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000762cc ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000762ce str r3, [sp]                                      |     *(sp) = r3;
    0x000762d0 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x000762d2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000762d4 mov r3, r5                                        |     r3 = r5;
    0x000762d6 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x000762da ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000762dc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000762de beq.w 0x76432                                     |         goto label_212;
                                                                 |     }
                                                                 | label_55:
    0x000762e2 mov sb, r5                                        |     sb = r5;
                                                                 | label_94:
    0x000762e4 ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x000762e6 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x000762e8 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x000762ea ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000762ec str r2, [sp]                                      |     *(sp) = r2;
    0x000762ee mov r2, r6                                        |     r2 = r6;
    0x000762f0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000762f4 b.w 0x75812                                       |     goto label_47;
                                                                 | label_143:
    0x000762f8 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000762fa strd r3, r3, [sp, 0x80]                           |     __asm ("strd r3, r3, [var_80h]");
    0x000762fe b.w 0x757a6                                       |     goto label_48;
                                                                 | label_166:
    0x00076302 ldr r1, [sp, 0x9c]                                |     r1 = var_9ch;
    0x00076304 mov r2, sl                                        |     r2 = sl;
    0x00076306 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076308 bl 0x5b358                                        |     fcn_0005b358 (r0, r1, r2, r3);
    0x0007630c b 0x75b8e                                         |     goto label_49;
                                                                 | label_164:
    0x0007630e ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00076310 lsr.w r2, r3, r5                                  |     r2 = r3 >> r5;
    0x00076314 ands r2, r2, 1                                    |     r2 &= 1;
                                                                 |     if (r2 != r2) {
    0x00076318 bne.w 0x75b46                                     |         goto label_50;
                                                                 |     }
    0x0007631c ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0007631e mov r3, r4                                        |     r3 = r4;
    0x00076320 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x00076322 str r2, [sp]                                      |     *(sp) = r2;
    0x00076324 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076328 ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
                                                                 | label_165:
    0x0007632c mov r4, r7                                        |     r4 = r7;
    0x0007632e b.w 0x75ac4                                       |     goto label_23;
                                                                 | label_167:
    0x00076332 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x00076334 mov r1, sl                                        |     r1 = sl;
    0x00076336 ldr r2, [sp, 0x9c]                                |     r2 = var_9ch;
    0x00076338 mov r0, r4                                        |     r0 = r4;
    0x0007633a bl 0x329e8                                        |     fcn_000329e8 (r0, r1, r2);
    0x0007633e ldr r3, [sp, 0x148]                               |     r3 = *(arg_148h);
    0x00076340 movs r2, 0x81                                     |     r2 = 0x81;
    0x00076342 ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x00076344 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076346 strd fp, r3, [sp, 8]                              |     __asm ("strd fp, r3, [var_8h]");
    0x0007634a movs r3, 1                                        |     r3 = 1;
    0x0007634c str r3, [sp]                                      |     *(sp) = r3;
    0x0007634e str.w sb, [sp, 0x10]                              |     __asm ("str.w sb, [var_10h]");
    0x00076352 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00076354 str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [var_4h]");
    0x00076358 bl 0x77618                                        |     fcn_00077618 (r0, r1, r2, r3, r4, r5, r6);
    0x0007635c ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0007635e cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00076360 beq.w 0x75b9e                                     |         goto label_37;
                                                                 |     }
    0x00076364 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00076366 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00076368 beq.w 0x7659a                                     |         goto label_213;
                                                                 |     }
    0x0007636c ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x0007636e movs r1, 0x1b                                     |     r1 = 0x1b;
    0x00076370 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076372 mov r0, r4                                        |     r0 = r4;
    0x00076374 strd r8, r3, [sp]                                 |     __asm ("strd r8, r3, [sp]");
    0x00076378 mov r3, sb                                        |     r3 = sb;
    0x0007637a bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                 | label_63:
    0x0007637e ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x00076382 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00076384 ble.w 0x75e82                                     |         goto label_51;
                                                                 |     }
    0x00076388 ldr r4, [sp, 0x9c]                                |     r4 = var_9ch;
    0x0007638a movs r5, 0                                        |     r5 = 0;
    0x0007638c ldr r7, [sp, 0xac]                                |     r7 = var_ach;
    0x0007638e b 0x763a0                                         |     goto label_214;
                                                                 | label_52:
    0x00076390 lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 >= r3) {
    0x00076392 bmi 0x76396                                       |         
                                                                 | label_53:
    0x00076394 adds r4, 1                                        |         r4++;
                                                                 |     }
    0x00076396 adds r7, 1                                        |     r7++;
    0x00076398 adds r5, 0xc                                      |     r5 += 0xc;
    0x0007639a cmp r7, r0                                        |     
                                                                 |     if (r7 >= r0) {
    0x0007639c bge.w 0x75e82                                     |         goto label_51;
                                                                 |     }
                                                                 | label_214:
    0x000763a0 ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x000763a4 add r3, r5                                        |     r3 += r5;
    0x000763a6 ldrh r3, [r3, 0xa]                                |     r3 = *((r3 + 0xa));
    0x000763a8 tst.w r3, 0x60                                    |     
                                                                 |     if ((r3 & 0x60) != 0) {
    0x000763ac bne 0x76390                                       |         goto label_52;
                                                                 |     }
    0x000763ae ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000763b0 ldr.w r3, [r3, r7, lsl 2]                         |     offset_8 = r7 << 2;
                                                                 |     r3 = *((r3 + offset_8));
    0x000763b4 cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x000763b6 bge 0x76394                                       |         goto label_53;
                                                                 |     }
    0x000763b8 ldrsh.w r3, [sl, 0x20]                            |     r3 = *((sl + 0x20));
    0x000763bc cmp r3, r7                                        |     
                                                                 |     if (r3 == r7) {
    0x000763be beq 0x76394                                       |         goto label_53;
                                                                 |     }
    0x000763c0 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000763c2 mov r3, r7                                        |     r3 = r7;
    0x000763c4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000763c6 mov r1, sl                                        |     r1 = sl;
    0x000763c8 str r4, [sp]                                      |     *(sp) = r4;
    0x000763ca bl 0x5b0d4                                        |     fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x000763ce ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x000763d2 b 0x76394                                         |     goto label_53;
                                                                 | label_172:
    0x000763d4 ldr r3, [sp, 0xc0]                                |     r3 = var_c0h;
    0x000763d6 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x000763d8 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x000763da bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000763de b 0x75c18                                         |     goto label_54;
                                                                 | label_74:
    0x000763e0 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x000763e2 b.w 0x752fe                                       |     goto label_21;
                                                                 | label_174:
    0x000763e6 ldr r2, [pc, 0x3c4]                               |     
    0x000763e8 ldr r1, [sp, 0x8c]                                |     r1 = var_8ch;
    0x000763ea ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000763ec add r2, pc                                        |     r2 = 0xecb9e;
    0x000763ee bl 0x2aa28                                        |     fcn_0002aa28 (r0, r1, r2);
    0x000763f2 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x000763f4 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x000763f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000763f8 bne.w 0x752f4                                     |         goto label_20;
                                                                 |     }
    0x000763fc b.w 0x752fe                                       |     goto label_21;
                                                                 | label_137:
    0x00076400 str.w fp, [sp, 0x64]                              |     __asm ("str.w fp, [var_64h]");
    0x00076404 b.w 0x75742                                       |     goto label_39;
                                                                 | label_210:
    0x00076408 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0007640a mov r2, r6                                        |     r2 = r6;
    0x0007640c ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x0007640e movs r1, 0x87                                     |     r1 = 0x87;
    0x00076410 str r3, [sp]                                      |     *(sp) = r3;
    0x00076412 mov r3, fp                                        |     r3 = fp;
    0x00076414 mov r0, r4                                        |     r0 = r4;
    0x00076416 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007641a ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0007641c mov r3, r5                                        |     r3 = r5;
    0x0007641e movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00076420 mov r0, r4                                        |     r0 = r4;
    0x00076422 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00076426 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_209:
    0x0007642a ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0007642c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007642e bne.w 0x762e2                                     |         goto label_55;
                                                                 |     }
                                                                 |     do {
                                                                 | label_212:
    0x00076432 mov sb, r5                                        |         sb = r5;
    0x00076434 b.w 0x75820                                       |         goto label_44;
                                                                 | label_208:
    0x00076438 ldr r4, [sp, 0x44]                                |         r4 = var_44h;
    0x0007643a mov r3, r8                                        |         r3 = r8;
    0x0007643c ldr r7, [sp, 0x40]                                |         r7 = var_40h;
    0x0007643e mov r2, r6                                        |         r2 = r6;
    0x00076440 movs r1, 0x86                                     |         r1 = 0x86;
    0x00076442 str r4, [sp]                                      |         *(sp) = r4;
    0x00076444 mov r0, r7                                        |         r0 = r7;
    0x00076446 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007644a mov r3, r5                                        |         r3 = r5;
    0x0007644c ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x0007644e movs r1, 0x1b                                     |         r1 = 0x1b;
    0x00076450 mov r0, r7                                        |         r0 = r7;
    0x00076452 strd r8, r4, [sp]                                 |         __asm ("strd r8, r4, [sp]");
    0x00076454 strh r0, [r0, 0x20]                               |         *((r0 + 0x20)) = r0;
    0x00076456 bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0007645a ldr r3, [sp, 0x58]                                |         r3 = var_58h;
    0x0007645c cmp r3, 0                                         |         
    0x0007645e beq 0x76432                                       |         
                                                                 |     } while (r3 == 0);
    0x00076460 mov sb, r5                                        |     sb = r5;
    0x00076462 b.w 0x75804                                       |     goto label_56;
                                                                 | label_207:
    0x00076466 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x00076468 movs r1, 0x23                                     |     r1 = 0x23;
    0x0007646a ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0007646c mov r0, r4                                        |     r0 = r4;
    0x0007646e str r2, [sp]                                      |     *(sp) = r2;
    0x00076470 mov r2, r6                                        |     r2 = r6;
    0x00076472 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076476 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00076478 ldr r3, [r2, 0x38]                                |     r3 = *((r2 + 0x38));
    0x0007647a add.w sb, r3, -1                                  |     sb = r3 + -1;
    0x0007647e ldr r3, [r4, 0x70]                                |     r3 = *((r4 + 0x70));
    0x00076480 str.w sb, [r2, 0x38]                              |     __asm ("str.w sb, [r2, 0x38]");
    0x00076484 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x00076486 cmp r2, r3                                        |     
    0x00076488 str r2, [sp, 0x6c]                                |     var_6ch = r2;
                                                                 |     if (r2 >= r3) {
    0x0007648a bge 0x7651a                                       |         goto label_215;
                                                                 |     }
    0x0007648c ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0007648e movs r3, 0x14                                     |     r3 = 0x14;
    0x00076490 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076492 ldr r4, [sp, 0x48]                                |     r4 = var_48h;
    0x00076494 mul r3, r2, r3                                    |     r3 = r2 * r3;
    0x00076498 ldr r1, [r0, 0x68]                                |     r1 = *((r0 + 0x68));
    0x0007649a adds r2, 1                                        |     r2++;
    0x0007649c str r2, [r0, 0x6c]                                |     *((r0 + 0x6c)) = r2;
    0x0007649e movs r0, 0x87                                     |     r0 = 0x87;
    0x000764a0 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x000764a2 strd r6, fp, [r2, 4]                              |     __asm ("strd r6, fp, [r2, 4]");
    0x000764a6 strd r4, r4, [r2, 0xc]                            |     __asm ("strd r4, r4, [r2, 0xc]");
    0x000764aa str r0, [r1, r3]                                  |     *((r1 + r3)) = r0;
                                                                 | label_58:
    0x000764ac mov r3, sb                                        |     r3 = sb;
    0x000764ae ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000764b0 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000764b2 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x000764b4 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x000764b8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000764bc ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000764be cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000764c0 bne.w 0x75804                                     |         goto label_56;
                                                                 |     }
    0x000764c4 b.w 0x75820                                       |     goto label_44;
                                                                 | label_206:
    0x000764c8 ldr r3, [sp, 0x114]                               |     r3 = var_114h;
    0x000764ca ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000764cc cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x000764ce beq 0x764ea                                       |         
    0x000764d0 ldr r3, [sp, 0x118]                               |         r3 = var_118h;
    0x000764d2 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x000764d4 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x000764d6 beq 0x764ea                                       |             goto label_216;
                                                                 |         }
                                                                 | label_88:
    0x000764d8 ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x000764da movs r1, 0x1b                                     |         r1 = 0x1b;
    0x000764dc ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x000764de ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x000764e0 strd r8, r3, [sp]                                 |         __asm ("strd r8, r3, [sp]");
    0x000764e4 mov r3, sb                                        |         r3 = sb;
    0x000764e6 bl 0x2a744                                        |         fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                 |     }
                                                                 | label_216:
    0x000764ea ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x000764ec cmp r3, 1                                         |     
    0x000764ee it eq                                             |     
                                                                 |     if (r3 != 1) {
    0x000764f0 moveq r2, sb                                      |         r2 = sb;
                                                                 |     }
                                                                 |     if (r3 != 1) {
    0x000764f2 beq 0x764fc                                       |         
                                                                 | label_87:
    0x000764f4 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000764f6 ldr r2, [r3, 0x38]                                |         r2 = *((r3 + 0x38));
    0x000764f8 subs r2, 1                                        |         r2--;
    0x000764fa str r2, [r3, 0x38]                                |         *((r3 + 0x38)) = r2;
                                                                 |     }
    0x000764fc mov r3, sb                                        |     r3 = sb;
    0x000764fe mov sb, r2                                        |     sb = r2;
    0x00076500 movs r2, 0                                        |     r2 = 0;
    0x00076502 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076504 str r2, [sp]                                      |     *(sp) = r2;
    0x00076506 movs r1, 0x32                                     |     r1 = 0x32;
    0x00076508 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x0007650a cmp r2, 0                                         |     
    0x0007650c ite ne                                            |     
                                                                 |     if (r2 == 0) {
    0x0007650e movne r2, r8                                      |         r2 = r8;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x00076510 moveq r2, fp                                      |         r2 = fp;
                                                                 |     }
    0x00076512 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076516 b.w 0x757f2                                       |     goto label_57;
                                                                 | label_215:
    0x0007651a ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0007651c mov r2, r6                                        |     r2 = r6;
    0x0007651e ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076520 movs r1, 0x87                                     |     r1 = 0x87;
    0x00076522 str r3, [sp]                                      |     *(sp) = r3;
    0x00076524 mov r3, fp                                        |     r3 = fp;
    0x00076526 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007652a str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0007652c b 0x764ac                                         |     goto label_58;
                                                                 | label_171:
    0x0007652e ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00076530 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00076534 b.w 0x75bec                                       |     goto label_59;
                                                                 | label_177:
    0x00076538 ldr.w r0, [sl, 0x3c]                              |     r0 = *((sl + 0x3c));
    0x0007653c mov r2, r6                                        |     r2 = r6;
    0x0007653e adds r0, 0x38                                     |     r0 += 0x38;
    0x00076540 bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x00076544 ldr r7, [r0, 8]                                   |     r7 = *((r0 + 8));
    0x00076546 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00076548 beq.w 0x7563a                                     |         goto label_33;
                                                                 |     }
    0x0007654c movs r3, 1                                        |     r3 = 1;
    0x0007654e mov r4, r6                                        |     r4 = r6;
    0x00076550 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00076552 b 0x75e1e                                         |     goto label_60;
                                                                 | label_182:
    0x00076554 movs r3, 2                                        |     r3 = 2;
    0x00076556 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00076558 b.w 0x7563e                                       |     goto label_32;
                                                                 | label_104:
    0x0007655c blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_131:
    0x00076560 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00076562 str r3, [sp, 0xbc]                                |     var_bch = r3;
    0x00076564 b.w 0x756be                                       |     goto label_61;
                                                                 | label_128:
    0x00076568 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0007656a ldr r1, [pc, 0x244]                               |     
    0x0007656c ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007656e mov r2, r3                                        |     r2 = r3;
    0x00076570 add r1, pc                                        |     r1 = 0xecd26;
    0x00076572 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00076576 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x00076578 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x0007657a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007657c bne.w 0x752f4                                     |         goto label_20;
                                                                 |     }
    0x00076580 b.w 0x752fe                                       |     goto label_21;
                                                                 | label_121:
    0x00076584 movs r3, 0                                        |     r3 = 0;
    0x00076586 mov.w r2, -1                                      |     r2 = -1;
    0x0007658a str r3, [sp, 0xb0]                                |     var_b0h = r3;
    0x0007658c str r2, [sp, 0x74]                                |     var_74h = r2;
    0x0007658e str r3, [sp, 0x98]                                |     var_98h = r3;
    0x00076590 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00076592 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00076594 str r3, [sp, 0xa8]                                |     var_a8h = r3;
    0x00076596 b.w 0x75606                                       |     goto label_62;
                                                                 | label_213:
    0x0007659a ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0007659c mov r3, sb                                        |     r3 = sb;
    0x0007659e ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000765a0 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x000765a2 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x000765a6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000765aa b 0x7637e                                         |     goto label_63;
                                                                 | label_141:
    0x000765ac mov r1, r2                                        |     r1 = r2;
    0x000765ae ldrb r2, [r2, 0x12]                               |     r2 = *((r2 + 0x12));
    0x000765b0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000765b2 bne.w 0x75c48                                     |         goto label_64;
                                                                 |     }
    0x000765b6 ldrb.w r3, [r1, 0x95]                             |     r3 = *((r1 + 0x95));
    0x000765ba ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x000765bc cmp r3, 0                                         |     
    0x000765be it eq                                             |     
                                                                 |     if (r3 == 0) {
    0x000765c0 cmpeq r1, 0                                       |         __asm ("cmpeq r1, 0");
                                                                 |     }
    0x000765c2 ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x000765c4 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000765c6 movne r3, 0                                       |         r3 = 0;
                                                                 |         goto label_217;
                                                                 |     }
                                                                 |     if (r3 != 0) {
                                                                 | label_217:
    0x000765c8 bne.w 0x75c48                                     |         goto label_64;
                                                                 |     }
    0x000765cc ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x000765ce ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000765d0 ldr r3, [r1, 0x2c]                                |     r3 = *((r1 + 0x2c));
    0x000765d2 adds r3, 1                                        |     r3++;
    0x000765d4 str r3, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r3;
    0x000765d6 movs r1, 0x47                                     |     r1 = 0x47;
    0x000765d8 str r2, [sp]                                      |     *(sp) = r2;
    0x000765da str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x000765dc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000765e0 b.w 0x75788                                       |     goto label_24;
                                                                 | label_196:
    0x000765e4 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000765e6 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000765e8 ldrb.w r8, [r0, 0x57]                             |     r8 = *((r0 + 0x57));
    0x000765ec cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x000765f0 bne.w 0x76082                                     |         goto label_65;
                                                                 |     }
    0x000765f4 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000765f6 movs r4, 0x14                                     |     r4 = 0x14;
    0x000765f8 mul r4, r5, r4                                    |     r4 = r5 * r4;
    0x000765fc ldr r7, [r3, 0x68]                                |     r7 = *((r3 + 0x68));
    0x000765fe adds r5, r7, r4                                   |     r5 = r7 + r4;
    0x00076600 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x00076602 ldrsb.w r1, [r5, 1]                               |     r1 = *((r5 + 1));
    0x00076606 bl 0x187b8                                        |     fcn_000187b8 (r0);
    0x0007660a movs r3, 0xb8                                     |     r3 = 0xb8;
    0x0007660c str.w r8, [r5, 0x10]                              |     __asm ("str.w r8, [r5, 0x10]");
    0x00076610 strh r3, [r7, r4]                                 |     *((r7 + r4)) = r3;
    0x00076612 b 0x76082                                         |     goto label_65;
                                                                 | label_195:
    0x00076614 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x00076616 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x00076618 bl 0x319d4                                        |     fcn_000319d4 (r0, r1);
    0x0007661c ldr r7, [sp, 0x84]                                |     r7 = var_84h;
    0x0007661e movs r1, 0x61                                     |     r1 = 0x61;
    0x00076620 ldr r5, [sp, 0x90]                                |     r5 = var_90h;
    0x00076622 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x00076624 mov r3, r7                                        |     r3 = r7;
    0x00076626 str r0, [sp, 4]                                   |     var_4h = r0;
    0x00076628 mov r2, r5                                        |     r2 = r5;
    0x0007662a str r7, [sp, 8]                                   |     var_8h = r7;
    0x0007662c mov r0, r4                                        |     r0 = r4;
    0x0007662e str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00076632 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00076636 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00076638 mov r2, r6                                        |     r2 = r6;
    0x0007663a movs r1, 0x8a                                     |     r1 = 0x8a;
    0x0007663c mov r0, r4                                        |     r0 = r4;
    0x0007663e str r7, [sp, 4]                                   |     var_4h = r7;
    0x00076640 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x00076642 mov r3, r8                                        |     r3 = r8;
    0x00076644 str r5, [sp]                                      |     *(sp) = r5;
    0x00076646 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0007664a b.w 0x757ea                                       |     goto label_42;
                                                                 | label_197:
    0x0007664e movs r3, 0                                        |     r3 = 0;
    0x00076650 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076652 str r3, [sp]                                      |     *(sp) = r3;
    0x00076654 mov r2, r6                                        |     r2 = r6;
    0x00076656 mov r3, r7                                        |     r3 = r7;
    0x00076658 movs r1, 0x76                                     |     r1 = 0x76;
    0x0007665a bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007665e mov r5, r0                                        |     r5 = r0;
    0x00076660 b 0x7610a                                         |     goto label_66;
                                                                 | label_183:
    0x00076662 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00076664 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00076668 b 0x75e7a                                         |     goto label_67;
                                                                 | label_140:
    0x0007666a ldr.w r3, [sl, 0x34]                              |     r3 = *((sl + 0x34));
    0x0007666e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00076670 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00076672 ldr.w r8, [r2, 8]                                 |     r8 = *((r2 + 8));
    0x00076676 ldr r5, [r2]                                      |     r5 = *(r2);
                                                                 |     if (r3 == 0) {
    0x00076678 cbz r3, 0x7668a                                   |         goto label_218;
                                                                 |     }
    0x0007667a ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0007667c b 0x76682                                         |     
                                                                 |     while (r5 != r2) {
    0x0007667e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
                                                                 |         if (r3 == 0) {
    0x00076680 cbz r3, 0x76688                                   |             goto label_219;
                                                                 |         }
    0x00076682 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00076684 cmp r5, r2                                        |         
    0x00076686 bne 0x7667e                                       |         
                                                                 |     }
                                                                 | label_219:
    0x00076688 str r3, [sp, 0x50]                                |     var_50h = r3;
                                                                 | label_218:
    0x0007668a ldrsh.w r3, [sl, 0x22]                            |     r3 = *((sl + 0x22));
    0x0007668e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00076690 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00076692 adds r3, 2                                        |     r3 += 2;
    0x00076694 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00076696 ldrd sb, r3, [r8, 0x6c]                           |     __asm ("ldrd sb, r3, [r8, 0x6c]");
    0x0007669a ldr.w fp, [r1, 0x28]                              |     fp = *((r1 + 0x28));
    0x0007669e ldr r0, [r0, 0x30]                                |     r0 = *((r0 + 0x30));
    0x000766a0 cmp sb, r3                                        |     
    0x000766a2 add.w r2, fp, 1                                   |     r2 += arg_1h;
    0x000766a6 str r0, [sp, 0x48]                                |     var_48h = r0;
    0x000766a8 str r2, [r1, 0x28]                                |     *((r1 + 0x28)) = r2;
                                                                 |     if (sb >= r3) {
    0x000766aa bge.w 0x76988                                     |         goto label_220;
                                                                 |     }
    0x000766ae add.w r3, sb, sb, lsl 2                           |     r3 = sb + (sb << 2);
    0x000766b2 ldr.w r1, [r8, 0x68]                              |     r1 = *((r8 + 0x68));
    0x000766b6 ldr r6, [sp, 0x40]                                |     r6 = var_40h;
    0x000766b8 add.w r2, sb, 1                                   |     r2 = sb + 1;
    0x000766bc lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000766be str.w r2, [r8, 0x6c]                              |     __asm ("str.w r2, [r8, 0x6c]");
    0x000766c2 movs r0, 0                                        |     r0 = 0;
    0x000766c4 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x000766c6 movs r4, 0x76                                     |     r4 = 0x76;
    0x000766c8 str.w fp, [r2, 4]                                 |     __asm ("str.w fp, [r2, 4]");
    0x000766cc strd r6, r0, [r2, 8]                              |     __asm ("strd r6, r0, [r2, 8]");
    0x000766d0 str r0, [r2, 0x10]                                |     *((r2 + 0x10)) = r0;
    0x000766d2 str r4, [r1, r3]                                  |     *((r1 + r3)) = r4;
                                                                 | label_76:
    0x000766d4 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000766d6 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000766d8 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x000766da ldr r4, [r2, 0x2c]                                |     r4 = *((r2 + 0x2c));
    0x000766dc ldr r3, [r3]                                      |     r3 = *(r3);
    0x000766de add r1, r4                                        |     r1 += r4;
    0x000766e0 cmp r3, 1                                         |     
    0x000766e2 str r1, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r1;
    0x000766e4 add.w r2, r4, 1                                   |     r2 = r4 + 1;
    0x000766e8 str r1, [sp, 0x58]                                |     var_58h = r1;
    0x000766ea str r2, [sp, 0x44]                                |     var_44h = r2;
                                                                 |     if (r3 <= 1) {
    0x000766ec ble.w 0x76844                                     |         goto label_221;
                                                                 |     }
    0x000766f0 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x000766f4 ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 != r3) {
    0x000766f8 bne.w 0x76af0                                     |         goto label_222;
                                                                 |     }
    0x000766fc ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x000766fe cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00076700 beq.w 0x76834                                     |         goto label_223;
                                                                 |     }
    0x00076704 mov r1, r2                                        |     r1 = r2;
    0x00076706 mov r0, r5                                        |     r0 = r5;
    0x00076708 mov r2, r3                                        |     r2 = r3;
    0x0007670a str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0007670c bl 0x2dd00                                        |     r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x00076710 mov r1, r0                                        |     r1 = r0;
                                                                 | label_70:
    0x00076712 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00076714 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00076716 bl 0x1db50                                        |     fcn_0001db50 (r0);
    0x0007671a ldrsh.w r3, [sl, 0x22]                            |     r3 = *((sl + 0x22));
    0x0007671e mov r4, r0                                        |     r4 = r0;
    0x00076720 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00076722 ble 0x767b4                                       |         goto label_224;
                                                                 |     }
    0x00076724 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00076726 movs r6, 0                                        |     r6 = 0;
    0x00076728 ldr.w sb, [sp, 0x2c]                              |     sb = var_2ch;
    0x0007672c subs r7, r2, 4                                    |     r7 = r2 - 4;
    0x0007672e b 0x7675c                                         |     
                                                                 |     while (r3 >= 0) {
    0x00076730 ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x00076732 add.w r3, r2, r3, lsl 4                           |         r3 = r2 + (r3 << 4);
    0x00076736 ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
                                                                 |         if (r2 != 0) {
    0x00076738 cbz r2, 0x76748                                   |             
    0x0007673a movs r3, 0                                        |             r3 = 0;
    0x0007673c mov r1, r2                                        |             r1 = r2;
    0x0007673e mov r0, r5                                        |             r0 = r5;
    0x00076740 mov r2, r3                                        |             r2 = r3;
    0x00076742 bl 0x2dd00                                        |             r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x00076746 mov r2, r0                                        |             r2 = r0;
                                                                 |         }
    0x00076748 mov r1, r4                                        |         r1 = r4;
    0x0007674a mov r0, sb                                        |         r0 = sb;
    0x0007674c bl 0x2bffc                                        |         fcn_0002bffc (r0, r1, r2);
    0x00076750 adds r6, 1                                        |         r6++;
    0x00076752 mov r4, r0                                        |         r4 = r0;
                                                                 | label_68:
    0x00076754 ldrsh.w r3, [sl, 0x22]                            |         r3 = *((sl + 0x22));
    0x00076758 cmp r6, r3                                        |         
                                                                 |         if (r6 >= r3) {
    0x0007675a bge 0x767b4                                       |             goto label_224;
                                                                 |         }
    0x0007675c ldr r3, [r7, 4]!                                  |         r3 = *((r7 += 4));
    0x00076760 cmp r3, 0                                         |         
    0x00076762 bge 0x76730                                       |         
                                                                 |     }
    0x00076764 movs r3, 0                                        |     r3 = 0;
    0x00076766 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x00076768 mov r2, r3                                        |     r2 = r3;
    0x0007676a mov r0, sb                                        |     r0 = sb;
    0x0007676c bl 0x20c10                                        |     fcn_00020c10 (r0, r1, r2, r3);
    0x00076770 adds r6, 1                                        |     r6++;
    0x00076772 mov r2, r0                                        |     r2 = r0;
                                                                 |     if (r0 != 0) {
    0x00076774 cbz r0, 0x76778                                   |         
    0x00076776 strh r6, [r0, 0x20]                               |         *((r0 + 0x20)) = r6;
                                                                 |     }
    0x00076778 mov r1, r4                                        |     r1 = r4;
    0x0007677a mov r0, sb                                        |     r0 = sb;
    0x0007677c bl 0x2bffc                                        |     r0 = fcn_0002bffc (r0, r1, r2);
    0x00076780 mov r4, r0                                        |     r4 = r0;
    0x00076782 b 0x76754                                         |     goto label_68;
                                                                 | label_189:
    0x00076784 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00076786 ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x00076788 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0007678a str r3, [sp, 4]                                   |     var_4h = r3;
    0x0007678c ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0007678e strd r1, r1, [sp, 0xc]                            |     __asm ("strd r1, r1, [var_ch]");
    0x00076792 movs r1, 6                                        |     r1 = 6;
    0x00076794 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00076796 mov r1, sl                                        |     r1 = sl;
    0x00076798 str r3, [sp]                                      |     *(sp) = r3;
    0x0007679a ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007679c ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0007679e bl 0x29ef0                                        |     fcn_00029ef0 (r0, r1, r2, r3, r4, r5, r6);
    0x000767a2 b.w 0x75b9e                                       |     goto label_37;
                                                                 | label_224:
    0x000767b4 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000767b6 mov r1, fp                                        |     r1 = fp;
    0x000767b8 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x000767ba ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000767bc str r3, [sp, 4]                                   |     var_4h = r3;
    0x000767be ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000767c0 str r3, [sp]                                      |     *(sp) = r3;
    0x000767c2 mov r3, r4                                        |     r3 = r4;
    0x000767c4 bl 0x6889c                                        |     fcn_0006889c (r0, r1, r2, r3, r4, r5);
                                                                 |     if (r4 != 0) {
    0x000767c8 cbz r4, 0x767d2                                   |         
    0x000767ca mov r1, r4                                        |         r1 = r4;
    0x000767cc mov r0, r5                                        |         r0 = r5;
    0x000767ce bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 |     }
    0x000767d2 movs r6, 0                                        |     r6 = 0;
                                                                 | label_73:
    0x000767d4 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000767d6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000767d8 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x000767da beq.w 0x76b56                                     |         goto label_225;
                                                                 |     }
                                                                 | label_85:
    0x000767de ldrd sb, r3, [r8, 0x6c]                           |     __asm ("ldrd sb, r3, [r8, 0x6c]");
    0x000767e2 cmp sb, r3                                        |     
                                                                 |     if (sb >= r3) {
    0x000767e4 bge.w 0x76b44                                     |         goto label_226;
                                                                 |     }
    0x000767e8 add.w r3, sb, sb, lsl 2                           |     r3 = sb + (sb << 2);
    0x000767ec ldr.w r0, [r8, 0x68]                              |     r0 = *((r8 + 0x68));
    0x000767f0 add.w r2, sb, 1                                   |     r2 = sb + 1;
    0x000767f4 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000767f6 str.w r2, [r8, 0x6c]                              |     __asm ("str.w r2, [r8, 0x6c]");
    0x000767fa movs r1, 0                                        |     r1 = 0;
    0x000767fc adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x000767fe movs r4, 0x23                                     |     r4 = 0x23;
    0x00076800 strd fp, r1, [r2, 4]                              |     __asm ("strd fp, r1, [r2, 4]");
    0x00076804 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x00076808 str r4, [r0, r3]                                  |     *((r0 + r3)) = r4;
                                                                 | label_84:
    0x0007680a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0007680c cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0007680e ble 0x7682c                                       |         goto label_227;
                                                                 |     }
    0x00076810 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x00076812 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x00076814 mov r2, fp                                        |         r2 = fp;
    0x00076816 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x00076818 mov r0, r8                                        |         r0 = r8;
    0x0007681a add r3, r4                                        |         r3 += r4;
    0x0007681c str r3, [sp]                                      |         *(sp) = r3;
    0x0007681e mov r3, r4                                        |         r3 = r4;
    0x00076820 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00076824 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x00076826 adds r4, 1                                        |         r4++;
    0x00076828 cmp r3, r4                                        |         
    0x0007682a bgt 0x76812                                       |         
                                                                 |     } while (r3 > r4);
                                                                 | label_227:
    0x0007682c movs r3, 0                                        |     r3 = 0;
    0x0007682e str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00076830 b.w 0x7522c                                       |     goto label_69;
                                                                 | label_223:
    0x00076834 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00076836 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x00076838 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007683a mov r2, r3                                        |     r2 = r3;
    0x0007683c bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x00076840 mov r1, r0                                        |     r1 = r0;
    0x00076842 b 0x76712                                         |     goto label_70;
                                                                 | label_221:
    0x00076844 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00076846 movs r3, 0                                        |     r3 = 0;
    0x00076848 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007684a ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x0007684c adds r7, r2, 2                                    |     r7 = r2 + 2;
    0x0007684e movs r2, 4                                        |     r2 = 4;
    0x00076850 str r7, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r7;
    0x00076852 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00076854 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00076856 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x00076858 strd r3, r3, [sp]                                 |     __asm ("strd r3, r3, [sp]");
    0x0007685c bl 0x61f10                                        |     r0 = fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x00076860 mov r6, r0                                        |     r6 = r0;
    0x00076862 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00076864 beq.w 0x7697a                                     |         goto label_228;
                                                                 |     }
    0x00076868 ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x0007686c cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0007686e ble 0x768d8                                       |         goto label_229;
                                                                 |     }
    0x00076870 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00076872 mov r5, r4                                        |     r5 = r4;
    0x00076874 subs r3, 4                                        |     r3 -= 4;
    0x00076876 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00076878 b 0x7689a                                         |     
                                                                 |     while (r3 >= 0) {
    0x0007687a ldr r1, [sp, 0x34]                                |         r1 = var_34h;
    0x0007687c add.w r3, r1, r3, lsl 4                           |         r3 = r1 + (r3 << 4);
    0x00076880 ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x00076882 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00076884 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
                                                                 |         if (r3 != 0) {
    0x00076886 cbz r3, 0x76892                                   |             
    0x00076888 ldr r0, [sp, 0x2c]                                |             r0 = var_2ch;
    0x0007688a bl 0x5aa10                                        |             fcn_0005aa10 (r0, r1, r2);
    0x0007688e ldrsh.w r0, [sl, 0x22]                            |             r0 = *((sl + 0x22));
                                                                 |         }
                                                                 | label_71:
    0x00076892 adds r5, 1                                        |         r5++;
    0x00076894 subs r3, r5, r4                                   |         r3 = r5 - r4;
    0x00076896 cmp r0, r3                                        |         
                                                                 |         if (r0 <= r3) {
    0x00076898 ble 0x768d8                                       |             goto label_229;
                                                                 |         }
    0x0007689a ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x0007689c ldr r3, [r2, 4]!                                  |         r3 = *((r2 += 4));
    0x000768a0 cmp r3, 0                                         |         
    0x000768a2 str r2, [sp, 0x54]                                |         var_54h = r2;
    0x000768a4 add.w r2, r5, 3                                   |         r2 = r5 + 3;
    0x000768a8 bge 0x7687a                                       |         
                                                                 |     }
    0x000768aa subs r3, r5, r4                                   |     r3 = r5 - r4;
    0x000768ac movs r1, 0xaf                                     |     r1 = 0xaf;
    0x000768ae str r2, [sp]                                      |     *(sp) = r2;
    0x000768b0 mov r0, r8                                        |     r0 = r8;
    0x000768b2 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000768b4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000768b8 ldr.w r2, [r8, 0x6c]                              |     r2 = *((r8 + 0x6c));
    0x000768bc ldrsh.w r0, [sl, 0x22]                            |     r0 = *((sl + 0x22));
    0x000768c0 cmp r2, 0                                         |     
    0x000768c2 itttt gt                                          |     
                                                                 |     if (r2 <= 0) {
    0x000768c4 ldrgt r3, [r8, 0x68]                              |         r3 = *((r8 + 0x68));
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x000768c8 movgt r1, 0x14                                    |         r1 = 0x14;
                                                                 |     }
                                                                 |     if (r2 > 0) {
    0x000768ca mlagt r3, r1, r2, r3                              |         __asm ("mlagt r3, r1, r2, r3");
                                                                 |     }
                                                                 |     if (r2 > 0) {
    0x000768ce movs r2, 1                                        |         r2 = 1;
                                                                 |     }
    0x000768d0 it gt                                             |     
                                                                 |     if (r2 > 1) {
    0x000768d2 strhgt r2, [r3, -0x12]                            |         __asm ("strhgt r2, [r3, -0x12]");
                                                                 |     }
    0x000768d6 b 0x76892                                         |     goto label_71;
                                                                 | label_229:
    0x000768d8 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x000768dc ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 == r3) {
    0x000768e0 beq 0x7699c                                       |         goto label_230;
                                                                 |     }
    0x000768e2 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
                                                                 |     if (r3 != 0) {
    0x000768e6 cbnz r3, 0x768f2                                  |         goto label_231;
                                                                 |     }
    0x000768e8 b 0x76d08                                         |     goto label_232;
                                                                 |     do {
    0x000768ea ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x000768ec cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000768ee beq.w 0x76d08                                     |             goto label_232;
                                                                 |         }
                                                                 | label_231:
    0x000768f2 ldrb.w r2, [r3, 0x37]                             |         r2 = *((r3 + 0x37));
    0x000768f6 and r2, r2, 3                                     |         r2 &= 3;
    0x000768fa cmp r2, 2                                         |         
    0x000768fc bne 0x768ea                                       |         
                                                                 |     } while (r2 != 2);
    0x000768fe ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00076900 movs r1, 0xaf                                     |     r1 = 0xaf;
    0x00076902 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00076904 mov r0, r8                                        |     r0 = r8;
    0x00076906 ldrsh.w r5, [r3]                                  |     r5 = *(r3);
    0x0007690a ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0007690c str r3, [sp]                                      |     *(sp) = r3;
    0x0007690e mov r3, r5                                        |     r3 = r5;
    0x00076910 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076914 movs r1, 0                                        |     r1 = 0;
    0x00076916 adds r2, r4, 3                                    |     r2 = r4 + 3;
    0x00076918 str r1, [sp]                                      |     *(sp) = r1;
    0x0007691a add r2, r5                                        |     r2 += r5;
    0x0007691c adds r3, r4, 2                                    |     r3 = r4 + 2;
    0x0007691e movs r1, 0x51                                     |     r1 = 0x51;
    0x00076920 mov r0, r8                                        |     r0 = r8;
    0x00076922 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_77:
    0x00076926 ldr r0, [r6, 0x18]                                |     r0 = *((r6 + 0x18));
    0x00076928 add r3, sp, 0x114                                 |     r3 += var_114h;
    0x0007692a ldr r1, [r6, 0x1c]                                |     r1 = *((r6 + 0x1c));
    0x0007692c stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x0007692e ldrb.w r3, [r6, 0x32]                             |     r3 = *((r6 + 0x32));
    0x00076932 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00076934 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00076936 bne.w 0x751f4                                     |         goto label_72;
                                                                 |     }
    0x0007693a ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0007693c movs r1, 0x61                                     |     r1 = 0x61;
    0x0007693e ldr r4, [sp, 0x58]                                |     r4 = var_58h;
    0x00076940 mov r0, r8                                        |     r0 = r8;
    0x00076942 ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x00076944 adds r4, 1                                        |     r4++;
    0x00076946 cmp r3, 0                                         |     
    0x00076948 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0007694a moveq r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x0007694c movs r2, 1                                        |     r2 = 1;
    0x0007694e strb r2, [r3, 0x14]                               |     *((r3 + 0x14)) = r2;
    0x00076950 ldrd r3, r2, [sp, 0x40]                           |     __asm ("ldrd r3, r2, [var_44h]");
    0x00076954 str r4, [sp]                                      |     *(sp) = r4;
    0x00076956 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007695a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0007695c mov r2, fp                                        |     r2 = fp;
    0x0007695e movs r1, 0x7f                                     |     r1 = 0x7f;
    0x00076960 mov r0, r8                                        |     r0 = r8;
    0x00076962 str r3, [sp]                                      |     *(sp) = r3;
    0x00076964 mov r3, r7                                        |     r3 = r7;
    0x00076966 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007696a mov r3, r4                                        |     r3 = r4;
    0x0007696c mov r2, fp                                        |     r2 = fp;
    0x0007696e movs r1, 0x80                                     |     r1 = 0x80;
    0x00076970 mov r0, r8                                        |     r0 = r8;
    0x00076972 str r7, [sp]                                      |     *(sp) = r7;
    0x00076974 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076978 b 0x767d4                                         |     goto label_73;
                                                                 | label_228:
    0x0007697a ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x0007697c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007697e beq.w 0x763e0                                     |         goto label_74;
                                                                 |     }
    0x00076982 str r0, [sp, 0xd4]                                |     var_d4h = r0;
    0x00076984 b.w 0x75c3c                                       |     goto label_75;
                                                                 | label_220:
    0x00076988 movs r3, 0                                        |     r3 = 0;
    0x0007698a mov r2, fp                                        |     r2 = fp;
    0x0007698c str r3, [sp]                                      |     *(sp) = r3;
    0x0007698e movs r1, 0x76                                     |     r1 = 0x76;
    0x00076990 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00076992 mov r0, r8                                        |     r0 = r8;
    0x00076994 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00076998 mov sb, r0                                        |     sb = r0;
    0x0007699a b 0x766d4                                         |     goto label_76;
                                                                 | label_230:
    0x0007699c movs r1, 0x87                                     |     r1 = 0x87;
    0x0007699e str r3, [sp]                                      |     *(sp) = r3;
    0x000769a0 mov r0, r8                                        |     r0 = r8;
    0x000769a2 ldrd r3, r2, [sp, 0x44]                           |     __asm ("ldrd r3, r2, [var_44h]");
    0x000769a6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000769aa ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x000769ac adds r3, r4, 2                                    |     r3 = r4 + 2;
                                                                 |     if (r1 == 0) {
    0x000769ae cbz r1, 0x769ea                                   |         goto label_233;
                                                                 |     }
    0x000769b0 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000769b2 ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
    0x000769b4 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000769b6 beq 0x76926                                       |         goto label_77;
                                                                 |     }
    0x000769b8 mov r2, r3                                        |     r2 = r3;
    0x000769ba bl 0x5aa10                                        |     fcn_0005aa10 (r0, r1, r2);
    0x000769be b 0x76926                                         |     goto label_77;
                                                                 | label_105:
    0x000769c0 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000769c2 movs r1, 7                                        |     r1 = 7;
    0x000769c4 movs r2, 0                                        |     r2 = 0;
    0x000769c6 mov r0, r8                                        |     r0 = r8;
    0x000769c8 str r3, [sp]                                      |     *(sp) = r3;
    0x000769ca ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000769cc bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000769d0 mov r1, r0                                        |     r1 = r0;
    0x000769d2 b.w 0x75262                                       |     goto label_78;
                                                                 | label_107:
    0x000769d6 ldr r3, [pc, 0x338]                               |     
    0x000769d8 add r3, pc                                        |     r3 = 0xed6ee;
    0x000769da adds r3, 4                                        |     r3 += 4;
    0x000769dc b.w 0x752de                                       |     goto label_79;
                                                                 | label_106:
    0x000769e0 mov r0, r6                                        |     r0 = r6;
    0x000769e2 bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x000769e6 b.w 0x752ee                                       |     goto label_4;
                                                                 | label_233:
    0x000769ea ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x000769ec movs r1, 0x87                                     |     r1 = 0x87;
    0x000769ee mov r0, r8                                        |     r0 = r8;
    0x000769f0 str r2, [sp]                                      |     *(sp) = r2;
    0x000769f2 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000769f4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000769f8 b 0x76926                                         |     goto label_77;
                                                                 | label_188:
    0x000769fa ldr r3, [sp, 0xb0]                                |     r3 = var_b0h;
    0x000769fc movs r2, 0                                        |     r2 = 0;
    0x000769fe ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076a00 mov r1, sl                                        |     r1 = sl;
    0x00076a02 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00076a04 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00076a06 str r3, [sp]                                      |     *(sp) = r3;
    0x00076a08 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00076a0a bl 0x74c90                                        |     fcn_00074c90 (r0, r1, r2, r3, r4, r5, r6);
    0x00076a0e ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00076a10 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00076a12 beq 0x76a94                                       |         goto label_234;
                                                                 |     }
    0x00076a14 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00076a16 movs r1, 0                                        |     r1 = 0;
    0x00076a18 strd r1, r1, [sp, 0xc]                            |     __asm ("strd r1, r1, [var_ch]");
    0x00076a1c movs r1, 4                                        |     r1 = 4;
    0x00076a1e str r1, [sp, 8]                                   |     var_8h = r1;
    0x00076a20 mov r1, sl                                        |     r1 = sl;
    0x00076a22 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00076a24 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00076a26 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076a28 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076a2a str r3, [sp]                                      |     *(sp) = r3;
    0x00076a2c ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00076a2e bl 0x29ef0                                        |     fcn_00029ef0 (r0, r1, r2, r3, r4, r5, r6);
                                                                 | label_80:
    0x00076a32 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00076a34 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00076a36 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00076a38 lsls r3, r3, 0x11                                 |     r3 <<= 0x11;
                                                                 |     if (r3 >= r3) {
    0x00076a3a bpl.w 0x75b9e                                     |         goto label_37;
                                                                 |     }
    0x00076a3e ldr.w r0, [sl, 0x3c]                              |     r0 = *((sl + 0x3c));
    0x00076a42 movs r2, 0                                        |     r2 = 0;
    0x00076a44 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00076a48 adds r0, 0x38                                     |     r0 += 0x38;
    0x00076a4a bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x00076a4e ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x00076a50 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00076a52 beq.w 0x75b9e                                     |         goto label_37;
                                                                 |     }
    0x00076a56 movs r5, 0                                        |     r5 = 0;
    0x00076a58 movs r7, 2                                        |     r7 = 2;
                                                                 |     do {
    0x00076a5a ldr r3, [sp, 0xb0]                                |         r3 = var_b0h;
    0x00076a5c mov r1, r4                                        |         r1 = r4;
    0x00076a5e ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x00076a60 mov r0, sl                                        |         r0 = sl;
    0x00076a62 bl 0x14364                                        |         r0 = fcn_00014364 (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x00076a66 cbz r0, 0x76a8a                                   |             
    0x00076a68 ldr.w r8, [sp, 0x2c]                              |             r8 = var_2ch;
    0x00076a6c mov r1, sl                                        |             r1 = sl;
    0x00076a6e ldr r3, [sp, 0x34]                                |             r3 = var_34h;
    0x00076a70 mov r2, r4                                        |             r2 = r4;
    0x00076a72 mov r0, r8                                        |             r0 = r8;
    0x00076a74 bl 0x2ef84                                        |             r0 = fcn_0002ef84 (r0, r1, r2, r3, r4);
    0x00076a78 mov r1, r0                                        |             r1 = r0;
                                                                 |             if (r0 == 0) {
    0x00076a7a cbz r0, 0x76a8a                                   |                 goto label_235;
                                                                 |             }
    0x00076a7c mov r3, fp                                        |             r3 = fp;
    0x00076a7e mov r2, sl                                        |             r2 = sl;
    0x00076a80 mov r0, r8                                        |             r0 = r8;
    0x00076a82 strd r7, r5, [sp]                                 |             __asm ("strd r7, r5, [sp]");
    0x00076a86 bl 0x77554                                        |             fcn_00077554 (r0, r1, r2, r3, r4, r5);
                                                                 |         }
                                                                 | label_235:
    0x00076a8a ldr r4, [r4, 0xc]                                 |         r4 = *((r4 + 0xc));
    0x00076a8c cmp r4, 0                                         |         
    0x00076a8e bne 0x76a5a                                       |         
                                                                 |     } while (r4 != 0);
    0x00076a90 b.w 0x75b9e                                       |     goto label_37;
                                                                 | label_234:
    0x00076a94 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00076a96 movs r1, 0                                        |     r1 = 0;
    0x00076a98 strd r1, r1, [sp, 0xc]                            |     __asm ("strd r1, r1, [var_ch]");
    0x00076a9c movs r1, 6                                        |     r1 = 6;
    0x00076a9e str r1, [sp, 8]                                   |     var_8h = r1;
    0x00076aa0 mov r1, sl                                        |     r1 = sl;
    0x00076aa2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00076aa4 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00076aa6 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076aa8 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076aaa str r3, [sp]                                      |     *(sp) = r3;
    0x00076aac ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00076aae bl 0x29ef0                                        |     fcn_00029ef0 (r0, r1, r2, r3, r4, r5, r6);
    0x00076ab2 b 0x76a32                                         |     goto label_80;
                                                                 | label_187:
    0x00076ab4 movs r3, 0                                        |     r3 = 0;
    0x00076ab6 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076ab8 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076aba movs r1, 0x82                                     |     r1 = 0x82;
    0x00076abc str r3, [sp]                                      |     *(sp) = r3;
    0x00076abe bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076ac2 b.w 0x75f34                                       |     goto label_81;
                                                                 | label_186:
    0x00076ac6 movs r3, 0                                        |     r3 = 0;
    0x00076ac8 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076aca ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076acc movs r1, 0x8f                                     |     r1 = 0x8f;
    0x00076ace str r3, [sp]                                      |     *(sp) = r3;
    0x00076ad0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076ad4 b.w 0x75f24                                       |     goto label_82;
                                                                 | label_185:
    0x00076ad8 ldr r3, [sp, 0xb0]                                |     r3 = var_b0h;
    0x00076ada mov r2, fp                                        |     r2 = fp;
    0x00076adc ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076ade mov r1, sl                                        |     r1 = sl;
    0x00076ae0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00076ae2 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00076ae4 str r3, [sp]                                      |     *(sp) = r3;
    0x00076ae6 movs r3, 0                                        |     r3 = 0;
    0x00076ae8 bl 0x74c90                                        |     fcn_00074c90 (r0, r1, r2, r3, r4, r5, r6);
    0x00076aec b.w 0x75efe                                       |     goto label_83;
                                                                 | label_222:
    0x00076af0 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x00076af4 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00076af6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00076af8 beq.w 0x76d08                                     |         goto label_232;
                                                                 |     }
    0x00076afc ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00076afe b 0x76b08                                         |     
                                                                 |     while (r2 != 2) {
    0x00076b00 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x00076b02 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00076b04 beq.w 0x76d08                                     |             goto label_232;
                                                                 |         }
    0x00076b08 ldrb.w r2, [r3, 0x37]                             |         r2 = *((r3 + 0x37));
    0x00076b0c and r2, r2, 3                                     |         r2 &= 3;
    0x00076b10 cmp r2, 2                                         |         
    0x00076b12 bne 0x76b00                                       |         
                                                                 |     }
    0x00076b14 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00076b16 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00076b18 ldrsh.w r4, [r3]                                  |     r4 = *(r3);
    0x00076b1c ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00076b1e ldr.w r3, [r3, r4, lsl 2]                         |     offset_9 = r4 << 2;
                                                                 |     r3 = *((r3 + offset_9));
    0x00076b22 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00076b24 blt.w 0x76ce4                                     |         goto label_236;
                                                                 |     }
    0x00076b28 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00076b2a add.w r3, r2, r3, lsl 4                           |     r3 = r2 + (r3 << 4);
    0x00076b2e ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00076b30 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00076b32 beq.w 0x76712                                     |         goto label_70;
                                                                 |     }
    0x00076b36 movs r3, 0                                        |     r3 = 0;
    0x00076b38 mov r0, r5                                        |     r0 = r5;
    0x00076b3a mov r2, r3                                        |     r2 = r3;
    0x00076b3c bl 0x2dd00                                        |     r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x00076b40 mov r1, r0                                        |     r1 = r0;
    0x00076b42 b 0x76712                                         |     goto label_70;
                                                                 | label_226:
    0x00076b44 movs r3, 0                                        |     r3 = 0;
    0x00076b46 mov r2, fp                                        |     r2 = fp;
    0x00076b48 movs r1, 0x23                                     |     r1 = 0x23;
    0x00076b4a mov r0, r8                                        |     r0 = r8;
    0x00076b4c str r3, [sp]                                      |     *(sp) = r3;
    0x00076b4e bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00076b52 mov sb, r0                                        |     sb = r0;
    0x00076b54 b 0x7680a                                         |     goto label_84;
                                                                 | label_225:
    0x00076b56 mov r0, r6                                        |     r0 = r6;
    0x00076b58 bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00076b5c b 0x767de                                         |     goto label_85;
                                                                 | label_205:
    0x00076b5e ldr r3, [sp, 0x118]                               |     r3 = var_118h;
    0x00076b60 ldr r2, [sp, 0xa4]                                |     r2 = var_a4h;
    0x00076b62 mvns r3, r3                                       |     r3 = ~r3;
    0x00076b64 lsrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x00076b66 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00076b68 ble.w 0x76244                                     |         goto label_86;
                                                                 |     }
    0x00076b6c movs r5, 0                                        |     r5 = 0;
    0x00076b6e movs r1, 0xe                                      |     r1 = 0xe;
    0x00076b70 mov r3, r5                                        |     r3 = r5;
    0x00076b72 mov r2, r5                                        |     r2 = r5;
    0x00076b74 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076b76 str r5, [sp]                                      |     *(sp) = r5;
    0x00076b78 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076b7c ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x00076b7e mov r4, r0                                        |     r4 = r0;
    0x00076b80 movs r2, 0x71                                     |     r2 = 0x71;
    0x00076b82 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076b84 mov r1, sl                                        |     r1 = sl;
    0x00076b86 strd r5, r5, [sp, 8]                              |     __asm ("strd r5, r5, [var_8h]");
    0x00076b8a str r3, [sp, 4]                                   |     var_4h = r3;
    0x00076b8c ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00076b8e str r3, [sp]                                      |     *(sp) = r3;
    0x00076b90 mov r3, r5                                        |     r3 = r5;
    0x00076b92 bl 0x2bc74                                        |     fcn_0002bc74 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     if (r4 == 0) {
    0x00076b96 cbz r4, 0x76bd8                                   |         goto label_237;
                                                                 |     }
    0x00076b98 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00076b9a ldr r2, [r1, 0x6c]                                |     r2 = *((r1 + 0x6c));
    0x00076b9c subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x00076b9e cmp r4, r3                                        |     
    0x00076ba0 it eq                                             |     
                                                                 |     if (r4 != r3) {
    0x00076ba2 streq r4, [r1, 0x6c]                              |         *((r1 + 0x6c)) = r4;
                                                                 |     }
                                                                 |     if (r4 != r3) {
    0x00076ba4 beq 0x76bc2                                       |         
    0x00076ba6 ldr r1, [sp, 0x40]                                |         r1 = var_40h;
    0x00076ba8 bics.w r4, r4, r4, asr 32                         |         __asm ("bics.w r4, r4, r4, asr 32");
    0x00076bac it hs                                             |         
                                                                 |         if (r4 < r3) {
    0x00076bae movhs r4, r3                                      |             r4 = r3;
                                                                 |         }
    0x00076bb0 ldr r3, [r1]                                      |         r3 = *(r1);
    0x00076bb2 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 != 0) {
    0x00076bb6 cbnz r3, 0x76bee                                  |             goto label_238;
                                                                 |         }
    0x00076bb8 ldr r3, [r1, 0x68]                                |         r3 = *((r1 + 0x68));
    0x00076bba movs r1, 0x14                                     |         r1 = 0x14;
    0x00076bbc mla r3, r1, r4, r3                                |         __asm ("mla r3, r1, r4, r3");
                                                                 | label_89:
    0x00076bc0 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
    0x00076bc2 ldr r3, [sp, 0x114]                               |     r3 = var_114h;
    0x00076bc4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076bc6 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00076bc8 beq.w 0x764f4                                     |         goto label_87;
                                                                 |     }
    0x00076bcc ldr r3, [sp, 0x118]                               |     r3 = var_118h;
    0x00076bce ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076bd0 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00076bd2 beq.w 0x764f4                                     |         goto label_87;
                                                                 |     }
    0x00076bd6 b 0x764d8                                         |     goto label_88;
                                                                 | label_237:
    0x00076bd8 ldr r3, [sp, 0x114]                               |     r3 = var_114h;
    0x00076bda ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076bdc cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00076bde beq.w 0x764f4                                     |         goto label_87;
                                                                 |     }
    0x00076be2 ldr r3, [sp, 0x118]                               |     r3 = var_118h;
    0x00076be4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076be6 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00076be8 beq.w 0x764f4                                     |         goto label_87;
                                                                 |     }
    0x00076bec b 0x764d8                                         |     goto label_88;
                                                                 | label_238:
    0x00076bee ldr r3, [pc, 0x124]                               |     
    0x00076bf0 add r3, pc                                        |     r3 = 0xed90a;
    0x00076bf2 adds r3, 4                                        |     r3 += 4;
    0x00076bf4 b 0x76bc0                                         |     goto label_89;
                                                                 | label_192:
    0x00076bf6 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00076bf8 mov r8, r3                                        |     r8 = r3;
    0x00076bfa str r3, [sp, 0x90]                                |     var_90h = r3;
    0x00076bfc str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00076bfe b.w 0x76148                                       |     goto label_90;
                                                                 | label_191:
    0x00076c02 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00076c04 mov r2, r6                                        |     r2 = r6;
    0x00076c06 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076c08 movs r1, 0x76                                     |     r1 = 0x76;
    0x00076c0a str r4, [sp]                                      |     *(sp) = r4;
    0x00076c0c bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00076c10 mov r5, r0                                        |     r5 = r0;
    0x00076c12 b.w 0x76012                                       |     goto label_91;
                                                                 | label_184:
    0x00076c16 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076c18 mov r3, sb                                        |     r3 = sb;
    0x00076c1a ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076c1c movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00076c1e str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00076c22 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076c26 b.w 0x75ef6                                       |     goto label_92;
                                                                 | label_190:
    0x00076c2a mov r3, fp                                        |     r3 = fp;
    0x00076c2c str r0, [sp, 0xb4]                                |     var_b4h = r0;
    0x00076c2e b.w 0x7573e                                       |     goto label_93;
                                                                 | label_148:
    0x00076c32 movs r3, 0                                        |     r3 = 0;
    0x00076c34 str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x00076c36 b.w 0x762e4                                       |     goto label_94;
                                                                 | label_145:
    0x00076c3a ldr r6, [sp, 0x44]                                |     r6 = var_44h;
    0x00076c3c mov r5, r6                                        |     r5 = r6;
    0x00076c3e b.w 0x76026                                       |     goto label_95;
                                                                 | label_193:
    0x00076c42 str r3, [sp]                                      |     *(sp) = r3;
    0x00076c44 movs r1, 0x87                                     |     r1 = 0x87;
    0x00076c46 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076c48 mov r3, fp                                        |     r3 = fp;
    0x00076c4a ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076c4c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_203:
    0x00076c50 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00076c52 bne 0x76cfe                                       |         goto label_239;
                                                                 |     }
                                                                 | label_102:
    0x00076c54 movs r3, 0                                        |     r3 = 0;
    0x00076c56 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x00076c58 b.w 0x757ea                                       |     goto label_42;
                                                                 | label_173:
    0x00076c5c ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076c5e ldr r3, [r0, 0x70]                                |     r3 = *((r0 + 0x70));
    0x00076c60 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00076c62 beq.w 0x75c28                                     |         goto label_96;
                                                                 |     }
    0x00076c66 bl 0x2bbb8                                        |     fcn_0002bbb8 (r0, r1);
    0x00076c6a b.w 0x75c28                                       |     goto label_96;
                                                                 | label_202:
    0x00076c6e ldr r3, [sp, 0x118]                               |     r3 = var_118h;
    0x00076c70 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00076c72 blt.w 0x7603c                                     |         goto label_45;
                                                                 |     }
    0x00076c76 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00076c78 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00076c7a beq.w 0x7603c                                     |         goto label_45;
                                                                 |     }
    0x00076c7e ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x00076c80 subs r3, r3, r2                                   |     r3 -= r2;
    0x00076c82 ldr r2, [sp, 0x94]                                |     r2 = var_94h;
    0x00076c84 ldrb r3, [r2, r3]                                 |     r3 = *((r2 + r3));
    0x00076c86 clz r3, r3                                        |     r3 &= r3;
    0x00076c8a lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00076c8c lsls r3, r3, 1                                    |     r3 <<= 1;
    0x00076c8e str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00076c90 b.w 0x761bc                                       |     goto label_97;
                                                                 | label_201:
    0x00076c94 ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x00076c96 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00076c98 beq.w 0x763e0                                     |         goto label_74;
                                                                 |     }
    0x00076c9c ldr r2, [sp, 0xa0]                                |     r2 = var_a0h;
    0x00076c9e str r2, [sp, 0xd4]                                |     var_d4h = r2;
    0x00076ca0 b.w 0x75c3c                                       |     goto label_75;
                                                                 | label_200:
    0x00076ca4 movs r3, 4                                        |     r3 = 4;
    0x00076ca6 b.w 0x76168                                       |     goto label_98;
                                                                 | label_199:
    0x00076caa ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00076cac mov r1, r6                                        |     r1 = r6;
    0x00076cae ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x00076cb0 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076cb2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00076cb4 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00076cb6 str r3, [sp]                                      |     *(sp) = r3;
    0x00076cb8 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00076cba cmp r2, 2                                         |     
    0x00076cbc it eq                                             |     
                                                                 |     if (r2 != 2) {
    0x00076cbe moveq r3, r6                                      |         r3 = r6;
                                                                 |     }
    0x00076cc0 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x00076cc2 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00076cc4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00076cc6 bl 0x6889c                                        |     fcn_0006889c (r0, r1, r2, r3, r4, r5);
    0x00076cca b.w 0x757d0                                       |     goto label_99;
                                                                 | label_198:
    0x00076cce mvn r1, 7                                         |     r1 = ~7;
    0x00076cd2 bl 0x187b8                                        |     fcn_000187b8 (r0);
    0x00076cd6 b.w 0x76140                                       |     goto label_100;
                                                                 | label_204:
    0x00076cda ldr r0, [sp, 0xa0]                                |     r0 = var_a0h;
    0x00076cdc bl 0x6554c                                        |     fcn_0006554c (r0, r1);
    0x00076ce0 b.w 0x76212                                       |     goto label_101;
                                                                 | label_236:
    0x00076ce4 movs r3, 0                                        |     r3 = 0;
    0x00076ce6 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x00076ce8 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00076cea mov r2, r3                                        |     r2 = r3;
    0x00076cec bl 0x20c10                                        |     r0 = fcn_00020c10 (r0, r1, r2, r3);
    0x00076cf0 mov r1, r0                                        |     r1 = r0;
    0x00076cf2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00076cf4 beq.w 0x76712                                     |         goto label_70;
                                                                 |     }
    0x00076cf8 adds r4, 1                                        |     r4++;
    0x00076cfa strh r4, [r0, 0x20]                               |     *((r0 + 0x20)) = r4;
    0x00076cfc b 0x76712                                         |     goto label_70;
                                                                 | label_239:
    0x00076cfe ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00076d00 mov r1, r5                                        |     r1 = r5;
    0x00076d02 bl 0x189e0                                        |     fcn_000189e0 (r0, r1);
    0x00076d06 b 0x76c54                                         |     goto label_102;
                                                                 | label_232:
    0x00076d08 movs r3, 0                                        |     r3 = 0;
    0x00076d0a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00076d0c udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x76d18 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00076d18 ()                                      | void fcn_00076d18 (int16_t arg_4h, int16_t arg_50h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int32_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00076d18 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00076d1c mov sl, r3                                        |     sl = r3;
    0x00076d1e ldr r3, [r0]                                      |     r3 = *(r0);
    0x00076d20 sub sp, 0x2c                                      |     
    0x00076d22 mov r7, r0                                        |     r7 = r0;
    0x00076d24 mov r8, r1                                        |     r8 = r1;
    0x00076d26 ldr.w sb, [r0, 8]                                 |     sb = *((r0 + 8));
    0x00076d2a mov r6, r2                                        |     r6 = r2;
    0x00076d2c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00076d2e mov r4, r1                                        |     r4 = r1;
    0x00076d30 ldr r3, [r1, 0x28]                                |     r3 = *((r1 + 0x28));
    0x00076d32 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00076d34 b 0x76d40                                         |     
                                                                 |     while (r3 != 0) {
    0x00076d36 ldr r3, [r4, 0x1c]                                |         r3 = *((r4 + 0x1c));
    0x00076d38 cmp sl, r3                                        |         
                                                                 |         if (sl == r3) {
    0x00076d3a beq 0x76d46                                       |             goto label_6;
                                                                 |         }
    0x00076d3c ldr r4, [r4, 0x10]                                |         r4 = *((r4 + 0x10));
                                                                 |         if (r4 == 0) {
    0x00076d3e cbz r4, 0x76d46                                   |             goto label_6;
                                                                 |         }
    0x00076d40 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00076d42 cmp r3, 0                                         |         
    0x00076d44 bne 0x76d36                                       |         
                                                                 |     }
                                                                 | label_6:
    0x00076d46 ldr r3, [sp, 0x50]                                |     r3 = *(arg_50h);
    0x00076d48 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00076d4a cmp.w sl, 0                                       |     
    0x00076d4e it ne                                             |     
                                                                 |     if (sl != 0) {
    0x00076d50 cmpne r3, r2                                      |         __asm ("cmpne r3, r2");
                                                                 |     }
                                                                 |     if (sl == 0) {
    0x00076d52 beq.w 0x76e58                                     |         goto label_2;
                                                                 |     }
    0x00076d56 ldr r3, [r6, 0x1c]                                |     r3 = *((r6 + 0x1c));
    0x00076d58 lsls r1, r3, 0x18                                 |     r1 = r3 << 0x18;
                                                                 |     if (r1 >= r3) {
    0x00076d5a bpl.w 0x76ede                                     |         goto label_7;
                                                                 |     }
    0x00076d5e ldr.w fp, [r6, 8]                                 |     fp = *((r6 + 8));
    0x00076d62 mov r2, fp                                        |     r2 = fp;
    0x00076d64 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00076d68 bne 0x76d74                                       |         goto label_8;
                                                                 |     }
    0x00076d6a b 0x76f3c                                         |     goto label_9;
                                                                 |     do {
    0x00076d6c ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x00076d6e cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00076d70 beq.w 0x76f3c                                     |             goto label_9;
                                                                 |         }
                                                                 | label_8:
    0x00076d74 ldrb.w r3, [r2, 0x37]                             |         r3 = *((r2 + 0x37));
    0x00076d78 and r3, r3, 3                                     |         r3 &= 3;
    0x00076d7c cmp r3, 2                                         |         
    0x00076d7e bne 0x76d6c                                       |         
                                                                 |     } while (r3 != 2);
    0x00076d80 ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x00076d82 mov fp, r2                                        |     
    0x00076d84 ldrh.w lr, [r2, 0x32]                             |     
    0x00076d88 add.w r2, r3, lr                                  |     r2 = r3 + lr;
    0x00076d8c adds r3, 1                                        |     r3++;
    0x00076d8e str r2, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r2;
    0x00076d90 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00076d92 cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x00076d96 beq 0x76df6                                       |         goto label_10;
                                                                 |     }
    0x00076d98 strd r7, r8, [sp, 0x20]                           |     __asm ("strd r7, r8, [var_24h]");
    0x00076d9c movs r5, 0                                        |     r5 = 0;
    0x00076d9e ldr r7, [sp, 0x50]                                |     r7 = *(arg_50h);
    0x00076da0 ldr.w r8, [sp, 0x18]                              |     r8 = var_18h;
    0x00076da4 str r4, [sp, 0x1c]                                |     var_1ch = r4;
    0x00076da6 mov r4, lr                                        |     r4 = lr;
                                                                 | label_0:
    0x00076da8 ldrh.w r0, [sl, 0x34]                             |     r0 = *((sl + 0x34));
    0x00076dac ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00076db0 ldrsh.w ip, [r3, r5, lsl 1]                       |     offset_0 = r5 << 1;
                                                                 |     ip = *((r3 + offset_0));
    0x00076db4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00076db6 beq.w 0x76f2e                                     |         goto label_11;
                                                                 |     }
    0x00076dba ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x00076dbe movs r3, 0                                        |     r3 = 0;
    0x00076dc0 subs r2, 2                                        |     r2 -= 2;
    0x00076dc2 b 0x76dcc                                         |     
                                                                 |     while (r1 != ip) {
    0x00076dc4 adds r3, 1                                        |         r3++;
    0x00076dc6 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00076dc8 beq.w 0x76f2e                                     |             goto label_11;
                                                                 |         }
    0x00076dcc ldrsh r1, [r2, 2]!                                |         r1 = *((r2 += 2));
    0x00076dd0 cmp r1, ip                                        |         
    0x00076dd2 bne 0x76dc4                                       |         
                                                                 |     }
    0x00076dd4 sxth r3, r3                                       |     __asm ("sxth r3, r3");
                                                                 | label_4:
    0x00076dd6 add.w r2, r8, r5                                  |     r2 = r8 + r5;
    0x00076dda str r2, [sp]                                      |     *(sp) = r2;
    0x00076ddc adds r5, 1                                        |     r5++;
    0x00076dde mov r2, r7                                        |     r2 = r7;
    0x00076de0 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x00076de2 mov r0, sb                                        |     r0 = sb;
    0x00076de4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076de8 cmp r4, r5                                        |     
                                                                 |     if (r4 != r5) {
    0x00076dea bne 0x76da8                                       |         goto label_0;
                                                                 |     }
    0x00076dec mov lr, r4                                        |     lr = r4;
    0x00076dee ldr.w r8, [sp, 0x24]                              |     r8 = var_24h;
    0x00076df2 ldrd r4, r7, [sp, 0x1c]                           |     __asm ("ldrd r4, r7, [var_1ch]");
                                                                 | label_10:
    0x00076df6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00076df8 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00076dfa ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00076dfc mov r0, sb                                        |     r0 = sb;
    0x00076dfe str.w lr, [sp, 4]                                 |     __asm ("str.w lr, [var_4h]");
    0x00076e02 str r3, [sp]                                      |     *(sp) = r3;
    0x00076e04 movs r3, 0                                        |     r3 = 0;
    0x00076e06 bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00076e0a ldr r3, [pc, 0x138]                               |     
    0x00076e0c mov r5, r0                                        |     r5 = r0;
    0x00076e0e movs r2, 0xb                                      |     r2 = 0xb;
    0x00076e10 movs r1, 0x46                                     |     r1 = 0x46;
    0x00076e12 mov r0, sb                                        |     r0 = sb;
    0x00076e14 add r3, pc                                        |     r3 = 0xedd5e;
    0x00076e16 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00076e18 mov.w r3, -1                                      |     r3 = -1;
    0x00076e1c str r3, [sp, 8]                                   |     var_8h = r3;
    0x00076e1e movs r3, 0                                        |     r3 = 0;
    0x00076e20 str r3, [sp]                                      |     *(sp) = r3;
    0x00076e22 movs r3, 2                                        |     r3 = 2;
    0x00076e24 bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00076e28 ldr r3, [r7, 0x74]                                |     r3 = *((r7 + 0x74));
    0x00076e2a movs r2, 1                                        |     r2 = 1;
    0x00076e2c cmp r3, 0                                         |     
    0x00076e2e it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00076e30 moveq r3, r7                                      |         r3 = r7;
                                                                 |     }
    0x00076e32 cmp r5, 0                                         |     
    0x00076e34 strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
    0x00076e36 ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
                                                                 |     if (r5 < 0) {
    0x00076e3a bge 0x76e3e                                       |         
    0x00076e3c subs r5, r2, 1                                    |         r5 = r2 - 1;
                                                                 |     }
    0x00076e3e ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00076e42 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00076e46 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00076e48 bne 0x76f34                                       |         goto label_12;
                                                                 |     }
    0x00076e4a ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00076e4e add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x00076e52 add.w r3, r3, r5, lsl 2                           |     r3 += (r5 << 2);
                                                                 | label_5:
    0x00076e56 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
                                                                 | label_2:
    0x00076e58 ldr.w r1, [r8, 0x20]                              |     r1 = *((r8 + 0x20));
    0x00076e5c movs r2, 0                                        |     r2 = 0;
    0x00076e5e ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00076e60 bl 0x2ea98                                        |     fcn_0002ea98 (r0, r1, r2);
    0x00076e64 ldrsh.w r1, [r6, 0x22]                            |     r1 = *((r6 + 0x22));
    0x00076e68 mov sl, r0                                        |     sl = r0;
    0x00076e6a cmp r1, 0                                         |     
    0x00076e6c itt gt                                            |     
                                                                 |     if (r1 <= 0) {
    0x00076e6e movgt r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r1 <= 0) {
    0x00076e70 movgt fp, r5                                      |         
                                                                 |     }
                                                                 |     if (r1 > 0) {
    0x00076e72 bgt 0x76e7c                                       |         goto label_1;
                                                                 |     }
    0x00076e74 b 0x76eaa                                         |     goto label_13;
                                                                 |     do {
    0x00076e76 adds r5, 1                                        |         r5++;
    0x00076e78 cmp r1, r5                                        |         
                                                                 |         if (r1 <= r5) {
    0x00076e7a ble 0x76eaa                                       |             goto label_13;
                                                                 |         }
                                                                 | label_1:
    0x00076e7c ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x00076e7e add.w r2, r5, r5, lsl 1                           |         r2 = r5 + (r5 << 1);
    0x00076e82 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00076e86 ldrb r3, [r3, 5]                                  |         r3 = *((r3 + 5));
    0x00076e88 cmp r3, 0x45                                      |         
    0x00076e8a bne 0x76e76                                       |         
                                                                 |     } while (r3 != 0x45);
    0x00076e8c str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00076e90 movs r1, 0x57                                     |     r1 = 0x57;
    0x00076e92 ldr.w r2, [r8, 0x24]                              |     r2 = *((r8 + 0x24));
    0x00076e96 movs r3, 0                                        |     r3 = 0;
    0x00076e98 mov r0, sb                                        |     r0 = sb;
    0x00076e9a add r2, r5                                        |     r2 += r5;
    0x00076e9c adds r5, 1                                        |     r5++;
    0x00076e9e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076ea2 ldrsh.w r1, [r6, 0x22]                            |     r1 = *((r6 + 0x22));
    0x00076ea6 cmp r1, r5                                        |     
                                                                 |     if (r1 > r5) {
    0x00076ea8 bgt 0x76e7c                                       |         goto label_1;
                                                                 |     }
                                                                 | label_13:
    0x00076eaa ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00076eac movs r2, 0                                        |     r2 = 0;
    0x00076eae ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00076eb0 bl 0x2dffc                                        |     fcn_0002dffc (r0, r1, r2, r3, r4);
    0x00076eb4 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00076eb6 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r3 != 0) {
    0x00076eb8 cbz r3, 0x76ec8                                   |         
    0x00076eba mov r1, r3                                        |         r1 = r3;
    0x00076ebc movs r3, 0                                        |         r3 = 0;
    0x00076ebe mov r2, r3                                        |         r2 = r3;
    0x00076ec0 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00076ec2 bl 0x2dd00                                        |         r0 = fcn_0002dd00 (r0, r1, r2, r3);
    0x00076ec6 mov r3, r0                                        |         r3 = r0;
                                                                 |     }
    0x00076ec8 str r4, [sp, 4]                                   |     var_4h = r4;
    0x00076eca movs r4, 2                                        |     r4 = 2;
    0x00076ecc mov r2, r5                                        |     r2 = r5;
    0x00076ece mov r1, sl                                        |     r1 = sl;
    0x00076ed0 mov r0, r7                                        |     r0 = r7;
    0x00076ed2 str r4, [sp]                                      |     *(sp) = r4;
    0x00076ed4 bl 0x7517c                                        |     fcn_0007517c (r0, r1, r2, r3, r4, r5, r6);
    0x00076ed8 add sp, 0x2c                                      |     
    0x00076eda pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_7:
    0x00076ede ldrb r3, [r7, 0x13]                               |     r3 = *((r7 + 0x13));
                                                                 |     if (r3 == 0) {
    0x00076ee0 cbz r3, 0x76f26                                   |         goto label_14;
                                                                 |     }
    0x00076ee2 subs r3, 1                                        |     r3--;
    0x00076ee4 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00076ee6 strb r3, [r7, 0x13]                               |     *((r7 + 0x13)) = r3;
    0x00076ee8 adds r3, 0x26                                     |     r3 += 0x26;
    0x00076eea ldr.w r5, [r7, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r5 = *((r7 + offset_1));
                                                                 | label_3:
    0x00076eee mov.w sl, 0                                       |     sl = 0;
    0x00076ef2 ldr r2, [sp, 0x50]                                |     r2 = *(arg_50h);
    0x00076ef4 mov r3, r5                                        |     r3 = r5;
    0x00076ef6 movs r1, 0x8e                                     |     r1 = 0x8e;
    0x00076ef8 mov r0, sb                                        |     r0 = sb;
    0x00076efa str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00076efe bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076f02 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00076f04 mov r3, sl                                        |     r3 = sl;
    0x00076f06 movs r1, 0x1d                                     |     r1 = 0x1d;
    0x00076f08 mov r0, sb                                        |     r0 = sb;
    0x00076f0a str r5, [sp]                                      |     *(sp) = r5;
    0x00076f0c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00076f10 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00076f12 beq 0x76e58                                       |         goto label_2;
                                                                 |     }
    0x00076f14 ldrb r3, [r7, 0x13]                               |     r3 = *((r7 + 0x13));
    0x00076f16 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00076f18 bhi 0x76e58                                       |         goto label_2;
                                                                 |     }
    0x00076f1a adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00076f1c adds r3, 0x26                                     |     r3 += 0x26;
    0x00076f1e strb r2, [r7, 0x13]                               |     *((r7 + 0x13)) = r2;
    0x00076f20 str.w r5, [r7, r3, lsl 2]                         |     __asm ("str.w r5, [r7, r3, lsl 2]");
    0x00076f24 b 0x76e58                                         |     goto label_2;
                                                                 | label_14:
    0x00076f26 ldr r5, [r7, 0x2c]                                |     r5 = *((r7 + 0x2c));
    0x00076f28 adds r5, 1                                        |     r5++;
    0x00076f2a str r5, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r5;
    0x00076f2c b 0x76eee                                         |     goto label_3;
                                                                 | label_11:
    0x00076f2e mov.w r3, -1                                      |     r3 = -1;
    0x00076f32 b 0x76dd6                                         |     goto label_4;
                                                                 | label_12:
    0x00076f34 ldr r3, [pc, 0x10]                                |     
    0x00076f36 add r3, pc                                        |     r3 = 0xede82;
    0x00076f38 adds r3, 4                                        |     r3 += 4;
    0x00076f3a b 0x76e56                                         |     goto label_5;
                                                                 | label_9:
    0x00076f3c movs r3, 0                                        |     r3 = 0;
    0x00076f3e ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x00076f40 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x77d08 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00077d08 ()                                      | void fcn_00077d08 (int16_t arg_30h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_108h, int16_t arg_10ch, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     arithmetic var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     arithmetic var_24h;
                                                                 |     arithmetic var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     arithmetic var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     arithmetic var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     arithmetic var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     arithmetic var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     arithmetic 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;
                                                                 |     arithmetic 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;
                                                                 |     int32_t var_94h_2;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int32_t var_b0h_2;
                                                                 |     int16_t var_b8h;
                                                                 |     int32_t var_b8h_2;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_c4h;
                                                                 |     int32_t var_c8h;
                                                                 |     int32_t var_c8h_2;
                                                                 |     int32_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     int16_t var_dch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00077d08 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00077d0c sub sp, 0xe4                                      |     
    0x00077d0e mov r4, r0                                        |     r4 = r0;
    0x00077d10 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00077d12 mov sl, r1                                        |     sl = r1;
    0x00077d14 ldr.w r0, [pc, 0xaf0]                             |     
    0x00077d18 ldr.w r1, [pc, 0xaf0]                             |     r1 = *(0x7880c);
    0x00077d1c ldr.w sb, [r4, 8]                                 |     sb = *((r4 + 8));
    0x00077d20 add r0, pc                                        |     r0 = 0xf052c;
    0x00077d22 ldrsh.w r8, [sl, 0x22]                            |     r8 = *((sl + 0x22));
    0x00077d26 ldr r1, [r0, r1]                                  |     
    0x00077d28 ldr r1, [r1]                                      |     r1 = *(0xf052c);
    0x00077d2a str r1, [sp, 0xdc]                                |     var_dch = r1;
    0x00077d2c mov.w r1, 0                                       |     r1 = 0;
    0x00077d30 ldrb.w r1, [sp, 0x114]                            |     r1 = *(arg_114h);
    0x00077d34 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x00077d36 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00077d38 str r1, [sp, 0x64]                                |     var_64h = r1;
    0x00077d3a ldrb.w r1, [sp, 0x118]                            |     r1 = *(arg_118h);
    0x00077d3e str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00077d40 subs r3, 0                                        |     
    0x00077d42 ldr.w r2, [sl, 0x1c]                              |     r2 = *((sl + 0x1c));
    0x00077d46 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00077d48 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00077d4a str r1, [sp, 0x38]                                |     var_38h = r1;
    0x00077d4c ldr r1, [sp, 0x120]                               |     r1 = *(arg_120h);
    0x00077d4e str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00077d50 ands r3, r2, 0x80                                 |     r3 = r2 & 0x80;
    0x00077d54 str r1, [sp, 0xa4]                                |     var_a4h = r1;
    0x00077d56 ldr r1, [sp, 0x124]                               |     r1 = *(arg_124h);
    0x00077d58 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x00077d5a ldr r1, [sp, 0x128]                               |     r1 = *(arg_128h);
    0x00077d5c str r1, [sp, 0x40]                                |     var_40h = r1;
    0x00077d5e ldr r1, [r4]                                      |     r1 = *(r4);
    0x00077d60 str r1, [sp, 0x3c]                                |     var_3ch = r1;
                                                                 |     if (r3 == r2) {
    0x00077d62 beq.w 0x77f26                                     |         goto label_86;
                                                                 |     }
    0x00077d66 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x00077d6a str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00077d6c ldr r1, [sp, 0x48]                                |     r1 = var_48h;
                                                                 |     if (r3 != 0) {
    0x00077d6e cbnz r3, 0x77d7c                                  |         goto label_87;
                                                                 |     }
    0x00077d70 b.w 0x79208                                       |     goto label_88;
                                                                 |     do {
    0x00077d74 ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
    0x00077d76 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00077d78 beq.w 0x79208                                     |             goto label_88;
                                                                 |         }
                                                                 | label_87:
    0x00077d7c ldrb.w r3, [r1, 0x37]                             |         r3 = *((r1 + 0x37));
    0x00077d80 and r3, r3, 3                                     |         r3 &= 3;
    0x00077d84 cmp r3, 2                                         |         
    0x00077d86 bne 0x77d74                                       |         
                                                                 |     } while (r3 != 2);
    0x00077d88 ldrh r3, [r1, 0x32]                               |     r3 = *((r1 + 0x32));
    0x00077d8a lsls r4, r2, 0x14                                 |     r4 = r2 << 0x14;
    0x00077d8c str r1, [sp, 0x48]                                |     var_48h = r1;
    0x00077d8e str r3, [sp, 0x6c]                                |     var_6ch = r3;
                                                                 |     if (r4 < r2) {
    0x00077d90 bmi.w 0x77f34                                     |         goto label_89;
                                                                 |     }
                                                                 | label_0:
    0x00077d94 ldr.w fp, [sl, 0x10]                              |     fp = *((sl + 0x10));
    0x00077d98 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00077d9c beq.w 0x78ba2                                     |         goto label_90;
                                                                 |     }
    0x00077da0 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00077da2 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00077da4 and r3, r3, 0x200                                 |     r3 &= 0x200;
    0x00077da8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00077daa bne.w 0x781c2                                     |         goto label_91;
                                                                 |     }
    0x00077dae ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00077db0 ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x00077db4 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00077db6 cmp r1, 0xb                                       |     
    0x00077db8 ldr r7, [sp, 0x28]                                |     r7 = var_28h;
    0x00077dba ite ne                                            |     
                                                                 |     if (r1 == 0xb) {
    0x00077dbc movne r8, r1                                      |         r8 = r1;
                                                                 |     }
                                                                 |     if (r1 != 0xb) {
    0x00077dbe moveq r8, 2                                       |         r8 = 2;
                                                                 |     }
    0x00077dc2 cmp r0, 0                                         |     
    0x00077dc4 mvn.w r2, r2                                      |     r2 = ~r2;
    0x00077dc8 str r2, [r7, 0x34]                                |     *((r7 + 0x34)) = r2;
                                                                 |     if (r0 <= 0) {
    0x00077dca ble.w 0x79136                                     |         goto label_92;
                                                                 |     }
    0x00077dce ldr.w r2, [pc, 0xa40]                             |     r2 = *(0x00078810);
    0x00077dd2 mov r4, r3                                        |     r4 = r3;
    0x00077dd4 mov r5, fp                                        |     r5 = fp;
    0x00077dd6 mov r6, r3                                        |     r6 = r3;
    0x00077dd8 str.w sl, [sp, 0x30]                              |     __asm ("str.w sl, [var_30h]");
    0x00077ddc add r2, pc                                        |     r2 += pc;
    0x00077dde str r2, [sp, 0x24]                                |     var_24h = r2;
                                                                 |     do {
    0x00077de0 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x00077de2 ldr r3, [r5, 8]                                   |         r3 = *((r5 + 8));
    0x00077de4 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00077de6 beq.w 0x783ee                                     |             goto label_93;
                                                                 |         }
    0x00077dea ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00077dec add r0, sp, 0xc0                                  |         r0 += x;
    0x00077dee str r2, [sp, 0xc4]                                |         var_c4h = r2;
    0x00077df0 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x00077df2 str r2, [sp, 0xd8]                                |         var_d8h = r2;
    0x00077df4 movs r2, 0                                        |         r2 = 0;
    0x00077df6 str r2, [sp, 0xc0]                                |         x = r2;
    0x00077df8 strd r2, r2, [sp, 0xc8]                           |         __asm ("strd r2, r2, [var_c8h]");
    0x00077dfc strd r2, r2, [sp, 0xd0]                           |         __asm ("strd r2, r2, [var_d4h]");
    0x00077e00 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00077e02 beq 0x77e9a                                       |             
    0x00077e04 mov r1, r3                                        |             r1 = r3;
    0x00077e06 str r3, [sp, 0x2c]                                |             var_2ch = r3;
    0x00077e08 bl 0x2cd88                                        |             fcn_0002cd88 (r0, r1);
    0x00077e0c ldr r1, [sp, 0x64]                                |             r1 = var_64h;
    0x00077e0e ldrh.w r2, [sp, 0xd4]                             |             r2 = var_d4h;
    0x00077e12 ldr r3, [sp, 0x2c]                                |             r3 = var_2ch;
                                                                 |             if (r1 == 0) {
    0x00077e14 cbnz r1, 0x77e1e                                  |                 
    0x00077e16 bic r2, r2, 2                                     |                 r2 = BIT_MASK (r2, 2);
    0x00077e1a lsls r2, r2, 0x10                                 |                 r2 <<= 0x10;
    0x00077e1c lsrs r2, r2, 0x10                                 |                 r2 >>= 0x10;
                                                                 |             }
    0x00077e1e cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x00077e20 beq 0x77e9a                                       |                 goto label_94;
                                                                 |             }
    0x00077e22 cmp r4, 0                                         |             
                                                                 |             if (r4 == 0) {
    0x00077e24 beq.w 0x78440                                     |                 goto label_95;
                                                                 |             }
    0x00077e28 ldr r4, [r7, 0x38]                                |             r4 = *((r7 + 0x38));
    0x00077e2a add.w sl, r4, -1                                  |             sl = r4 + -1;
    0x00077e2e str.w sl, [r7, 0x38]                              |             __asm ("str.w sl, [r7, 0x38]");
                                                                 | label_15:
    0x00077e32 mov r1, r3                                        |             r1 = r3;
    0x00077e34 movs r3, 0                                        |             r3 = 0;
    0x00077e36 mov r2, r3                                        |             r2 = r3;
    0x00077e38 ldr r0, [sp, 0x3c]                                |             r0 = var_3ch;
    0x00077e3a bl 0x2dd00                                        |             fcn_0002dd00 (r0, r1, r2, r3);
    0x00077e3e ldr r3, [sp, 0x3c]                                |             r3 = var_3ch;
    0x00077e40 mov r1, r0                                        |             r1 = r0;
    0x00077e42 ldrb.w r3, [r3, 0x57]                             |             r3 = *((r3 + 0x57));
    0x00077e46 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x00077e48 beq.w 0x783de                                     |                 goto label_96;
                                                                 |             }
                                                                 |             if (r1 != 0) {
                                                                 | label_14:
    0x00077e4c cbz r1, 0x77e54                                   |                 
    0x00077e4e ldr r0, [sp, 0x3c]                                |                 r0 = var_3ch;
    0x00077e50 bl 0x16c0c                                        |                 fcn_00016c0c (r0, r1);
                                                                 |             }
                                                                 | label_16:
    0x00077e54 cmp.w r8, 4                                       |             
                                                                 |             if (r8 == 4) {
    0x00077e58 beq.w 0x78420                                     |                 goto label_97;
                                                                 |             }
                                                                 | label_17:
    0x00077e5c cmp.w r8, 5                                       |             
    0x00077e60 mov.w r2, 0                                       |             r2 = 0;
    0x00077e64 it eq                                             |             
                                                                 |             if (r8 != 5) {
    0x00077e66 moveq r8, 2                                       |                 r8 = 2;
                                                                 |             }
    0x00077e6a movs r1, 3                                        |             r1 = 3;
    0x00077e6c ldr r3, [r5, 0xc]                                 |             r3 = *((r5 + 0xc));
    0x00077e6e mov r0, r7                                        |             r0 = r7;
    0x00077e70 strd r2, r1, [sp]                                 |             __asm ("strd r2, r1, [sp]");
    0x00077e74 mov r2, r8                                        |             r2 = r8;
    0x00077e76 movw r1, 0x113                                    |             r1 = 0x113;
    0x00077e7a bl 0x2abf0                                        |             fcn_0002abf0 (r0, r1, r2, r3, r4, r5);
    0x00077e7e ldr.w r0, [sb, 0xc]                               |             r0 = *((sb + 0xc));
    0x00077e82 ldrd r3, r2, [r0, 0x38]                           |             __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00077e86 cmn r2, r3                                        |             
                                                                 |             if (r2 < r3) {
    0x00077e88 bmi.w 0x78436                                     |                 goto label_98;
                                                                 |             }
                                                                 | label_18:
    0x00077e8c ldr r3, [r0, 0x40]                                |             r3 = *((r0 + 0x40));
    0x00077e8e lsls r4, r4, 2                                    |             r4 <<= 2;
    0x00077e90 ldr.w r2, [sb, 0x6c]                              |             r2 = *((sb + 0x6c));
    0x00077e94 rsbs r4, r4, 0                                    |             r4 -= ;
    0x00077e96 str r2, [r3, r4]                                  |             *((r3 + r4)) = r2;
                                                                 | label_19:
    0x00077e98 movs r4, 1                                        |             r4 = 1;
                                                                 |         }
                                                                 | label_94:
    0x00077e9a ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00077e9e adds r6, 1                                        |         r6++;
    0x00077ea0 adds r5, 0x10                                     |         r5 += 0x10;
    0x00077ea2 cmp r3, r6                                        |         
    0x00077ea4 bgt 0x77de0                                       |         
                                                                 |     } while (r3 > r6);
    0x00077ea6 ldr.w sl, [sp, 0x30]                              |     sl = var_30h;
    0x00077eaa str r4, [sp, 0x2c]                                |     var_2ch = r4;
                                                                 | label_79:
    0x00077eac ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00077eae movs r3, 0                                        |     r3 = 0;
    0x00077eb0 str r3, [r2, 0x34]                                |     *((r2 + 0x34)) = r3;
    0x00077eb2 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00077eb4 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x00077eb8 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00077eba cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00077ebc bne.w 0x781d4                                     |         goto label_99;
                                                                 |     }
                                                                 | label_11:
    0x00077ec0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00077ec2 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00077ec4 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 | label_56:
    0x00077ec6 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00077ec8 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00077eca tst.w r3, 0x6000                                  |     
                                                                 |     if ((r3 & 0x6000) == 0) {
    0x00077ece beq.w 0x782b6                                     |         goto label_54;
                                                                 |     }
                                                                 | label_13:
    0x00077ed2 and r3, r3, 0x2000                                |     r3 &= 0x2000;
    0x00077ed6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00077ed8 beq.w 0x78bdc                                     |         goto label_100;
                                                                 |     }
    0x00077edc ldr.w r3, [sl, 0x38]                              |     r3 = *((sl + 0x38));
    0x00077ee0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00077ee2 beq.w 0x78cf8                                     |         goto label_101;
                                                                 |     }
                                                                 | label_63:
    0x00077ee6 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00077ee8 ldrb.w r3, [r3, 0x97]                             |     r3 = *((r3 + 0x97));
    0x00077eec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00077eee bne.w 0x78d0c                                     |         goto label_102;
                                                                 |     }
    0x00077ef2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00077ef4 movs r2, 0x80                                     |     r2 = 0x80;
    0x00077ef6 mov r1, sl                                        |     r1 = sl;
    0x00077ef8 str r3, [sp]                                      |     *(sp) = r3;
    0x00077efa bl 0x2042c                                        |     fcn_0002042c (r0, r1, r2, r3);
    0x00077efe str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x00077f00 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00077f02 beq.w 0x78d0c                                     |         goto label_102;
                                                                 |     }
                                                                 | label_55:
    0x00077f06 ldr r4, [sp, 0x28]                                |     r4 = var_28h;
    0x00077f08 movs r2, 0                                        |     r2 = 0;
    0x00077f0a movs r1, 0x47                                     |     r1 = 0x47;
    0x00077f0c mov r0, sb                                        |     r0 = sb;
    0x00077f0e ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00077f10 adds r3, 1                                        |     r3++;
    0x00077f12 str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x00077f14 str r2, [sp]                                      |     *(sp) = r2;
    0x00077f16 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x00077f18 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00077f1c ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x00077f1e subs r3, 1                                        |     r3--;
    0x00077f20 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x00077f22 str r3, [r4, 0x38]                                |     *((r4 + 0x38)) = r3;
    0x00077f24 b 0x782be                                         |     goto label_103;
                                                                 | label_86:
    0x00077f26 lsls r4, r2, 0x14                                 |     r4 = r2 << 0x14;
    0x00077f28 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00077f2a mov.w r3, 1                                       |     r3 = 1;
    0x00077f2e str r3, [sp, 0x6c]                                |     var_6ch = r3;
                                                                 |     if (r4 >= r2) {
    0x00077f30 bpl.w 0x77d94                                     |         goto label_0;
                                                                 |     }
                                                                 | label_89:
    0x00077f34 ldr.w r2, [pc, 0x8dc]                             |     r2 = *(0x00078814);
    0x00077f38 movs r3, 0                                        |     r3 = 0;
    0x00077f3a ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x00077f3e mov lr, r3                                        |     lr = r3;
    0x00077f40 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00077f42 add r2, pc                                        |     r2 += pc;
    0x00077f44 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00077f46 str r2, [sp, 0x54]                                |     var_54h = r2;
    0x00077f48 ldr.w r2, [pc, 0x8cc]                             |     
    0x00077f4c add r2, pc                                        |     r2 = 0xf0768;
    0x00077f4e str r2, [sp, 0x68]                                |     var_68h = r2;
                                                                 | label_1:
    0x00077f50 cmp.w r8, 0                                       |     
    0x00077f54 itt le                                            |     
                                                                 |     if (r8 > 0) {
    0x00077f56 andle r3, lr, 1                                   |         r3 = lr & 1;
                                                                 |     }
                                                                 |     if (r8 <= 0) {
    0x00077f5a str r3, [sp, 0x30]                                |         var_30h = r3;
                                                                 |     }
                                                                 |     if (r8 <= 0) {
    0x00077f5c ble.w 0x7809c                                     |         goto label_104;
                                                                 |     }
    0x00077f60 and r3, lr, 1                                     |     r3 = lr & 1;
    0x00077f64 movs r4, 0                                        |     r4 = 0;
    0x00077f66 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00077f68 eor r3, lr, 1                                     |     r3 = lr ^ 1;
    0x00077f6c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00077f6e str.w lr, [sp, 0x4c]                              |     __asm ("str.w lr, [var_4ch]");
                                                                 |     do {
    0x00077f72 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x00077f76 add.w r2, r4, r4, lsl 1                           |         r2 = r4 + (r4 << 1);
    0x00077f7a add.w r6, r3, r2, lsl 2                           |         r6 = r3 + (r2 << 2);
    0x00077f7e ldrb r5, [r6, 4]                                  |         r5 = *((r6 + 4));
    0x00077f80 ands r5, r5, 0xf                                  |         r5 &= 0xf;
                                                                 |         if (r5 != r5) {
    0x00077f84 beq.w 0x78094                                     |             
    0x00077f88 ldrsh.w r1, [sl, 0x20]                            |             r1 = *((sl + 0x20));
    0x00077f8c cmp r1, r4                                        |             
                                                                 |             if (r1 == r4) {
    0x00077f8e beq.w 0x78094                                     |                 goto label_3;
                                                                 |             }
    0x00077f92 ldrh r1, [r6, 0xa]                                |             r1 = *((r6 + 0xa));
    0x00077f94 ldr r0, [sp, 0x24]                                |             r0 = var_24h;
    0x00077f96 ands r1, r1, 0x60                                 |             r1 &= 0x60;
    0x00077f9a and r0, r0, 1                                     |             r0 &= 1;
    0x00077f9e it eq                                             |             
                                                                 |             if (r1 != r1) {
    0x00077fa0 moveq r0, 0                                       |                 r0 = 0;
                                                                 |             }
    0x00077fa2 cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x00077fa4 bne.w 0x78182                                     |                 goto label_105;
                                                                 |             }
    0x00077fa8 cmp.w fp, 0                                       |             
                                                                 |             if (fp != 0) {
    0x00077fac beq 0x77fbe                                       |                 
    0x00077fae ldr.w r0, [fp, r4, lsl 2]                         |                 offset_0 = r4 << 2;
                                                                 |                 r0 = *((fp + offset_0));
    0x00077fb2 clz r7, r1                                        |                 r7 &= r1;
    0x00077fb6 lsrs r7, r7, 5                                    |                 r7 >>= 5;
    0x00077fb8 ands.w r7, r7, r0, lsr 31                         |                 r7 &= (r0 >> 31);
                                                                 |                 if (r7 != r7) {
    0x00077fbc bne 0x78094                                       |                     goto label_3;
                                                                 |                 }
                                                                 |             }
    0x00077fbe ldr r0, [sp, 0x38]                                |             r0 = var_38h;
    0x00077fc0 cmp r0, 0xb                                       |             
    0x00077fc2 it ne                                             |             
                                                                 |             if (r0 == 0xb) {
    0x00077fc4 movne r5, r0                                      |                 r5 = r0;
                                                                 |             }
                                                                 |             if (r0 == 0xb) {
    0x00077fc6 beq.w 0x7818a                                     |                 goto label_106;
                                                                 |             }
                                                                 | label_4:
    0x00077fca cmp r5, 5                                         |             
                                                                 |             if (r5 == 5) {
    0x00077fcc beq 0x780c2                                       |                 goto label_107;
                                                                 |             }
                                                                 | label_5:
    0x00077fce ldr r0, [sp, 0x30]                                |             r0 = var_30h;
    0x00077fd0 cmp r1, 0                                         |             
    0x00077fd2 ite ne                                            |             
                                                                 |             if (r1 == 0) {
    0x00077fd4 movne r0, 0                                       |                 r0 = 0;
                                                                 |             }
                                                                 |             if (r1 != 0) {
    0x00077fd6 andeq r0, r0, 1                                   |                 r0 &= 1;
                                                                 |             }
    0x00077fda cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x00077fdc bne 0x78094                                       |                 goto label_3;
                                                                 |             }
    0x00077fde ldr.w r0, [sl, 0x1c]                              |             r0 = *((sl + 0x1c));
    0x00077fe2 sxth r1, r4                                       |             __asm ("sxth r1, r4");
    0x00077fe4 lsls r0, r0, 0x1a                                 |             r0 <<= 0x1a;
                                                                 |             if (r0 < r0) {
    0x00077fe6 bpl 0x77ff8                                       |                 
    0x00077fe8 mov r0, sl                                        |                 r0 = sl;
    0x00077fea strd r2, r3, [sp, 0x5c]                           |                 __asm ("strd r2, r3, [var_60h]");
    0x00077fee bl 0xf6c8                                         |                 fcn_0000f6c8 (r0, r1);
    0x00077ff2 ldrd r2, r3, [sp, 0x5c]                           |                 __asm ("ldrd r2, r3, [var_60h]");
    0x00077ff6 mov r1, r0                                        |                 r1 = r0;
                                                                 |             }
    0x00077ff8 ldr r0, [sp, 0x10c]                               |             r0 = *(arg_10ch);
    0x00077ffa add r1, r0                                        |             r1 += r0;
    0x00077ffc adds r7, r1, 1                                    |             r7 = r1 + 1;
    0x00077ffe subs r1, r5, 1                                    |             r1 = r5 - 1;
    0x00078000 cmp r1, 4                                         |             
                                                                 |             if (r1 > 4) {
    0x00078002 bhi.w 0x78170                                     |                 goto label_108;
                                                                 |             }
                                                                 |             /* switch table (5 cases) at 0x7800a */
    0x00078006 tbb [pc, r1]                                      |             __asm ("tbb aav.0x000000ff");
                                                                 | label_2:
    0x00078010 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00078012 beq.w 0x781a8                                     |                 goto label_109;
                                                                 |             }
    0x00078016 mov r0, sl                                        |             r0 = sl;
    0x00078018 strd r2, r3, [sp, 0x5c]                           |             __asm ("strd r2, r3, [var_60h]");
    0x0007801c bl 0xf6c8                                         |             fcn_0000f6c8 (r0, r1);
    0x00078020 ldr r3, [sp, 0x10c]                               |             r3 = *(arg_10ch);
    0x00078022 adds r7, r0, r3                                   |             r7 = r0 + r3;
    0x00078024 ldrd r2, r3, [sp, 0x5c]                           |             __asm ("ldrd r2, r3, [var_60h]");
    0x00078028 adds r7, 1                                        |             r7++;
                                                                 | label_8:
    0x0007802a ldr r0, [sp, 0x28]                                |             r0 = var_28h;
    0x0007802c movs r5, 2                                        |             r5 = 2;
    0x0007802e ldr r1, [r0, 0x74]                                |             r1 = *((r0 + 0x74));
    0x00078030 cmp r1, 0                                         |             
    0x00078032 it eq                                             |             
                                                                 |             if (r1 != 0) {
    0x00078034 moveq r1, r0                                      |                 r1 = r0;
                                                                 |             }
    0x00078036 movs r0, 1                                        |             r0 = 1;
    0x00078038 strb r0, [r1, 0x15]                               |             *((r1 + 0x15)) = r0;
    0x0007803a ldr.w r3, [r3, r2, lsl 2]                         |             offset_1 = r2 << 2;
                                                                 |             r3 = *((r3 + offset_1));
    0x0007803e ldr r1, [sp, 0x54]                                |             r1 = var_54h;
    0x00078040 ldr.w r2, [sl]                                    |             r2 = *(sl);
    0x00078044 ldr r0, [sp, 0x3c]                                |             r0 = var_3ch;
    0x00078046 bl 0x20e84                                        |             fcn_00020e84 (r0);
    0x0007804a mov r3, r5                                        |             r3 = r5;
    0x0007804c movw r2, 0x513                                    |             r2 = 0x513;
    0x00078050 mov r5, r0                                        |             r5 = r0;
    0x00078052 movs r1, 0x45                                     |             r1 = 0x45;
    0x00078054 mov r0, sb                                        |             r0 = sb;
    0x00078056 str r7, [sp]                                      |             *(sp) = r7;
    0x00078058 bl 0x29ac4                                        |             fcn_00029ac4 (r0, r1, r2, r3);
    0x0007805c ldr.w r0, [sb]                                    |             r0 = *(sb);
    0x00078060 ldrb.w r3, [r0, 0x57]                             |             r3 = *((r0 + 0x57));
    0x00078064 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00078066 bne.w 0x78194                                     |                 goto label_110;
                                                                 |             }
    0x0007806a ldrd r1, r3, [sb, 0x68]                           |             __asm ("ldrd r1, r3, [sb, 0x68]");
    0x0007806e movs r0, 0xfa                                     |             r0 = 0xfa;
    0x00078070 add.w r2, r3, r3, lsl 2                           |             r2 = r3 + (r3 << 2);
    0x00078074 lsls r2, r2, 2                                    |             r2 <<= 2;
    0x00078076 subs r2, 0x14                                     |             r2 -= 0x14;
    0x00078078 add r1, r2                                        |             r1 += r2;
    0x0007807a strb r0, [r1, 1]                                  |             *((r1 + 1)) = r0;
    0x0007807c str r5, [r1, 0x10]                                |             *((r1 + 0x10)) = r5;
                                                                 | label_6:
    0x0007807e cmp r3, 0                                         |             
                                                                 |             if (r3 <= 0) {
    0x00078080 ble 0x78094                                       |                 goto label_3;
                                                                 |             }
    0x00078082 ldr.w r2, [sb, 0x68]                              |             r2 = *((sb + 0x68));
    0x00078086 add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x0007808a add.w r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
    0x0007808e movs r3, 1                                        |             r3 = 1;
    0x00078090 strh r3, [r2, -0x12]                              |             *((r2 - 0x12)) = r3;
                                                                 |         }
                                                                 | label_3:
    0x00078094 adds r4, 1                                        |         r4++;
    0x00078096 cmp r8, r4                                        |         
    0x00078098 bne.w 0x77f72                                     |         
                                                                 |     } while (r8 != r4);
                                                                 | label_104:
    0x0007809c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0007809e ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x000780a0 orrs r3, r2                                       |     r3 |= r2;
    0x000780a2 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000780a4 it eq                                             |     
                                                                 |     if (r3 != r2) {
    0x000780a6 orreq r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x000780aa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000780ac bne.w 0x77d94                                     |         goto label_0;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x000780b0 cbz r2, 0x780bc                                   |         
    0x000780b2 ldr.w r3, [sl, 0x1c]                              |         r3 = *((sl + 0x1c));
    0x000780b6 tst.w r3, 0x60                                    |         
                                                                 |         if ((r3 & 0x60) != 0) {
    0x000780ba bne 0x781b0                                       |             goto label_111;
                                                                 |         }
                                                                 |     }
                                                                 | label_9:
    0x000780bc mov.w lr, 1                                       |     lr = 1;
    0x000780c0 b 0x77f50                                         |     goto label_1;
                                                                 | label_107:
    0x000780c2 ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x000780c4 ldr.w r1, [sl, 0x1c]                              |     r1 = *((sl + 0x1c));
    0x000780c8 and r0, r1, 0x20                                  |     r0 = r1 & 0x20;
    0x000780cc sxth r1, r4                                       |     __asm ("sxth r1, r4");
    0x000780ce cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000780d0 bne 0x78010                                       |         goto label_2;
                                                                 |     }
    0x000780d2 ldrh r5, [r6, 8]                                  |     r5 = *((r6 + 8));
    0x000780d4 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000780d6 beq 0x78010                                       |         goto label_2;
                                                                 |     }
    0x000780d8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000780da beq.w 0x78464                                     |         goto label_112;
                                                                 |     }
    0x000780de mov r0, sl                                        |     r0 = sl;
    0x000780e0 bl 0xf6c8                                         |     fcn_0000f6c8 (r0, r1);
    0x000780e4 ldr r3, [sp, 0x10c]                               |     r3 = *(arg_10ch);
    0x000780e6 adds r7, r0, r3                                   |     r7 = r0 + r3;
    0x000780e8 adds r7, 1                                        |     r7++;
                                                                 | label_22:
    0x000780ea ldrd r5, r3, [sb, 0x6c]                           |     __asm ("ldrd r5, r3, [sb, 0x6c]");
    0x000780ee cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x000780f0 bge.w 0x78452                                     |         goto label_113;
                                                                 |     }
    0x000780f4 ldr.w r1, [sb, 0x68]                              |     r1 = *((sb + 0x68));
    0x000780f8 add.w r3, r5, r5, lsl 2                           |     r3 = r5 + (r5 << 2);
    0x000780fc adds r0, r5, 1                                    |     r0 = r5 + 1;
    0x000780fe str.w r0, [sb, 0x6c]                              |     __asm ("str.w r0, [sb, 0x6c]");
    0x00078102 movs r2, 0                                        |     r2 = 0;
    0x00078104 movs r0, 0x33                                     |     r0 = 0x33;
    0x00078106 add.w ip, r1, r3, lsl 2                           |     
    0x0007810a strd r7, r2, [ip, 4]                              |     __asm ("strd r7, r2, [ip, 4]");
    0x0007810e strd r2, r2, [ip, 0xc]                            |     __asm ("strd r2, r2, [ip, 0xc]");
    0x00078112 str.w r0, [r1, r3, lsl 2]                         |     __asm ("str.w r0, [r1, r3, lsl 2]");
                                                                 | label_21:
    0x00078116 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00078118 ldrh r3, [r6, 8]                                  |     r3 = *((r6 + 8));
    0x0007811a adds r2, 1                                        |     r2++;
    0x0007811c str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0007811e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00078120 beq 0x781be                                       |         goto label_114;
                                                                 |     }
    0x00078122 ldrb.w r0, [sl, 0x2b]                             |     r0 = *((sl + 0x2b));
    0x00078126 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00078128 bne 0x781be                                       |         goto label_114;
                                                                 |     }
    0x0007812a ldr.w r1, [sl, 0x34]                              |     r1 = *((sl + 0x34));
                                                                 |     if (r1 != 0) {
    0x0007812e cbz r1, 0x78142                                   |         
    0x00078130 ldr r2, [r1]                                      |         r2 = *(r1);
    0x00078132 cmp r2, r3                                        |         
    0x00078134 it lt                                             |         
                                                                 |         if (r2 >= r3) {
    0x00078136 movlt r1, r0                                      |             r1 = r0;
                                                                 |         }
                                                                 |         if (r2 < r3) {
    0x00078138 blt 0x78142                                       |             goto label_10;
                                                                 |         }
    0x0007813a add.w r1, r1, r3, lsl 4                           |         r1 += (r3 << 4);
    0x0007813e ldr r1, [r1, -0x8]                                |         r1 = *((r1 - 0x8));
                                                                 |     }
                                                                 | label_10:
    0x00078142 mov r2, r7                                        |     r2 = r7;
    0x00078144 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078146 bl 0x5af40                                        |     fcn_0005af40 (r0, r1, r2);
    0x0007814a ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0007814e cmp r5, 0                                         |     
    0x00078150 ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
    0x00078154 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00078158 it lt                                             |     
                                                                 |     if (r5 >= 0) {
    0x0007815a addlt r5, r2, -1                                  |         r5 = r2 + -1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0007815e cbnz r3, 0x781a2                                  |         goto label_115;
                                                                 |     }
    0x00078160 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00078164 add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x00078168 add.w r3, r3, r5, lsl 2                           |     r3 += (r5 << 2);
                                                                 | label_7:
    0x0007816c str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0007816e b 0x78094                                         |     goto label_3;
                                                                 | label_108:
    0x00078170 movs r3, 0                                        |     r3 = 0;
    0x00078172 mov r2, r7                                        |     r2 = r7;
    0x00078174 str r3, [sp]                                      |     *(sp) = r3;
    0x00078176 movs r1, 0x32                                     |     r1 = 0x32;
    0x00078178 ldr r3, [sp, 0x11c]                               |     r3 = *(arg_11ch);
    0x0007817a mov r0, sb                                        |     r0 = sb;
    0x0007817c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078180 b 0x78094                                         |     goto label_3;
                                                                 | label_105:
    0x00078182 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00078184 adds r3, 1                                        |     r3++;
    0x00078186 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00078188 b 0x78094                                         |     goto label_3;
                                                                 | label_106:
    0x0007818a cmp r5, 0xb                                       |     
                                                                 |     if (r5 != 0xb) {
    0x0007818c bne.w 0x77fca                                     |         goto label_4;
                                                                 |     }
    0x00078190 movs r5, 2                                        |     r5 = 2;
    0x00078192 b 0x77fce                                         |     goto label_5;
                                                                 |     if (r5 != 0) {
                                                                 | label_110:
    0x00078194 cbz r5, 0x7819c                                   |         
    0x00078196 mov r1, r5                                        |         r1 = r5;
    0x00078198 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x0007819c ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x000781a0 b 0x7807e                                         |     goto label_6;
                                                                 | label_115:
    0x000781a2 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000781a4 adds r3, 4                                        |     r3 += 4;
    0x000781a6 b 0x7816c                                         |     goto label_7;
                                                                 | label_109:
    0x000781a8 ldr r1, [sp, 0x10c]                               |     r1 = *(arg_10ch);
    0x000781aa adds r7, r1, r4                                   |     r7 = r1 + r4;
    0x000781ac adds r7, 1                                        |     r7++;
    0x000781ae b 0x7802a                                         |     goto label_8;
                                                                 | label_111:
    0x000781b0 ldr r3, [sp, 0x10c]                               |     r3 = *(arg_10ch);
    0x000781b2 mov r2, sl                                        |     r2 = sl;
    0x000781b4 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000781b6 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x000781b8 bl 0x5b358                                        |     fcn_0005b358 (r0, r1, r2, r3);
    0x000781bc b 0x780bc                                         |     goto label_9;
                                                                 | label_114:
    0x000781be movs r1, 0                                        |     r1 = 0;
    0x000781c0 b 0x78142                                         |     goto label_10;
                                                                 | label_91:
    0x000781c2 movs r3, 0                                        |     r3 = 0;
    0x000781c4 str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 | label_51:
    0x000781c6 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000781c8 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x000781cc str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000781ce cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000781d0 beq.w 0x77ec0                                     |         goto label_11;
                                                                 |     }
                                                                 | label_99:
    0x000781d4 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000781d6 str r2, [sp, 0x60]                                |     var_60h = r2;
    0x000781d8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000781da beq.w 0x78c14                                     |         goto label_116;
                                                                 |     }
    0x000781de ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000781e0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000781e2 beq.w 0x78f22                                     |         goto label_117;
                                                                 |     }
    0x000781e6 movs r2, 0                                        |     r2 = 0;
                                                                 |     do {
    0x000781e8 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x000781ea adds r2, 1                                        |         r2++;
    0x000781ec cmp r3, 0                                         |         
    0x000781ee bne 0x781e8                                       |         
                                                                 |     } while (r3 != 0);
    0x000781f0 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x000781f2 add.w r4, r2, r2, lsl 2                           |     r4 = r2 + (r2 << 2);
    0x000781f6 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x000781f8 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x000781fa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000781fc beq.w 0x78c34                                     |         goto label_118;
                                                                 |     }
    0x00078200 mov r2, r4                                        |     r2 = r4;
    0x00078202 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x00078206 str r0, [sp, 0x60]                                |     var_60h = r0;
                                                                 | label_58:
    0x00078208 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0007820a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007820c beq.w 0x7850a                                     |         goto label_119;
                                                                 |     }
    0x00078210 mov r2, r4                                        |     r2 = r4;
    0x00078212 movs r1, 0                                        |     r1 = 0;
    0x00078214 mov r0, r3                                        |     r0 = r3;
    0x00078216 mov r4, r3                                        |     r4 = r3;
    0x00078218 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0007821c ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0007821e mov r3, r4                                        |     r3 = r4;
    0x00078220 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00078222 movs r7, 1                                        |     r7 = 1;
    0x00078224 ldr.w r1, [sl, 8]                                 |     r1 = *((sl + 8));
    0x00078228 mov ip, r3                                        |     
    0x0007822a add.w r6, r4, r0, lsl 3                           |     r6 = r4 + (r0 << 3);
    0x0007822e str r4, [r2, 0x18]                                |     *((r2 + 0x18)) = r4;
    0x00078230 mov r0, r2                                        |     r0 = r2;
    0x00078232 movs r4, 0                                        |     r4 = 0;
    0x00078234 mov lr, r6                                        |     lr = r6;
                                                                 | label_12:
    0x00078236 ldr r3, [r0]                                      |     r3 = *(r0);
                                                                 |     if (r3 == 0) {
    0x00078238 cbz r3, 0x7827c                                   |         goto label_120;
                                                                 |     }
    0x0007823a ldr r5, [r0, 0x1c]                                |     r5 = *((r0 + 0x1c));
                                                                 |     if (r5 == 0) {
    0x0007823c cbz r5, 0x78276                                   |         goto label_121;
                                                                 |     }
    0x0007823e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00078240 beq.w 0x78eae                                     |         goto label_122;
                                                                 |     }
    0x00078244 cmp r5, r1                                        |     
                                                                 |     if (r5 == r1) {
    0x00078246 beq.w 0x78eae                                     |         goto label_122;
                                                                 |     }
    0x0007824a mov r3, r1                                        |     r3 = r1;
    0x0007824c movs r2, 0                                        |     r2 = 0;
    0x0007824e b 0x78254                                         |     
                                                                 |     while (r3 != 0) {
    0x00078250 cmp r5, r3                                        |         
                                                                 |         if (r5 == r3) {
    0x00078252 beq 0x7825c                                       |             goto label_123;
                                                                 |         }
    0x00078254 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x00078256 adds r2, 1                                        |         r2++;
    0x00078258 cmp r3, 0                                         |         
    0x0007825a bne 0x78250                                       |         
                                                                 |     }
                                                                 | label_123:
    0x0007825c add.w r5, lr, r2                                  |     r5 = lr + r2;
                                                                 | label_71:
    0x00078260 ldrb r6, [r5]                                     |     r6 = *(r5);
                                                                 |     if (r6 == 0) {
    0x00078262 cbnz r6, 0x78276                                  |         
    0x00078264 strb r7, [r5]                                     |         *(r5) = r7;
    0x00078266 str.w r3, [ip, r4, lsl 3]                         |         __asm ("str.w r3, [ip, r4, lsl 3]");
    0x0007826a add.w r3, ip, r4, lsl 3                           |         r3 = ip + (r4 << 3);
    0x0007826e adds r4, 1                                        |         r4++;
    0x00078270 ldr.w r1, [sl, 8]                                 |         r1 = *((sl + 8));
    0x00078274 str r2, [r3, 4]                                   |         *((r3 + 4)) = r2;
                                                                 |     }
                                                                 | label_121:
    0x00078276 ldr r0, [r0, 0x10]                                |     r0 = *((r0 + 0x10));
    0x00078278 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007827a bne 0x78236                                       |         goto label_12;
                                                                 |     }
                                                                 | label_120:
    0x0007827c mov r6, lr                                        |     r6 = lr;
                                                                 |     if (r1 == 0) {
    0x0007827e cbz r1, 0x782a6                                   |         goto label_124;
                                                                 |     }
    0x00078280 ldr r5, [sp, 0x60]                                |     r5 = var_60h;
    0x00078282 add.w r3, lr, -1                                  |     r3 = lr + -1;
    0x00078286 rsb.w r6, lr, 1                                   |     r6 = 1 - lr;
                                                                 |     do {
    0x0007828a mov r2, r3                                        |         r2 = r3;
    0x0007828c ldrb r0, [r3, 1]!                                 |         r0 = *((r3 += 1));
                                                                 |         if (r0 == 0) {
    0x00078290 cbnz r0, 0x782a0                                  |             
    0x00078292 add.w r0, r5, r4, lsl 3                           |             r0 = r5 + (r4 << 3);
    0x00078296 str.w r1, [r5, r4, lsl 3]                         |             __asm ("str.w r1, [r5, r4, lsl 3]");
    0x0007829a adds r4, 1                                        |             r4++;
    0x0007829c add r2, r6                                        |             r2 += r6;
    0x0007829e str r2, [r0, 4]                                   |             *((r0 + 4)) = r2;
                                                                 |         }
    0x000782a0 ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
    0x000782a2 cmp r1, 0                                         |         
    0x000782a4 bne 0x7828a                                       |         
                                                                 |     } while (r1 != 0);
                                                                 | label_124:
    0x000782a6 movs r3, 1                                        |     r3 = 1;
    0x000782a8 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000782aa ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000782ac ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x000782ae tst.w r3, 0x6000                                  |     
                                                                 |     if ((r3 & 0x6000) != 0) {
    0x000782b2 bne.w 0x77ed2                                     |         goto label_13;
                                                                 |     }
                                                                 | label_54:
    0x000782b6 movs r3, 0                                        |     r3 = 0;
    0x000782b8 strd r3, r3, [sp, 0x9c]                           |     __asm ("strd r3, r3, [var_9ch]");
    0x000782bc str r3, [sp, 0x80]                                |     var_80h = r3;
                                                                 | label_103:
    0x000782be ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x000782c0 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000782c2 subs r3, 0                                        |     
    0x000782c4 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x000782c6 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000782c8 cmp r2, 0                                         |     
    0x000782ca it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x000782cc movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000782ce cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000782d0 beq.w 0x7846c                                     |         goto label_125;
                                                                 |     }
    0x000782d4 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000782d6 ldr r4, [sp, 0x38]                                |     r4 = var_38h;
    0x000782d8 ldr r7, [r3, 0x38]                                |     r7 = *((r3 + 0x38));
    0x000782da cmp r4, 0xb                                       |     
    0x000782dc add.w r5, r7, -1                                  |     r5 = r7 + -1;
    0x000782e0 str r5, [r3, 0x38]                                |     *((r3 + 0x38)) = r5;
    0x000782e2 ldrb.w r3, [sl, 0x2a]                             |     r3 = *((sl + 0x2a));
                                                                 |     if (r4 == 0xb) {
    0x000782e6 beq.w 0x78dac                                     |         goto label_126;
                                                                 |     }
                                                                 | label_66:
    0x000782ea ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000782ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000782ee beq.w 0x78f2c                                     |         goto label_127;
                                                                 |     }
                                                                 | label_67:
    0x000782f2 ldr.w fp, [sp, 0x40]                              |     fp = var_40h;
    0x000782f6 mov r3, fp                                        |     r3 = fp;
    0x000782f8 b 0x78306                                         |     
                                                                 |     while (r2 != 0) {
    0x000782fa ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
                                                                 |         if (r2 == 0) {
    0x000782fc cbz r2, 0x7830c                                   |             goto label_128;
                                                                 |         }
    0x000782fe ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00078300 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00078302 beq.w 0x78f36                                     |             goto label_129;
                                                                 |         }
    0x00078306 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00078308 cmp r2, 0                                         |         
    0x0007830a bne 0x782fa                                       |         
                                                                 |     }
                                                                 | label_128:
    0x0007830c mov fp, r3                                        |     
    0x0007830e ldrb r3, [r3, 0x14]                               |     r3 = *((r3 + 0x14));
    0x00078310 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00078312 beq.w 0x78c70                                     |         goto label_130;
                                                                 |     }
    0x00078316 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00078318 cmp r3, fp                                        |     
    0x0007831a it ne                                             |     
                                                                 |     if (r3 == fp) {
    0x0007831c movne r4, 6                                       |         r4 = 6;
                                                                 |     }
                                                                 |     if (r3 == fp) {
    0x0007831e beq.w 0x78e7e                                     |         goto label_131;
                                                                 |     }
                                                                 | label_61:
    0x00078322 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x00078326 mov r2, r3                                        |     r2 = r3;
    0x00078328 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x0007832a ldr.w r3, [sb, 0x70]                              |     r3 = *((sb + 0x70));
    0x0007832e cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00078330 bge.w 0x7913c                                     |         goto label_132;
                                                                 |     }
    0x00078334 ldr r0, [sp, 0x7c]                                |     r0 = var_7ch;
    0x00078336 movs r1, 0                                        |     r1 = 0;
    0x00078338 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x0007833c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00078340 add.w r2, r0, r0, lsl 2                           |     r2 = r0 + (r0 << 2);
    0x00078344 adds r0, 1                                        |     r0++;
    0x00078346 str.w r0, [sb, 0x6c]                              |     __asm ("str.w r0, [sb, 0x6c]");
    0x0007834a movs r0, 8                                        |     r0 = 8;
    0x0007834c lsls r2, r2, 2                                    |     r2 <<= 2;
    0x0007834e str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00078350 add r3, r2                                        |     r3 += r2;
    0x00078352 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00078354 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00078358 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_73:
    0x0007835c cmp r4, 5                                         |     
                                                                 |     if (r4 != 5) {
    0x0007835e bne.w 0x78d66                                     |         goto label_133;
                                                                 |     }
    0x00078362 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00078364 cmp r3, 5                                         |     
    0x00078366 it eq                                             |     
                                                                 |     if (r3 != 5) {
    0x00078368 moveq r6, 0                                       |         r6 = 0;
                                                                 |     }
                                                                 |     if (r3 != 5) {
    0x0007836a beq 0x78386                                       |         
    0x0007836c ldr.w r3, [sl, 8]                                 |         r3 = *((sl + 8));
    0x00078370 ldr r2, [sp, 0x7c]                                |         r2 = var_7ch;
    0x00078372 subs r3, 0                                        |         
    0x00078374 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x00078376 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00078378 cmp r2, 0                                         |         
    0x0007837a it ne                                             |         
                                                                 |         if (r2 == 0) {
    0x0007837c movne r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0007837e mov r6, r3                                        |         r6 = r3;
    0x00078380 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00078382 bne.w 0x79180                                     |             goto label_134;
                                                                 |         }
                                                                 |     }
                                                                 | label_81:
    0x00078386 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078388 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007838a bne.w 0x78ef4                                     |         goto label_77;
                                                                 |     }
    0x0007838e ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00078390 mov r3, r5                                        |     r3 = r5;
    0x00078392 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00078394 mov r0, sb                                        |     r0 = sb;
    0x00078396 str r2, [sp]                                      |     *(sp) = r2;
    0x00078398 ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x0007839a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007839e ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x000783a0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000783a2 bne.w 0x790a4                                     |         goto label_135;
                                                                 |     }
    0x000783a6 ldr.w r1, [sl, 8]                                 |     r1 = *((sl + 8));
                                                                 |     if (r1 != 0) {
    0x000783aa cbz r1, 0x783d2                                   |         
    0x000783ac ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x000783ae movs r2, 1                                        |         r2 = 1;
    0x000783b0 ldr r3, [r0, 0x74]                                |         r3 = *((r0 + 0x74));
    0x000783b2 cmp r3, 0                                         |         
    0x000783b4 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x000783b6 moveq r3, r0                                      |             r3 = r0;
                                                                 |         }
    0x000783b8 strb r2, [r3, 0x14]                               |         *((r3 + 0x14)) = r2;
    0x000783ba ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x000783bc str r3, [sp, 4]                                   |         var_4h = r3;
    0x000783be ldr r3, [sp, 0x108]                               |         r3 = *(arg_108h);
    0x000783c0 str r3, [sp]                                      |         *(sp) = r3;
    0x000783c2 mov.w r3, -1                                      |         r3 = -1;
    0x000783c6 str r3, [sp, 8]                                   |         var_8h = r3;
    0x000783c8 ldr r3, [sp, 0x90]                                |         r3 = var_90h;
    0x000783ca ldr.w r2, [sl, 0x1c]                              |         r2 = *((sl + 0x1c));
    0x000783ce bl 0x66f00                                        |         fcn_00066f00 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     }
    0x000783d2 movs r3, 0                                        |     r3 = 0;
    0x000783d4 str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x000783d6 movs r3, 1                                        |     r3 = 1;
    0x000783d8 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x000783da b.w 0x78df0                                       |     goto label_75;
                                                                 | label_96:
    0x000783de str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x000783e0 mov r2, sl                                        |     r2 = sl;
    0x000783e2 movs r3, 0x10                                     |     r3 = 0x10;
    0x000783e4 mov r0, r7                                        |     r0 = r7;
    0x000783e6 bl 0x58ed8                                        |     fcn_00058ed8 (r0, r1, r2, r3, r4);
    0x000783ea ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x000783ec b 0x77e4c                                         |     goto label_14;
                                                                 |     if (r4 == 0) {
                                                                 | label_93:
    0x000783ee cbz r4, 0x78440                                   |         goto label_95;
                                                                 |     }
                                                                 | label_20:
    0x000783f0 ldr r4, [r7, 0x38]                                |     r4 = *((r7 + 0x38));
    0x000783f2 add.w sl, r4, -1                                  |     sl = r4 + -1;
    0x000783f6 str.w sl, [r7, 0x38]                              |     __asm ("str.w sl, [r7, 0x38]");
    0x000783fa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000783fc bne.w 0x77e32                                     |         goto label_15;
                                                                 |     }
    0x00078400 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00078402 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x00078406 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00078408 bne.w 0x77e54                                     |         goto label_16;
                                                                 |     }
    0x0007840c mov r1, r3                                        |     r1 = r3;
    0x0007840e mov r2, sl                                        |     r2 = sl;
    0x00078410 movs r3, 0x10                                     |     r3 = 0x10;
    0x00078412 mov r0, r7                                        |     r0 = r7;
    0x00078414 bl 0x58ed8                                        |     fcn_00058ed8 (r0, r1, r2, r3, r4);
    0x00078418 cmp.w r8, 4                                       |     
                                                                 |     if (r8 != 4) {
    0x0007841c bne.w 0x77e5c                                     |         goto label_17;
                                                                 |     }
                                                                 | label_97:
    0x00078420 mov r0, sb                                        |     r0 = sb;
    0x00078422 ldr r1, [sp, 0x11c]                               |     r1 = *(arg_11ch);
    0x00078424 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00078428 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x0007842c ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00078430 cmn r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00078432 bpl.w 0x77e8c                                     |         goto label_18;
                                                                 |     }
                                                                 | label_98:
    0x00078436 rsbs r2, r4, 0                                    |     r2 = r4 - ;
    0x00078438 mov r1, sb                                        |     r1 = sb;
    0x0007843a bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x0007843e b 0x77e98                                         |     goto label_19;
                                                                 | label_95:
    0x00078440 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00078442 mov r0, sb                                        |     r0 = sb;
    0x00078444 ldr r3, [sp, 0x10c]                               |     r3 = *(arg_10ch);
    0x00078446 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00078448 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0007844a bl 0x329e8                                        |     fcn_000329e8 (r0, r1, r2);
    0x0007844e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00078450 b 0x783f0                                         |     goto label_20;
                                                                 | label_113:
    0x00078452 movs r3, 0                                        |     r3 = 0;
    0x00078454 mov r2, r7                                        |     r2 = r7;
    0x00078456 movs r1, 0x33                                     |     r1 = 0x33;
    0x00078458 mov r0, sb                                        |     r0 = sb;
    0x0007845a str r3, [sp]                                      |     *(sp) = r3;
    0x0007845c bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00078460 mov r5, r0                                        |     r5 = r0;
    0x00078462 b 0x78116                                         |     goto label_21;
                                                                 | label_112:
    0x00078464 ldr r3, [sp, 0x10c]                               |     r3 = *(arg_10ch);
    0x00078466 adds r7, r3, r4                                   |     r7 = r3 + r4;
    0x00078468 adds r7, 1                                        |     r7++;
    0x0007846a b 0x780ea                                         |     goto label_22;
                                                                 | label_125:
    0x0007846c mov r4, r3                                        |     r4 = r3;
    0x0007846e mov r6, r3                                        |     r6 = r3;
    0x00078470 mov ip, r3                                        |     
    0x00078472 mov fp, r3                                        |     
    0x00078474 str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x00078476 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x00078478 str r3, [sp, 0x84]                                |     var_84h = r3;
                                                                 | label_69:
    0x0007847a ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0007847c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007847e beq.w 0x78aa6                                     |         goto label_136;
                                                                 |     }
    0x00078482 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00078484 ldrd r3, r8, [r3]                                 |     __asm ("ldrd r3, r8, [r3]");
    0x00078488 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007848a beq.w 0x78ab2                                     |         goto label_137;
                                                                 |     }
                                                                 | label_44:
    0x0007848e movs r2, 0                                        |     r2 = 0;
    0x00078490 mov r5, fp                                        |     r5 = fp;
    0x00078492 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00078494 mov fp, sl                                        |     
    0x00078496 ldr r2, [sp, 0x9c]                                |     r2 = var_9ch;
    0x00078498 mov sl, r8                                        |     sl = r8;
    0x0007849a strd r4, r6, [sp, 0x94]                           |     __asm ("strd r4, r6, [var_94h]");
    0x0007849e mov r4, r3                                        |     r4 = r3;
    0x000784a0 str.w ip, [sp, 0x70]                              |     __asm ("str.w ip, [var_70h]");
    0x000784a4 str r2, [sp, 0xac]                                |     var_ach = r2;
    0x000784a6 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
                                                                 |     do {
                                                                 | label_25:
    0x000784a8 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x000784aa lsl.w r8, sl, 2                                   |         r8 = sl << 2;
    0x000784ae ldr.w r3, [r3, sl, lsl 2]                         |         offset_2 = sl << 2;
                                                                 |         r3 = *((r3 + offset_2));
    0x000784b2 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000784b4 bne 0x78526                                       |             goto label_138;
                                                                 |         }
                                                                 | label_46:
    0x000784b6 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x000784b8 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000784ba beq.w 0x7872c                                     |             goto label_139;
                                                                 |         }
                                                                 | label_24:
    0x000784be ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x000784c0 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x000784c2 adds r1, 1                                        |         r1++;
    0x000784c4 cmp r3, r1                                        |         
    0x000784c6 str r1, [sp, 0x30]                                |         var_30h = r1;
                                                                 |         if (r3 <= r1) {
    0x000784c8 ble.w 0x78820                                     |             goto label_140;
                                                                 |         }
    0x000784cc ldr r0, [sp, 0x60]                                |         r0 = var_60h;
    0x000784ce ldr.w r4, [r0, r1, lsl 3]                         |         offset_3 = r1 << 3;
                                                                 |         r4 = *((r0 + offset_3));
    0x000784d2 add.w r3, r0, r1, lsl 3                           |         r3 = r0 + (r1 << 3);
    0x000784d6 ldr.w sl, [r3, 4]                                 |         sl = *((r3 + 4));
    0x000784da cmp r4, 0                                         |         
    0x000784dc bne 0x784a8                                       |         
                                                                 |     } while (r4 != 0);
                                                                 | label_26:
    0x000784de ldrd r4, r6, [sp, 0x94]                           |     __asm ("ldrd r4, r6, [var_94h]");
    0x000784e2 mov r8, sl                                        |     r8 = sl;
    0x000784e4 mov sl, fp                                        |     sl = fp;
    0x000784e6 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x000784e8 str.w r8, [sp, 0x30]                              |     __asm ("str.w r8, [var_30h]");
                                                                 | label_45:
    0x000784ec cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000784ee bne.w 0x7882e                                     |         goto label_141;
                                                                 |     }
                                                                 | label_34:
    0x000784f2 ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x000784f4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000784f6 bne.w 0x78866                                     |         goto label_142;
                                                                 |     }
                                                                 | label_35:
    0x000784fa ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x000784fe lsls r3, r3, 0x18                                 |     r3 <<= 0x18;
                                                                 |     if (r3 >= r3) {
    0x00078500 bpl.w 0x788ac                                     |         goto label_143;
                                                                 |     }
                                                                 | label_36:
    0x00078504 ldr r3, [sp, 0xa4]                                |     r3 = var_a4h;
    0x00078506 ldr r2, [sp, 0x84]                                |     r2 = var_84h;
    0x00078508 str r2, [r3]                                      |     *(r3) = r2;
                                                                 | label_119:
    0x0007850a ldr r2, [pc, 0x310]                               |     
    0x0007850c ldr r3, [pc, 0x2fc]                               |     r3 = *(0x7880c);
    0x0007850e add r2, pc                                        |     r2 = 0xf0d30;
    0x00078510 ldr r3, [r2, r3]                                  |     r3 = *(0xf0d30);
    0x00078512 ldr r2, [r3]                                      |     r2 = *(0xf0d30);
    0x00078514 ldr r3, [sp, 0xdc]                                |     r3 = var_dch;
    0x00078516 eors r2, r3                                       |     r2 ^= r3;
    0x00078518 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0007851c bne.w 0x79200                                     |         goto label_144;
                                                                 |     }
    0x00078520 add sp, 0xe4                                      |     
    0x00078522 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_138:
    0x00078526 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00078528 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007852a bne.w 0x787ac                                     |         goto label_145;
                                                                 |     }
                                                                 | label_32:
    0x0007852e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00078530 ldr r1, [r3, 0x38]                                |     r1 = *((r3 + 0x38));
    0x00078532 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x00078534 subs r1, 1                                        |     r1--;
    0x00078536 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x00078538 str r1, [r3, 0x38]                                |     *((r3 + 0x38)) = r1;
    0x0007853a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0007853c beq.w 0x789f6                                     |         goto label_146;
                                                                 |     }
                                                                 | label_39:
    0x00078540 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
                                                                 |     if (r3 != 0) {
    0x00078542 cbz r3, 0x7856e                                   |         
    0x00078544 movs r3, 0                                        |         r3 = 0;
    0x00078546 movs r2, 0                                        |         r2 = 0;
    0x00078548 str r3, [sp]                                      |         *(sp) = r3;
    0x0007854a movs r1, 0x4b                                     |         r1 = 0x4b;
    0x0007854c ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0007854e mov r0, sb                                        |         r0 = sb;
    0x00078550 ldr.w r3, [r3, r8]                                |         r3 = *((r3 + r8));
    0x00078554 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00078558 ldr r3, [sp, 0x10c]                               |         r3 = *(arg_10ch);
    0x0007855a ldr r6, [sp, 0x28]                                |         r6 = var_28h;
    0x0007855c ldr r1, [r4, 0x24]                                |         r1 = *((r4 + 0x24));
    0x0007855e mvns r3, r3                                       |         r3 = ~r3;
    0x00078560 ldr r2, [sp, 0x4c]                                |         r2 = var_4ch;
    0x00078562 str r3, [r6, 0x34]                                |         *((r6 + 0x34)) = r3;
    0x00078564 mov r0, r6                                        |         r0 = r6;
    0x00078566 bl 0x60f70                                        |         fcn_00060f70 (r0, r1, r2);
    0x0007856a movs r3, 0                                        |         r3 = 0;
    0x0007856c str r3, [r6, 0x34]                                |         *((r6 + 0x34)) = r3;
                                                                 |     }
    0x0007856e ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00078570 ldrh r3, [r4, 0x34]                               |     r3 = *((r4 + 0x34));
    0x00078572 ldr.w r2, [r2, r8]                                |     r2 = *((r2 + r8));
    0x00078576 str r2, [sp, 0x78]                                |     var_78h = r2;
    0x00078578 adds r2, 1                                        |     r2++;
    0x0007857a str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0007857c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007857e beq.w 0x78b9e                                     |         goto label_147;
                                                                 |     }
    0x00078582 str r5, [sp, 0x5c]                                |     var_5ch = r5;
    0x00078584 movs r7, 0                                        |     r7 = 0;
    0x00078586 str.w r8, [sp, 0x68]                              |     __asm ("str.w r8, [var_68h]");
    0x0007858a mov r5, r2                                        |     r5 = r2;
    0x0007858c ldr r6, [sp, 0x10c]                               |     r6 = *(arg_10ch);
    0x0007858e ldr.w r8, [sp, 0x28]                              |     r8 = var_28h;
    0x00078592 b 0x785cc                                         |     
                                                                 |     while (r2 != r1) {
    0x00078594 ldr.w r2, [fp, 0x1c]                              |         r2 = *(arg_124h);
    0x00078598 ubfx r0, r1, 0xf, 1                               |         r0 = (r1 >> 0xf) & ((1 << 1) - 1);
    0x0007859c eor r2, r2, 0x20                                  |         r2 ^= 0x20;
    0x000785a0 ubfx r2, r2, 5, 1                                 |         r2 = (r2 >> 5) & ((1 << 1) - 1);
    0x000785a4 orrs r0, r2                                       |         r0 |= r2;
                                                                 |         if (r0 == r2) {
    0x000785a6 bne 0x785b4                                       |             
    0x000785a8 mov r0, fp                                        |             r0 = fp;
    0x000785aa str r3, [sp, 0x54]                                |             var_54h = r3;
    0x000785ac bl 0xf6c8                                         |             fcn_0000f6c8 (r0, r1);
    0x000785b0 ldr r3, [sp, 0x54]                                |             r3 = var_54h;
    0x000785b2 mov r1, r0                                        |             r1 = r0;
                                                                 |         }
    0x000785b4 adds r2, r6, r1                                   |         r2 = r6 + r1;
    0x000785b6 movs r1, 0                                        |         r1 = 0;
    0x000785b8 str r1, [sp]                                      |         *(sp) = r1;
    0x000785ba adds r2, 1                                        |         r2++;
    0x000785bc movs r1, 0x51                                     |         r1 = 0x51;
    0x000785be mov r0, sb                                        |         r0 = sb;
    0x000785c0 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_27:
    0x000785c4 ldrh r3, [r4, 0x34]                               |         r3 = *((r4 + 0x34));
    0x000785c6 adds r7, 1                                        |         r7++;
    0x000785c8 cmp r3, r7                                        |         
                                                                 |         if (r3 <= r7) {
    0x000785ca ble 0x785fc                                       |             goto label_148;
                                                                 |         }
                                                                 | label_23:
    0x000785cc ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x000785ce ldrsh.w r1, [r3, r7, lsl 1]                       |         offset_4 = r7 << 1;
                                                                 |         r1 = *((r3 + offset_4));
    0x000785d2 adds r3, r5, r7                                   |         r3 = r5 + r7;
    0x000785d4 adds r2, r1, 2                                    |         r2 = r1 + 2;
                                                                 |         if (r2 == r1) {
    0x000785d6 beq.w 0x78740                                     |             goto label_149;
                                                                 |         }
    0x000785da adds r0, r1, 1                                    |         r0 = r1 + 1;
                                                                 |         if (r0 == r1) {
    0x000785dc beq 0x785e6                                       |             goto label_150;
                                                                 |         }
    0x000785de ldrsh.w r2, [fp, 0x20]                            |         r2 = *(arg_128h);
    0x000785e2 cmp r2, r1                                        |         
    0x000785e4 bne 0x78594                                       |         
                                                                 |     }
                                                                 | label_150:
    0x000785e6 movs r2, 0                                        |     r2 = 0;
    0x000785e8 movs r1, 0x52                                     |     r1 = 0x52;
    0x000785ea str r2, [sp]                                      |     *(sp) = r2;
    0x000785ec mov r0, sb                                        |     r0 = sb;
    0x000785ee mov r2, r6                                        |     r2 = r6;
    0x000785f0 adds r7, 1                                        |     r7++;
    0x000785f2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000785f6 ldrh r3, [r4, 0x34]                               |     r3 = *((r4 + 0x34));
    0x000785f8 cmp r3, r7                                        |     
                                                                 |     if (r3 > r7) {
    0x000785fa bgt 0x785cc                                       |         goto label_23;
                                                                 |     }
                                                                 | label_148:
    0x000785fc ldr.w r8, [sp, 0x68]                              |     r8 = var_68h;
    0x00078600 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00078602 ldr r5, [sp, 0x5c]                                |     r5 = var_5ch;
    0x00078604 ldr.w r2, [r2, r8]                                |     r2 = *((r2 + r8));
                                                                 | label_50:
    0x00078608 movs r1, 0x61                                     |     r1 = 0x61;
    0x0007860a str r2, [sp]                                      |     *(sp) = r2;
    0x0007860c mov r0, sb                                        |     r0 = sb;
    0x0007860e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00078610 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078614 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00078616 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00078618 ldr r1, [sp, 0x64]                                |     r1 = var_64h;
    0x0007861a subs r3, r3, r4                                   |     r3 -= r4;
    0x0007861c clz r3, r3                                        |     r3 &= r3;
    0x00078620 cmp r1, 0                                         |     
    0x00078622 ite ne                                            |     
                                                                 |     if (r1 == 0) {
    0x00078624 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x00078626 andeq r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x0007862a lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0007862c mov r8, r2                                        |     r8 = r2;
    0x0007862e ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00078630 ands.w r8, r3, r8                                 |     r8 = r3 & r8;
    0x00078634 str r3, [sp, 0x68]                                |     var_68h = r3;
    0x00078636 rsb.w r2, r2, 0                                   |     r2 -= ;
    0x0007863a str r2, [sp, 0x74]                                |     var_74h = r2;
                                                                 |     if (r8 != r3) {
    0x0007863c bne.w 0x78a1a                                     |         goto label_151;
                                                                 |     }
    0x00078640 ldrb.w r7, [r4, 0x36]                             |     r7 = *((r4 + 0x36));
    0x00078644 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00078646 beq.w 0x78a1a                                     |         goto label_151;
                                                                 |     }
    0x0007864a ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0007864c cmp r3, 0xb                                       |     
    0x0007864e it ne                                             |     
                                                                 |     if (r3 == 0xb) {
    0x00078650 movne r7, r3                                      |         r7 = r3;
                                                                 |     }
                                                                 |     if (r3 == 0xb) {
    0x00078652 beq.w 0x7875e                                     |         goto label_152;
                                                                 |     }
    0x00078656 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00078658 beq.w 0x7876a                                     |         goto label_153;
                                                                 |     }
                                                                 | label_28:
    0x0007865c ldrb r3, [r5, 0x14]                               |     r3 = *((r5 + 0x14));
    0x0007865e cmp r3, 0                                         |     
    0x00078660 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x00078662 movne r7, 6                                       |         r7 = 6;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00078664 moveq r7, 4                                       |         r7 = 4;
                                                                 |     }
                                                                 | label_29:
    0x00078666 ldr r3, [sp, 0x108]                               |     r3 = *(arg_108h);
    0x00078668 add r3, sl                                        |     r3 += sl;
    0x0007866a str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0007866c cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00078670 bne 0x7867a                                       |         
    0x00078672 ldr r3, [r4, 0x14]                                |         r3 = *((r4 + 0x14));
    0x00078674 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00078676 beq.w 0x788da                                     |             goto label_154;
                                                                 |         }
                                                                 |     }
                                                                 | label_37:
    0x0007867a ldrh r3, [r4, 0x32]                               |     r3 = *((r4 + 0x32));
    0x0007867c movs r1, 0x1a                                     |     r1 = 0x1a;
    0x0007867e ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x00078680 mov r0, sb                                        |     r0 = sb;
    0x00078682 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00078684 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00078686 str r3, [sp]                                      |     *(sp) = r3;
    0x00078688 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0007868a bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0007868e ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00078690 str r0, [sp, 0x88]                                |     var_88h = r0;
    0x00078692 cmp r3, r4                                        |     
                                                                 |     if (r3 == r4) {
    0x00078694 beq.w 0x78a38                                     |         goto label_155;
                                                                 |     }
    0x00078698 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x0007869a ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0007869c bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x000786a0 str r0, [sp, 0x54]                                |     var_54h = r0;
                                                                 | label_42:
    0x000786a2 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000786a4 orrs.w r8, r3, r8                                 |     r8 = r3 | r8;
                                                                 |     if (r8 != r3) {
    0x000786a8 bne.w 0x78916                                     |         goto label_156;
                                                                 |     }
                                                                 | label_38:
    0x000786ac cmp r7, 4                                         |     
                                                                 |     if (r7 == 4) {
    0x000786ae beq 0x7878e                                       |         goto label_157;
                                                                 |     }
                                                                 |     if (r7 > 4) {
    0x000786b0 bgt 0x78778                                       |         goto label_158;
                                                                 |     }
    0x000786b2 subs r3, r7, 1                                    |     r3 = r7 - 1;
    0x000786b4 cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x000786b6 bhi.w 0x78a3e                                     |         goto label_159;
                                                                 |     }
    0x000786ba ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000786bc mov r2, r4                                        |     r2 = r4;
    0x000786be mov r1, r7                                        |     r1 = r7;
    0x000786c0 bl 0x2ac98                                        |     fcn_0002ac98 (r0, r1, r2, r3, r4);
                                                                 | label_43:
    0x000786c4 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x000786c8 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x000786cc cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x000786ce bmi 0x787a2                                       |         goto label_160;
                                                                 |     }
                                                                 | label_30:
    0x000786d0 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000786d2 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x000786d4 ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x000786d8 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000786da rsbs r3, r3, 0                                    |     r3 -= ;
    0x000786dc str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_31:
    0x000786de ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000786e0 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000786e2 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x000786e4 beq 0x78700                                       |         
    0x000786e6 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x000786e8 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x000786ea beq.w 0x78bb4                                     |             goto label_161;
                                                                 |         }
    0x000786ee ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x000786f0 ldr r1, [sp, 0x6c]                                |         r1 = var_6ch;
    0x000786f2 ldr r3, [r2, 0x1c]                                |         r3 = *((r2 + 0x1c));
    0x000786f4 cmp r1, r3                                        |         
    0x000786f6 ittt gt                                           |         
                                                                 |         if (r1 <= r3) {
    0x000786f8 movgt r3, r2                                      |             r3 = r2;
                                                                 |         }
                                                                 |         if (r1 <= r3) {
    0x000786fa ldrgt r2, [sp, 0x54]                              |             r2 = var_54h;
                                                                 |         }
                                                                 |         if (r1 <= r3) {
    0x000786fc strdgt r1, r2, [r3, 0x1c]                         |             __asm ("strdgt r1, r2, [r3, 0x1c]");
                                                                 |             goto label_53;
                                                                 |         }
                                                                 |     }
                                                                 | label_53:
    0x00078700 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00078702 cmp r5, 0                                         |     
    0x00078704 it ne                                             |     
                                                                 |     if (r5 != 0) {
    0x00078706 cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
                                                                 |     if (r5 != 0) {
    0x00078708 beq 0x78722                                       |         
    0x0007870a ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x0007870c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0007870e beq.w 0x78b00                                     |             goto label_162;
                                                                 |         }
    0x00078712 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00078714 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00078716 beq.w 0x78b00                                     |             goto label_162;
                                                                 |         }
    0x0007871a ldr r3, [r3, 0x1c]                                |         r3 = *((r3 + 0x1c));
    0x0007871c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0007871e beq.w 0x78b00                                     |             goto label_162;
                                                                 |         }
                                                                 |     }
                                                                 | label_41:
    0x00078722 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00078724 movs r2, 1                                        |     r2 = 1;
    0x00078726 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078728 bne.w 0x784be                                     |         goto label_24;
                                                                 |     }
                                                                 | label_139:
    0x0007872c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0007872e add.w sl, sl, 1                                   |     sl++;
    0x00078732 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x00078734 mov r4, r3                                        |     r4 = r3;
    0x00078736 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00078738 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0007873a bne.w 0x784a8                                     |         goto label_25;
                                                                 |     }
    0x0007873e b 0x784de                                         |     goto label_26;
                                                                 | label_149:
    0x00078740 mov r2, r3                                        |     r2 = r3;
    0x00078742 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00078744 mov r0, r8                                        |     r0 = r8;
    0x00078746 add.w r3, r3, r7, lsl 4                           |     r3 += (r7 << 4);
    0x0007874a ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x0007874c mvns r3, r6                                       |     r3 = ~r6;
    0x0007874e str.w r3, [r8, 0x34]                              |     __asm ("str.w r3, [r8, 0x34]");
    0x00078752 bl 0x5af40                                        |     fcn_0005af40 (r0, r1, r2);
    0x00078756 movs r3, 0                                        |     r3 = 0;
    0x00078758 str.w r3, [r8, 0x34]                              |     __asm ("str.w r3, [r8, 0x34]");
    0x0007875c b 0x785c4                                         |     goto label_27;
                                                                 | label_152:
    0x0007875e cmp r7, 0xb                                       |     
    0x00078760 it eq                                             |     
                                                                 |     if (r7 != 0xb) {
    0x00078762 moveq r7, 2                                       |         r7 = 2;
                                                                 |     }
    0x00078764 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00078766 bne.w 0x7865c                                     |         goto label_28;
                                                                 |     }
                                                                 | label_153:
    0x0007876a sub.w r8, r7, 5                                   |     r8 = r7 - 5;
    0x0007876e clz r8, r8                                        |     r8 &= r8;
    0x00078772 lsr.w r8, r8, 5                                   |     r8 >>= 5;
    0x00078776 b 0x78666                                         |     goto label_29;
                                                                 | label_158:
    0x00078778 cmp r7, 6                                         |     
                                                                 |     if (r7 != 6) {
    0x0007877a bne.w 0x78a3e                                     |         goto label_159;
                                                                 |     }
    0x0007877e ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00078780 mov r2, fp                                        |     r2 = fp;
    0x00078782 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00078784 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078786 str r3, [sp]                                      |     *(sp) = r3;
    0x00078788 mov r3, r4                                        |     r3 = r4;
    0x0007878a bl 0x76d18                                        |     fcn_00076d18 (r0, r1, r2, r3, r4, r5);
                                                                 | label_157:
    0x0007878e mov r0, sb                                        |     r0 = sb;
    0x00078790 ldr r1, [sp, 0x11c]                               |     r1 = *(arg_11ch);
    0x00078792 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00078796 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x0007879a ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x0007879e cmn r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x000787a0 bpl 0x786d0                                       |         goto label_30;
                                                                 |     }
                                                                 | label_160:
    0x000787a2 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x000787a4 mov r1, sb                                        |     r1 = sb;
    0x000787a6 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x000787aa b 0x786de                                         |     goto label_31;
                                                                 | label_145:
    0x000787ac ldr r5, [sp, 0x40]                                |     r5 = var_40h;
    0x000787ae b 0x787be                                         |     goto label_163;
                                                                 | label_33:
    0x000787b0 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x000787b2 cmp r3, r4                                        |     
                                                                 |     if (r3 == r4) {
    0x000787b4 beq 0x787c4                                       |         goto label_164;
                                                                 |     }
    0x000787b6 ldr r5, [r5, 0x10]                                |     r5 = *((r5 + 0x10));
    0x000787b8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000787ba beq.w 0x7852e                                     |         goto label_32;
                                                                 |     }
                                                                 | label_163:
    0x000787be ldr r3, [r5]                                      |     r3 = *(r5);
    0x000787c0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000787c2 bne 0x787b0                                       |         goto label_33;
                                                                 |     }
                                                                 | label_164:
    0x000787c4 ldr r0, [sp, 0x7c]                                |     r0 = var_7ch;
    0x000787c6 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x000787c8 subs r3, r0, 0                                    |     r3 = r0 - 0;
    0x000787ca it ne                                             |     
                                                                 |     if (r3 == r0) {
    0x000787cc movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000787ce cmp r1, r5                                        |     
    0x000787d0 it ne                                             |     
                                                                 |     if (r1 == r5) {
    0x000787d2 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000787d4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000787d6 beq.w 0x7852e                                     |         goto label_32;
                                                                 |     }
    0x000787da cmp r0, 0                                         |     
    0x000787dc ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x000787e0 ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x000787e4 it ge                                             |     
                                                                 |     if (r0 < 0) {
    0x000787e6 ldrge r3, [sp, 0x7c]                              |         r3 = var_7ch;
                                                                 |     }
    0x000787e8 ldrb.w r0, [r0, 0x57]                             |     r0 = *((r0 + 0x57));
    0x000787ec it lt                                             |     
                                                                 |     if (r0 >= 0) {
    0x000787ee addlt r3, r1, -1                                  |         r3 = r1 + -1;
                                                                 |     }
    0x000787f2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000787f4 bne.w 0x78baa                                     |         goto label_165;
                                                                 |     }
    0x000787f8 add.w r0, r3, r3, lsl 2                           |     r0 = r3 + (r3 << 2);
    0x000787fc ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00078800 add.w r3, r3, r0, lsl 2                           |     r3 += (r0 << 2);
                                                                 | label_52:
    0x00078804 str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
    0x00078806 b 0x7852e                                         |     goto label_32;
                                                                 | label_140:
    0x00078820 ldrd r4, r6, [sp, 0x94]                           |     __asm ("ldrd r4, r6, [var_94h]");
    0x00078824 mov sl, fp                                        |     sl = fp;
    0x00078826 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00078828 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0007882a beq.w 0x784f2                                     |         goto label_34;
                                                                 |     }
                                                                 | label_141:
    0x0007882e mov r1, r6                                        |     r1 = r6;
    0x00078830 mov r0, sb                                        |     r0 = sb;
    0x00078832 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00078836 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0007883a cmp r4, 0                                         |     
    0x0007883c ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
    0x00078840 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00078844 it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00078846 addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x0007884a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007884c bne.w 0x78c42                                     |         goto label_166;
                                                                 |     }
    0x00078850 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00078854 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00078858 add.w r3, r3, r4, lsl 2                           |     r3 += (r4 << 2);
                                                                 | label_59:
    0x0007885c str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0007885e ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00078860 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00078862 beq.w 0x784fa                                     |         goto label_35;
                                                                 |     }
                                                                 | label_142:
    0x00078866 movs r3, 0                                        |     r3 = 0;
    0x00078868 ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x0007886a str r3, [sp]                                      |     *(sp) = r3;
    0x0007886c movs r1, 0x10                                     |     r1 = 0x10;
    0x0007886e ldr r3, [sp, 0xac]                                |     r3 = var_ach;
    0x00078870 mov r0, sb                                        |     r0 = sb;
    0x00078872 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078876 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00078878 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007887a beq.w 0x78c4c                                     |         goto label_167;
                                                                 |     }
    0x0007887e ldr r1, [sp, 0x9c]                                |     r1 = var_9ch;
    0x00078880 mov r0, sb                                        |     r0 = sb;
    0x00078882 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
                                                                 | label_60:
    0x00078886 ldr r3, [sp, 0xac]                                |     r3 = var_ach;
    0x00078888 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x0007888c mvns r2, r3                                       |     r2 = ~r3;
    0x0007888e ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00078892 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00078894 bmi.w 0x79092                                     |         goto label_168;
                                                                 |     }
    0x00078898 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x0007889a ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x0007889e str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x000788a2 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x000788a6 lsls r3, r3, 0x18                                 |     r3 <<= 0x18;
                                                                 |     if (r3 < r3) {
    0x000788a8 bmi.w 0x78504                                     |         goto label_36;
                                                                 |     }
                                                                 | label_143:
    0x000788ac ldrd r2, r3, [sp, 0x30]                           |     __asm ("ldrd r2, r3, [var_34h]");
    0x000788b0 movs r1, 0x61                                     |     r1 = 0x61;
    0x000788b2 mov r0, sb                                        |     r0 = sb;
    0x000788b4 ldr.w r3, [r3, r2, lsl 2]                         |     offset_5 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_5));
    0x000788b8 str r3, [sp]                                      |     *(sp) = r3;
    0x000788ba ldr r3, [sp, 0x10c]                               |     r3 = *(arg_10ch);
    0x000788bc adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000788be ldrsh.w r3, [sl, 0x24]                            |     r3 = *((sl + 0x24));
    0x000788c2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000788c6 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000788c8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000788ca bne.w 0x78504                                     |         goto label_36;
                                                                 |     }
    0x000788ce mov r2, r3                                        |     r2 = r3;
    0x000788d0 mov r1, sl                                        |     r1 = sl;
    0x000788d2 mov r0, sb                                        |     r0 = sb;
    0x000788d4 bl 0x329e8                                        |     fcn_000329e8 (r0, r1, r2);
    0x000788d8 b 0x78504                                         |     goto label_36;
                                                                 | label_154:
    0x000788da ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x000788dc tst.w r3, r8                                      |     
                                                                 |     if ((r3 & r8) == 0) {
    0x000788e0 beq.w 0x7867a                                     |         goto label_37;
                                                                 |     }
    0x000788e4 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000788e6 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x000788e8 lsls r1, r2, 0x12                                 |     r1 = r2 << 0x12;
                                                                 |     if (r1 < r2) {
    0x000788ea bmi.w 0x78ccc                                     |         goto label_169;
                                                                 |     }
                                                                 | label_62:
    0x000788ee lsls r2, r2, 0x11                                 |     r2 <<= 0x11;
                                                                 |     if (r2 >= r2) {
    0x000788f0 bpl.w 0x78a1a                                     |         goto label_151;
                                                                 |     }
    0x000788f4 ldr.w r2, [fp, 0x30]                              |     r2 = *(arg_30h);
    0x000788f8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000788fa beq.w 0x78a04                                     |         goto label_170;
                                                                 |     }
                                                                 | label_40:
    0x000788fe ldrh r3, [r4, 0x32]                               |     r3 = *((r4 + 0x32));
    0x00078900 movs r1, 0x1a                                     |     r1 = 0x1a;
    0x00078902 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00078904 mov r0, sb                                        |     r0 = sb;
    0x00078906 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x00078908 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0007890a str r6, [sp]                                      |     *(sp) = r6;
    0x0007890c ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0007890e bl 0x2a744                                        |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x00078912 str r6, [sp, 0x54]                                |     var_54h = r6;
    0x00078914 str r0, [sp, 0x88]                                |     var_88h = r0;
                                                                 | label_156:
    0x00078916 ldr.w r3, [fp, 0x1c]                              |     r3 = *(arg_124h);
    0x0007891a ands r3, r3, 0x80                                 |     r3 &= 0x80;
                                                                 |     if (r3 == r3) {
    0x0007891e beq.w 0x78abc                                     |         goto label_171;
                                                                 |     }
    0x00078922 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00078924 cmp r3, r4                                        |     
                                                                 |     if (r3 != r4) {
    0x00078926 bne.w 0x78b40                                     |         goto label_172;
                                                                 |     }
                                                                 | label_47:
    0x0007892a ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x0007892c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007892e beq.w 0x786ac                                     |         goto label_38;
                                                                 |     }
    0x00078932 ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x00078934 ldrb.w r3, [r4, 0x37]                             |     r3 = *((r4 + 0x37));
    0x00078938 ldr r0, [sp, 0x54]                                |     r0 = var_54h;
    0x0007893a ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x0007893c and r3, r3, 3                                     |     r3 &= 3;
    0x00078940 ldrh r2, [r1, 0x32]                               |     r2 = *((r1 + 0x32));
    0x00078942 cmp r3, 2                                         |     
    0x00078944 it eq                                             |     
                                                                 |     if (r3 != 2) {
    0x00078946 moveq r0, r6                                      |         r0 = r6;
                                                                 |     }
    0x00078948 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x0007894c str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x0007894e adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x00078950 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00078952 beq.w 0x786ac                                     |         goto label_38;
                                                                 |     }
    0x00078956 ldr r2, [sp, 0x110]                               |     r2 = *(arg_110h);
    0x00078958 movs r6, 0x34                                     |     r6 = 0x34;
    0x0007895a strd sl, r4, [sp, 0xb8]                           |     __asm ("strd sl, r4, [var_b8h]");
    0x0007895e mov.w r8, 0                                       |     r8 = 0;
    0x00078962 strd r7, r5, [sp, 0xb0]                           |     __asm ("strd r7, r5, [var_b0h]");
    0x00078966 mov r4, r1                                        |     r4 = r1;
    0x00078968 adds r2, 1                                        |     r2++;
    0x0007896a mov r5, r3                                        |     r5 = r3;
    0x0007896c mov sl, r2                                        |     sl = r2;
                                                                 |     do {
    0x0007896e ldr r3, [r4, 0x20]                                |         r3 = *((r4 + 0x20));
    0x00078970 ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x00078972 ldr.w r1, [r3, r8, lsl 2]                         |         offset_6 = r8 << 2;
                                                                 |         r1 = *((r3 + offset_6));
    0x00078976 bl 0x27ce0                                        |         fcn_00027ce0 (r0, r1);
    0x0007897a ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0007897c mov r7, r0                                        |         r7 = r0;
    0x0007897e ldrsh.w r1, [r3, r8, lsl 1]                       |         offset_7 = r8 << 1;
                                                                 |         r1 = *((r3 + offset_7));
    0x00078982 ldrh r3, [r4, 0x32]                               |         r3 = *((r4 + 0x32));
    0x00078984 subs r3, 1                                        |         r3--;
    0x00078986 cmp r3, r8                                        |         
    0x00078988 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x0007898a itt eq                                            |         
                                                                 |         if (r3 != r8) {
    0x0007898c moveq r6, 0x35                                    |             r6 = 0x35;
                                                                 |         }
                                                                 |         if (r3 != r8) {
    0x0007898e moveq r5, r3                                      |             r5 = r3;
                                                                 |         }
    0x00078990 ldr.w r3, [fp, 0x1c]                              |         r3 = *(arg_124h);
    0x00078994 eor r3, r3, 0x20                                  |         r3 ^= 0x20;
    0x00078998 ubfx r3, r3, 5, 1                                 |         r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x0007899c orrs.w r3, r3, r1, lsr 31                         |         r3 |= (r1 >> 31);
                                                                 |         if (r3 == r3) {
    0x000789a0 bne 0x789aa                                       |             
    0x000789a2 mov r0, fp                                        |             r0 = fp;
    0x000789a4 bl 0xf6c8                                         |             r0 = fcn_0000f6c8 (r0, r1);
    0x000789a8 mov r1, r0                                        |             r1 = r0;
                                                                 |         }
    0x000789aa mvn r3, 1                                         |         r3 = ~1;
    0x000789ae add.w r2, r1, sl                                  |         r2 = r1 + sl;
    0x000789b2 str r3, [sp, 8]                                   |         var_8h = r3;
    0x000789b4 mov r1, r6                                        |         r1 = r6;
    0x000789b6 ldr r3, [sp, 0xa8]                                |         r3 = var_a8h;
    0x000789b8 mov r0, sb                                        |         r0 = sb;
    0x000789ba str r7, [sp, 4]                                   |         var_4h = r7;
    0x000789bc add r3, r8                                        |         r3 += r8;
    0x000789be str r3, [sp]                                      |         *(sp) = r3;
    0x000789c0 mov r3, r5                                        |         r3 = r5;
    0x000789c2 bl 0x2a324                                        |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x000789c6 ldr.w r3, [sb, 0x6c]                              |         r3 = *((sb + 0x6c));
    0x000789ca cmp r3, 0                                         |         
                                                                 |         if (r3 > 0) {
    0x000789cc ble 0x789e2                                       |             
    0x000789ce ldr.w r2, [sb, 0x68]                              |             r2 = *((sb + 0x68));
    0x000789d2 add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x000789d6 add.w r2, r2, r3, lsl 2                           |             r2 += (r3 << 2);
    0x000789da mov.w r3, 0x90                                    |             r3 = 0x90;
    0x000789de strh r3, [r2, -0x12]                              |             *((r2 - 0x12)) = r3;
                                                                 |         }
    0x000789e2 ldrh r3, [r4, 0x32]                               |         r3 = *((r4 + 0x32));
    0x000789e4 add.w r8, r8, 1                                   |         r8++;
    0x000789e8 cmp r3, r8                                        |         
    0x000789ea bgt 0x7896e                                       |         
                                                                 |     } while (r3 > r8);
    0x000789ec ldrd r7, r5, [sp, 0xb0]                           |     __asm ("ldrd r7, r5, [var_b0h]");
    0x000789f0 ldrd sl, r4, [sp, 0xb8]                           |     __asm ("ldrd sl, r4, [var_b8h]");
    0x000789f4 b 0x786ac                                         |     goto label_38;
                                                                 | label_146:
    0x000789f6 ldr r3, [sp, 0x10c]                               |     r3 = *(arg_10ch);
    0x000789f8 mov r1, fp                                        |     r1 = fp;
    0x000789fa mov r0, sb                                        |     r0 = sb;
    0x000789fc adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000789fe bl 0x329e8                                        |     fcn_000329e8 (r0, r1, r2);
    0x00078a02 b 0x78540                                         |     goto label_39;
                                                                 | label_170:
    0x00078a04 ldr.w r0, [fp, 0x3c]                              |     r0 = *(arg_3ch);
    0x00078a08 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x00078a0c adds r0, 0x38                                     |     r0 += 0x38;
    0x00078a0e bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x00078a12 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00078a14 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078a16 bne.w 0x788fe                                     |         goto label_40;
                                                                 |     }
                                                                 | label_151:
    0x00078a1a ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x00078a1e ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00078a22 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00078a24 bmi.w 0x78bd2                                     |         goto label_173;
                                                                 |     }
    0x00078a28 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00078a2a ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00078a2c ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x00078a30 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00078a32 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00078a34 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
    0x00078a36 b 0x78722                                         |     goto label_41;
                                                                 | label_155:
    0x00078a38 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00078a3a str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00078a3c b 0x786a2                                         |     goto label_42;
                                                                 | label_159:
    0x00078a3e ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x00078a42 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00078a44 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
                                                                 |     if (r3 != 0) {
    0x00078a46 cbz r3, 0x78a5c                                   |         
    0x00078a48 ldr r3, [sp, 0x8c]                                |         r3 = var_8ch;
    0x00078a4a ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00078a4c adds r3, 1                                        |         r3++;
    0x00078a4e str r3, [sp, 0x8c]                                |         var_8ch = r3;
    0x00078a50 ldr r3, [r2, 0x74]                                |         r3 = *((r2 + 0x74));
    0x00078a52 cmp r3, 0                                         |         
    0x00078a54 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x00078a56 moveq r3, r2                                      |             r3 = r2;
                                                                 |         }
    0x00078a58 movs r2, 1                                        |         r2 = 1;
    0x00078a5a strb r2, [r3, 0x14]                               |         *((r3 + 0x14)) = r2;
                                                                 |     }
    0x00078a5c ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00078a5e ldr r2, [sp, 0xa0]                                |     r2 = var_a0h;
    0x00078a60 ldrsh.w r7, [sp, 0x6c]                            |     r7 = var_6ch;
    0x00078a64 cmp r2, 0                                         |     
    0x00078a66 ite eq                                            |     
                                                                 |     if (r2 != 0) {
    0x00078a68 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x00078a6a andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00078a6e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078a70 bne.w 0x78d1a                                     |         goto label_174;
                                                                 |     }
    0x00078a74 strd r7, r3, [sp, 8]                              |     __asm ("strd r7, r3, [var_8h]");
    0x00078a78 mov r1, fp                                        |     r1 = fp;
    0x00078a7a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00078a7c ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x00078a7e ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078a80 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00078a82 ldr r3, [sp, 0x108]                               |     r3 = *(arg_108h);
    0x00078a84 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00078a86 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x00078a88 str r3, [sp]                                      |     *(sp) = r3;
    0x00078a8a movs r3, 5                                        |     r3 = 5;
    0x00078a8c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00078a8e str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00078a90 ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x00078a92 ldr r2, [sp, 0xa0]                                |     r2 = var_a0h;
    0x00078a94 bl 0x779bc                                        |     fcn_000779bc (r0, r1, r2, r3, r4, r5, r6);
                                                                 | label_65:
    0x00078a98 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x00078a9a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078a9c bne.w 0x78f3c                                     |         goto label_175;
                                                                 |     }
    0x00078aa0 movs r3, 1                                        |     r3 = 1;
    0x00078aa2 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00078aa4 b 0x786c4                                         |     goto label_43;
                                                                 | label_136:
    0x00078aa6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00078aa8 ldr.w r8, [sp, 0x44]                              |     r8 = var_44h;
    0x00078aac cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078aae bne.w 0x7848e                                     |         goto label_44;
                                                                 |     }
                                                                 | label_137:
    0x00078ab2 ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x00078ab4 str.w r8, [sp, 0x30]                              |     __asm ("str.w r8, [var_30h]");
    0x00078ab8 str r3, [sp, 0xac]                                |     var_ach = r3;
    0x00078aba b 0x784ec                                         |     goto label_45;
                                                                 | label_171:
    0x00078abc str r3, [sp]                                      |     *(sp) = r3;
    0x00078abe movs r1, 0x8e                                     |     r1 = 0x8e;
    0x00078ac0 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00078ac2 mov r0, sb                                        |     r0 = sb;
    0x00078ac4 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x00078ac6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078aca ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078acc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00078ace beq.w 0x786ac                                     |         goto label_38;
                                                                 |     }
    0x00078ad2 ldr r2, [sp, 0x110]                               |     r2 = *(arg_110h);
    0x00078ad4 movs r1, 0x35                                     |     r1 = 0x35;
    0x00078ad6 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00078ad8 mov r0, sb                                        |     r0 = sb;
    0x00078ada str r2, [sp]                                      |     *(sp) = r2;
    0x00078adc ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x00078ade bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078ae2 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x00078ae6 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00078ae8 ble.w 0x786ac                                     |         goto label_38;
                                                                 |     }
    0x00078aec ldr.w r2, [sb, 0x68]                              |     r2 = *((sb + 0x68));
    0x00078af0 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00078af4 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x00078af8 movs r3, 0x90                                     |     r3 = 0x90;
    0x00078afa strh r3, [r2, -0x12]                              |     *((r2 - 0x12)) = r3;
    0x00078afc subs r4, 0x12                                     |     r4 -= 0x12;
    0x00078afe b 0x786ac                                         |     goto label_38;
                                                                 | label_162:
    0x00078b00 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x00078b02 mov r0, sb                                        |     r0 = sb;
    0x00078b04 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00078b06 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00078b0a ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00078b0c ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
    0x00078b10 cmp r3, 0                                         |     
    0x00078b12 itt lt                                            |     
                                                                 |     if (r3 >= 0) {
    0x00078b14 addlt r3, r2, -1                                  |         r3 = r2 + -1;
                                                                 |     }
                                                                 |     if (r3 < 0) {
    0x00078b18 str r3, [sp, 0x70]                                |         var_70h = r3;
                                                                 |     }
    0x00078b1a ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00078b1e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00078b22 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078b24 bne.w 0x78c2a                                     |         goto label_176;
                                                                 |     }
    0x00078b28 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00078b2a add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x00078b2e ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00078b32 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 | label_57:
    0x00078b36 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00078b38 movs r3, 0                                        |     r3 = 0;
    0x00078b3a movs r2, 1                                        |     r2 = 1;
    0x00078b3c str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00078b3e b 0x784b6                                         |     goto label_46;
                                                                 | label_172:
    0x00078b40 ldr r6, [sp, 0x48]                                |     r6 = var_48h;
    0x00078b42 ldrh r3, [r6, 0x32]                               |     r3 = *((r6 + 0x32));
    0x00078b44 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00078b46 beq.w 0x7892a                                     |         goto label_47;
                                                                 |     }
    0x00078b4a str r7, [sp, 0xa8]                                |     var_a8h = r7;
    0x00078b4c mov.w r8, 0                                       |     r8 = 0;
    0x00078b50 str r5, [sp, 0xb0]                                |     var_b0h = r5;
    0x00078b52 ldr r7, [sp, 0x54]                                |     r7 = var_54h;
    0x00078b54 ldr r5, [sp, 0x5c]                                |     r5 = var_5ch;
                                                                 | label_48:
    0x00078b56 ldrh r0, [r4, 0x34]                               |     r0 = *((r4 + 0x34));
    0x00078b58 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00078b5a ldrsh.w ip, [r3, r8, lsl 1]                       |     offset_8 = r8 << 1;
                                                                 |     ip = *((r3 + offset_8));
                                                                 |     if (r0 == 0) {
    0x00078b5e cbz r0, 0x78b98                                   |         goto label_177;
                                                                 |     }
    0x00078b60 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00078b62 movs r3, 0                                        |     r3 = 0;
    0x00078b64 subs r2, 2                                        |     r2 -= 2;
    0x00078b66 b 0x78b6e                                         |     
                                                                 |     while (r1 != ip) {
    0x00078b68 adds r3, 1                                        |         r3++;
    0x00078b6a cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00078b6c beq 0x78b98                                       |             goto label_177;
                                                                 |         }
    0x00078b6e ldrsh r1, [r2, 2]!                                |         r1 = *((r2 += 2));
    0x00078b72 cmp r1, ip                                        |         
    0x00078b74 bne 0x78b68                                       |         
                                                                 |     }
    0x00078b76 sxth r3, r3                                       |     __asm ("sxth r3, r3");
                                                                 | label_49:
    0x00078b78 add.w r2, r7, r8                                  |     r2 = r7 + r8;
    0x00078b7c str r2, [sp]                                      |     *(sp) = r2;
    0x00078b7e movs r1, 0x5e                                     |     r1 = 0x5e;
    0x00078b80 mov r2, r5                                        |     r2 = r5;
    0x00078b82 mov r0, sb                                        |     r0 = sb;
    0x00078b84 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078b88 ldrh r3, [r6, 0x32]                               |     r3 = *((r6 + 0x32));
    0x00078b8a add.w r8, r8, 1                                   |     r8++;
    0x00078b8e cmp r3, r8                                        |     
                                                                 |     if (r3 > r8) {
    0x00078b90 bgt 0x78b56                                       |         goto label_48;
                                                                 |     }
    0x00078b92 ldr r7, [sp, 0xa8]                                |     r7 = var_a8h;
    0x00078b94 ldr r5, [sp, 0xb0]                                |     r5 = var_b0h;
    0x00078b96 b 0x7892a                                         |     goto label_47;
                                                                 | label_177:
    0x00078b98 mov.w r3, -1                                      |     r3 = -1;
    0x00078b9c b 0x78b78                                         |     goto label_49;
                                                                 | label_147:
    0x00078b9e ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x00078ba0 b 0x78608                                         |     goto label_50;
                                                                 | label_90:
    0x00078ba2 str.w fp, [sp, 0x2c]                              |     __asm ("str.w fp, [var_2ch]");
    0x00078ba6 b.w 0x781c6                                       |     goto label_51;
                                                                 | label_165:
    0x00078baa ldr.w r3, [pc, 0x664]                             |     r3 = *(0x00079210);
    0x00078bae add r3, pc                                        |     r3 += pc;
    0x00078bb0 adds r3, 4                                        |     r3 += 4;
    0x00078bb2 b 0x78804                                         |     goto label_52;
                                                                 | label_161:
    0x00078bb4 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x00078bb6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00078bb8 beq.w 0x78700                                     |         goto label_53;
                                                                 |     }
    0x00078bbc ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078bbe ldrb r3, [r0, 0x13]                               |     r3 = *((r0 + 0x13));
    0x00078bc0 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00078bc2 bhi.w 0x78700                                     |         goto label_53;
                                                                 |     }
    0x00078bc6 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00078bc8 adds r3, 0x26                                     |     r3 += 0x26;
    0x00078bca strb r2, [r0, 0x13]                               |     *((r0 + 0x13)) = r2;
    0x00078bcc str.w r1, [r0, r3, lsl 2]                         |     __asm ("str.w r1, [r0, r3, lsl 2]");
    0x00078bd0 b 0x78700                                         |     goto label_53;
                                                                 | label_173:
    0x00078bd2 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x00078bd4 mov r1, sb                                        |     r1 = sb;
    0x00078bd6 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00078bda b 0x78722                                         |     goto label_41;
                                                                 | label_100:
    0x00078bdc ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00078bde ldr r2, [r2]                                      |     r2 = *(r2);
    0x00078be0 ldr r2, [r2, 0x20]                                |     r2 = *((r2 + 0x20));
    0x00078be2 and r2, r2, 0x4000                                |     r2 &= 0x4000;
    0x00078be6 orrs r2, r3                                       |     r2 |= r3;
                                                                 |     if (r2 == r3) {
    0x00078be8 beq.w 0x782b6                                     |         goto label_54;
                                                                 |     }
                                                                 | label_64:
    0x00078bec ldrb.w r2, [sl, 0x2b]                             |     r2 = *((sl + 0x2b));
    0x00078bf0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00078bf2 bne.w 0x782b6                                     |         goto label_54;
                                                                 |     }
    0x00078bf6 ldr.w r0, [sl, 0x3c]                              |     r0 = *((sl + 0x3c));
    0x00078bfa ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00078bfe adds r0, 0x38                                     |     r0 += 0x38;
    0x00078c00 bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x00078c04 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00078c06 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00078c08 beq.w 0x790f2                                     |         goto label_178;
                                                                 |     }
                                                                 | label_76:
    0x00078c0c movs r3, 0                                        |     r3 = 0;
    0x00078c0e str r3, [sp, 0xa0]                                |     var_a0h = r3;
    0x00078c10 b.w 0x77f06                                       |     goto label_55;
                                                                 | label_116:
    0x00078c14 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00078c16 ldrb r3, [r3, 0x14]                               |     r3 = *((r3 + 0x14));
    0x00078c18 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078c1a bne 0x78cc0                                       |         goto label_179;
                                                                 |     }
    0x00078c1c mov r3, r2                                        |     r3 = r2;
    0x00078c1e str r2, [sp, 0x40]                                |     var_40h = r2;
    0x00078c20 movs r2, 4                                        |     r2 = 4;
    0x00078c22 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00078c24 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00078c26 b.w 0x77ec6                                       |     goto label_56;
                                                                 | label_176:
    0x00078c2a ldr.w r3, [pc, 0x5e8]                             |     r3 = *(0x00079214);
    0x00078c2e add r3, pc                                        |     r3 += pc;
    0x00078c30 adds r3, 4                                        |     r3 += 4;
    0x00078c32 b 0x78b36                                         |     goto label_57;
                                                                 | label_118:
    0x00078c34 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00078c36 mov r0, r4                                        |     r0 = r4;
    0x00078c38 bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x00078c3c str r0, [sp, 0x60]                                |     var_60h = r0;
    0x00078c3e b.w 0x78208                                       |     goto label_58;
                                                                 | label_166:
    0x00078c42 ldr.w r3, [pc, 0x5d4]                             |     r3 = *(0x00079218);
    0x00078c46 add r3, pc                                        |     r3 += pc;
    0x00078c48 adds r3, 4                                        |     r3 += 4;
    0x00078c4a b 0x7885c                                         |     goto label_59;
                                                                 | label_167:
    0x00078c4c ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078c4e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078c50 bne.w 0x7910a                                     |         goto label_180;
                                                                 |     }
                                                                 | label_78:
    0x00078c54 ldr r1, [sp, 0x10c]                               |     r1 = *(arg_10ch);
    0x00078c56 mov r0, sb                                        |     r0 = sb;
    0x00078c58 ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x00078c5a ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x00078c5c str r1, [sp]                                      |     *(sp) = r1;
    0x00078c5e movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00078c60 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078c64 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078c66 mov r2, sl                                        |     r2 = sl;
    0x00078c68 movs r1, 2                                        |     r1 = 2;
    0x00078c6a bl 0x2adc0                                        |     fcn_0002adc0 (r0, r1, r2);
    0x00078c6e b 0x78886                                         |     goto label_60;
                                                                 | label_130:
    0x00078c70 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00078c72 cmp r2, fp                                        |     
    0x00078c74 it ne                                             |     
                                                                 |     if (r2 != fp) {
    0x00078c76 movne r4, 4                                       |         r4 = 4;
                                                                 |         goto label_181;
                                                                 |     }
                                                                 |     if (r2 != fp) {
                                                                 | label_181:
    0x00078c78 bne.w 0x78322                                     |         goto label_61;
                                                                 |     }
    0x00078c7c ldr r2, [sp, 0x110]                               |     r2 = *(arg_110h);
    0x00078c7e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00078c80 bne.w 0x78eee                                     |         goto label_182;
                                                                 |     }
    0x00078c84 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00078c86 mov r3, r5                                        |     r3 = r5;
    0x00078c88 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00078c8a mov r0, sb                                        |     r0 = sb;
    0x00078c8c str r2, [sp]                                      |     *(sp) = r2;
    0x00078c8e ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x00078c90 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078c94 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078c96 mov r6, r3                                        |     r6 = r3;
    0x00078c98 str r3, [sp, 0x7c]                                |     var_7ch = r3;
                                                                 | label_70:
    0x00078c9a movs r3, 0                                        |     r3 = 0;
    0x00078c9c mov r0, sb                                        |     r0 = sb;
    0x00078c9e ldr r1, [sp, 0x11c]                               |     r1 = *(arg_11ch);
    0x00078ca0 str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x00078ca2 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00078ca4 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00078ca8 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x00078cac ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00078cb0 cmn r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00078cb2 bpl.w 0x78dfe                                     |         goto label_183;
                                                                 |     }
                                                                 | label_68:
    0x00078cb6 rsbs r2, r7, 0                                    |     r2 = r7 - ;
    0x00078cb8 mov r1, sb                                        |     r1 = sb;
    0x00078cba bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00078cbe b 0x78e0a                                         |     goto label_184;
                                                                 | label_179:
    0x00078cc0 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00078cc2 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00078cc4 movs r3, 6                                        |     r3 = 6;
    0x00078cc6 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00078cc8 b.w 0x77ec6                                       |     goto label_56;
                                                                 | label_169:
    0x00078ccc ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x00078cd0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00078cd2 beq.w 0x79166                                     |         goto label_185;
                                                                 |     }
                                                                 | label_80:
    0x00078cd6 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078cd8 ldrb.w r3, [r0, 0x97]                             |     r3 = *((r0 + 0x97));
    0x00078cdc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078cde bne.w 0x788ee                                     |         goto label_62;
                                                                 |     }
    0x00078ce2 movs r2, 0x80                                     |     r2 = 0x80;
    0x00078ce4 mov r1, fp                                        |     r1 = fp;
    0x00078ce6 str r3, [sp]                                      |     *(sp) = r3;
    0x00078ce8 bl 0x2042c                                        |     r0 = fcn_0002042c (r0, r1, r2, r3);
    0x00078cec cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00078cee bne.w 0x788fe                                     |         goto label_40;
                                                                 |     }
    0x00078cf2 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00078cf4 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x00078cf6 b 0x788ee                                         |     goto label_62;
                                                                 | label_101:
    0x00078cf8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00078cfa ldr r3, [r3]                                      |     r3 = *(r3);
    0x00078cfc ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x00078cfe ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
                                                                 |     if (r2 == 0) {
    0x00078d00 cbz r2, 0x78d10                                   |         goto label_186;
                                                                 |     }
    0x00078d02 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x00078d04 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00078d06 bne.w 0x77ee6                                     |         goto label_63;
                                                                 |     }
    0x00078d0a b 0x78d10                                         |     goto label_186;
                                                                 | label_102:
    0x00078d0c ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00078d0e ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 | label_186:
    0x00078d10 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00078d12 lsls r3, r3, 0x11                                 |     r3 <<= 0x11;
                                                                 |     if (r3 >= r3) {
    0x00078d14 bpl.w 0x782b6                                     |         goto label_54;
                                                                 |     }
    0x00078d18 b 0x78bec                                         |     goto label_64;
                                                                 | label_174:
    0x00078d1a ldr r6, [sp, 0x90]                                |     r6 = var_90h;
    0x00078d1c mov.w r8, 0                                       |     r8 = 0;
    0x00078d20 mov r3, r8                                        |     r3 = r8;
    0x00078d22 movs r1, 0xa7                                     |     r1 = 0xa7;
    0x00078d24 mov r0, sb                                        |     r0 = sb;
    0x00078d26 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00078d2a mov r2, r6                                        |     r2 = r6;
    0x00078d2c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078d30 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00078d32 mov r1, fp                                        |     r1 = fp;
    0x00078d34 ldr r2, [sp, 0xa0]                                |     r2 = var_a0h;
    0x00078d36 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078d38 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00078d3a ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00078d3c strd r7, r8, [sp, 8]                              |     __asm ("strd r7, r8, [var_8h]");
    0x00078d40 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00078d42 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00078d44 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00078d46 ldr r3, [sp, 0x108]                               |     r3 = *(arg_108h);
    0x00078d48 str r3, [sp]                                      |     *(sp) = r3;
    0x00078d4a movs r3, 5                                        |     r3 = 5;
    0x00078d4c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00078d4e mov r3, r6                                        |     r3 = r6;
    0x00078d50 bl 0x779bc                                        |     fcn_000779bc (r0, r1, r2, r3, r4, r5, r6);
    0x00078d54 mov r3, r8                                        |     r3 = r8;
    0x00078d56 mov r2, r6                                        |     r2 = r6;
    0x00078d58 movs r1, 0xa8                                     |     r1 = 0xa8;
    0x00078d5a mov r0, sb                                        |     r0 = sb;
    0x00078d5c str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00078d60 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078d64 b 0x78a98                                         |     goto label_65;
                                                                 | label_133:
    0x00078d66 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078d68 movs r6, 0                                        |     r6 = 0;
    0x00078d6a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078d6c bne.w 0x78ef4                                     |         goto label_77;
                                                                 |     }
    0x00078d70 ldr r6, [sp, 0x110]                               |     r6 = *(arg_110h);
                                                                 | label_72:
    0x00078d72 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00078d74 mov r3, r5                                        |     r3 = r5;
    0x00078d76 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00078d78 mov r0, sb                                        |     r0 = sb;
    0x00078d7a str r2, [sp]                                      |     *(sp) = r2;
    0x00078d7c ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x00078d7e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078d82 subs r3, r4, 1                                    |     r3 = r4 - 1;
    0x00078d84 cmp r3, 5                                         |     
                                                                 |     if (r3 > 5) {
    0x00078d86 bhi.w 0x79204                                     |         goto label_187;
                                                                 |     }
    0x00078d8a adr r2, 8                                         |     r2 = 8;
    0x00078d8c ldr.w r3, [r2, r3, lsl 2]                         |     offset_9 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_9));
    0x00078d90 add r2, r3                                        |     r2 += r3;
    0x00078d92 bx r2                                             |     return uint32_t (*r2)() ();
                                                                 | label_126:
    0x00078dac cmp r3, 0xb                                       |     
    0x00078dae mov r4, r3                                        |     r4 = r3;
                                                                 |     if (r3 != 0xb) {
    0x00078db0 bne.w 0x782ea                                     |         goto label_66;
                                                                 |     }
    0x00078db4 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00078db6 movs r4, 2                                        |     r4 = 2;
    0x00078db8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078dba bne.w 0x782f2                                     |         goto label_67;
                                                                 |     }
    0x00078dbe ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078dc0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078dc2 bne.w 0x791e4                                     |         goto label_188;
                                                                 |     }
    0x00078dc6 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00078dc8 mov r3, r5                                        |     r3 = r5;
    0x00078dca movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00078dcc mov r0, sb                                        |     r0 = sb;
    0x00078dce movs r4, 2                                        |     r4 = 2;
    0x00078dd0 str r2, [sp]                                      |     *(sp) = r2;
    0x00078dd2 ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x00078dd4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078dd8 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078dda mov r6, r3                                        |     r6 = r3;
    0x00078ddc mov fp, r3                                        |     
    0x00078dde str r3, [sp, 0x7c]                                |     var_7ch = r3;
                                                                 | label_85:
    0x00078de0 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078de2 mov r1, r4                                        |     r1 = r4;
    0x00078de4 mov r2, sl                                        |     r2 = sl;
    0x00078de6 bl 0x2adc0                                        |     fcn_0002adc0 (r0, r1, r2);
    0x00078dea movs r3, 0                                        |     r3 = 0;
    0x00078dec str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x00078dee str r3, [sp, 0x84]                                |     var_84h = r3;
                                                                 | label_75:
    0x00078df0 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x00078df4 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00078df8 cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00078dfa bmi.w 0x78cb6                                     |         goto label_68;
                                                                 |     }
                                                                 | label_183:
    0x00078dfe ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00078e00 lsls r3, r7, 2                                    |     r3 = r7 << 2;
    0x00078e02 ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x00078e06 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00078e08 str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_184:
    0x00078e0a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00078e0c cmp r3, 0                                         |     
    0x00078e0e it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00078e10 cmpne r3, fp                                      |         __asm ("cmpne r3, fp");
                                                                 |     }
    0x00078e12 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x00078e14 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00078e16 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00078e18 bne 0x78eb8                                       |         goto label_189;
                                                                 |     }
    0x00078e1a mov r4, r6                                        |     r4 = r6;
    0x00078e1c mov ip, r6                                        |     
    0x00078e1e cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00078e20 beq.w 0x7847a                                     |         goto label_69;
                                                                 |     }
    0x00078e24 ldrd r4, r2, [sb, 0x6c]                           |     __asm ("ldrd r4, r2, [sb, 0x6c]");
    0x00078e28 cmp r4, r2                                        |     
                                                                 |     if (r4 >= r2) {
    0x00078e2a bge.w 0x791be                                     |         goto label_190;
                                                                 |     }
    0x00078e2e add.w r0, r4, r4, lsl 2                           |     r0 = r4 + (r4 << 2);
    0x00078e32 ldr.w r1, [sb, 0x68]                              |     r1 = *((sb + 0x68));
    0x00078e36 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00078e38 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00078e3c lsls r0, r0, 2                                    |     r0 <<= 2;
    0x00078e3e movs r5, 8                                        |     r5 = 8;
    0x00078e40 str.w r2, [sb, 0x6c]                              |     __asm ("str.w r2, [sb, 0x6c]");
    0x00078e44 str r5, [r1, r0]                                  |     *((r1 + r0)) = r5;
    0x00078e46 add r1, r0                                        |     r1 += r0;
    0x00078e48 adds r0, r1, 4                                    |     r0 = r1 + 4;
    0x00078e4a vst1.32 {d16}, [r0]                               |     __asm ("vst1.32 {d16}, [r0]");
    0x00078e4e strd r3, r3, [r1, 0xc]                            |     __asm ("strd r3, r3, [r1, 0xc]");
                                                                 | label_83:
    0x00078e52 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x00078e56 subs r3, r6, 1                                    |     r3 = r6 - 1;
    0x00078e58 it mi                                             |     
                                                                 |     if (r3 >= r6) {
    0x00078e5a addmi r3, r2, -1                                  |         r3 = r2 + -1;
                                                                 |     }
    0x00078e5e ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
    0x00078e62 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00078e64 bne.w 0x7909c                                     |         goto label_191;
                                                                 |     }
    0x00078e68 add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x00078e6c ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00078e70 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 | label_74:
    0x00078e74 mov.w ip, 0                                       |     
    0x00078e78 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x00078e7a b.w 0x7847a                                       |     goto label_69;
                                                                 | label_131:
    0x00078e7e ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078e80 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00078e82 bne.w 0x79100                                     |         goto label_192;
                                                                 |     }
    0x00078e86 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00078e88 mov r3, r5                                        |     r3 = r5;
    0x00078e8a movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00078e8c mov r0, sb                                        |     r0 = sb;
    0x00078e8e str r2, [sp]                                      |     *(sp) = r2;
    0x00078e90 ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x00078e92 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078e96 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078e98 mov r6, r3                                        |     r6 = r3;
    0x00078e9a str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x00078e9c ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x00078e9e mov r2, sl                                        |     r2 = sl;
    0x00078ea0 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00078ea2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00078ea4 str r3, [sp]                                      |     *(sp) = r3;
    0x00078ea6 movs r3, 0                                        |     r3 = 0;
    0x00078ea8 bl 0x76d18                                        |     fcn_00076d18 (r0, r1, r2, r3, r4, r5);
    0x00078eac b 0x78c9a                                         |     goto label_70;
                                                                 | label_122:
    0x00078eae mov r5, lr                                        |     r5 = lr;
    0x00078eb0 mov r3, r1                                        |     r3 = r1;
    0x00078eb2 movs r2, 0                                        |     r2 = 0;
    0x00078eb4 b.w 0x78260                                       |     goto label_71;
                                                                 | label_189:
    0x00078eb8 ldrd ip, r3, [sb, 0x6c]                           |     __asm ("ldrd ip, r3, [sb, 0x6c]");
    0x00078ebc cmp ip, r3                                        |     
                                                                 |     if (ip >= r3) {
    0x00078ebe bge.w 0x79150                                     |         goto label_193;
                                                                 |     }
    0x00078ec2 add.w r2, ip, ip, lsl 2                           |     r2 = ip + (ip << 2);
    0x00078ec6 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00078eca add.w r0, ip, 1                                   |     r0 = ip + 1;
    0x00078ece vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00078ed2 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00078ed4 str.w r0, [sb, 0x6c]                              |     __asm ("str.w r0, [sb, 0x6c]");
    0x00078ed8 movs r0, 8                                        |     r0 = 8;
    0x00078eda str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00078edc add r3, r2                                        |     r3 += r2;
    0x00078ede adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00078ee0 movs r4, 0                                        |     r4 = 0;
    0x00078ee2 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00078ee6 strd r4, r4, [r3, 0xc]                            |     __asm ("strd r4, r4, [r3, 0xc]");
    0x00078eea b.w 0x7847a                                       |     goto label_69;
                                                                 | label_182:
    0x00078eee movs r4, 4                                        |     r4 = 4;
    0x00078ef0 mov r6, r3                                        |     r6 = r3;
    0x00078ef2 str r3, [sp, 0x7c]                                |     var_7ch = r3;
                                                                 | label_77:
    0x00078ef4 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00078ef6 movs r1, 0x35                                     |     r1 = 0x35;
    0x00078ef8 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00078efa mov r0, sb                                        |     r0 = sb;
    0x00078efc str r3, [sp]                                      |     *(sp) = r3;
    0x00078efe mov r3, r5                                        |     r3 = r5;
    0x00078f00 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078f04 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x00078f08 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00078f0a ble.w 0x78d72                                     |         goto label_72;
                                                                 |     }
    0x00078f0e ldr.w r2, [sb, 0x68]                              |     r2 = *((sb + 0x68));
    0x00078f12 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00078f16 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x00078f1a movs r3, 0x90                                     |     r3 = 0x90;
    0x00078f1c strh r3, [r2, -0x12]                              |     *((r2 - 0x12)) = r3;
    0x00078f20 b 0x78d72                                         |     goto label_72;
                                                                 | label_117:
    0x00078f22 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00078f24 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00078f26 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00078f28 b.w 0x77ec6                                       |     goto label_56;
                                                                 | label_127:
    0x00078f2c ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00078f2e mov fp, r3                                        |     
    0x00078f30 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x00078f32 b.w 0x7835c                                       |     goto label_73;
                                                                 | label_129:
    0x00078f36 mov fp, r3                                        |     
    0x00078f38 b.w 0x78322                                       |     goto label_61;
                                                                 | label_175:
    0x00078f3c movs r6, 0                                        |     r6 = 0;
    0x00078f3e movs r3, 1                                        |     r3 = 1;
    0x00078f40 ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x00078f42 movs r1, 0x56                                     |     r1 = 0x56;
    0x00078f44 mov r0, sb                                        |     r0 = sb;
    0x00078f46 str r6, [sp]                                      |     *(sp) = r6;
    0x00078f48 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00078f4c ldrd r7, r3, [sb, 0x6c]                           |     __asm ("ldrd r7, r3, [sb, 0x6c]");
    0x00078f50 cmp r7, r3                                        |     
                                                                 |     if (r7 >= r3) {
    0x00078f52 bge.w 0x791d2                                     |         goto label_194;
                                                                 |     }
    0x00078f56 ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00078f5a add.w r2, r7, r7, lsl 2                           |     r2 = r7 + (r7 << 2);
    0x00078f5e adds r1, r7, 1                                    |     r1 = r7 + 1;
    0x00078f60 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00078f64 str.w r1, [sb, 0x6c]                              |     __asm ("str.w r1, [sb, 0x6c]");
    0x00078f68 movs r1, 8                                        |     r1 = 8;
    0x00078f6a str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x00078f6e add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00078f72 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00078f74 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00078f78 strd r6, r6, [r3, 0xc]                            |     __asm ("strd r6, r6, [r3, 0xc]");
                                                                 | label_84:
    0x00078f7c ldr r3, [sp, 0xac]                                |     r3 = var_ach;
    0x00078f7e ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x00078f82 mvns r2, r3                                       |     r2 = ~r3;
    0x00078f84 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00078f88 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x00078f8a bmi.w 0x791b6                                     |         goto label_195;
                                                                 |     }
    0x00078f8c strh r4, [r2, 8]                                  |     *((r2 + 8)) = r4;
    0x00078f8e ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x00078f90 ldr.w r1, [sb, 0x6c]                              |     r1 = *((sb + 0x6c));
    0x00078f94 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                 | label_82:
    0x00078f98 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00078f9a ldr r3, [r2, 0x38]                                |     r3 = *((r2 + 0x38));
    0x00078f9c subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x00078f9e ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00078fa0 str r1, [sp, 0xac]                                |     var_ach = r1;
    0x00078fa2 str r1, [r2, 0x38]                                |     *((r2 + 0x38)) = r1;
                                                                 |     if (r3 != 0) {
    0x00078fa4 cbz r3, 0x78fb6                                   |         
    0x00078fa6 movs r3, 0                                        |         r3 = 0;
    0x00078fa8 ldr r2, [sp, 0x78]                                |         r2 = var_78h;
    0x00078faa str r3, [sp]                                      |         *(sp) = r3;
    0x00078fac mov r0, sb                                        |         r0 = sb;
    0x00078fae mov r3, r1                                        |         r3 = r1;
    0x00078fb0 movs r1, 0x32                                     |         r1 = 0x32;
    0x00078fb2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
    0x00078fb6 ldr r6, [sp, 0x4c]                                |     r6 = var_4ch;
    0x00078fb8 ldr r2, [sp, 0x88]                                |     r2 = var_88h;
    0x00078fba cmp r6, r2                                        |     
                                                                 |     if (r6 <= r2) {
    0x00078fbc ble 0x7905c                                       |         goto label_196;
                                                                 |     }
    0x00078fbe ldr r3, [pc, 0x25c]                               |     
    0x00078fc0 ldr.w r8, [pc, 0x25c]                             |     r8 = *(0x00079220);
    0x00078fc4 str r7, [sp, 0x68]                                |     var_68h = r7;
    0x00078fc6 add r3, pc                                        |     r3 = 0xf21e8;
    0x00078fc8 ldr r7, [sp, 0xac]                                |     r7 = var_ach;
    0x00078fca adds r3, 4                                        |     r3 += 4;
    0x00078fcc str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
    0x00078fd0 str r4, [sp, 0x78]                                |     var_78h = r4;
    0x00078fd2 add r8, pc                                        |     r8 += pc;
    0x00078fd4 mov r4, r2                                        |     r4 = r2;
    0x00078fd6 mov sl, r3                                        |     sl = r3;
    0x00078fd8 str r5, [sp, 0x4c]                                |     var_4ch = r5;
                                                                 |     do {
    0x00078fda ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x00078fde cmp r4, 0                                         |         
    0x00078fe0 ite lt                                            |         
                                                                 |         if (r4 >= 0) {
    0x00078fe2 ldrlt r3, [sb, 0x6c]                              |             r3 = *((sb + 0x6c));
                                                                 |         }
                                                                 |         if (r4 >= 0) {
    0x00078fe6 mov r3, r4                                        |             r3 = r4;
                                                                 |         }
    0x00078fe8 mov r0, sl                                        |         r0 = sl;
    0x00078fea ldrb.w r2, [r2, 0x57]                             |         r2 = *((r2 + 0x57));
    0x00078fee it lt                                             |         
                                                                 |         if (r4 >= 0) {
    0x00078ff0 addlt r3, r3, -1                                  |             r3 += -1;
                                                                 |         }
                                                                 |         if (r2 == 0) {
    0x00078ff4 cbnz r2, 0x79002                                  |             
    0x00078ff6 ldr.w r0, [sb, 0x68]                              |             r0 = *((sb + 0x68));
    0x00078ffa add.w r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
    0x00078ffe add.w r0, r0, r3, lsl 2                           |             r0 += (r3 << 2);
                                                                 |         }
    0x00079002 ldrb r1, [r0]                                     |         r1 = *(r0);
    0x00079004 ldrsb.w lr, [r0, 1]                               |         
    0x00079008 ldrh r5, [r0, 2]                                  |         r5 = *((r0 + 2));
    0x0007900a cmp r1, 0x8e                                      |         
    0x0007900c ldrd r2, r3, [r0, 4]                              |         __asm ("ldrd r2, r3, [r0, 4]");
    0x00079010 ldrd ip, r0, [r0, 0xc]                            |         __asm ("ldrd ip, r0, [r0, 0xc]");
                                                                 |         if (r1 != 0x8e) {
    0x00079014 beq 0x7904c                                       |             
    0x00079016 strd r0, lr, [sp, 4]                              |             __asm ("strd r0, lr, [var_4h]");
    0x0007901a add.w r0, r8, r1                                  |             r0 = r8 + r1;
    0x0007901e ldrb.w r0, [r0, 0xf90]                            |             r0 = *((r0 + 0xf90));
    0x00079022 str.w ip, [sp]                                    |             __asm ("str.w ip, [sp]");
    0x00079026 tst.w r0, 1                                       |             
    0x0007902a mov r0, sb                                        |             r0 = sb;
    0x0007902c it ne                                             |             
                                                                 |             if ((r0 & 1) == 0) {
    0x0007902e movne r3, r7                                      |                 r3 = r7;
                                                                 |             }
    0x00079030 bl 0x2a324                                        |             fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00079034 ldr.w r3, [sb, 0x6c]                              |             r3 = *((sb + 0x6c));
    0x00079038 cmp r3, 0                                         |             
    0x0007903a itttt gt                                          |             
                                                                 |             if (r3 <= 0) {
    0x0007903c ldrgt r2, [sb, 0x68]                              |                 r2 = *((sb + 0x68));
                                                                 |             }
                                                                 |             if (r3 <= 0) {
    0x00079040 addgt r3, r3, r3, lsl 2                           |                 r3 += (r3 << 2);
                                                                 |             }
                                                                 |             if (r3 > 0) {
    0x00079044 add.w r2, r2, r3, lsl 2                           |                 r2 += (r3 << 2);
                                                                 |             }
                                                                 |             if (r3 <= 0) {
    0x00079048 strh r5, [r2, -0x12]                              |                 *((r2 - 0x12)) = r5;
                                                                 |                 goto label_197;
                                                                 |             }
                                                                 |         }
                                                                 | label_197:
    0x0007904c adds r4, 1                                        |         r4++;
    0x0007904e cmp r4, r6                                        |         
    0x00079050 bne 0x78fda                                       |         
                                                                 |     } while (r4 != r6);
    0x00079052 ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00079054 ldr.w sl, [sp, 0x5c]                              |     sl = var_5ch;
    0x00079058 ldr r7, [sp, 0x68]                                |     r7 = var_68h;
    0x0007905a ldr r4, [sp, 0x78]                                |     r4 = var_78h;
                                                                 | label_196:
    0x0007905c mov r2, r4                                        |     r2 = r4;
    0x0007905e ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00079060 movs r1, 2                                        |     r1 = 2;
    0x00079062 bl 0x2ac98                                        |     fcn_0002ac98 (r0, r1, r2, r3, r4);
    0x00079066 cmp r7, 0                                         |     
    0x00079068 ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
                                                                 |     if (r7 < 0) {
    0x0007906c bge 0x79070                                       |         
    0x0007906e subs r7, r2, 1                                    |         r7 = r2 - 1;
                                                                 |     }
    0x00079070 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00079074 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00079078 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007907a bne 0x790ea                                       |         goto label_198;
                                                                 |     }
    0x0007907c ldr.w r1, [sb, 0x68]                              |     r1 = *((sb + 0x68));
    0x00079080 add.w r3, r7, r7, lsl 2                           |     r3 = r7 + (r7 << 2);
    0x00079084 add.w r3, r1, r3, lsl 2                           |     r3 = r1 + (r3 << 2);
                                                                 |     do {
    0x00079088 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x0007908a movs r3, 1                                        |         r3 = 1;
    0x0007908c str r3, [sp, 0x84]                                |         var_84h = r3;
    0x0007908e b.w 0x786c4                                       |         goto label_43;
                                                                 | label_168:
    0x00079092 mov r1, sb                                        |         r1 = sb;
    0x00079094 bl 0x2bed8                                        |         fcn_0002bed8 (r0, r1, r2);
    0x00079098 b.w 0x784fa                                       |         goto label_35;
                                                                 | label_191:
    0x0007909c ldr r3, [pc, 0x184]                               |         
    0x0007909e add r3, pc                                        |         r3 = 0xf22c6;
    0x000790a0 adds r3, 4                                        |         r3 += 4;
    0x000790a2 b 0x78e74                                         |         goto label_74;
                                                                 | label_135:
    0x000790a4 ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x000790a6 movs r4, 1                                        |         r4 = 1;
    0x000790a8 ldr r1, [sp, 0x10c]                               |         r1 = *(arg_10ch);
    0x000790aa movs r5, 0                                        |         r5 = 0;
    0x000790ac ldr r2, [sp, 0xa0]                                |         r2 = var_a0h;
    0x000790ae ldr r3, [r0, 0x74]                                |         r3 = *((r0 + 0x74));
    0x000790b0 cmp r3, 0                                         |         
    0x000790b2 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x000790b4 moveq r3, r0                                      |             r3 = r0;
                                                                 |         }
    0x000790b6 strb r4, [r3, 0x14]                               |         *((r3 + 0x14)) = r4;
    0x000790b8 mov.w r3, -1                                      |         r3 = -1;
    0x000790bc str r1, [sp, 4]                                   |         var_4h = r1;
    0x000790be ldr r1, [sp, 0x108]                               |         r1 = *(arg_108h);
    0x000790c0 str r3, [sp, 0x18]                                |         var_18h = r3;
    0x000790c2 movs r3, 5                                        |         r3 = 5;
    0x000790c4 str r3, [sp, 0x10]                                |         var_10h = r3;
    0x000790c6 str r1, [sp]                                      |         *(sp) = r1;
    0x000790c8 mov r1, sl                                        |         r1 = sl;
    0x000790ca ldr r3, [sp, 0x90]                                |         r3 = var_90h;
    0x000790cc str r4, [sp, 0x14]                                |         var_14h = r4;
    0x000790ce str r4, [sp, 8]                                   |         var_8h = r4;
    0x000790d0 str r5, [sp, 0xc]                                 |         var_ch = r5;
    0x000790d2 bl 0x779bc                                        |         fcn_000779bc (r0, r1, r2, r3, r4, r5, r6);
    0x000790d6 ldr r2, [sp, 0x80]                                |         r2 = var_80h;
    0x000790d8 mov r3, r4                                        |         r3 = r4;
    0x000790da movs r1, 0x56                                     |         r1 = 0x56;
    0x000790dc mov r0, sb                                        |         r0 = sb;
    0x000790de str r5, [sp]                                      |         *(sp) = r5;
    0x000790e0 str r4, [sp, 0x8c]                                |         var_8ch = r4;
    0x000790e2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000790e6 str r4, [sp, 0x84]                                |         var_84h = r4;
    0x000790e8 b 0x78df0                                         |         goto label_75;
                                                                 | label_198:
    0x000790ea ldr r3, [pc, 0x13c]                               |         
    0x000790ec add r3, pc                                        |         r3 = 0xf231a;
    0x000790ee adds r3, 4                                        |         r3 += 4;
    0x000790f0 b 0x79088                                         |         
                                                                 |     } while (1);
                                                                 | label_178:
    0x000790f2 ldr.w r3, [sl, 0x30]                              |     r3 = *((sl + 0x30));
    0x000790f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000790f8 bne.w 0x78c0c                                     |         goto label_76;
                                                                 |     }
    0x000790fc b.w 0x782b6                                       |     goto label_54;
                                                                 | label_192:
    0x00079100 movs r3, 0                                        |     r3 = 0;
    0x00079102 movs r4, 6                                        |     r4 = 6;
    0x00079104 mov r6, r3                                        |     r6 = r3;
    0x00079106 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x00079108 b 0x78ef4                                         |     goto label_77;
                                                                 | label_180:
    0x0007910a str r3, [sp]                                      |     *(sp) = r3;
    0x0007910c movs r1, 0x35                                     |     r1 = 0x35;
    0x0007910e ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x00079110 mov r0, sb                                        |     r0 = sb;
    0x00079112 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_10ch);
    0x00079114 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079118 ldr.w r3, [sb, 0x6c]                              |     r3 = *((sb + 0x6c));
    0x0007911c cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0007911e ble.w 0x78c54                                     |         goto label_78;
                                                                 |     }
    0x00079122 ldr.w r2, [sb, 0x68]                              |     r2 = *((sb + 0x68));
    0x00079126 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0007912a add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x0007912e movs r3, 0x90                                     |     r3 = 0x90;
    0x00079130 strh r3, [r2, -0x12]                              |     *((r2 - 0x12)) = r3;
    0x00079134 b 0x78c54                                         |     goto label_78;
                                                                 | label_92:
    0x00079136 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00079138 b.w 0x77eac                                       |     goto label_79;
                                                                 | label_132:
    0x0007913c movs r3, 0                                        |     r3 = 0;
    0x0007913e movs r1, 8                                        |     r1 = 8;
    0x00079140 mov r2, r3                                        |     r2 = r3;
    0x00079142 mov r0, sb                                        |     r0 = sb;
    0x00079144 str r3, [sp]                                      |     *(sp) = r3;
    0x00079146 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007914a str r0, [sp, 0x7c]                                |     var_7ch = r0;
    0x0007914c b.w 0x7835c                                       |     goto label_73;
                                                                 | label_193:
    0x00079150 movs r3, 0                                        |     r3 = 0;
    0x00079152 movs r1, 8                                        |     r1 = 8;
    0x00079154 mov r2, r3                                        |     r2 = r3;
    0x00079156 mov r0, sb                                        |     r0 = sb;
    0x00079158 str r3, [sp]                                      |     *(sp) = r3;
    0x0007915a mov r4, r3                                        |     r4 = r3;
    0x0007915c bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00079160 mov ip, r0                                        |     
    0x00079162 b.w 0x7847a                                       |     goto label_69;
                                                                 | label_185:
    0x00079166 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00079168 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0007916a ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0007916c ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0007916e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079170 beq.w 0x788ee                                     |         goto label_62;
                                                                 |     }
    0x00079174 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00079176 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079178 bne.w 0x78cd6                                     |         goto label_80;
                                                                 |     }
    0x0007917c b.w 0x788ee                                       |     goto label_62;
                                                                 | label_134:
    0x00079180 ldrd r6, r2, [sb, 0x6c]                           |     __asm ("ldrd r6, r2, [sb, 0x6c]");
    0x00079184 cmp r6, r2                                        |     
                                                                 |     if (r6 >= r2) {
    0x00079186 bge 0x791ee                                       |         goto label_199;
                                                                 |     }
    0x00079188 add.w r2, r6, r6, lsl 2                           |     r2 = r6 + (r6 << 2);
    0x0007918c ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00079190 adds r6, 1                                        |     r6++;
    0x00079192 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00079196 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00079198 movs r0, 8                                        |     r0 = 8;
    0x0007919a str.w r6, [sb, 0x6c]                              |     __asm ("str.w r6, [sb, 0x6c]");
    0x0007919e movs r1, 0                                        |     r1 = 0;
    0x000791a0 str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x000791a2 add r3, r2                                        |     r3 += r2;
    0x000791a4 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x000791a6 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x000791aa strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 |     do {
    0x000791ae movs r3, 0                                        |         r3 = 0;
    0x000791b0 str r3, [sp, 0x7c]                                |         var_7ch = r3;
    0x000791b2 b.w 0x78386                                       |         goto label_81;
                                                                 | label_195:
    0x000791b6 mov r1, sb                                        |         r1 = sb;
    0x000791b8 bl 0x2bed8                                        |         fcn_0002bed8 (r0, r1, r2);
    0x000791bc b 0x78f98                                         |         goto label_82;
                                                                 | label_190:
    0x000791be mov r2, r3                                        |         r2 = r3;
    0x000791c0 movs r1, 8                                        |         r1 = 8;
    0x000791c2 mov r0, sb                                        |         r0 = sb;
    0x000791c4 str r3, [sp]                                      |         *(sp) = r3;
    0x000791c6 bl 0x29a7c                                        |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000791ca ldr.w r2, [sb, 0x6c]                              |         r2 = *((sb + 0x6c));
    0x000791ce mov r4, r0                                        |         r4 = r0;
    0x000791d0 b 0x78e52                                         |         goto label_83;
                                                                 | label_194:
    0x000791d2 mov r3, r6                                        |         r3 = r6;
    0x000791d4 mov r2, r6                                        |         r2 = r6;
    0x000791d6 movs r1, 8                                        |         r1 = 8;
    0x000791d8 mov r0, sb                                        |         r0 = sb;
    0x000791da str r6, [sp]                                      |         *(sp) = r6;
    0x000791dc bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000791e0 mov r7, r0                                        |         r7 = r0;
    0x000791e2 b 0x78f7c                                         |         goto label_84;
                                                                 | label_188:
    0x000791e4 ldr r6, [sp, 0x40]                                |         r6 = var_40h;
    0x000791e6 movs r4, 2                                        |         r4 = 2;
    0x000791e8 mov fp, r6                                        |         
    0x000791ea str r6, [sp, 0x7c]                                |         var_7ch = r6;
    0x000791ec b 0x78ef4                                         |         goto label_77;
                                                                 | label_199:
    0x000791ee movs r3, 0                                        |         r3 = 0;
    0x000791f0 movs r1, 8                                        |         r1 = 8;
    0x000791f2 mov r2, r3                                        |         r2 = r3;
    0x000791f4 mov r0, sb                                        |         r0 = sb;
    0x000791f6 str r3, [sp]                                      |         *(sp) = r3;
    0x000791f8 bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000791fc adds r6, r0, 1                                    |         r6 = r0 + 1;
    0x000791fe b 0x791ae                                         |         
                                                                 |     } while (1);
                                                                 | label_144:
    0x00079200 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_187:
    0x00079204 movs r4, 2                                        |     r4 = 2;
    0x00079206 b 0x78de0                                         |     goto label_85;
                                                                 | label_88:
    0x00079208 movs r3, 0                                        |     r3 = 0;
    0x0007920a ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x0007920c udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x7922c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0007922c ()                                      | void fcn_0007922c (int16_t arg_1h, int16_t arg_ch, int16_t arg_14h, int16_t arg_2ch, int16_t arg_37h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_96h, int16_t arg_dch, arithmetic arg_1a0h, arithmetic x, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     arithmetic var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     arithmetic 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;
                                                                 |     int32_t var_98h_2;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int32_t var_a8h_2;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     int16_t var_c4h;
                                                                 |     int16_t var_c8h;
                                                                 |     int16_t var_cch;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     arithmetic var_dch;
                                                                 |     int16_t var_e0h;
                                                                 |     int32_t var_e4h;
                                                                 |     int32_t var_e4h_2;
                                                                 |     int32_t var_ech;
                                                                 |     int32_t var_ech_2;
                                                                 |     int32_t var_f4h;
                                                                 |     int32_t var_f4h_2;
                                                                 |     int16_t var_fch;
                                                                 |     int16_t var_104h;
                                                                 |     int16_t var_108h;
                                                                 |     int16_t var_130h;
                                                                 |     int16_t var_14ch;
                                                                 |     int16_t var_150h;
                                                                 |     int16_t var_164h;
                                                                 |     int16_t var_174h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0007922c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00079230 sub sp, 0x17c                                     |     
    0x00079232 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x00079234 movs r4, 0                                        |     r4 = 0;
    0x00079236 ldr.w r2, [pc, 0xae8]                             |     
    0x0007923a str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0007923c ldr.w r3, [pc, 0xae4]                             |     r3 = *(0x79d24);
    0x00079240 add r2, pc                                        |     r2 = 0xf2f66;
    0x00079242 str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x00079244 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x00079246 ldr r3, [r2, r3]                                  |     
    0x00079248 ldr r2, [r0, 0x24]                                |     r2 = *((r0 + 0x24));
    0x0007924a ldr r3, [r3]                                      |     r3 = *(0xf2f66);
    0x0007924c str r3, [sp, 0x174]                               |     var_174h = r3;
    0x0007924e mov.w r3, 0                                       |     r3 = 0;
    0x00079252 mov r3, r0                                        |     r3 = r0;
    0x00079254 ldr r0, [sp, 0x1a0]                               |     r0 = *(arg_1a0h);
    0x00079256 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00079258 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x0007925a str r0, [sp, 0x64]                                |     var_64h = r0;
    0x0007925c ldr r0, [sp, 0x1a4]                               |     r0 = *(x);
    0x0007925e strd r4, r4, [sp, 0xb4]                           |     __asm ("strd r4, r4, [var_b4h]");
    0x00079262 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00079264 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x00079266 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00079268 bne.w 0x796a0                                     |         goto label_105;
                                                                 |     }
    0x0007926c ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0007926e ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00079270 str r3, [sp, 0xc4]                                |     var_c4h = r3;
                                                                 |     if (r2 != 0) {
    0x00079272 cbz r2, 0x79282                                   |         
    0x00079274 ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x00079276 lsls r6, r3, 0x16                                 |         r6 = r3 << 0x16;
                                                                 |         if (r6 >= r3) {
    0x00079278 bpl 0x79282                                       |             goto label_106;
                                                                 |         }
    0x0007927a ldr r3, [r2, 0x34]                                |         r3 = *((r2 + 0x34));
    0x0007927c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0007927e beq.w 0x79774                                     |             goto label_107;
                                                                 |         }
                                                                 |     }
                                                                 | label_106:
    0x00079282 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x00079284 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00079286 bl 0x745a0                                        |     fcn_000745a0 (r0, r1);
    0x0007928a str r0, [sp, 0x30]                                |     var_30h = r0;
    0x0007928c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0007928e beq.w 0x79722                                     |         goto label_108;
                                                                 |     }
    0x00079292 movs r3, 0                                        |     r3 = 0;
    0x00079294 str r3, [sp, 0x58]                                |     var_58h = r3;
                                                                 | label_10:
    0x00079296 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079298 ldr r0, [r3, 0x3c]                                |     r0 = *((r3 + 0x3c));
    0x0007929a ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0007929c ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0007929e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000792a0 beq.w 0x7a372                                     |         goto label_109;
                                                                 |     }
    0x000792a4 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000792a6 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x000792a8 beq 0x792be                                       |         goto label_48;
                                                                 |     }
    0x000792aa ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x000792ac add.w r3, r2, 0x10                                |     r3 = r2 + 0x10;
                                                                 |     do {
    0x000792b0 mov r2, r3                                        |         r2 = r3;
    0x000792b2 adds r1, 1                                        |         r1++;
    0x000792b4 ldr r4, [r3, 0xc]                                 |         r4 = *((r3 + 0xc));
    0x000792b6 adds r3, 0x10                                     |         r3 += 0x10;
    0x000792b8 cmp r0, r4                                        |         
    0x000792ba bne 0x792b0                                       |         
                                                                 |     } while (r0 != r4);
    0x000792bc str r1, [sp, 0x40]                                |     var_40h = r1;
                                                                 | label_48:
    0x000792be ldr r3, [r2]                                      |     r3 = *(r2);
    0x000792c0 movs r1, 0x12                                     |     r1 = 0x12;
    0x000792c2 ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x000792c4 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000792c6 ldr r2, [r4]                                      |     r2 = *(r4);
    0x000792c8 str r3, [sp]                                      |     *(sp) = r3;
    0x000792ca movs r3, 0                                        |     r3 = 0;
    0x000792cc bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x000792d0 cmp r0, 0                                         |     
    0x000792d2 beq 0x79344                                       |     
                                                                 |     while (r0 != 0) {
                                                                 | label_0:
    0x000792d4 movs r3, 0                                        |         r3 = 0;
    0x000792d6 str r3, [sp, 0x30]                                |         var_30h = r3;
                                                                 | label_18:
    0x000792d8 ldr r4, [sp, 0x38]                                |         r4 = var_38h;
    0x000792da ldr r1, [sp, 0x44]                                |         r1 = var_44h;
    0x000792dc mov r0, r4                                        |         r0 = r4;
    0x000792de bl 0x16a58                                        |         fcn_00016a58 (r0, r1);
    0x000792e2 ldr r3, [sp, 0x58]                                |         r3 = var_58h;
                                                                 |         if (r3 != 0) {
    0x000792e4 cbz r3, 0x792ee                                   |             
    0x000792e6 mov r1, r3                                        |             r1 = r3;
    0x000792e8 mov r0, r4                                        |             r0 = r4;
    0x000792ea bl 0x16c98                                        |             fcn_00016c98 (r0, r1);
                                                                 |         }
                                                                 | label_6:
    0x000792ee ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
                                                                 |         if (r3 != 0) {
    0x000792f0 cbz r3, 0x792fa                                   |             
                                                                 | label_3:
    0x000792f2 ldr r1, [sp, 0x4c]                                |             r1 = var_4ch;
    0x000792f4 ldr r0, [sp, 0x38]                                |             r0 = var_38h;
    0x000792f6 bl 0x16f28                                        |             fcn_00016f28 (r0, r1);
                                                                 |         }
    0x000792fa ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
                                                                 |         if (r3 != 0) {
    0x000792fc cbz r3, 0x79308                                   |             
    0x000792fe ldr r0, [sp, 0x38]                                |             r0 = var_38h;
    0x00079300 movs r2, 1                                        |             r2 = 1;
    0x00079302 mov r1, r3                                        |             r1 = r3;
    0x00079304 bl 0x16b48                                        |             fcn_00016b48 (r0, r1, r2);
                                                                 |         }
    0x00079308 ldr r3, [sp, 0x48]                                |         r3 = var_48h;
                                                                 |         if (r3 != 0) {
    0x0007930a cbz r3, 0x79314                                   |             
    0x0007930c ldr r0, [sp, 0x38]                                |             r0 = var_38h;
    0x0007930e mov r1, r3                                        |             r1 = r3;
    0x00079310 bl 0x15350                                        |             fcn_00015350 (r0, r1);
                                                                 |         }
    0x00079314 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x00079316 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00079318 beq.w 0x79704                                     |             goto label_98;
                                                                 |         }
    0x0007931c ldr.w r2, [pc, 0xa08]                             |         
    0x00079320 ldr.w r3, [pc, 0xa00]                             |         r3 = *(0x79d24);
    0x00079324 add r2, pc                                        |         r2 = 0xf3050;
    0x00079326 ldr r3, [r2, r3]                                  |         r3 = *(0xf3050);
    0x00079328 ldr r2, [r3]                                      |         r2 = *(0xf3050);
    0x0007932a ldr r3, [sp, 0x174]                               |         r3 = var_174h;
    0x0007932c eors r2, r3                                       |         r2 ^= r3;
    0x0007932e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00079332 bne.w 0x7974a                                     |             goto label_99;
                                                                 |         }
    0x00079336 ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x00079338 ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x0007933a add sp, 0x17c                                     |         
    0x0007933c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00079340 b.w 0x137d0                                       |         void (*0x137d0)() ();
    0x00079344 ldr r3, [r4, 0x38]                                |         r3 = *((r4 + 0x38));
    0x00079346 ldr r2, [r4, 0x1c]                                |         r2 = *((r4 + 0x1c));
    0x00079348 str r2, [sp, 0x74]                                |         var_74h = r2;
    0x0007934a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0007934c beq.w 0x796ea                                     |             goto label_110;
                                                                 |         }
                                                                 | label_4:
    0x00079350 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00079352 ldrb.w r3, [r3, 0x97]                             |         r3 = *((r3 + 0x97));
    0x00079356 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00079358 bne.w 0x796fc                                     |             goto label_111;
                                                                 |         }
    0x0007935c add r2, sp, 0xbc                                  |         r2 += var_bch;
    0x0007935e ldrd r0, r1, [sp, 0x2c]                           |         __asm ("ldrd r0, r1, [var_2ch]");
    0x00079362 str r2, [sp]                                      |         *(sp) = r2;
    0x00079364 movs r2, 0x7f                                     |         r2 = 0x7f;
    0x00079366 bl 0x2042c                                        |         fcn_0002042c (r0, r1, r2, r3);
    0x0007936a str r0, [sp, 0x84]                                |         var_84h = r0;
                                                                 | label_5:
    0x0007936c ldr r4, [sp, 0x30]                                |         r4 = var_30h;
    0x0007936e ldr r5, [sp, 0x2c]                                |         r5 = var_2ch;
    0x00079370 ldrb.w r3, [r4, 0x2b]                             |         r3 = *((r4 + 0x2b));
    0x00079374 mov r1, r4                                        |         r1 = r4;
    0x00079376 mov r0, r5                                        |         r0 = r5;
    0x00079378 str r3, [sp, 0x94]                                |         var_94h = r3;
    0x0007937a bl 0x68bfc                                        |         r0 = fcn_00068bfc (r0, r1, r2);
    0x0007937e cmp r0, 0                                         |         
    0x00079380 bne 0x792d4                                       |         
                                                                 |     }
    0x00079382 ldr r3, [sp, 0xbc]                                |     r3 = var_bch;
    0x00079384 mov r1, r4                                        |     r1 = r4;
    0x00079386 mov r0, r5                                        |     r0 = r5;
    0x00079388 mov r2, r3                                        |     r2 = r3;
    0x0007938a str r3, [sp, 0xa4]                                |     var_a4h = r3;
    0x0007938c bl 0x20534                                        |     r0 = fcn_00020534 (r0, r1, r2);
    0x00079390 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00079392 bne 0x792d4                                       |         goto label_0;
                                                                 |     }
    0x00079394 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00079396 ldr.w fp, [r3, 8]                                 |     fp = *((r3 + 8));
    0x0007939a cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0007939e beq.w 0x7975c                                     |         goto label_112;
                                                                 |     }
                                                                 | label_9:
    0x000793a2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000793a4 ldrb r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x000793a6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000793a8 beq.w 0x7974e                                     |         goto label_113;
                                                                 |     }
                                                                 | label_8:
    0x000793ac ldr r5, [sp, 0x84]                                |     r5 = var_84h;
    0x000793ae ldr r4, [sp, 0x3c]                                |     r4 = var_3ch;
    0x000793b0 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000793b2 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000793b4 orrs.w r3, r5, r4                                 |     r3 = r5 | r4;
    0x000793b8 ite ne                                            |     
                                                                 |     if (r3 == r5) {
    0x000793ba movne r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r3 != r5) {
    0x000793bc moveq r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x000793be bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x000793c2 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x000793c4 orr.w r2, r3, r5                                  |     r2 = r3 | r5;
    0x000793c8 subs r3, r4, 0                                    |     r3 = r4 - 0;
    0x000793ca it ne                                             |     
                                                                 |     if (r3 == r4) {
    0x000793cc movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000793ce cmp r2, 0                                         |     
    0x000793d0 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x000793d2 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000793d4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000793d6 bne.w 0x79d50                                     |         goto label_114;
                                                                 |     }
                                                                 | label_22:
    0x000793da ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x000793dc ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x000793de ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x000793e0 mov r2, r5                                        |     r2 = r5;
    0x000793e2 mov r0, r4                                        |     r0 = r4;
    0x000793e4 bl 0x1fc84                                        |     fcn_0001fc84 (r0, r1, r2);
    0x000793e8 ldrsh.w r6, [r5, 0x22]                            |     r6 = *((r5 + 0x22));
    0x000793ec ldr r2, [r4, 0x2c]                                |     r2 = *((r4 + 0x2c));
    0x000793ee str r0, [sp, 0x8c]                                |     var_8ch = r0;
    0x000793f0 adds r3, r6, 1                                    |     r3 = r6 + 1;
    0x000793f2 add r3, r2                                        |     r3 += r2;
    0x000793f4 adds r0, r2, 1                                    |     r0 = r2 + 1;
    0x000793f6 str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x000793f8 ldrb.w r1, [r5, 0x2b]                             |     r1 = *((r5 + 0x2b));
    0x000793fc str r0, [sp, 0x78]                                |     var_78h = r0;
    0x000793fe cmp r1, 1                                         |     
    0x00079400 ittet eq                                          |     
                                                                 |     if (r1 != 1) {
    0x00079402 ldreq r1, [sp, 0x2c]                              |         r1 = var_2ch;
                                                                 |     }
                                                                 |     if (r1 != 1) {
    0x00079404 addeq r3, 1                                       |         r3++;
                                                                 |     }
                                                                 |     if (r1 == 1) {
    0x00079406 ldrne r3, [sp, 0x78]                              |         r3 = var_78h;
                                                                 |     }
                                                                 |     if (r1 != 1) {
    0x00079408 streq r3, [r1, 0x2c]                              |         *((r1 + 0x2c)) = r3;
                                                                 |     }
    0x0007940a it eq                                             |     
                                                                 |     if (r1 != 1) {
    0x0007940c addeq r3, r2, 2                                   |         r3 = r2 + 2;
                                                                 |     }
    0x0007940e str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00079410 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00079412 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00079414 and r3, r3, 0x80                                  |     r3 &= 0x80;
    0x00079418 str r3, [sp, 0x90]                                |     var_90h = r3;
    0x0007941a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007941c ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0007941e tst.w r3, 0x440                                   |     
    0x00079422 ite eq                                            |     
                                                                 |     if ((r3 & 0x440) != 0) {
    0x00079424 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if ((r3 & 0x440) == 0) {
    0x00079426 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00079428 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0007942a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0007942c beq.w 0x797d4                                     |         goto label_115;
                                                                 |     }
    0x00079430 ldr r0, [r2]                                      |     r0 = *(r2);
    0x00079432 movs r3, 1                                        |     r3 = 1;
    0x00079434 strb r3, [r2, 4]                                  |     *((r2 + 4)) = r3;
    0x00079436 cmp r0, 0                                         |     
    0x00079438 str r0, [sp, 0x60]                                |     var_60h = r0;
                                                                 |     if (r0 <= 0) {
    0x0007943a ble.w 0x797d4                                     |         goto label_115;
                                                                 |     }
    0x0007943e add.w r1, r2, 0xc                                 |     r1 = r2 + 0xc;
    0x00079442 movs r3, 0                                        |     r3 = 0;
    0x00079444 mov.w r2, -1                                      |     r2 = -1;
                                                                 |     do {
    0x00079448 str.w r2, [r1, r3, lsl 3]                         |         __asm ("str.w r2, [r1, r3, lsl 3]");
    0x0007944c adds r3, 1                                        |         r3++;
    0x0007944e cmp r3, r0                                        |         
    0x00079450 bne 0x79448                                       |         
                                                                 |     } while (r3 != r0);
    0x00079452 ldr.w r4, [pc, 0x8d8]                             |     r4 = *(0x00079d2c);
    0x00079456 mov r5, fp                                        |     r5 = fp;
    0x00079458 ldr r7, [sp, 0x48]                                |     r7 = var_48h;
    0x0007945a mov.w r8, 0                                       |     r8 = 0;
    0x0007945e ldr.w fp, [sp, 0x30]                              |     fp = var_30h;
    0x00079462 mov.w r3, -1                                      |     r3 = -1;
    0x00079466 add r4, pc                                        |     r4 += pc;
    0x00079468 str r3, [sp, 0x50]                                |     var_50h = r3;
                                                                 | label_2:
    0x0007946a cmp r6, 0                                         |     
    0x0007946c ldr.w sb, [r7, 8]                                 |     sb = *((r7 + 8));
                                                                 |     if (r6 <= 0) {
    0x00079470 ble 0x794b4                                       |         goto label_13;
                                                                 |     }
    0x00079472 ldr.w lr, [fp, 4]                                 |     
    0x00079476 movs r1, 0                                        |     r1 = 0;
    0x00079478 add.w sl, sb, -1                                  |     sl = sb + -1;
    0x0007947c mov r2, fp                                        |     r2 = fp;
                                                                 | label_1:
    0x0007947e ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00079482 mov fp, sl                                        |     
    0x00079484 add.w ip, r3, -1                                  |     
    0x00079488 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 |     do {
                                                                 | label_11:
    0x0007948a ldrb r3, [fp, 1]!                                 |         r3 = *(arg_1h);
    0x0007948e ldrb r0, [ip, 1]!                                 |         r0 = *((ip += 1));
    0x00079492 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00079494 beq.w 0x7979c                                     |             goto label_116;
                                                                 |         }
    0x00079498 add r3, r4                                        |         r3 += r4;
    0x0007949a add r0, r4                                        |         r0 += r4;
    0x0007949c ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x000794a0 ldrb.w r0, [r0, 0x140]                            |         r0 = *((r0 + 0x140));
    0x000794a4 cmp r3, r0                                        |         
    0x000794a6 beq 0x7948a                                       |         
                                                                 |     } while (r3 == r0);
    0x000794a8 adds r1, 1                                        |     r1++;
    0x000794aa add.w lr, lr, 0xc                                 |     lr += 0xc;
    0x000794ae cmp r6, r1                                        |     
                                                                 |     if (r6 != r1) {
    0x000794b0 bne 0x7947e                                       |         goto label_1;
                                                                 |     }
    0x000794b2 mov fp, r2                                        |     
                                                                 | label_13:
    0x000794b4 mov r0, sb                                        |     r0 = sb;
    0x000794b6 bl 0x1a774                                        |     fcn_0001a774 (r0);
    0x000794ba ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x000794bc cmp r0, 0                                         |     
    0x000794be clz r2, r2                                        |     r2 &= r2;
    0x000794c2 lsr.w r2, r2, 5                                   |     r2 >>= 5;
    0x000794c6 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x000794c8 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000794ca cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000794cc beq.w 0x79d06                                     |         goto label_117;
                                                                 |     }
    0x000794d0 movs r3, 0                                        |     r3 = 0;
    0x000794d2 str.w r8, [sp, 0x50]                              |     __asm ("str.w r8, [var_50h]");
    0x000794d6 str r3, [sp, 0x5c]                                |     var_5ch = r3;
                                                                 | label_12:
    0x000794d8 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x000794da add.w r8, r8, 1                                   |     r8++;
    0x000794de adds r7, 8                                        |     r7 += 8;
    0x000794e0 cmp r8, r3                                        |     
                                                                 |     if (r8 != r3) {
    0x000794e2 bne 0x7946a                                       |         goto label_2;
                                                                 |     }
    0x000794e4 mov fp, r5                                        |     
                                                                 | label_14:
    0x000794e6 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000794e8 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x000794ea adds r3, 1                                        |     r3++;
    0x000794ec str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x000794ee cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000794f0 beq.w 0x797dc                                     |         goto label_118;
                                                                 |     }
    0x000794f4 ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x000794f6 movs r1, 0xa                                      |     r1 = 0xa;
    0x000794f8 ldr.w r4, [fp, 0x6c]                              |     r4 = *(arg_6ch);
    0x000794fc mov r0, fp                                        |     r0 = fp;
    0x000794fe ldr r3, [r7, 0x2c]                                |     r3 = *((r7 + 0x2c));
    0x00079500 adds r5, r4, 1                                    |     r5 = r4 + 1;
    0x00079502 adds r6, r3, 1                                    |     r6 = r3 + 1;
    0x00079504 movs r3, 0                                        |     r3 = 0;
    0x00079506 mov r2, r6                                        |     r2 = r6;
    0x00079508 str r6, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r6;
    0x0007950a str r5, [sp]                                      |     *(sp) = r5;
    0x0007950c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079510 ldr r0, [sp, 0x5c]                                |     r0 = var_5ch;
    0x00079512 add r2, sp, 0xc0                                  |     r2 += var_c0h;
    0x00079514 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00079516 str r6, [sp, 0xc4]                                |     var_c4h = r6;
    0x00079518 cmp r0, 0                                         |     
    0x0007951a ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0007951c ldrsh.w r3, [r0, 0x22]                            |     r3 = *((r0 + 0x22));
    0x00079520 mov r0, r7                                        |     r0 = r7;
    0x00079522 str r3, [sp, 0xd0]                                |     var_d0h = r3;
    0x00079524 mov.w r3, 0                                       |     r3 = 0;
    0x00079528 str r3, [sp, 0xc8]                                |     var_c8h = r3;
    0x0007952a str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x0007952c ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x0007952e it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00079530 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00079532 str r3, [sp, 0xcc]                                |     var_cch = r3;
    0x00079534 movs r3, 0xd                                      |     r3 = 0xd;
    0x00079536 strb.w r3, [sp, 0xc0]                             |     var_c0h = r3;
    0x0007953a bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x0007953e ldr r3, [sp, 0xcc]                                |     r3 = var_cch;
    0x00079540 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x00079542 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00079544 bne.w 0x792d4                                     |         goto label_0;
                                                                 |     }
    0x00079548 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0007954a ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0007954c str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0007954e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079550 bne.w 0x792d4                                     |         goto label_0;
                                                                 |     }
    0x00079554 mov r1, r6                                        |     r1 = r6;
    0x00079556 mov r0, fp                                        |     r0 = fp;
    0x00079558 bl 0x2a700                                        |     fcn_0002a700 (r0, r1, r2);
    0x0007955c ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x00079560 cmp r4, 0                                         |     
    0x00079562 ldr.w r3, [fp, 0x6c]                              |     r3 = *(arg_6ch);
    0x00079566 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x0007956a it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x0007956c addlt r4, r3, -1                                  |         r4 = r3 + -1;
                                                                 |     }
    0x00079570 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00079572 bne.w 0x7a786                                     |         goto label_119;
                                                                 |     }
    0x00079576 ldr.w r2, [fp, 0x68]                              |     r2 = *(arg_68h);
    0x0007957a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0007957e add.w r2, r2, r4, lsl 2                           |     r2 += (r4 << 2);
                                                                 | label_65:
    0x00079582 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x00079584 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00079586 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00079588 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0007958a str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0007958c ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x0007958e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079590 beq.w 0x7a6de                                     |         goto label_120;
                                                                 |     }
                                                                 | label_59:
    0x00079594 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00079596 ldr r2, [r1, 0x28]                                |     r2 = *((r1 + 0x28));
    0x00079598 ldrb r3, [r1, 0x13]                               |     r3 = *((r1 + 0x13));
    0x0007959a str r2, [sp, 0x60]                                |     var_60h = r2;
    0x0007959c adds r2, 1                                        |     r2++;
    0x0007959e str r2, [r1, 0x28]                                |     *((r1 + 0x28)) = r2;
    0x000795a0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000795a2 beq.w 0x7a7bc                                     |         goto label_121;
                                                                 |     }
    0x000795a6 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x000795a8 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000795aa uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x000795ac add.w r1, r2, 0x26                                |     r1 = r2 + 0x26;
    0x000795b0 strb r2, [r0, 0x13]                               |     *((r0 + 0x13)) = r2;
    0x000795b2 ldr.w r7, [r0, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r7 = *((r0 + offset_0));
    0x000795b6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000795b8 beq.w 0x7a7ac                                     |         goto label_122;
                                                                 |     }
    0x000795bc ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000795be subs r3, 2                                        |     r3 -= 2;
    0x000795c0 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x000795c2 strb r3, [r2, 0x13]                               |     *((r2 + 0x13)) = r3;
    0x000795c4 adds r3, 0x26                                     |     r3 += 0x26;
    0x000795c6 ldr.w sl, [r2, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     sl = *((r2 + offset_1));
                                                                 | label_68:
    0x000795ca movs r6, 0                                        |     r6 = 0;
    0x000795cc ldrd r3, r2, [sp, 0x5c]                           |     __asm ("ldrd r3, r2, [var_5ch]");
    0x000795d0 movs r1, 0x76                                     |     r1 = 0x76;
    0x000795d2 mov r0, fp                                        |     r0 = fp;
    0x000795d4 str r6, [sp]                                      |     *(sp) = r6;
    0x000795d6 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000795da ldrd r4, r3, [fp, 0x6c]                           |     __asm ("ldrd r4, r3, [arg_6ch]");
    0x000795de ldr r2, [sp, 0xc4]                                |     r2 = var_c4h;
    0x000795e0 cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x000795e2 bge.w 0x7a79a                                     |         goto label_123;
                                                                 |     }
    0x000795e6 add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x000795ea ldr.w r0, [fp, 0x68]                              |     r0 = *(arg_68h);
    0x000795ee adds r1, r4, 1                                    |     r1 = r4 + 1;
    0x000795f0 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000795f2 str.w r1, [fp, 0x6c]                              |     __asm ("str.w r1, [arg_6ch]");
    0x000795f6 mov.w ip, 0xb                                     |     
    0x000795fa adds r1, r0, r3                                   |     r1 = r0 + r3;
    0x000795fc strd r2, r6, [r1, 4]                              |     __asm ("strd r2, r6, [r1, 4]");
    0x00079600 strd r6, r6, [r1, 0xc]                            |     __asm ("strd r6, r6, [r1, 0xc]");
    0x00079604 str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
                                                                 | label_67:
    0x00079608 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0007960a movs r1, 0x61                                     |     r1 = 0x61;
    0x0007960c ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x0007960e mov r0, fp                                        |     r0 = fp;
    0x00079610 str r7, [sp]                                      |     *(sp) = r7;
    0x00079612 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079616 ldr r5, [sp, 0x60]                                |     r5 = var_60h;
    0x00079618 movs r3, 0                                        |     r3 = 0;
    0x0007961a movs r1, 0x7f                                     |     r1 = 0x7f;
    0x0007961c str r3, [sp]                                      |     *(sp) = r3;
    0x0007961e mov r0, fp                                        |     r0 = fp;
    0x00079620 mov r3, sl                                        |     r3 = sl;
    0x00079622 mov r2, r5                                        |     r2 = r5;
    0x00079624 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079628 mov r3, r7                                        |     r3 = r7;
    0x0007962a mov r2, r5                                        |     r2 = r5;
    0x0007962c movs r1, 0x80                                     |     r1 = 0x80;
    0x0007962e mov r0, fp                                        |     r0 = fp;
    0x00079630 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00079634 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079638 mov r1, r4                                        |     r1 = r4;
    0x0007963a mov r0, fp                                        |     r0 = fp;
    0x0007963c bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00079640 ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x00079644 cmp r4, 0                                         |     
    0x00079646 ldr.w r3, [fp, 0x6c]                              |     r3 = *(arg_6ch);
    0x0007964a ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x0007964e it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00079650 addlt r4, r3, -1                                  |         r4 = r3 + -1;
                                                                 |     }
    0x00079654 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00079656 bne.w 0x7a790                                     |         goto label_124;
                                                                 |     }
    0x0007965a ldr.w r2, [fp, 0x68]                              |     r2 = *(arg_68h);
    0x0007965e add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00079662 add.w r2, r2, r4, lsl 2                           |     r2 += (r4 << 2);
                                                                 | label_66:
    0x00079666 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
                                                                 |     if (r7 != 0) {
    0x00079668 cbz r7, 0x7967e                                   |         
    0x0007966a ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0007966c ldrb r3, [r1, 0x13]                               |         r3 = *((r1 + 0x13));
    0x0007966e cmp r3, 7                                         |         
                                                                 |         if (r3 > 7) {
    0x00079670 bhi.w 0x79f3a                                     |             goto label_125;
                                                                 |         }
    0x00079674 adds r2, r3, 1                                    |         r2 = r3 + 1;
    0x00079676 adds r3, 0x26                                     |         r3 += 0x26;
    0x00079678 strb r2, [r1, 0x13]                               |         *((r1 + 0x13)) = r2;
    0x0007967a str.w r7, [r1, r3, lsl 2]                         |         __asm ("str.w r7, [r1, r3, lsl 2]");
                                                                 |     }
    0x0007967e cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00079682 beq.w 0x79f3a                                     |         goto label_125;
                                                                 |     }
    0x00079686 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00079688 ldrb r3, [r3, 0x13]                               |     r3 = *((r3 + 0x13));
    0x0007968a cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x0007968c bhi.w 0x79f3a                                     |         goto label_125;
                                                                 |     }
    0x00079690 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00079692 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00079694 adds r3, 0x26                                     |     r3 += 0x26;
    0x00079696 movs r7, 1                                        |     r7 = 1;
    0x00079698 strb r2, [r1, 0x13]                               |     *((r1 + 0x13)) = r2;
    0x0007969a str.w sl, [r1, r3, lsl 2]                         |     __asm ("str.w sl, [r1, r3, lsl 2]");
    0x0007969e b 0x79814                                         |     goto label_25;
                                                                 | label_105:
    0x000796a0 mov r0, r3                                        |     r0 = r3;
    0x000796a2 mov r5, r3                                        |     r5 = r3;
    0x000796a4 bl 0x16a58                                        |     fcn_00016a58 (r0, r1);
    0x000796a8 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
                                                                 |     if (r3 != 0) {
    0x000796aa cbz r3, 0x796b0                                   |         
    0x000796ac str r4, [sp, 0x30]                                |         var_30h = r4;
    0x000796ae b 0x792f2                                         |         goto label_3;
                                                                 |     }
    0x000796b0 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000796b2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000796b4 beq 0x7972c                                       |         goto label_97;
                                                                 |     }
    0x000796b6 mov r1, r3                                        |     r1 = r3;
    0x000796b8 movs r2, 1                                        |     r2 = 1;
    0x000796ba mov r0, r5                                        |     r0 = r5;
    0x000796bc bl 0x16b48                                        |     fcn_00016b48 (r0, r1, r2);
    0x000796c0 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
                                                                 |     if (r3 == 0) {
    0x000796c2 cbz r3, 0x79704                                   |         goto label_98;
                                                                 |     }
    0x000796c4 ldr.w r2, [pc, 0x668]                             |     
    0x000796c8 ldr.w r3, [pc, 0x658]                             |     r3 = *(0x79d24);
    0x000796cc add r2, pc                                        |     r2 = 0xf3400;
    0x000796ce ldr r3, [r2, r3]                                  |     r3 = *(0xf3400);
    0x000796d0 ldr r2, [r3]                                      |     r2 = *(0xf3400);
    0x000796d2 ldr r3, [sp, 0x174]                               |     r3 = var_174h;
    0x000796d4 eors r2, r3                                       |     r2 ^= r3;
    0x000796d6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000796da bne 0x7974a                                       |         goto label_99;
                                                                 |     }
                                                                 | label_7:
    0x000796dc ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x000796de ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x000796e0 add sp, 0x17c                                     |     
    0x000796e2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x000796e6 b.w 0x15350                                       |     void (*0x15350)() ();
                                                                 | label_110:
    0x000796ea ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000796ec ldr r3, [r3]                                      |     r3 = *(r3);
    0x000796ee ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x000796f0 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
                                                                 |     if (r3 == 0) {
    0x000796f2 cbz r3, 0x796fc                                   |         goto label_111;
                                                                 |     }
    0x000796f4 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x000796f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000796f8 bne.w 0x79350                                     |         goto label_4;
                                                                 |     }
                                                                 | label_111:
    0x000796fc movs r3, 0                                        |     r3 = 0;
    0x000796fe str r3, [sp, 0xbc]                                |     var_bch = r3;
    0x00079700 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00079702 b 0x7936c                                         |     goto label_5;
                                                                 |     do {
                                                                 | label_98:
    0x00079704 ldr.w r2, [pc, 0x62c]                             |         
    0x00079708 ldr.w r3, [pc, 0x618]                             |         r3 = *(0x79d24);
    0x0007970c add r2, pc                                        |         r2 = 0xf3444;
    0x0007970e ldr r3, [r2, r3]                                  |         r3 = *(0xf3444);
    0x00079710 ldr r2, [r3]                                      |         r2 = *(0xf3444);
    0x00079712 ldr r3, [sp, 0x174]                               |         r3 = var_174h;
    0x00079714 eors r2, r3                                       |         r2 ^= r3;
    0x00079716 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0007971a bne 0x7974a                                       |             goto label_99;
                                                                 |         }
    0x0007971c add sp, 0x17c                                     |         
    0x0007971e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_108:
    0x00079722 ldr r1, [sp, 0x44]                                |         r1 = var_44h;
    0x00079724 ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x00079726 bl 0x16a58                                        |         fcn_00016a58 (r0, r1);
    0x0007972a b 0x792ee                                         |         goto label_6;
                                                                 | label_97:
    0x0007972c ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x0007972e cmp r3, 0                                         |         
    0x00079730 beq 0x79704                                       |         
                                                                 |     } while (r3 == 0);
    0x00079732 ldr.w r2, [pc, 0x604]                             |     r2 = *(0x00079d38);
    0x00079736 ldr.w r3, [pc, 0x5ec]                             |     r3 = *(0x79d26);
    0x0007973a add r2, pc                                        |     r2 += pc;
    0x0007973c ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0007973e ldr r2, [r3]                                      |     r2 = *(0x79d26);
    0x00079740 ldr r3, [sp, 0x174]                               |     r3 = var_174h;
    0x00079742 eors r2, r3                                       |     r2 ^= r3;
    0x00079744 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x00079748 beq 0x796dc                                       |         goto label_7;
                                                                 |     }
                                                                 | label_99:
    0x0007974a blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_113:
    0x0007974e ldrb.w r3, [fp, 0x96]                             |     r3 = *(arg_96h);
    0x00079752 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x00079756 strb.w r3, [fp, 0x96]                             |     *(arg_96h) = r3;
    0x0007975a b 0x793ac                                         |     goto label_8;
                                                                 | label_112:
    0x0007975c ldr r3, [r3, 0x74]                                |     r3 = *((r3 + 0x74));
    0x0007975e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079760 beq.w 0x79f0e                                     |         goto label_126;
                                                                 |     }
                                                                 | label_24:
    0x00079764 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00079766 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x0007976a mov fp, r0                                        |     
    0x0007976c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007976e bne.w 0x793a2                                     |         goto label_9;
                                                                 |     }
    0x00079772 b 0x792d4                                         |     goto label_0;
                                                                 | label_107:
    0x00079774 mov r3, r2                                        |     r3 = r2;
    0x00079776 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x00079778 ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x0007977a mov r1, r3                                        |     r1 = r3;
    0x0007977c ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0007977e str r4, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r4;
    0x00079780 str r2, [sp, 0x58]                                |     var_58h = r2;
    0x00079782 movs r2, 1                                        |     r2 = 1;
    0x00079784 bl 0x16b48                                        |     fcn_00016b48 (r0, r1, r2);
    0x00079788 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x0007978a ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007978c bl 0x745a0                                        |     fcn_000745a0 (r0, r1);
    0x00079790 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00079792 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00079794 beq.w 0x79f1e                                     |         goto label_127;
                                                                 |     }
    0x00079798 str r4, [sp, 0x3c]                                |     var_3ch = r4;
    0x0007979a b 0x79296                                         |     goto label_10;
                                                                 | label_116:
    0x0007979c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007979e bne.w 0x7948a                                     |         goto label_11;
                                                                 |     }
    0x000797a2 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000797a4 mov fp, r2                                        |     
    0x000797a6 ldrh.w r0, [lr, 0xa]                              |     r0 = *((lr + 0xa));
    0x000797aa ldrsh.w lr, [r2, 0x20]                            |     
    0x000797ae cmp r8, r1                                        |     
    0x000797b0 it ne                                             |     
                                                                 |     if (r8 == r1) {
    0x000797b2 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000797b4 str r1, [r7, 0xc]                                 |     *((r7 + 0xc)) = r1;
    0x000797b6 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x000797b8 and r0, r0, 0x60                                  |     r0 &= 0x60;
    0x000797bc ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000797be cmp lr, r1                                        |     
    0x000797c0 it eq                                             |     
                                                                 |     if (lr != r1) {
    0x000797c2 moveq r3, r8                                      |         r3 = r8;
                                                                 |     }
    0x000797c4 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000797c6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000797c8 bne.w 0x79f26                                     |         goto label_128;
                                                                 |     }
    0x000797cc cmp r6, r1                                        |     
                                                                 |     if (r6 > r1) {
    0x000797ce bgt.w 0x794d8                                     |         goto label_12;
                                                                 |     }
    0x000797d2 b 0x794b4                                         |     goto label_13;
                                                                 | label_115:
    0x000797d4 mov.w r3, -1                                      |     r3 = -1;
    0x000797d8 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000797da b 0x794e6                                         |     goto label_14;
                                                                 | label_118:
    0x000797dc ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000797de add r0, sp, 0xdc                                  |     r0 += var_dch;
    0x000797e0 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000797e2 str r3, [sp, 0xe0]                                |     var_e0h = r3;
    0x000797e4 strd r3, r3, [sp, 0xe4]                           |     __asm ("strd r3, r3, [var_e4h]");
    0x000797e8 strd r3, r3, [sp, 0xec]                           |     __asm ("strd r3, r3, [var_ech]");
    0x000797ec strd r3, r3, [sp, 0xf4]                           |     __asm ("strd r3, r3, [var_f4h]");
    0x000797f0 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000797f2 str r2, [sp, 0xdc]                                |     var_dch = r2;
    0x000797f4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000797f6 beq.w 0x7998e                                     |         goto label_129;
                                                                 |     }
    0x000797fa mov r1, r3                                        |     r1 = r3;
    0x000797fc ldr r3, [r3]                                      |     r3 = *(r3);
    0x000797fe str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00079800 bl 0x2d0d0                                        |     fcn_0002d0d0 (r0, r1);
    0x00079804 str r0, [sp, 0x80]                                |     var_80h = r0;
    0x00079806 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00079808 bne.w 0x7ac9e                                     |         goto label_130;
                                                                 |     }
    0x0007980c ldr r7, [sp, 0x3c]                                |     r7 = var_3ch;
    0x0007980e mov.w r3, -1                                      |     r3 = -1;
    0x00079812 str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 | label_25:
    0x00079814 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00079816 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x00079818 clz r3, r3                                        |     r3 &= r3;
    0x0007981c lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0007981e cmp r2, 0                                         |     
    0x00079820 it le                                             |     
                                                                 |     if (r2 > 0) {
    0x00079822 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00079824 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079826 beq.w 0x7999a                                     |         goto label_131;
                                                                 |     }
    0x0007982a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007982c ldrsh.w r4, [r3, 0x20]                            |     r4 = *((r3 + 0x20));
    0x00079830 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x00079832 cmp r4, 0                                         |     
    0x00079834 str r4, [sp, 0x50]                                |     var_50h = r4;
                                                                 |     if (r4 < 0) {
    0x00079836 blt 0x7985e                                       |         goto label_132;
                                                                 |     }
    0x00079838 tst.w r1, 0x60                                    |     
                                                                 |     if ((r1 & 0x60) == 0) {
    0x0007983c beq 0x7985e                                       |         goto label_132;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x0007983e cbz r4, 0x7985e                                   |         goto label_132;
                                                                 |     }
    0x00079840 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x00079842 add.w r3, r4, r4, lsl 1                           |     r3 = r4 + (r4 << 1);
    0x00079846 add.w r3, r0, r3, lsl 2                           |     r3 = r0 + (r3 << 2);
                                                                 |     do {
    0x0007984a ldrh r2, [r3, -0x2]                               |         r2 = *((r3 - 0x2));
    0x0007984e and r2, r2, 0x60                                  |         r2 &= 0x60;
                                                                 |         if (r2 != 0) {
    0x00079852 cbz r2, 0x79856                                   |             
    0x00079854 subs r4, 1                                        |             r4--;
                                                                 |         }
    0x00079856 subs r3, 0xc                                      |         r3 -= 0xc;
    0x00079858 cmp r3, r0                                        |         
    0x0007985a bne 0x7984a                                       |         
                                                                 |     } while (r3 != r0);
    0x0007985c str r4, [sp, 0x50]                                |     var_50h = r4;
                                                                 | label_132:
    0x0007985e ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00079860 tst.w r1, 0x62                                    |     
    0x00079864 ldrsh.w r3, [r2, 0x22]                            |     r3 = *((r2 + 0x22));
                                                                 |     if ((r1 & 0x62) == 0) {
    0x00079868 beq 0x7988c                                       |         goto label_133;
                                                                 |     }
    0x0007986a cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0007986c ble.w 0x7ac88                                     |         goto label_134;
                                                                 |     }
    0x00079870 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00079872 movs r0, 0xc                                      |     r0 = 0xc;
    0x00079874 movs r1, 0                                        |     r1 = 0;
    0x00079876 smlabb r0, r3, r0, r2                             |     __asm ("smlabb r0, r3, r0, r2");
                                                                 |     do {
    0x0007987a ldrh r4, [r2, 0xa]                                |         r4 = *((r2 + 0xa));
    0x0007987c and r4, r4, 0x62                                  |         r4 &= 0x62;
                                                                 |         if (r4 != 0) {
    0x00079880 cbz r4, 0x79884                                   |             
    0x00079882 adds r1, 1                                        |             r1++;
                                                                 |         }
    0x00079884 adds r2, 0xc                                      |         r2 += 0xc;
    0x00079886 cmp r2, r0                                        |         
    0x00079888 bne 0x7987a                                       |         
                                                                 |     } while (r2 != r0);
    0x0007988a subs r3, r3, r1                                   |     r3 -= r1;
                                                                 | label_133:
    0x0007988c ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0007988e cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00079890 bne.w 0x7ac88                                     |         goto label_134;
                                                                 |     }
                                                                 | label_15:
    0x00079894 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00079896 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x00079898 ands r3, r3, 1                                    |     r3 &= 1;
                                                                 |     if (r3 == r3) {
    0x0007989c beq.w 0x799b8                                     |         goto label_84;
                                                                 |     }
    0x000798a0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000798a2 ldrb r2, [r3, 0x12]                               |     r2 = *((r3 + 0x12));
    0x000798a4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000798a6 bne.w 0x7ace0                                     |         goto label_135;
                                                                 |     }
    0x000798aa ldr r3, [r3, 0x78]                                |     r3 = *((r3 + 0x78));
    0x000798ac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000798ae beq.w 0x7aa2e                                     |         goto label_136;
                                                                 |     }
    0x000798b2 str r2, [sp, 0x70]                                |     var_70h = r2;
                                                                 | label_16:
    0x000798b4 ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x000798b6 cmp r3, 2                                         |     
    0x000798b8 itt eq                                            |     
                                                                 |     if (r3 != 2) {
    0x000798ba moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x000798bc streq r3, [sp, 0x74]                              |         var_74h = r3;
                                                                 |     }
                                                                 |     if (r3 == 2) {
    0x000798be beq 0x79930                                       |         goto label_137;
                                                                 |     }
    0x000798c0 ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x000798c4 add r3, sp, 0xb8                                  |     r3 += var_b8h;
    0x000798c6 ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
    0x000798ca movs r4, 0                                        |     r4 = 0;
    0x000798cc str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000798ce add r3, sp, 0xb4                                  |     r3 += var_b4h;
    0x000798d0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000798d2 mov.w r3, -1                                      |     r3 = -1;
    0x000798d6 movs r2, 0x71                                     |     r2 = 0x71;
    0x000798d8 mov r1, sb                                        |     r1 = sb;
    0x000798da str r3, [sp]                                      |     *(sp) = r3;
    0x000798dc mov r0, r8                                        |     r0 = r8;
    0x000798de mov r3, r4                                        |     r3 = r4;
    0x000798e0 str r4, [sp, 4]                                   |     var_4h = r4;
    0x000798e2 bl 0x2bc74                                        |     r0 = fcn_0002bc74 (r0, r1, r2, r3, r4, r5, r6);
    0x000798e6 adds r2, r0, 2                                    |     r2 = r0 + 2;
    0x000798e8 mov r6, r0                                        |     r6 = r0;
    0x000798ea lsl.w sl, r2, 2                                   |     sl = r2 << 2;
    0x000798ee ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x000798f0 mov r3, r4                                        |     r3 = r4;
    0x000798f2 mov r2, sl                                        |     r2 = sl;
    0x000798f4 bl 0x1d740                                        |     fcn_0001d740 (r0, r1);
    0x000798f8 str r0, [sp, 0x74]                                |     var_74h = r0;
    0x000798fa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000798fc beq.w 0x792d4                                     |         goto label_0;
                                                                 |     }
    0x00079900 cmp r6, r4                                        |     
    0x00079902 ldr.w r1, [sb, 8]                                 |     r1 = *((sb + 8));
    0x00079906 ldr.w r3, [r8, 0x2c]                              |     r3 = *((r8 + 0x2c));
                                                                 |     if (r6 <= r4) {
    0x0007990a ble.w 0x7ad74                                     |         goto label_138;
                                                                 |     }
    0x0007990e sub.w r2, sl, 8                                   |     r2 = sl - 8;
    0x00079912 add r2, r0                                        |     r2 += r0;
                                                                 |     do {
    0x00079914 ldrh r4, [r1, 0x34]                               |         r4 = *((r1 + 0x34));
    0x00079916 adds r3, 1                                        |         r3++;
    0x00079918 str r3, [r0], 4                                   |         *(r0) = r3;
                                                                 |         r0 += 4;
    0x0007991c cmp r2, r0                                        |         
    0x0007991e ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
    0x00079920 add r3, r4                                        |         r3 += r4;
    0x00079922 bne 0x79914                                       |         
                                                                 |     } while (r2 != r0);
                                                                 | label_103:
    0x00079924 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00079926 adds r3, 1                                        |     r3++;
    0x00079928 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0007992a ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0007992c str.w r3, [r2, r6, lsl 2]                         |     __asm ("str.w r3, [r2, r6, lsl 2]");
                                                                 | label_137:
    0x00079930 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00079932 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079934 beq 0x799c0                                       |         goto label_139;
                                                                 |     }
    0x00079936 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079938 ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x0007993c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0007993e beq.w 0x7aa52                                     |         goto label_140;
                                                                 |     }
    0x00079942 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00079944 beq.w 0x7ac7c                                     |         goto label_141;
                                                                 |     }
    0x00079948 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0007994a ldr r1, [r3]                                      |     r1 = *(r3);
    0x0007994c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007994e beq.w 0x7aaa8                                     |         goto label_142;
                                                                 |     }
    0x00079952 ldr r0, [r1]                                      |     r0 = *(r1);
    0x00079954 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00079956 ble.w 0x7aaa8                                     |         goto label_142;
                                                                 |     }
    0x0007995a movs r3, 0                                        |     r3 = 0;
    0x0007995c b 0x79964                                         |     
                                                                 |     while (r4 >= r4) {
    0x0007995e cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00079960 beq.w 0x7aaa8                                     |             goto label_142;
                                                                 |         }
    0x00079964 adds r3, 1                                        |         r3++;
    0x00079966 lsls r2, r3, 4                                    |         r2 = r3 << 4;
    0x00079968 adds r4, r1, r2                                   |         r4 = r1 + r2;
    0x0007996a ldrb r4, [r4, 1]                                  |         r4 = *((r4 + 1));
    0x0007996c lsls r4, r4, 0x1a                                 |         r4 <<= 0x1a;
    0x0007996e bpl 0x7995e                                       |         
                                                                 |     }
    0x00079970 ldrb r3, [r1, r2]                                 |     r3 = *((r1 + r2));
    0x00079972 cmp r3, 3                                         |     
    0x00079974 it ne                                             |     
                                                                 |     if (r3 != 3) {
    0x00079976 cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
                                                                 |     if (r3 != 3) {
    0x00079978 bne.w 0x7ad7a                                     |         goto label_143;
                                                                 |     }
    0x0007997c ldr r2, [pc, 0x3bc]                               |     
    0x0007997e add r2, pc                                        |     r2 = 0xf36be;
                                                                 | label_104:
    0x00079980 ldr r1, [pc, 0x3bc]                               |     
    0x00079982 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00079984 add r1, pc                                        |     r1 = 0xf36c8;
    0x00079986 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0007998a b.w 0x7aa60                                       |     goto label_96;
                                                                 | label_129:
    0x0007998e ldr r7, [sp, 0x58]                                |     r7 = var_58h;
    0x00079990 mov.w r3, -1                                      |     r3 = -1;
    0x00079994 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00079996 str r7, [sp, 0x80]                                |     var_80h = r7;
    0x00079998 str r7, [sp, 0x5c]                                |     var_5ch = r7;
                                                                 | label_131:
    0x0007999a ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0007999c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007999e beq.w 0x79894                                     |         goto label_15;
                                                                 |     }
    0x000799a2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000799a4 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x000799a6 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x000799a8 beq.w 0x79894                                     |         goto label_15;
                                                                 |     }
    0x000799ac ldr r1, [pc, 0x394]                               |     
    0x000799ae ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000799b0 add r1, pc                                        |     r1 = 0xf36f8;
    0x000799b2 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x000799b6 b 0x792d4                                         |     goto label_0;
                                                                 | label_84:
    0x000799b8 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x000799ba b 0x798b4                                         |     goto label_16;
                                                                 | label_88:
    0x000799bc ldrd fp, r7, [sp, 0xa8]                           |     __asm ("ldrd fp, r7, [var_a8h]");
                                                                 | label_139:
    0x000799c0 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000799c2 bne.w 0x7acee                                     |         goto label_144;
                                                                 |     }
    0x000799c6 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000799c8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000799ca beq.w 0x7ace8                                     |         goto label_145;
                                                                 |     }
    0x000799ce ldrd r6, r3, [fp, 0x6c]                           |     __asm ("ldrd r6, r3, [arg_6ch]");
    0x000799d2 ldr r2, [sp, 0xc4]                                |     r2 = var_c4h;
    0x000799d4 cmp r6, r3                                        |     
                                                                 |     if (r6 >= r3) {
    0x000799d6 bge.w 0x7a6ba                                     |         goto label_146;
                                                                 |     }
    0x000799da add.w r3, r6, r6, lsl 2                           |     r3 = r6 + (r6 << 2);
    0x000799de ldr.w r0, [fp, 0x68]                              |     r0 = *(arg_68h);
    0x000799e2 adds r1, r6, 1                                    |     r1 = r6 + 1;
    0x000799e4 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000799e6 str.w r1, [fp, 0x6c]                              |     __asm ("str.w r1, [arg_6ch]");
    0x000799ea movs r4, 0xb                                      |     r4 = 0xb;
    0x000799ec adds r1, r0, r3                                   |     r1 = r0 + r3;
    0x000799ee strd r2, r7, [r1, 4]                              |     __asm ("strd r2, r7, [r1, 4]");
    0x000799f2 strd r7, r7, [r1, 0xc]                            |     __asm ("strd r7, r7, [r1, 0xc]");
    0x000799f6 str r4, [r0, r3]                                  |     *((r0 + r3)) = r4;
                                                                 | label_57:
    0x000799f8 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000799fa cmp r2, 0                                         |     
                                                                 |     if (r2 >= 0) {
    0x000799fc blt 0x79a10                                       |         
    0x000799fe ldr r1, [sp, 0x80]                                |         r1 = var_80h;
    0x00079a00 movs r3, 0                                        |         r3 = 0;
    0x00079a02 str r3, [sp]                                      |         *(sp) = r3;
    0x00079a04 mov r0, fp                                        |         r0 = fp;
    0x00079a06 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00079a08 add r2, r1                                        |         r2 += r1;
    0x00079a0a movs r1, 0x50                                     |         r1 = 0x50;
    0x00079a0c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_100:
    0x00079a10 str r6, [sp, 0x34]                                |     var_34h = r6;
                                                                 | label_101:
    0x00079a12 ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x00079a14 ldr r3, [sp, 0xa4]                                |     r3 = var_a4h;
    0x00079a16 ldrsh.w r1, [r5, 0x22]                            |     r1 = *((r5 + 0x22));
    0x00079a1a and r8, r3, 1                                     |     r8 = r3 & 1;
    0x00079a1e cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x00079a20 ble 0x79ad0                                       |         goto label_147;
                                                                 |     }
    0x00079a22 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00079a24 mov.w ip, 0                                       |     
    0x00079a28 ldr r4, [sp, 0x7c]                                |     r4 = var_7ch;
    0x00079a2a mov sl, ip                                        |     sl = ip;
    0x00079a2c str r6, [sp, 0x68]                                |     var_68h = r6;
    0x00079a2e mov r6, ip                                        |     r6 = ip;
    0x00079a30 str.w r8, [sp, 0x40]                              |     __asm ("str.w r8, [var_40h]");
    0x00079a34 add.w sb, r3, 0xc                                 |     sb = r3 + 0xc;
    0x00079a38 mov r8, r3                                        |     r8 = r3;
                                                                 | label_17:
    0x00079a3a ldrsh.w r3, [r5, 0x20]                            |     r3 = *((r5 + 0x20));
    0x00079a3e cmp r3, sl                                        |     
                                                                 |     if (r3 == sl) {
    0x00079a40 beq.w 0x7a03c                                     |         goto label_148;
                                                                 |     }
    0x00079a44 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00079a46 add.w r3, sl, sl, lsl 1                           |     r3 = sl + (sl << 1);
    0x00079a4a add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x00079a4e ldrh r0, [r2, 0xa]                                |     r0 = *((r2 + 0xa));
    0x00079a50 tst.w r0, 0x62                                    |     
                                                                 |     if ((r0 & 0x62) == 0) {
    0x00079a54 beq.w 0x79cde                                     |         goto label_149;
                                                                 |     }
    0x00079a58 ands r3, r0, 0x20                                 |     r3 = r0 & 0x20;
    0x00079a5c add.w r6, r6, 1                                   |     r6++;
                                                                 |     if (r3 != r0) {
    0x00079a60 bne 0x79ac2                                       |         goto label_31;
                                                                 |     }
    0x00079a62 lsls r0, r0, 0x19                                 |     r0 <<= 0x19;
                                                                 |     if (r0 < r0) {
    0x00079a64 bmi.w 0x7a69e                                     |         goto label_150;
                                                                 |     }
    0x00079a68 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00079a6c beq.w 0x7a00e                                     |         goto label_151;
                                                                 |     }
                                                                 | label_19:
    0x00079a70 ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x00079a74 cmp r0, 0                                         |     
    0x00079a76 itt gt                                            |     
                                                                 |     if (r0 <= 0) {
    0x00079a78 movgt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r0 <= 0) {
    0x00079a7a movgt ip, r1                                      |         
                                                                 |     }
                                                                 |     if (r0 > 0) {
    0x00079a7c bgt 0x79a88                                       |         goto label_152;
                                                                 |     }
    0x00079a7e b 0x79fde                                         |     goto label_153;
                                                                 |     do {
    0x00079a80 adds r3, 1                                        |         r3++;
    0x00079a82 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00079a84 beq.w 0x79fde                                     |             goto label_153;
                                                                 |         }
                                                                 | label_152:
    0x00079a88 ldr.w r1, [sb, r3, lsl 3]                         |         offset_2 = r3 << 3;
                                                                 |         r1 = *((sb + offset_2));
    0x00079a8c cmp r1, sl                                        |         
    0x00079a8e bne 0x79a80                                       |         
                                                                 |     } while (r1 != sl);
    0x00079a90 cmp r0, r3                                        |     
    0x00079a92 mov r1, ip                                        |     r1 = ip;
                                                                 |     if (r0 <= r3) {
    0x00079a94 ble.w 0x79fde                                     |         goto label_153;
                                                                 |     }
                                                                 | label_20:
    0x00079a98 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00079a9a bne.w 0x79cf4                                     |         goto label_154;
                                                                 |     }
    0x00079a9e ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00079aa0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00079aa2 beq.w 0x79fb2                                     |         goto label_155;
                                                                 |     }
    0x00079aa6 ldrd r0, r2, [sp, 0x7c]                           |     __asm ("ldrd r0, r2, [var_7ch]");
    0x00079aaa cmp r0, r2                                        |     
                                                                 |     if (r0 != r2) {
    0x00079aac beq 0x79ac0                                       |         
    0x00079aae adds r2, r3, r2                                   |         r2 = r3 + r2;
    0x00079ab0 movs r1, 0x51                                     |         r1 = 0x51;
    0x00079ab2 mov r3, r4                                        |         r3 = r4;
    0x00079ab4 mov r0, fp                                        |         r0 = fp;
    0x00079ab6 str r7, [sp]                                      |         *(sp) = r7;
    0x00079ab8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00079abc ldrsh.w r1, [r5, 0x22]                            |         r1 = *((r5 + 0x22));
                                                                 |     }
                                                                 | label_21:
    0x00079ac0 adds r4, 1                                        |     r4++;
                                                                 | label_31:
    0x00079ac2 add.w sl, sl, 1                                   |     sl++;
    0x00079ac6 cmp r1, sl                                        |     
                                                                 |     if (r1 > sl) {
    0x00079ac8 bgt 0x79a3a                                       |         goto label_17;
                                                                 |     }
    0x00079aca ldr r6, [sp, 0x68]                                |     r6 = var_68h;
    0x00079acc ldr.w r8, [sp, 0x40]                              |     r8 = var_40h;
                                                                 | label_147:
    0x00079ad0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00079ad2 ldr r2, [r3, 0x38]                                |     r2 = *((r3 + 0x38));
    0x00079ad4 str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x00079ad6 subs r2, 1                                        |     r2--;
    0x00079ad8 mov sl, r2                                        |     sl = r2;
    0x00079ada str r2, [r3, 0x38]                                |     *((r3 + 0x38)) = r2;
    0x00079adc cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00079ae0 bne.w 0x7a1a2                                     |         goto label_156;
                                                                 |     }
                                                                 | label_40:
    0x00079ae4 ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x00079ae6 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00079ae8 beq.w 0x79c30                                     |         goto label_32;
                                                                 |     }
    0x00079aec ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079aee ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x00079af2 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00079af4 beq.w 0x7a192                                     |         goto label_157;
                                                                 |     }
                                                                 | label_39:
    0x00079af8 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00079afa cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00079afc blt.w 0x7a168                                     |         goto label_158;
                                                                 |     }
    0x00079b00 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00079b02 bne.w 0x7a106                                     |         goto label_159;
                                                                 |     }
    0x00079b06 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00079b08 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079b0a beq.w 0x7a0e2                                     |         goto label_160;
                                                                 |     }
                                                                 | label_34:
    0x00079b0e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079b10 ldr.w r4, [fp, 0x6c]                              |     r4 = *(arg_6ch);
    0x00079b14 ldrb.w r2, [r3, 0x2b]                             |     r2 = *((r3 + 0x2b));
    0x00079b18 mov r3, r4                                        |     r3 = r4;
    0x00079b1a cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00079b1c beq.w 0x7a12e                                     |         goto label_161;
                                                                 |     }
    0x00079b20 ldr.w r3, [fp, 0x70]                              |     r3 = *(arg_70h);
    0x00079b24 cmp r3, r4                                        |     
                                                                 |     if (r3 <= r4) {
    0x00079b26 ble.w 0x7a156                                     |         goto label_162;
                                                                 |     }
    0x00079b2a add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x00079b2e ldr.w r0, [fp, 0x68]                              |     r0 = *(arg_68h);
    0x00079b32 ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x00079b34 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00079b36 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00079b38 str.w r2, [fp, 0x6c]                              |     __asm ("str.w r2, [arg_6ch]");
    0x00079b3c movs r1, 0                                        |     r1 = 0;
    0x00079b3e adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x00079b40 mov.w ip, 0x33                                    |     
    0x00079b44 strd r5, r1, [r2, 4]                              |     __asm ("strd r5, r1, [r2, 4]");
    0x00079b48 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x00079b4c str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
                                                                 | label_37:
    0x00079b50 ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00079b52 movs r1, 0x7f                                     |     r1 = 0x7f;
    0x00079b54 ldr r2, [sp, 0xb4]                                |     r2 = var_b4h;
    0x00079b56 mov r0, fp                                        |     r0 = fp;
    0x00079b58 str r3, [sp]                                      |     *(sp) = r3;
    0x00079b5a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00079b5c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079b60 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00079b64 cmp r4, 0                                         |     
    0x00079b66 ldr.w r2, [fp, 0x6c]                              |     r2 = *(arg_6ch);
    0x00079b6a ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00079b6e it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00079b70 addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x00079b74 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079b76 bne.w 0x79fa8                                     |         goto label_163;
                                                                 |     }
    0x00079b7a ldr.w r3, [fp, 0x68]                              |     r3 = *(arg_68h);
    0x00079b7e movs r1, 0x14                                     |     r1 = 0x14;
    0x00079b80 mla r3, r1, r4, r3                                |     __asm ("mla r3, r1, r4, r3");
                                                                 | label_29:
    0x00079b84 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
                                                                 | label_35:
    0x00079b86 movs r3, 0                                        |     r3 = 0;
    0x00079b88 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x00079b8a movs r1, 0xc                                      |     r1 = 0xc;
    0x00079b8c mov r0, fp                                        |     r0 = fp;
    0x00079b8e str r3, [sp]                                      |     *(sp) = r3;
    0x00079b90 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_38:
    0x00079b94 movs r3, 0                                        |     r3 = 0;
    0x00079b96 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_36:
    0x00079b98 ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00079b9a cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00079b9c ble 0x79bb0                                       |         
    0x00079b9e mov r2, r3                                        |         r2 = r3;
    0x00079ba0 movs r3, 0                                        |         r3 = 0;
    0x00079ba2 str r3, [sp]                                      |         *(sp) = r3;
    0x00079ba4 movs r1, 0x9f                                     |         r1 = 0x9f;
    0x00079ba6 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00079ba8 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00079baa ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00079bac bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |     }
    0x00079bb0 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079bb2 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00079bb4 tst.w r3, 0x60                                    |     
                                                                 |     if ((r3 & 0x60) != 0) {
    0x00079bb8 bne.w 0x7a0d2                                     |         goto label_164;
                                                                 |     }
                                                                 | label_33:
    0x00079bbc ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00079bbe ldrb.w r3, [r2, 0x2b]                             |     r3 = *((r2 + 0x2b));
    0x00079bc2 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00079bc4 bne.w 0x7a052                                     |         goto label_165;
                                                                 |     }
    0x00079bc8 ldr r4, [r2, 0x34]                                |     r4 = *((r2 + 0x34));
                                                                 |     if (r4 != 0) {
    0x00079bca cbnz r4, 0x79bd2                                  |         goto label_166;
                                                                 |     }
    0x00079bcc b 0x79bda                                         |     goto label_167;
                                                                 |     do {
    0x00079bce ldr r4, [r4, 0x18]                                |         r4 = *((r4 + 0x18));
                                                                 |         if (r4 == 0) {
    0x00079bd0 cbz r4, 0x79bda                                   |             goto label_167;
                                                                 |         }
                                                                 | label_166:
    0x00079bd2 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00079bd4 ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x00079bd6 cmp r2, r3                                        |         
    0x00079bd8 bne 0x79bce                                       |         
                                                                 |     } while (r2 != r3);
                                                                 | label_167:
    0x00079bda ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x00079bdc ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00079bde mov r1, r5                                        |     r1 = r5;
    0x00079be0 bl 0x1fe7c                                        |     fcn_0001fe7c (r0, r1);
    0x00079be4 ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x00079be6 movs r1, 7                                        |     r1 = 7;
    0x00079be8 ldrsh.w r3, [r5, 0x22]                            |     r3 = *((r5 + 0x22));
    0x00079bec mov r0, fp                                        |     r0 = fp;
    0x00079bee str r4, [sp, 4]                                   |     var_4h = r4;
    0x00079bf0 str r2, [sp]                                      |     *(sp) = r2;
    0x00079bf2 mvn r2, 0xa                                       |     r2 = ~0xa;
    0x00079bf6 adds r3, 2                                        |     r3 += 2;
    0x00079bf8 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00079bfa movs r2, 1                                        |     r2 = 1;
    0x00079bfc bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00079c00 ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x00079c02 ldr.w r3, [fp, 0x6c]                              |     r3 = *(arg_6ch);
    0x00079c06 cmp r2, 0xb                                       |     
    0x00079c08 ite ne                                            |     
                                                                 |     if (r2 == 0xb) {
    0x00079c0a movne r1, r2                                      |         r1 = r2;
                                                                 |     }
                                                                 |     if (r2 != 0xb) {
    0x00079c0c moveq r1, 2                                       |         r1 = 2;
                                                                 |     }
    0x00079c0e cmp r3, 0                                         |     
    0x00079c10 itttt gt                                          |     
                                                                 |     if (r3 <= 0) {
    0x00079c12 ldrgt r2, [fp, 0x68]                              |         r2 = *(arg_68h);
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00079c16 addgt r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x00079c1a add.w r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x00079c1e strh r1, [r2, -0x12]                              |         *((r2 - 0x12)) = r1;
                                                                 |     }
    0x00079c22 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00079c24 ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x00079c26 cmp r3, 0                                         |     
    0x00079c28 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00079c2a moveq r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x00079c2c movs r2, 1                                        |     r2 = 1;
    0x00079c2e strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
                                                                 | label_32:
    0x00079c30 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00079c32 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079c34 bne.w 0x79f96                                     |         goto label_168;
                                                                 |     }
                                                                 | label_28:
    0x00079c38 ldr r1, [sp, 0x84]                                |     r1 = var_84h;
                                                                 |     if (r1 != 0) {
    0x00079c3a cbz r1, 0x79c62                                   |         
    0x00079c3c ldr r3, [sp, 0x64]                                |         r3 = var_64h;
    0x00079c3e ldr r0, [sp, 0x30]                                |         r0 = var_30h;
    0x00079c40 str.w sl, [sp, 0x10]                              |         __asm ("str.w sl, [var_10h]");
    0x00079c44 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00079c46 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00079c48 ldrsh.w r2, [r0, 0x22]                            |         r2 = *((r0 + 0x22));
    0x00079c4c str r0, [sp, 4]                                   |         var_4h = r0;
    0x00079c4e subs r3, 1                                        |         r3--;
    0x00079c50 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x00079c52 subs r3, r3, r2                                   |         r3 -= r2;
    0x00079c54 movs r2, 0x7f                                     |         r2 = 0x7f;
    0x00079c56 str r3, [sp, 8]                                   |         var_8h = r3;
    0x00079c58 movs r3, 2                                        |         r3 = 2;
    0x00079c5a str r3, [sp]                                      |         *(sp) = r3;
    0x00079c5c movs r3, 0                                        |         r3 = 0;
    0x00079c5e bl 0x77618                                        |         fcn_00077618 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     }
    0x00079c62 ldr.w r0, [fp, 0xc]                               |     r0 = *(arg_ch);
    0x00079c66 ldrd r3, r2, [r0, 0x38]                           |     __asm ("ldrd r3, r2, [r0, 0x38]");
    0x00079c6a cmn r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00079c6c bmi.w 0x79fd2                                     |         goto label_169;
                                                                 |     }
    0x00079c70 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00079c72 ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x00079c74 ldr.w r1, [fp, 0x6c]                              |     r1 = *(arg_6ch);
    0x00079c78 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00079c7a rsbs r3, r3, 0                                    |     r3 -= ;
    0x00079c7c str r1, [r2, r3]                                  |     *((r2 + r3)) = r1;
                                                                 | label_30:
    0x00079c7e cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00079c80 bne.w 0x79f3e                                     |         goto label_170;
                                                                 |     }
    0x00079c84 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
                                                                 |     if (r3 != 0) {
    0x00079c86 cbz r3, 0x79cb8                                   |         
    0x00079c88 ldr r1, [sp, 0x34]                                |         r1 = var_34h;
    0x00079c8a mov r0, fp                                        |         r0 = fp;
    0x00079c8c bl 0x2a2e4                                        |         fcn_0002a2e4 (r0, r1, r2);
    0x00079c90 ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x00079c94 cmp r6, 0                                         |         
    0x00079c96 ldr.w r2, [fp, 0x6c]                              |         r2 = *(arg_6ch);
    0x00079c9a ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
    0x00079c9e it lt                                             |         
                                                                 |         if (r6 >= 0) {
    0x00079ca0 addlt r6, r2, -1                                  |             r6 = r2 + -1;
                                                                 |         }
    0x00079ca4 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00079ca6 bne.w 0x79f82                                     |             goto label_171;
                                                                 |         }
    0x00079caa ldr.w r3, [fp, 0x68]                              |         r3 = *(arg_68h);
    0x00079cae add.w r1, r6, r6, lsl 2                           |         r1 = r6 + (r6 << 2);
    0x00079cb2 add.w r3, r3, r1, lsl 2                           |         r3 += (r1 << 2);
                                                                 | label_27:
    0x00079cb6 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
                                                                 | label_26:
    0x00079cb8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00079cba ldrb r3, [r2, 0x12]                               |     r3 = *((r2 + 0x12));
                                                                 |     if (r3 == 0) {
    0x00079cbc cbnz r3, 0x79cc6                                  |         
    0x00079cbe ldr r3, [r2, 0x78]                                |         r3 = *((r2 + 0x78));
    0x00079cc0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00079cc2 beq.w 0x7a6cc                                     |             goto label_172;
                                                                 |         }
                                                                 |     }
                                                                 | label_58:
    0x00079cc6 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
                                                                 |     if (r3 != 0) {
    0x00079cc8 cbz r3, 0x79cd6                                   |         
    0x00079cca ldr r2, [pc, 0x7c]                                |         
    0x00079ccc mov r1, r3                                        |         r1 = r3;
    0x00079cce mov r0, fp                                        |         r0 = fp;
    0x00079cd0 add r2, pc                                        |         r2 = 0xf3a1e;
    0x00079cd2 bl 0x2aa28                                        |         fcn_0002aa28 (r0, r1, r2);
                                                                 |     }
                                                                 | label_85:
    0x00079cd6 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00079cd8 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00079cda b.w 0x792d8                                       |     goto label_18;
                                                                 | label_149:
    0x00079cde cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00079ce2 bne.w 0x79a70                                     |         goto label_19;
                                                                 |     }
    0x00079ce6 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00079ce8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079cea beq.w 0x7a318                                     |         goto label_173;
                                                                 |     }
    0x00079cee sub.w r3, sl, r6                                  |     r3 = sl - r6;
    0x00079cf2 b 0x79a98                                         |     goto label_20;
                                                                 | label_154:
    0x00079cf4 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x00079cf6 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x00079cf8 mov r0, fp                                        |     r0 = fp;
    0x00079cfa str r4, [sp]                                      |     *(sp) = r4;
    0x00079cfc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079d00 ldrsh.w r1, [r5, 0x22]                            |     r1 = *((r5 + 0x22));
    0x00079d04 b 0x79ac0                                         |     goto label_21;
                                                                 | label_117:
    0x00079d06 ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x00079d08 mov r3, sb                                        |     r3 = sb;
    0x00079d0a ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00079d0c ldr r1, [pc, 0x3c]                                |     
    0x00079d0e mov r0, r4                                        |     r0 = r4;
    0x00079d10 adds r2, 8                                        |     r2 += 8;
    0x00079d12 add r1, pc                                        |     r1 = 0xf3a62;
    0x00079d14 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00079d18 movs r3, 1                                        |     r3 = 1;
    0x00079d1a strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00079d1c b.w 0x792d4                                       |     goto label_0;
                                                                 | label_114:
    0x00079d50 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00079d52 ldr.w r3, [r2, 0x108]                             |     r3 = *((r2 + 0x108));
    0x00079d56 ldr.w sb, [r2]                                    |     sb = *(r2);
    0x00079d5a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079d5c bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079d60 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00079d62 ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x00079d64 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079d66 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079d6a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079d6c ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x00079d70 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00079d72 beq.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079d76 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00079d78 cmp r3, 0xb                                       |     
    0x00079d7a itt ne                                            |     
                                                                 |     if (r3 == 0xb) {
    0x00079d7c ldrne r3, [sp, 0x64]                              |         r3 = var_64h;
                                                                 |     }
                                                                 |     if (r3 == 0xb) {
    0x00079d7e strne r3, [sp, 0x60]                              |         var_60h = r3;
                                                                 |     }
                                                                 |     if (r3 == 0xb) {
    0x00079d80 beq.w 0x7a384                                     |         goto label_174;
                                                                 |     }
                                                                 | label_49:
    0x00079d84 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00079d86 ldr r2, [r1, 0x20]                                |     r2 = *((r1 + 0x20));
    0x00079d88 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00079d8a cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00079d8c bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079d90 ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x00079d92 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079d94 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079d98 ldr r3, [r1, 0x24]                                |     r3 = *((r1 + 0x24));
    0x00079d9a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079d9c bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079da0 ldr r3, [r1, 0x30]                                |     r3 = *((r1 + 0x30));
    0x00079da2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079da4 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079da8 ldr r3, [r1, 0x28]                                |     r3 = *((r1 + 0x28));
    0x00079daa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079dac bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079db0 ldr r3, [r1, 0x3c]                                |     r3 = *((r1 + 0x3c));
    0x00079db2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079db4 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079db8 ldr r3, [r1, 0x34]                                |     r3 = *((r1 + 0x34));
    0x00079dba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00079dbc bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079dc0 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00079dc2 lsls r4, r3, 0x1f                                 |     r4 = r3 << 0x1f;
                                                                 |     if (r4 < r3) {
    0x00079dc4 bmi.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079dc8 ldr r3, [r1, 0x1c]                                |     r3 = *((r1 + 0x1c));
    0x00079dca ldr r1, [r3]                                      |     r1 = *(r3);
    0x00079dcc cmp r1, 1                                         |     
                                                                 |     if (r1 != 1) {
    0x00079dce bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079dd2 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00079dd4 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00079dd6 cmp r3, 0xb4                                      |     
                                                                 |     if (r3 != 0xb4) {
    0x00079dd8 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079ddc ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00079dde adds r2, 8                                        |     r2 += 8;
    0x00079de0 movs r1, 0                                        |     r1 = 0;
    0x00079de2 bl 0x73364                                        |     r0 = fcn_00073364 (r0, r1, r2);
    0x00079de6 mov sl, r0                                        |     sl = r0;
    0x00079de8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00079dea beq.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079dee ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079df0 ldr r2, [r0, 0x14]                                |     r2 = *((r0 + 0x14));
    0x00079df2 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x00079df4 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00079df6 beq.w 0x7a3ec                                     |         goto label_175;
                                                                 |     }
                                                                 | label_52:
    0x00079dfa ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x00079dfc ldr.w r0, [sl, 0x1c]                              |     r0 = *((sl + 0x1c));
    0x00079e00 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x00079e02 eor r2, r0, 0x80                                  |     r2 = r0 ^ 0x80;
    0x00079e06 ubfx r2, r2, 7, 1                                 |     r2 = (r2 >> 7) & ((1 << 1) - 1);
    0x00079e0a eor r1, r3, 0x80                                  |     r1 = r3 ^ 0x80;
    0x00079e0e ubfx r1, r1, 7, 1                                 |     r1 = (r1 >> 7) & ((1 << 1) - 1);
    0x00079e12 cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00079e14 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079e18 ldrb.w r2, [sl, 0x2b]                             |     r2 = *((sl + 0x2b));
    0x00079e1c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00079e1e bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079e22 ldrsh.w r1, [r5, 0x22]                            |     r1 = *((r5 + 0x22));
    0x00079e26 ldrsh.w r4, [sl, 0x22]                            |     r4 = *((sl + 0x22));
    0x00079e2a cmp r1, r4                                        |     
                                                                 |     if (r1 != r4) {
    0x00079e2c bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079e30 ldrsh.w r6, [r5, 0x20]                            |     r6 = *((r5 + 0x20));
    0x00079e34 ldrsh.w r4, [sl, 0x20]                            |     r4 = *((sl + 0x20));
    0x00079e38 cmp r6, r4                                        |     
                                                                 |     if (r6 != r4) {
    0x00079e3a bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079e3e ands r3, r3, 0x10000                              |     r3 &= 0x10000;
                                                                 |     if (r3 != r3) {
    0x00079e42 bne.w 0x7a3e2                                     |         goto label_176;
                                                                 |     }
    0x00079e46 mov ip, r3                                        |     
                                                                 | label_51:
    0x00079e48 mov r6, ip                                        |     r6 = ip;
    0x00079e4a str.w sb, [sp, 0x34]                              |     __asm ("str.w sb, [var_34h]");
    0x00079e4e b 0x79ea2                                         |     goto label_177;
                                                                 | label_23:
    0x00079e50 ldrb r2, [r4, 5]                                  |     r2 = *((r4 + 5));
    0x00079e52 ldrb r3, [r5, 5]                                  |     r3 = *((r5 + 5));
    0x00079e54 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00079e56 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079e5a ldrh r1, [r4, 0xa]                                |     r1 = *((r4 + 0xa));
    0x00079e5c ldr.w r0, [r8, r7]                                |     r0 = *((r8 + r7));
    0x00079e60 bl 0x109fc                                        |     fcn_000109fc (r0, r1);
    0x00079e64 ldrh r1, [r5, 0xa]                                |     r1 = *((r5 + 0xa));
    0x00079e66 mov r2, r0                                        |     r2 = r0;
    0x00079e68 ldr.w r0, [sb, r7]                                |     r0 = *((sb + r7));
    0x00079e6c bl 0x109fc                                        |     r0 = fcn_000109fc (r0, r1);
    0x00079e70 mov r1, r0                                        |     r1 = r0;
    0x00079e72 mov r0, r2                                        |     r0 = r2;
    0x00079e74 blx 0x9754                                        |     r0 = fcn_00009754 ();
    0x00079e78 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00079e7a bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079e7e ldrb r3, [r4, 4]                                  |     r3 = *((r4 + 4));
    0x00079e80 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
                                                                 |     if (r3 == r3) {
    0x00079e82 beq 0x79e8c                                       |         goto label_178;
                                                                 |     }
    0x00079e84 ldrb r3, [r5, 4]                                  |     r3 = *((r5 + 4));
    0x00079e86 lsls r7, r3, 0x1c                                 |     r7 = r3 << 0x1c;
                                                                 |     if (r7 == r3) {
    0x00079e88 beq.w 0x793da                                     |         goto label_22;
                                                                 |     }
                                                                 | label_178:
    0x00079e8c ldrh r3, [r4, 0xa]                                |     r3 = *((r4 + 0xa));
    0x00079e8e and r3, r3, 0x60                                  |     r3 &= 0x60;
                                                                 |     if (r3 == 0) {
    0x00079e92 cbnz r3, 0x79e9a                                  |         
    0x00079e94 cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x00079e96 bne.w 0x7a336                                     |             goto label_179;
                                                                 |         }
                                                                 |     }
                                                                 | label_47:
    0x00079e9a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079e9c adds r6, 1                                        |     r6++;
    0x00079e9e ldrsh.w r1, [r3, 0x22]                            |     r1 = *((r3 + 0x22));
                                                                 | label_177:
    0x00079ea2 cmp r6, r1                                        |     
                                                                 |     if (r6 >= r1) {
    0x00079ea4 bge.w 0x7a3a2                                     |         goto label_180;
                                                                 |     }
    0x00079ea8 movs r3, 0xc                                      |     r3 = 0xc;
    0x00079eaa ldr.w sb, [sl, 4]                                 |     sb = *((sl + 4));
    0x00079eae mul r7, r3, r6                                    |     r7 = r3 * r6;
    0x00079eb2 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079eb4 ldr.w r8, [r3, 4]                                 |     r8 = *((r3 + 4));
    0x00079eb8 add.w r5, sb, r7                                  |     r5 = sb + r7;
    0x00079ebc ldrh r3, [r5, 0xa]                                |     r3 = *((r5 + 0xa));
    0x00079ebe add.w r4, r8, r7                                  |     r4 = r8 + r7;
    0x00079ec2 ldrh r2, [r4, 0xa]                                |     r2 = *((r4 + 0xa));
    0x00079ec4 eors r3, r2                                       |     r3 ^= r2;
    0x00079ec6 tst.w r3, 0x60                                    |     
                                                                 |     if ((r3 & 0x60) != 0) {
    0x00079eca bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x00079ece tst.w r2, 0x60                                    |     
                                                                 |     if ((r2 & 0x60) == 0) {
    0x00079ed2 beq 0x79e50                                       |         goto label_23;
                                                                 |     }
    0x00079ed4 ldrh r1, [r5, 8]                                  |     r1 = *((r5 + 8));
    0x00079ed6 mov r0, sl                                        |     r0 = sl;
    0x00079ed8 bl 0x10a24                                        |     fcn_00010a24 (r0, r1);
    0x00079edc ldrh r1, [r4, 8]                                  |     r1 = *((r4 + 8));
    0x00079ede str r0, [sp, 0x50]                                |     var_50h = r0;
    0x00079ee0 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x00079ee2 bl 0x10a24                                        |     fcn_00010a24 (r0, r1);
    0x00079ee6 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00079ee8 mov r2, r0                                        |     r2 = r0;
    0x00079eea cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00079eec beq.w 0x7a3da                                     |         goto label_181;
                                                                 |     }
    0x00079ef0 clz r0, r0                                        |     r0 &= r0;
    0x00079ef4 lsrs r0, r0, 5                                    |     r0 >>= 5;
    0x00079ef6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00079ef8 beq.w 0x7a3da                                     |         goto label_181;
                                                                 |     }
    0x00079efc mov r1, r3                                        |     r1 = r3;
    0x00079efe mov.w r3, -1                                      |     r3 = -1;
    0x00079f02 bl 0x3480c                                        |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x00079f06 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00079f08 beq 0x79e50                                       |         goto label_23;
                                                                 |     }
    0x00079f0a b.w 0x793da                                       |     goto label_22;
                                                                 | label_126:
    0x00079f0e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00079f10 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00079f12 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00079f14 lsls r5, r3, 0x1c                                 |     r5 = r3 << 0x1c;
    0x00079f16 itt pl                                            |     
                                                                 |     if (r5 < r3) {
    0x00079f18 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 < r3) {
    0x00079f1a strbpl r3, [r2, 0x17]                             |         *((r2 + 0x17)) = r3;
                                                                 |     }
    0x00079f1c b 0x79764                                         |     goto label_24;
                                                                 | label_127:
    0x00079f1e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00079f20 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00079f22 b.w 0x792d8                                       |     goto label_18;
                                                                 | label_128:
    0x00079f26 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x00079f28 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00079f2a mov r2, r1                                        |     r2 = r1;
    0x00079f2c ldr.w r1, [pc, 0xb4c]                             |     
    0x00079f30 add r1, pc                                        |     r1 = 0xf49b0;
    0x00079f32 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00079f36 b.w 0x792d4                                       |     goto label_0;
                                                                 | label_125:
    0x00079f3a movs r7, 1                                        |     r7 = 1;
    0x00079f3c b 0x79814                                         |     goto label_25;
                                                                 | label_170:
    0x00079f3e movs r2, 0                                        |     r2 = 0;
    0x00079f40 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00079f42 str r2, [sp]                                      |     *(sp) = r2;
    0x00079f44 movs r1, 0x26                                     |     r1 = 0x26;
    0x00079f46 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x00079f48 mov r0, fp                                        |     r0 = fp;
    0x00079f4a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079f4e ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00079f52 cmp r6, 0                                         |     
    0x00079f54 ldr.w r2, [fp, 0x6c]                              |     r2 = *(arg_6ch);
    0x00079f58 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00079f5c it lt                                             |     
                                                                 |     if (r6 >= 0) {
    0x00079f5e addlt r6, r2, -1                                  |         r6 = r2 + -1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00079f62 cbnz r3, 0x79f8c                                  |         goto label_182;
                                                                 |     }
    0x00079f64 ldr.w r3, [fp, 0x68]                              |     r3 = *(arg_68h);
    0x00079f68 add.w r1, r6, r6, lsl 2                           |     r1 = r6 + (r6 << 2);
    0x00079f6c add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 |     do {
    0x00079f70 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
    0x00079f72 movs r3, 0                                        |         r3 = 0;
    0x00079f74 ldr r2, [sp, 0x60]                                |         r2 = var_60h;
    0x00079f76 movs r1, 0x7a                                     |         r1 = 0x7a;
    0x00079f78 mov r0, fp                                        |         r0 = fp;
    0x00079f7a str r3, [sp]                                      |         *(sp) = r3;
    0x00079f7c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00079f80 b 0x79cb8                                         |         goto label_26;
                                                                 | label_171:
    0x00079f82 ldr.w r3, [pc, 0xafc]                             |         r3 = *(0x0007aa80);
    0x00079f86 add r3, pc                                        |         r3 += pc;
    0x00079f88 adds r3, 4                                        |         r3 += 4;
    0x00079f8a b 0x79cb6                                         |         goto label_27;
                                                                 | label_182:
    0x00079f8c ldr.w r3, [pc, 0xaf4]                             |         
    0x00079f90 add r3, pc                                        |         r3 = 0xf4a18;
    0x00079f92 adds r3, 4                                        |         r3 += 4;
    0x00079f94 b 0x79f70                                         |         
                                                                 |     } while (1);
                                                                 | label_168:
    0x00079f96 movs r3, 0                                        |     r3 = 0;
    0x00079f98 ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x00079f9a str r3, [sp]                                      |     *(sp) = r3;
    0x00079f9c movs r1, 0x56                                     |     r1 = 0x56;
    0x00079f9e movs r3, 1                                        |     r3 = 1;
    0x00079fa0 mov r0, fp                                        |     r0 = fp;
    0x00079fa2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00079fa6 b 0x79c38                                         |     goto label_28;
                                                                 | label_163:
    0x00079fa8 ldr.w r3, [pc, 0xadc]                             |     
    0x00079fac add r3, pc                                        |     r3 = 0xf4a38;
    0x00079fae adds r3, 4                                        |     r3 += 4;
    0x00079fb0 b 0x79b84                                         |     goto label_29;
                                                                 | label_155:
    0x00079fb2 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00079fb4 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x00079fb6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00079fb8 beq.w 0x79ac0                                     |         goto label_21;
                                                                 |     }
    0x00079fbc ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00079fbe ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00079fc0 add.w r3, r2, r3, lsl 4                           |     r3 = r2 + (r3 << 4);
    0x00079fc4 mov r2, r4                                        |     r2 = r4;
    0x00079fc6 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00079fc8 bl 0x5aa10                                        |     fcn_0005aa10 (r0, r1, r2);
    0x00079fcc ldrsh.w r1, [r5, 0x22]                            |     r1 = *((r5 + 0x22));
    0x00079fd0 b 0x79ac0                                         |     goto label_21;
                                                                 | label_169:
    0x00079fd2 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00079fd4 mov r1, fp                                        |     r1 = fp;
    0x00079fd6 rsbs r2, r3, 0                                    |     r2 = r3 - ;
    0x00079fd8 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00079fdc b 0x79c7e                                         |     goto label_30;
                                                                 | label_153:
    0x00079fde ldrh r3, [r2, 8]                                  |     r3 = *((r2 + 8));
                                                                 |     if (r3 == 0) {
    0x00079fe0 cbz r3, 0x7a00a                                   |         goto label_183;
                                                                 |     }
    0x00079fe2 ldrb.w r2, [r5, 0x2b]                             |     r2 = *((r5 + 0x2b));
                                                                 |     if (r2 != 0) {
    0x00079fe6 cbnz r2, 0x7a00a                                  |         goto label_183;
                                                                 |     }
    0x00079fe8 ldr r1, [r5, 0x34]                                |     r1 = *((r5 + 0x34));
                                                                 |     if (r1 == 0) {
    0x00079fea cbz r1, 0x79ffa                                   |         goto label_45;
                                                                 |     }
    0x00079fec ldr r0, [r1]                                      |     r0 = *(r1);
    0x00079fee cmp r0, r3                                        |     
                                                                 |     if (r0 < r3) {
    0x00079ff0 blt 0x7a00a                                       |         goto label_183;
                                                                 |     }
                                                                 | label_46:
    0x00079ff2 add.w r1, r1, r3, lsl 4                           |     r1 += (r3 << 4);
    0x00079ff6 ldr r1, [r1, -0x8]                                |     r1 = *((r1 - 0x8));
                                                                 |     do {
                                                                 | label_45:
    0x00079ffa mov r2, r4                                        |         r2 = r4;
    0x00079ffc ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x00079ffe bl 0x5b6bc                                        |         fcn_0005b6bc (r0, r1, r2);
    0x0007a002 adds r4, 1                                        |         r4++;
    0x0007a004 ldrsh.w r1, [r5, 0x22]                            |         r1 = *((r5 + 0x22));
    0x0007a008 b 0x79ac2                                         |         goto label_31;
                                                                 | label_183:
    0x0007a00a movs r1, 0                                        |         r1 = 0;
    0x0007a00c b 0x79ffa                                         |         
                                                                 |     } while (1);
                                                                 | label_151:
    0x0007a00e ldrh r3, [r2, 8]                                  |     r3 = *((r2 + 8));
                                                                 |     if (r3 == 0) {
    0x0007a010 cbz r3, 0x7a038                                   |         goto label_184;
                                                                 |     }
    0x0007a012 ldrb.w r2, [r5, 0x2b]                             |     r2 = *((r5 + 0x2b));
                                                                 |     if (r2 != 0) {
    0x0007a016 cbnz r2, 0x7a038                                  |         goto label_184;
                                                                 |     }
    0x0007a018 ldr r1, [r5, 0x34]                                |     r1 = *((r5 + 0x34));
                                                                 |     if (r1 == 0) {
    0x0007a01a cbz r1, 0x7a02a                                   |         goto label_185;
                                                                 |     }
    0x0007a01c ldr r2, [r1]                                      |     r2 = *(r1);
    0x0007a01e cmp r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x0007a020 blt 0x7a038                                       |         goto label_184;
                                                                 |     }
    0x0007a022 add.w r1, r1, r3, lsl 4                           |     r1 += (r3 << 4);
    0x0007a026 ldr r1, [r1, -0x8]                                |     r1 = *((r1 - 0x8));
                                                                 |     do {
                                                                 | label_185:
    0x0007a02a ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007a02c mov r2, r4                                        |         r2 = r4;
    0x0007a02e bl 0x5b6bc                                        |         fcn_0005b6bc (r0, r1, r2);
    0x0007a032 ldrsh.w r1, [r5, 0x22]                            |         r1 = *((r5 + 0x22));
    0x0007a036 b 0x79ac0                                         |         goto label_21;
                                                                 | label_184:
    0x0007a038 mov r1, r8                                        |         r1 = r8;
    0x0007a03a b 0x7a02a                                         |         
                                                                 |     } while (1);
                                                                 | label_148:
    0x0007a03c movs r3, 0                                        |     r3 = 0;
    0x0007a03e mov r2, r4                                        |     r2 = r4;
    0x0007a040 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x0007a042 mov r0, fp                                        |     r0 = fp;
    0x0007a044 str r3, [sp]                                      |     *(sp) = r3;
    0x0007a046 adds r4, 1                                        |     r4++;
    0x0007a048 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a04c ldrsh.w r1, [r5, 0x22]                            |     r1 = *((r5 + 0x22));
    0x0007a050 b 0x79ac2                                         |     goto label_31;
                                                                 | label_165:
    0x0007a052 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0007a054 movs r4, 0                                        |     r4 = 0;
    0x0007a056 ldr r2, [sp, 0xb4]                                |     r2 = var_b4h;
    0x0007a058 ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x0007a05c mvns r3, r3                                       |     r3 = ~r3;
    0x0007a05e ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
    0x0007a062 lsrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0007a064 ldr r5, [sp, 0xb8]                                |     r5 = var_b8h;
    0x0007a066 mov r1, sb                                        |     r1 = sb;
    0x0007a068 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0007a06a str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0007a06c mov r0, r8                                        |     r0 = r8;
    0x0007a06e ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0007a070 str.w sl, [sp, 0x14]                              |     __asm ("str.w sl, [var_14h]");
    0x0007a074 str r5, [sp]                                      |     *(sp) = r5;
    0x0007a076 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0007a078 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0007a07a str r4, [sp, 0x1c]                                |     var_1ch = r4;
    0x0007a07c str r4, [sp, 8]                                   |     var_8h = r4;
    0x0007a07e str r3, [sp, 4]                                   |     var_4h = r3;
    0x0007a080 ldrb.w r3, [sp, 0x64]                             |     r3 = var_64h;
    0x0007a084 str r4, [sp, 0xdc]                                |     var_dch = r4;
    0x0007a086 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0007a088 add r3, sp, 0xdc                                  |     r3 += var_dch;
    0x0007a08a str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0007a08c mov r3, r2                                        |     r3 = r2;
    0x0007a08e ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0007a090 bl 0x77d08                                        |     fcn_00077d08 (r0, r1, r2, r3, r4, r5, r6);
    0x0007a094 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0007a096 mov r2, r4                                        |     r2 = r4;
    0x0007a098 mov r1, sb                                        |     r1 = sb;
    0x0007a09a mov r0, r8                                        |     r0 = r8;
    0x0007a09c strd r4, r4, [sp]                                 |     __asm ("strd r4, r4, [sp]");
    0x0007a0a0 bl 0x74c90                                        |     fcn_00074c90 (r0, r1, r2, r3, r4, r5, r6);
    0x0007a0a4 ldr r3, [sp, 0xdc]                                |     r3 = var_dch;
                                                                 |     if (r3 == 0) {
    0x0007a0a6 cbz r3, 0x7a0de                                   |         goto label_186;
                                                                 |     }
    0x0007a0a8 ldr.w r3, [fp, 0xdc]                              |     r3 = *(arg_dch);
    0x0007a0ac clz r3, r3                                        |     r3 &= r3;
    0x0007a0b0 lsrs r3, r3, 5                                    |     r3 >>= 5;
                                                                 |     do {
    0x0007a0b2 str r3, [sp, 0x10]                                |         var_10h = r3;
    0x0007a0b4 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0007a0b6 ldr r1, [sp, 0x74]                                |         r1 = var_74h;
    0x0007a0b8 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x0007a0ba str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x0007a0bc ldr r3, [sp, 0x78]                                |         r3 = var_78h;
    0x0007a0be str r1, [sp, 4]                                   |         var_4h = r1;
    0x0007a0c0 movs r1, 0                                        |         r1 = 0;
    0x0007a0c2 str r1, [sp, 8]                                   |         var_8h = r1;
    0x0007a0c4 str r3, [sp]                                      |         *(sp) = r3;
    0x0007a0c6 mov r3, r5                                        |         r3 = r5;
    0x0007a0c8 ldrd r0, r1, [sp, 0x2c]                           |         __asm ("ldrd r0, r1, [var_2ch]");
    0x0007a0cc bl 0x29ef0                                        |         fcn_00029ef0 (r0, r1, r2, r3, r4, r5, r6);
    0x0007a0d0 b 0x79c30                                         |         goto label_32;
                                                                 | label_164:
    0x0007a0d2 ldr r1, [sp, 0x7c]                                |         r1 = var_7ch;
    0x0007a0d4 ldrd r0, r2, [sp, 0x2c]                           |         __asm ("ldrd r0, r2, [var_2ch]");
    0x0007a0d8 bl 0x5b358                                        |         fcn_0005b358 (r0, r1, r2, r3);
    0x0007a0dc b 0x79bbc                                         |         goto label_33;
                                                                 | label_186:
    0x0007a0de movs r3, 1                                        |         r3 = 1;
    0x0007a0e0 b 0x7a0b2                                         |         
                                                                 |     } while (1);
                                                                 | label_160:
    0x0007a0e2 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0007a0e4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0007a0e6 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0007a0ea ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x0007a0ec ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0007a0ee cmp r3, 0x79                                      |     
                                                                 |     if (r3 == 0x79) {
    0x0007a0f0 beq 0x7a118                                       |         goto label_187;
                                                                 |     }
    0x0007a0f2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0007a0f4 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0007a0f6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007a0f8 beq.w 0x79b0e                                     |         goto label_34;
                                                                 |     }
                                                                 |     do {
    0x0007a0fc ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x0007a0fe ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007a100 bl 0x5aa10                                        |         fcn_0005aa10 (r0, r1, r2);
    0x0007a104 b 0x79b0e                                         |         goto label_34;
                                                                 | label_159:
    0x0007a106 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x0007a108 movs r1, 0x5e                                     |         r1 = 0x5e;
    0x0007a10a ldr r2, [sp, 0x60]                                |         r2 = var_60h;
    0x0007a10c mov r0, fp                                        |         r0 = fp;
    0x0007a10e str r3, [sp]                                      |         *(sp) = r3;
    0x0007a110 ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x0007a112 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a116 b 0x79b0e                                         |         goto label_34;
                                                                 | label_187:
    0x0007a118 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0007a11a ldrb.w r3, [r3, 0x2b]                             |         r3 = *((r3 + 0x2b));
    0x0007a11e cmp r3, 1                                         |         
                                                                 |         if (r3 != 1) {
    0x0007a120 bne 0x7a140                                       |             goto label_188;
                                                                 |         }
    0x0007a122 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0007a124 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x0007a126 cmp r3, 0                                         |         
    0x0007a128 bne 0x7a0fc                                       |         
                                                                 |     } while (r3 != 0);
    0x0007a12a ldr.w r3, [fp, 0x6c]                              |     r3 = *(arg_6ch);
                                                                 | label_161:
    0x0007a12e movs r2, 0                                        |     r2 = 0;
    0x0007a130 adds r3, 2                                        |     r3 += 2;
    0x0007a132 str r2, [sp]                                      |     *(sp) = r2;
    0x0007a134 movs r1, 0x32                                     |     r1 = 0x32;
    0x0007a136 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x0007a138 mov r0, fp                                        |     r0 = fp;
    0x0007a13a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a13e b 0x79b86                                         |     goto label_35;
                                                                 |     do {
                                                                 | label_188:
    0x0007a140 ldr r3, [sp, 0x8c]                                |         r3 = var_8ch;
    0x0007a142 movs r1, 0x7f                                     |         r1 = 0x7f;
    0x0007a144 ldr r2, [sp, 0xb4]                                |         r2 = var_b4h;
    0x0007a146 mov r0, fp                                        |         r0 = fp;
    0x0007a148 str r3, [sp]                                      |         *(sp) = r3;
    0x0007a14a ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x0007a14c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a150 movs r3, 1                                        |         r3 = 1;
    0x0007a152 str r3, [sp, 0x40]                                |         var_40h = r3;
    0x0007a154 b 0x79b98                                         |         goto label_36;
                                                                 | label_162:
    0x0007a156 movs r3, 0                                        |         r3 = 0;
    0x0007a158 ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x0007a15a movs r1, 0x33                                     |         r1 = 0x33;
    0x0007a15c mov r0, fp                                        |         r0 = fp;
    0x0007a15e str r3, [sp]                                      |         *(sp) = r3;
    0x0007a160 bl 0x29a7c                                        |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007a164 mov r4, r0                                        |         r4 = r0;
    0x0007a166 b 0x79b50                                         |         goto label_37;
                                                                 | label_158:
    0x0007a168 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x0007a16a ldr r3, [sp, 0x90]                                |         r3 = var_90h;
    0x0007a16c ldrb.w r2, [r2, 0x2b]                             |         r2 = *((r2 + 0x2b));
    0x0007a170 subs r3, 0                                        |         
    0x0007a172 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x0007a174 movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x0007a176 cmp r2, 1                                         |         
    0x0007a178 it eq                                             |         
                                                                 |         if (r2 != 1) {
    0x0007a17a orreq r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x0007a17e cmp r3, 0                                         |         
    0x0007a180 beq 0x7a140                                       |         
                                                                 |     } while (r3 == 0);
    0x0007a182 movs r2, 0                                        |     r2 = 0;
    0x0007a184 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0007a186 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0007a188 mov r0, fp                                        |     r0 = fp;
    0x0007a18a str r2, [sp]                                      |     *(sp) = r2;
    0x0007a18c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a190 b 0x79b94                                         |     goto label_38;
                                                                 | label_157:
    0x0007a192 movs r2, 0                                        |     r2 = 0;
    0x0007a194 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0007a196 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0007a198 mov r0, fp                                        |     r0 = fp;
    0x0007a19a str r2, [sp]                                      |     *(sp) = r2;
    0x0007a19c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a1a0 b 0x79af8                                         |     goto label_39;
                                                                 | label_156:
    0x0007a1a2 mov r0, r3                                        |     r0 = r3;
    0x0007a1a4 adds r1, 1                                        |     r1++;
    0x0007a1a6 bl 0xf638                                         |     fcn_0000f638 (r0, r1);
    0x0007a1aa ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0007a1ac mov r5, r0                                        |     r5 = r0;
    0x0007a1ae cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0007a1b0 blt.w 0x7a304                                     |         goto label_189;
                                                                 |     }
    0x0007a1b4 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x0007a1b6 bne.w 0x7a2f4                                     |         goto label_190;
                                                                 |     }
    0x0007a1ba ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007a1bc ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
                                                                 |     if (r3 != 0) {
    0x0007a1be cbz r3, 0x7a1d0                                   |         
    0x0007a1c0 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x0007a1c2 ldr r3, [sp, 0x58]                                |         r3 = var_58h;
    0x0007a1c4 add.w r3, r3, r2, lsl 4                           |         r3 += (r2 << 4);
    0x0007a1c8 mov r2, r5                                        |         r2 = r5;
    0x0007a1ca ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x0007a1cc bl 0x5aa10                                        |         fcn_0005aa10 (r0, r1, r2);
                                                                 |     }
                                                                 | label_43:
    0x0007a1d0 ldrd r4, r3, [fp, 0x6c]                           |     __asm ("ldrd r4, r3, [arg_6ch]");
    0x0007a1d4 cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x0007a1d6 bge.w 0x7a2e2                                     |         goto label_191;
                                                                 |     }
    0x0007a1da add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x0007a1de ldr.w r0, [fp, 0x68]                              |     r0 = *(arg_68h);
    0x0007a1e2 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x0007a1e4 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0007a1e6 str.w r2, [fp, 0x6c]                              |     __asm ("str.w r2, [arg_6ch]");
    0x0007a1ea movs r1, 0                                        |     r1 = 0;
    0x0007a1ec adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x0007a1ee mov.w ip, 0x33                                    |     
    0x0007a1f2 strd r5, r1, [r2, 4]                              |     __asm ("strd r5, r1, [r2, 4]");
    0x0007a1f6 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x0007a1fa str.w ip, [r0, r3]                                |     __asm ("str.w ip, [r0, r3]");
                                                                 | label_42:
    0x0007a1fe movs r3, 0                                        |     r3 = 0;
    0x0007a200 mov.w r2, -1                                      |     r2 = -1;
    0x0007a204 str r3, [sp]                                      |     *(sp) = r3;
    0x0007a206 movs r1, 0x47                                     |     r1 = 0x47;
    0x0007a208 mov r3, r5                                        |     r3 = r5;
    0x0007a20a mov r0, fp                                        |     r0 = fp;
    0x0007a20c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a210 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0007a214 cmp r4, 0                                         |     
    0x0007a216 ldr.w r2, [fp, 0x6c]                              |     r2 = *(arg_6ch);
    0x0007a21a ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x0007a21e it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x0007a220 addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x0007a224 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007a226 bne 0x7a2bc                                       |         goto label_192;
                                                                 |     }
    0x0007a228 ldr.w r3, [fp, 0x68]                              |     r3 = *(arg_68h);
    0x0007a22c movs r1, 0x14                                     |     r1 = 0x14;
    0x0007a22e mla r3, r1, r4, r3                                |     __asm ("mla r3, r1, r4, r3");
                                                                 | label_41:
    0x0007a232 str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0007a234 movs r3, 0                                        |     r3 = 0;
    0x0007a236 mov r2, r5                                        |     r2 = r5;
    0x0007a238 movs r1, 0xc                                      |     r1 = 0xc;
    0x0007a23a mov r0, fp                                        |     r0 = fp;
    0x0007a23c str r3, [sp]                                      |     *(sp) = r3;
    0x0007a23e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_44:
    0x0007a242 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007a244 adds r4, r5, 1                                    |     r4 = r5 + 1;
    0x0007a246 ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x0007a248 movs r1, 0x50                                     |     r1 = 0x50;
    0x0007a24a mov r0, fp                                        |     r0 = fp;
    0x0007a24c ldrsh.w r3, [r3, 0x24]                            |     r3 = *((r3 + 0x24));
    0x0007a250 subs r3, 1                                        |     r3--;
    0x0007a252 str r3, [sp]                                      |     *(sp) = r3;
    0x0007a254 mov r3, r4                                        |     r3 = r4;
    0x0007a256 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a25a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007a25c ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0007a25e tst.w r3, 0x60                                    |     
    0x0007a262 bne 0x7a2b0                                       |     
                                                                 |     while (1) {
    0x0007a264 ldr r3, [sp, 0x94]                                |         r3 = var_94h;
    0x0007a266 cmp r3, 2                                         |         
                                                                 |         if (r3 != 2) {
    0x0007a268 beq 0x7a274                                       |             
    0x0007a26a ldr r1, [sp, 0x30]                                |             r1 = var_30h;
    0x0007a26c mov r2, r4                                        |             r2 = r4;
    0x0007a26e mov r0, fp                                        |             r0 = fp;
    0x0007a270 bl 0x329e8                                        |             fcn_000329e8 (r0, r1, r2);
                                                                 |         }
    0x0007a274 ldr r4, [sp, 0x30]                                |         r4 = var_30h;
    0x0007a276 movs r2, 0x7f                                     |         r2 = 0x7f;
    0x0007a278 ldr r3, [sp, 0x64]                                |         r3 = var_64h;
    0x0007a27a str.w sl, [sp, 0x10]                              |         __asm ("str.w sl, [var_10h]");
    0x0007a27e ldr r1, [sp, 0x84]                                |         r1 = var_84h;
    0x0007a280 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x0007a282 ldrsh.w r3, [r4, 0x22]                            |         r3 = *((r4 + 0x22));
    0x0007a286 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007a288 str r4, [sp, 4]                                   |         var_4h = r4;
    0x0007a28a subs r3, r5, r3                                   |         r3 = r5 - r3;
    0x0007a28c subs r3, 1                                        |         r3--;
    0x0007a28e str r3, [sp, 8]                                   |         var_8h = r3;
    0x0007a290 movs r3, 1                                        |         r3 = 1;
    0x0007a292 str r3, [sp]                                      |         *(sp) = r3;
    0x0007a294 movs r3, 0                                        |         r3 = 0;
    0x0007a296 bl 0x77618                                        |         fcn_00077618 (r0, r1, r2, r3, r4, r5, r6);
    0x0007a29a ldrsh.w r2, [r4, 0x22]                            |         r2 = *((r4 + 0x22));
    0x0007a29e adds r3, r2, 1                                    |         r3 = r2 + 1;
                                                                 |         if (r2 == 0) {
    0x0007a2a0 cbz r2, 0x7a2c6                                   |             goto label_193;
                                                                 |         }
    0x0007a2a2 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0007a2a4 ldr r2, [r1, 0x1c]                                |         r2 = *((r1 + 0x1c));
    0x0007a2a6 cmp r3, r2                                        |         
    0x0007a2a8 it gt                                             |         
                                                                 |         if (r3 > r2) {
    0x0007a2aa strdgt r3, r5, [r1, 0x1c]                         |             __asm ("strdgt r3, r5, [r1, 0x1c]");
                                                                 |         }
    0x0007a2ae b 0x79ae4                                         |         goto label_40;
    0x0007a2b0 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x0007a2b2 mov r1, r4                                        |         r1 = r4;
    0x0007a2b4 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007a2b6 bl 0x5b358                                        |         fcn_0005b358 (r0, r1, r2, r3);
    0x0007a2ba b 0x7a264                                         |         
                                                                 |     }
                                                                 | label_192:
    0x0007a2bc ldr.w r3, [pc, 0x7cc]                             |     
    0x0007a2c0 add r3, pc                                        |     r3 = 0xf4d50;
    0x0007a2c2 adds r3, 4                                        |     r3 += 4;
    0x0007a2c4 b 0x7a232                                         |     goto label_41;
                                                                 | label_193:
    0x0007a2c6 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0007a2c8 beq.w 0x79ae4                                     |         goto label_40;
                                                                 |     }
    0x0007a2cc ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0007a2ce ldrb r3, [r1, 0x13]                               |     r3 = *((r1 + 0x13));
    0x0007a2d0 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x0007a2d2 bhi.w 0x79ae4                                     |         goto label_40;
                                                                 |     }
    0x0007a2d6 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0007a2d8 adds r3, 0x26                                     |     r3 += 0x26;
    0x0007a2da strb r2, [r1, 0x13]                               |     *((r1 + 0x13)) = r2;
    0x0007a2dc str.w r5, [r1, r3, lsl 2]                         |     __asm ("str.w r5, [r1, r3, lsl 2]");
    0x0007a2e0 b 0x79ae4                                         |     goto label_40;
                                                                 | label_191:
    0x0007a2e2 movs r3, 0                                        |     r3 = 0;
    0x0007a2e4 mov r2, r5                                        |     r2 = r5;
    0x0007a2e6 movs r1, 0x33                                     |     r1 = 0x33;
    0x0007a2e8 mov r0, fp                                        |     r0 = fp;
    0x0007a2ea str r3, [sp]                                      |     *(sp) = r3;
    0x0007a2ec bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007a2f0 mov r4, r0                                        |     r4 = r0;
    0x0007a2f2 b 0x7a1fe                                         |     goto label_42;
                                                                 | label_190:
    0x0007a2f4 str r0, [sp]                                      |     *(sp) = r0;
    0x0007a2f6 movs r1, 0x5e                                     |     r1 = 0x5e;
    0x0007a2f8 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0007a2fa mov r0, fp                                        |     r0 = fp;
    0x0007a2fc ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0007a2fe bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a302 b 0x7a1d0                                         |     goto label_43;
                                                                 | label_189:
    0x0007a304 movs r3, 0                                        |     r3 = 0;
    0x0007a306 mov.w r2, -1                                      |     r2 = -1;
    0x0007a30a str r3, [sp]                                      |     *(sp) = r3;
    0x0007a30c movs r1, 0x47                                     |     r1 = 0x47;
    0x0007a30e mov r3, r0                                        |     r3 = r0;
    0x0007a310 mov r0, fp                                        |     r0 = fp;
    0x0007a312 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a316 b 0x7a242                                         |     goto label_44;
                                                                 | label_173:
    0x0007a318 ldrh r3, [r2, 8]                                  |     r3 = *((r2 + 8));
                                                                 |     if (r3 == 0) {
    0x0007a31a cbz r3, 0x7a332                                   |         goto label_194;
                                                                 |     }
    0x0007a31c ldrb.w r2, [r5, 0x2b]                             |     r2 = *((r5 + 0x2b));
                                                                 |     if (r2 != 0) {
    0x0007a320 cbnz r2, 0x7a332                                  |         goto label_194;
                                                                 |     }
    0x0007a322 ldr r1, [r5, 0x34]                                |     r1 = *((r5 + 0x34));
    0x0007a324 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007a326 beq.w 0x79ffa                                     |         goto label_45;
                                                                 |     }
    0x0007a32a ldr r2, [r1]                                      |     r2 = *(r1);
    0x0007a32c cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0007a32e bge.w 0x79ff2                                     |         goto label_46;
                                                                 |     }
                                                                 | label_194:
    0x0007a332 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x0007a334 b 0x79ffa                                         |     goto label_45;
                                                                 | label_179:
    0x0007a336 ldrh r1, [r4, 8]                                  |     r1 = *((r4 + 8));
    0x0007a338 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0007a33a bl 0x10a24                                        |     fcn_00010a24 (r0, r1);
    0x0007a33e ldrh r1, [r5, 8]                                  |     r1 = *((r5 + 8));
    0x0007a340 mov r4, r0                                        |     r4 = r0;
    0x0007a342 mov r0, sl                                        |     r0 = sl;
    0x0007a344 bl 0x10a24                                        |     fcn_00010a24 (r0, r1);
    0x0007a348 clz r2, r4                                        |     r2 &= r4;
    0x0007a34c clz r3, r0                                        |     r3 &= r0;
    0x0007a350 lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x0007a352 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0007a354 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0007a356 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x0007a35a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0007a35c beq.w 0x79e9a                                     |         goto label_47;
                                                                 |     }
    0x0007a360 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0007a362 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x0007a364 blx 0x9fb0                                        |     r0 = fcn_00009fb0 ();
    0x0007a368 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0007a36a beq.w 0x79e9a                                     |         goto label_47;
                                                                 |     }
    0x0007a36e b.w 0x793da                                       |     goto label_22;
                                                                 | label_109:
    0x0007a372 mov.w r3, 0x8000                                  |     r3 = 0x8000;
    0x0007a376 sub.w r2, r2, 0x80000                             |     r2 -= 0x80000;
    0x0007a37a movt r3, 0xffff                                   |     r3 = (r3 & 0xFFFF) | 0xffff0000;
    0x0007a37e str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0007a380 b.w 0x792be                                       |     goto label_48;
                                                                 | label_174:
    0x0007a384 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0007a386 ldrsh.w r3, [r2, 0x20]                            |     r3 = *((r2 + 0x20));
    0x0007a38a cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x0007a38c blt 0x7a39c                                       |         
    0x0007a38e ldrb.w r3, [r2, 0x2a]                             |         r3 = *((r2 + 0x2a));
    0x0007a392 cmp r3, 0xb                                       |         
    0x0007a394 it eq                                             |         
                                                                 |         if (r3 != 0xb) {
    0x0007a396 moveq r3, 2                                       |             r3 = 2;
                                                                 |         }
    0x0007a398 str r3, [sp, 0x60]                                |         var_60h = r3;
    0x0007a39a b 0x79d84                                         |         goto label_49;
                                                                 |     }
    0x0007a39c movs r3, 2                                        |     r3 = 2;
    0x0007a39e str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0007a3a0 b 0x79d84                                         |     goto label_49;
                                                                 | label_180:
    0x0007a3a2 ldrd r3, sb, [sp, 0x30]                           |     __asm ("ldrd r3, sb, [var_30h]");
    0x0007a3a6 movs r7, 0                                        |     r7 = 0;
    0x0007a3a8 ldr.w r4, [pc, 0x6e4]                             |     
    0x0007a3ac ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x0007a3ae mov r8, r3                                        |     r8 = r3;
    0x0007a3b0 add r4, pc                                        |     r4 = 0xf4e44;
                                                                 |     if (r6 == 0) {
                                                                 | label_79:
    0x0007a3b2 cbz r6, 0x7a3fc                                   |         goto label_195;
                                                                 |     }
    0x0007a3b4 ldrb.w r3, [r6, 0x36]                             |     r3 = *((r6 + 0x36));
    0x0007a3b8 ldr.w r5, [sl, 8]                                 |     r5 = *((sl + 8));
    0x0007a3bc cmp r3, 0                                         |     
    0x0007a3be it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0007a3c0 movne r7, 1                                       |         r7 = 1;
                                                                 |     }
                                                                 | label_50:
    0x0007a3c2 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0007a3c4 beq.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x0007a3c8 mov r1, r5                                        |     r1 = r5;
    0x0007a3ca mov r0, r6                                        |     r0 = r6;
    0x0007a3cc bl 0x37948                                        |     r0 = fcn_00037948 (r0, r1);
    0x0007a3d0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007a3d2 bne.w 0x7a9c8                                     |         goto label_196;
                                                                 |     }
    0x0007a3d6 ldr r5, [r5, 0x14]                                |     r5 = *((r5 + 0x14));
    0x0007a3d8 b 0x7a3c2                                         |     goto label_50;
                                                                 | label_181:
    0x0007a3da cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x0007a3dc bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x0007a3e0 b 0x79e50                                         |     goto label_23;
                                                                 | label_176:
    0x0007a3e2 lsls r0, r0, 0xf                                  |     r0 <<= 0xf;
                                                                 |     if (r0 >= r0) {
    0x0007a3e4 bpl.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x0007a3e8 mov ip, r2                                        |     
    0x0007a3ea b 0x79e48                                         |     goto label_51;
                                                                 | label_175:
    0x0007a3ec ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007a3ee ldr r2, [r0, 0x3c]                                |     r2 = *((r0 + 0x3c));
    0x0007a3f0 ldr r3, [r3, 0x3c]                                |     r3 = *((r3 + 0x3c));
    0x0007a3f2 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0007a3f4 bne.w 0x79dfa                                     |         goto label_52;
                                                                 |     }
    0x0007a3f8 b.w 0x793da                                       |     goto label_22;
                                                                 | label_195:
    0x0007a3fc ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007a3fe str r7, [sp, 0x5c]                                |     var_5ch = r7;
    0x0007a400 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
                                                                 |     if (r1 == 0) {
    0x0007a402 cbz r1, 0x7a416                                   |         goto label_197;
                                                                 |     }
    0x0007a404 ldr.w r0, [sl, 0x10]                              |     r0 = *((sl + 0x10));
    0x0007a408 mov.w r2, -1                                      |     r2 = -1;
    0x0007a40c bl 0x35844                                        |     r0 = fcn_00035844 (r0, r1, r2);
    0x0007a410 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007a412 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
                                                                 | label_197:
    0x0007a416 ldrd r2, r3, [sb, 0x20]                           |     __asm ("ldrd r2, r3, [sb, 0x20]");
    0x0007a41a lsls r5, r2, 0x11                                 |     r5 = r2 << 0x11;
                                                                 |     if (r5 >= r2) {
    0x0007a41c bpl 0x7a428                                       |         goto label_198;
                                                                 |     }
    0x0007a41e ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0007a420 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x0007a422 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0007a424 bne.w 0x793da                                     |         goto label_22;
                                                                 |     }
                                                                 | label_198:
    0x0007a428 lsls r4, r3, 0x1f                                 |     r4 = r3 << 0x1f;
                                                                 |     if (r4 < r3) {
    0x0007a42a bmi.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x0007a42e ldr.w r1, [sl, 0x3c]                              |     r1 = *((sl + 0x3c));
    0x0007a432 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007a434 beq.w 0x7a9bc                                     |         goto label_199;
                                                                 |     }
    0x0007a438 mov r0, sb                                        |     r0 = sb;
    0x0007a43a bl 0xf708                                         |     fcn_0000f708 (r0, r1);
    0x0007a43e str r0, [sp, 0x50]                                |     var_50h = r0;
                                                                 | label_78:
    0x0007a440 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007a442 ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
                                                                 |     if (r4 == 0) {
    0x0007a444 cbnz r4, 0x7a44c                                  |         
    0x0007a446 bl 0x29b54                                        |         r0 = fcn_00029b54 (r0, r1);
    0x0007a44a mov r4, r0                                        |         r4 = r0;
                                                                 |     }
    0x0007a44c ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x0007a44e ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0007a450 ldr r0, [r6, 0x74]                                |     r0 = *((r6 + 0x74));
    0x0007a452 cmp r0, 0                                         |     
    0x0007a454 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x0007a456 moveq r0, r6                                      |         r0 = r6;
                                                                 |     }
    0x0007a458 bl 0x4a504                                        |     fcn_0004a504 (r0, r1);
    0x0007a45c ldr r5, [r6, 0x28]                                |     r5 = *((r6 + 0x28));
    0x0007a45e mov r0, r6                                        |     r0 = r6;
    0x0007a460 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0007a462 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0007a464 adds r3, r5, 2                                    |     r3 = r5 + 2;
    0x0007a466 str r5, [sp, 0x54]                                |     var_54h = r5;
    0x0007a468 str r3, [r6, 0x28]                                |     *((r6 + 0x28)) = r3;
    0x0007a46a add.w r8, r5, 1                                   |     r8 = r5 + 1;
    0x0007a46e bl 0x1fc84                                        |     fcn_0001fc84 (r0, r1, r2);
    0x0007a472 ldrb r3, [r6, 0x13]                               |     r3 = *((r6 + 0x13));
    0x0007a474 str r0, [sp, 0x68]                                |     var_68h = r0;
    0x0007a476 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007a478 beq.w 0x7a7c6                                     |         goto label_200;
                                                                 |     }
    0x0007a47c ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0007a47e subs r3, 1                                        |     r3--;
    0x0007a480 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0007a482 strb r3, [r2, 0x13]                               |     *((r2 + 0x13)) = r3;
    0x0007a484 adds r3, 0x26                                     |     r3 += 0x26;
    0x0007a486 ldr.w r3, [r2, r3, lsl 2]                         |     offset_3 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_3));
    0x0007a48a str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 | label_69:
    0x0007a48c movs r2, 0                                        |     r2 = 0;
    0x0007a48e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0007a490 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0007a492 mov r0, r4                                        |     r0 = r4;
    0x0007a494 str r2, [sp]                                      |     *(sp) = r2;
    0x0007a496 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a49a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0007a49c ldrb r3, [r3, 0x13]                               |     r3 = *((r3 + 0x13));
    0x0007a49e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007a4a0 beq.w 0x7a9b2                                     |         goto label_201;
                                                                 |     }
    0x0007a4a4 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0007a4a6 subs r3, 1                                        |     r3--;
    0x0007a4a8 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0007a4aa strb r3, [r2, 0x13]                               |     *((r2 + 0x13)) = r3;
    0x0007a4ac adds r3, 0x26                                     |     r3 += 0x26;
    0x0007a4ae ldr.w r7, [r2, r3, lsl 2]                         |     offset_4 = r3 << 2;
                                                                 |     r7 = *((r2 + offset_4));
                                                                 | label_77:
    0x0007a4b2 ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x0007a4b4 movs r3, 0x71                                     |     r3 = 0x71;
    0x0007a4b6 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007a4b8 mov r1, r8                                        |     r1 = r8;
    0x0007a4ba str r3, [sp]                                      |     *(sp) = r3;
    0x0007a4bc ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0007a4be mov r3, r5                                        |     r3 = r5;
    0x0007a4c0 bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x0007a4c4 ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0007a4c8 lsls r0, r3, 0x1d                                 |     r0 = r3 << 0x1d;
                                                                 |     if (r0 < r3) {
    0x0007a4ca bmi.w 0x7a9ac                                     |         goto label_202;
                                                                 |     }
    0x0007a4ce ldrsh.w r3, [r5, 0x20]                            |     r3 = *((r5 + 0x20));
    0x0007a4d2 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0007a4d4 blt.w 0x7a7fe                                     |         goto label_203;
                                                                 |     }
                                                                 | label_72:
    0x0007a4d8 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
                                                                 |     if (r3 == 0) {
    0x0007a4da cbnz r3, 0x7a4e4                                  |         
    0x0007a4dc ldr r3, [sp, 0x60]                                |         r3 = var_60h;
    0x0007a4de subs r3, 1                                        |         r3--;
    0x0007a4e0 cmp r3, 1                                         |         
                                                                 |         if (r3 < 1) {
    0x0007a4e2 bls 0x7a50e                                       |             goto label_76;
                                                                 |         }
                                                                 |     }
                                                                 | label_71:
    0x0007a4e4 movs r3, 0                                        |     r3 = 0;
    0x0007a4e6 mov r2, r8                                        |     r2 = r8;
    0x0007a4e8 movs r1, 0x23                                     |     r1 = 0x23;
    0x0007a4ea str r3, [sp]                                      |     *(sp) = r3;
    0x0007a4ec mov r0, r4                                        |     r0 = r4;
    0x0007a4ee bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a4f2 movs r3, 0                                        |     r3 = 0;
    0x0007a4f4 mov r6, r0                                        |     r6 = r0;
    0x0007a4f6 mov r2, r3                                        |     r2 = r3;
    0x0007a4f8 movs r1, 8                                        |     r1 = 8;
    0x0007a4fa mov r0, r4                                        |     r0 = r4;
    0x0007a4fc str r3, [sp]                                      |     *(sp) = r3;
    0x0007a4fe bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a502 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x0007a504 mov r1, r6                                        |     r1 = r6;
    0x0007a506 str r0, [sp, 0x5c]                                |     var_5ch = r0;
    0x0007a508 mov r0, r4                                        |     r0 = r4;
    0x0007a50a bl 0xbc2c                                         |     fcn_0000bc2c (r0, r1, r2);
                                                                 | label_76:
    0x0007a50e ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x0007a512 ands r6, r3, 0x80                                 |     r6 = r3 & 0x80;
                                                                 |     if (r6 != r3) {
    0x0007a516 bne.w 0x7a7d2                                     |         goto label_204;
                                                                 |     }
    0x0007a51a ldrd r2, r5, [sp, 0x50]                           |     __asm ("ldrd r2, r5, [var_54h]");
    0x0007a51e movs r3, 0x70                                     |     r3 = 0x70;
    0x0007a520 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007a522 str r3, [sp]                                      |     *(sp) = r3;
    0x0007a524 mov r3, sl                                        |     r3 = sl;
    0x0007a526 mov r1, r5                                        |     r1 = r5;
    0x0007a528 bl 0x2bad8                                        |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x0007a52c mov r3, r6                                        |     r3 = r6;
    0x0007a52e mov r2, r5                                        |     r2 = r5;
    0x0007a530 movs r1, 0x23                                     |     r1 = 0x23;
    0x0007a532 mov r0, r4                                        |     r0 = r4;
    0x0007a534 str r6, [sp]                                      |     *(sp) = r6;
    0x0007a536 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a53a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007a53c str r0, [sp, 0x70]                                |     var_70h = r0;
    0x0007a53e ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x0007a542 cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x0007a544 bge.w 0x7a64e                                     |         goto label_205;
                                                                 |     }
    0x0007a548 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007a54a ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0007a54c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007a54e beq 0x7a632                                       |         goto label_206;
                                                                 |     }
                                                                 | label_54:
    0x0007a550 movs r3, 0                                        |     r3 = 0;
    0x0007a552 ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x0007a554 str r3, [sp]                                      |     *(sp) = r3;
    0x0007a556 movs r1, 0x87                                     |     r1 = 0x87;
    0x0007a558 mov r3, r7                                        |     r3 = r7;
    0x0007a55a mov r0, r4                                        |     r0 = r4;
    0x0007a55c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a560 str r0, [sp, 0x6c]                                |     var_6ch = r0;
                                                                 | label_55:
    0x0007a562 ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0007a566 lsls r1, r3, 0x1d                                 |     r1 = r3 << 0x1d;
                                                                 |     if (r1 < r3) {
    0x0007a568 bmi 0x7a620                                       |         goto label_56;
                                                                 |     }
    0x0007a56a movs r6, 0xa9                                     |     r6 = 0xa9;
                                                                 | label_53:
    0x0007a56c ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0007a56e mov r2, r8                                        |     r2 = r8;
    0x0007a570 movs r1, 0x81                                     |     r1 = 0x81;
    0x0007a572 mov r0, r4                                        |     r0 = r4;
    0x0007a574 str r7, [sp]                                      |     *(sp) = r7;
    0x0007a576 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a57a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0007a57c mov r2, r8                                        |     r2 = r8;
    0x0007a57e movs r1, 0x80                                     |     r1 = 0x80;
    0x0007a580 mov r0, r4                                        |     r0 = r4;
    0x0007a582 str r7, [sp]                                      |     *(sp) = r7;
    0x0007a584 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a588 ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0007a58c lsls r2, r3, 0x1d                                 |     r2 = r3 << 0x1d;
                                                                 |     if (r2 >= r3) {
    0x0007a58e bmi 0x7a5a0                                       |         
    0x0007a590 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x0007a592 mvn r3, 4                                         |         r3 = ~4;
    0x0007a596 mov.w r1, -1                                      |         r1 = -1;
    0x0007a59a mov r0, r4                                        |         r0 = r4;
    0x0007a59c bl 0x1ec70                                        |         fcn_0001ec70 (r0, r1, r2);
                                                                 |     }
    0x0007a5a0 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x0007a5a2 mov r0, r4                                        |     r0 = r4;
    0x0007a5a4 ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x0007a5a6 cmp r2, 0                                         |     
    0x0007a5a8 ittt gt                                           |     
                                                                 |     if (r2 <= 0) {
    0x0007a5aa ldrgt r3, [r4, 0x68]                              |         r3 = *((r4 + 0x68));
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x0007a5ac movgt r1, 0x14                                    |         r1 = 0x14;
                                                                 |     }
                                                                 |     if (r2 > 0) {
    0x0007a5ae mlagt r3, r1, r2, r3                              |         __asm ("mlagt r3, r1, r2, r3");
                                                                 |     }
    0x0007a5b2 mov r2, r5                                        |     r2 = r5;
    0x0007a5b4 mov.w r1, 0x26                                    |     r1 = 0x26;
    0x0007a5b8 it gt                                             |     
                                                                 |     if (r2 > 0) {
    0x0007a5ba strhgt r6, [r3, -0x12]                            |         __asm ("strhgt r6, [r3, -0x12]");
                                                                 |     }
    0x0007a5be movs r6, 0                                        |     r6 = 0;
    0x0007a5c0 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0007a5c2 str r6, [sp]                                      |     *(sp) = r6;
    0x0007a5c4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a5c8 mov r3, r6                                        |     r3 = r6;
    0x0007a5ca mov r2, r5                                        |     r2 = r5;
    0x0007a5cc movs r1, 0x7a                                     |     r1 = 0x7a;
    0x0007a5ce mov r0, r4                                        |     r0 = r4;
    0x0007a5d0 str r6, [sp]                                      |     *(sp) = r6;
    0x0007a5d2 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a5d6 mov r3, r6                                        |     r3 = r6;
    0x0007a5d8 mov r2, r8                                        |     r2 = r8;
    0x0007a5da movs r1, 0x7a                                     |     r1 = 0x7a;
    0x0007a5dc mov r0, r4                                        |     r0 = r4;
    0x0007a5de str r6, [sp]                                      |     *(sp) = r6;
    0x0007a5e0 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_70:
    0x0007a5e4 ldr.w r3, [pc, 0x4ac]                             |     r3 = *(0x0007aa94);
    0x0007a5e8 strd fp, r7, [sp, 0x68]                           |     __asm ("strd fp, r7, [var_68h]");
    0x0007a5ec ldr r7, [sp, 0x54]                                |     r7 = var_54h;
    0x0007a5ee add r3, pc                                        |     r3 += pc;
    0x0007a5f0 addw r3, r3, 0xeec                                |     __asm ("addw r3, r3, aav.0x000000ff");
    0x0007a5f4 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0007a5f6 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007a5f8 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0007a5fa mov fp, r3                                        |     
                                                                 | label_73:
    0x0007a5fc cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0007a600 beq.w 0x7a808                                     |         goto label_207;
                                                                 |     }
    0x0007a604 ldr.w r6, [sl, 8]                                 |     r6 = *((sl + 8));
                                                                 |     do {
    0x0007a608 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0007a60a beq.w 0x7ad82                                     |             goto label_208;
                                                                 |         }
    0x0007a60e mov r1, r6                                        |         r1 = r6;
    0x0007a610 mov r0, fp                                        |         r0 = fp;
    0x0007a612 bl 0x37948                                        |         r0 = fcn_00037948 (r0, r1);
    0x0007a616 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0007a618 bne.w 0x7a866                                     |             goto label_209;
                                                                 |         }
    0x0007a61c ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
    0x0007a61e b 0x7a608                                         |         
                                                                 |     } while (1);
                                                                 | label_56:
    0x0007a620 movs r3, 0                                        |     r3 = 0;
    0x0007a622 mov r2, r8                                        |     r2 = r8;
    0x0007a624 movs r1, 0x89                                     |     r1 = 0x89;
    0x0007a626 mov r0, r4                                        |     r0 = r4;
    0x0007a628 str r3, [sp]                                      |     *(sp) = r3;
    0x0007a62a movs r6, 0x98                                     |     r6 = 0x98;
    0x0007a62c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a630 b 0x7a56c                                         |     goto label_53;
                                                                 | label_206:
    0x0007a632 ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0007a636 ands r3, r3, 8                                    |     r3 &= 8;
                                                                 |     if (r3 != r3) {
    0x0007a63a bne 0x7a550                                       |         goto label_54;
                                                                 |     }
    0x0007a63c str r3, [sp]                                      |     *(sp) = r3;
    0x0007a63e mov r2, r8                                        |     r2 = r8;
    0x0007a640 mov r3, r7                                        |     r3 = r7;
    0x0007a642 movs r1, 0x7f                                     |     r1 = 0x7f;
    0x0007a644 mov r0, r4                                        |     r0 = r4;
    0x0007a646 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a64a str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0007a64c b 0x7a562                                         |     goto label_55;
                                                                 | label_205:
    0x0007a64e mov r3, r7                                        |     r3 = r7;
    0x0007a650 mov r2, r5                                        |     r2 = r5;
    0x0007a652 movs r1, 0x87                                     |     r1 = 0x87;
    0x0007a654 mov r0, r4                                        |     r0 = r4;
    0x0007a656 str r6, [sp]                                      |     *(sp) = r6;
    0x0007a658 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a65c ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0007a660 str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0007a662 ands r3, r3, 4                                    |     r3 &= 4;
                                                                 |     if (r3 == r3) {
    0x0007a666 beq.w 0x7ad2e                                     |         goto label_210;
                                                                 |     }
    0x0007a66a ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0007a66c cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0007a66e ble 0x7a620                                       |         goto label_56;
                                                                 |     }
                                                                 | label_102:
    0x0007a670 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0007a672 ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x0007a674 ldrd r3, r2, [r0, 0x6c]                           |     __asm ("ldrd r3, r2, [r0, 0x6c]");
    0x0007a678 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x0007a67a bge.w 0x7ad1e                                     |         goto label_211;
                                                                 |     }
    0x0007a67e movs r2, 0x14                                     |     r2 = 0x14;
    0x0007a680 ldr r1, [r0, 0x68]                                |     r1 = *((r0 + 0x68));
    0x0007a682 mul r2, r3, r2                                    |     r2 = r3 * r2;
    0x0007a686 ldr r5, [sp, 0x68]                                |     r5 = var_68h;
    0x0007a688 adds r3, 1                                        |     r3++;
    0x0007a68a movs r6, 0x9f                                     |     r6 = 0x9f;
    0x0007a68c str r3, [r0, 0x6c]                                |     *((r0 + 0x6c)) = r3;
    0x0007a68e movs r0, 0                                        |     r0 = 0;
    0x0007a690 adds r3, r1, r2                                   |     r3 = r1 + r2;
    0x0007a692 strd r5, r7, [r3, 4]                              |     __asm ("strd r5, r7, [r3, 4]");
    0x0007a696 strd r0, r0, [r3, 0xc]                            |     __asm ("strd r0, r0, [r3, 0xc]");
    0x0007a69a str r6, [r1, r2]                                  |     *((r1 + r2)) = r6;
    0x0007a69c b 0x7a562                                         |     goto label_55;
                                                                 | label_150:
    0x0007a69e ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0007a6a0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0007a6a2 beq.w 0x79ac0                                     |         goto label_21;
                                                                 |     }
    0x0007a6a6 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x0007a6a8 mov r2, r4                                        |     r2 = r4;
    0x0007a6aa mov r0, fp                                        |     r0 = fp;
    0x0007a6ac str r3, [sp]                                      |     *(sp) = r3;
    0x0007a6ae bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a6b2 ldrsh.w r1, [r5, 0x22]                            |     r1 = *((r5 + 0x22));
    0x0007a6b6 b.w 0x79ac0                                       |     goto label_21;
                                                                 | label_146:
    0x0007a6ba mov r3, r7                                        |     r3 = r7;
    0x0007a6bc movs r1, 0xb                                      |     r1 = 0xb;
    0x0007a6be mov r0, fp                                        |     r0 = fp;
    0x0007a6c0 str r7, [sp]                                      |     *(sp) = r7;
    0x0007a6c2 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007a6c6 mov r6, r0                                        |     r6 = r0;
    0x0007a6c8 b.w 0x799f8                                       |     goto label_57;
                                                                 | label_172:
    0x0007a6cc ldr r3, [r2, 0x70]                                |     r3 = *((r2 + 0x70));
    0x0007a6ce mov r0, r2                                        |     r0 = r2;
    0x0007a6d0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007a6d2 beq.w 0x79cc6                                     |         goto label_58;
                                                                 |     }
    0x0007a6d6 bl 0x2bbb8                                        |     fcn_0002bbb8 (r0, r1);
    0x0007a6da b.w 0x79cc6                                       |     goto label_58;
                                                                 | label_120:
    0x0007a6de ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007a6e0 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
                                                                 |     if (r3 == 0) {
    0x0007a6e2 cbnz r3, 0x7a6ea                                  |         
    0x0007a6e4 bl 0x29b54                                        |         r0 = fcn_00029b54 (r0, r1);
    0x0007a6e8 mov r3, r0                                        |         r3 = r0;
                                                                 |     }
    0x0007a6ea ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0007a6ec ldr.w ip, [r3, 0x6c]                              |     ip = *((r3 + 0x6c));
    0x0007a6f0 ldrb.w r2, [r2, 0x2b]                             |     r2 = *((r2 + 0x2b));
    0x0007a6f4 cmp r2, 1                                         |     
    0x0007a6f6 it ne                                             |     
                                                                 |     if (r2 == 1) {
    0x0007a6f8 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 == 1) {
    0x0007a6fa beq 0x7a76c                                       |         goto label_212;
                                                                 |     }
                                                                 | label_63:
    0x0007a6fc cmp.w ip, 1                                       |     
                                                                 |     if (ip <= 1) {
    0x0007a700 ble 0x7a766                                       |         goto label_213;
                                                                 |     }
    0x0007a702 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0007a704 movs r0, 0x14                                     |     r0 = 0x14;
    0x0007a706 ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x0007a708 movs r7, 1                                        |     r7 = 1;
    0x0007a70a mov lr, r3                                        |     lr = r3;
    0x0007a70c ldrb.w r5, [r1, 0x57]                             |     r5 = *((r1 + 0x57));
    0x0007a710 ldr r1, [pc, 0x384]                               |     
    0x0007a712 add r1, pc                                        |     r1 = 0xf51ae;
    0x0007a714 add.w sl, r1, 4                                   |     sl = r1 + 4;
    0x0007a718 b 0x7a72e                                         |     goto label_214;
                                                                 | label_60:
    0x0007a71a cmp r6, 0xad                                      |     
                                                                 |     if (r6 != 0xad) {
    0x0007a71c bne 0x7a726                                       |         goto label_61;
                                                                 |     }
    0x0007a71e ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x0007a720 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x0007a722 beq.w 0x79594                                     |         goto label_59;
                                                                 |     }
                                                                 | label_61:
    0x0007a726 adds r7, 1                                        |     r7++;
    0x0007a728 adds r0, 0x14                                     |     r0 += 0x14;
    0x0007a72a cmp ip, r7                                        |     
                                                                 |     if (ip == r7) {
    0x0007a72c beq 0x7a766                                       |         goto label_213;
                                                                 |     }
                                                                 | label_214:
    0x0007a72e mov r1, sl                                        |     r1 = sl;
                                                                 |     if (r5 == 0) {
    0x0007a730 cbnz r5, 0x7a738                                  |         
    0x0007a732 ldr.w r1, [lr, 0x68]                              |         r1 = *((lr + 0x68));
    0x0007a736 add r1, r0                                        |         r1 += r0;
                                                                 |     }
    0x0007a738 ldrb r6, [r1]                                     |     r6 = *(r1);
    0x0007a73a cmp r6, 0x70                                      |     
                                                                 |     if (r6 != 0x70) {
    0x0007a73c bne 0x7a71a                                       |         goto label_60;
                                                                 |     }
    0x0007a73e ldr r6, [r1, 0xc]                                 |     r6 = *((r1 + 0xc));
    0x0007a740 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0007a742 cmp r3, r6                                        |     
                                                                 |     if (r3 != r6) {
    0x0007a744 bne 0x7a726                                       |         goto label_61;
                                                                 |     }
    0x0007a746 ldr r1, [r1, 8]                                   |     r1 = *((r1 + 8));
    0x0007a748 ldr r6, [r4, 0x14]                                |     r6 = *((r4 + 0x14));
    0x0007a74a cmp r1, r6                                        |     
                                                                 |     if (r1 == r6) {
    0x0007a74c beq.w 0x79594                                     |         goto label_59;
                                                                 |     }
    0x0007a750 ldr r6, [r4, 8]                                   |     r6 = *((r4 + 8));
                                                                 |     if (r6 != 0) {
    0x0007a752 cbnz r6, 0x7a75c                                  |         goto label_215;
                                                                 |     }
    0x0007a754 b 0x7a726                                         |     goto label_61;
                                                                 | label_62:
    0x0007a756 ldr r6, [r6, 0x14]                                |     r6 = *((r6 + 0x14));
    0x0007a758 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0007a75a beq 0x7a726                                       |         goto label_61;
                                                                 |     }
                                                                 | label_215:
    0x0007a75c ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x0007a75e cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x0007a760 bne 0x7a756                                       |         goto label_62;
                                                                 |     }
    0x0007a762 b.w 0x79594                                       |     goto label_59;
                                                                 | label_213:
    0x0007a766 movs r7, 0                                        |     r7 = 0;
    0x0007a768 b.w 0x79814                                       |     goto label_25;
                                                                 | label_212:
    0x0007a76c ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0007a76e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0007a770 ldr r2, [r2, 0x34]                                |     r2 = *((r2 + 0x34));
    0x0007a772 ldr r0, [r1]                                      |     r0 = *(r1);
                                                                 |     if (r2 != 0) {
    0x0007a774 cbnz r2, 0x7a77e                                  |         goto label_216;
                                                                 |     }
    0x0007a776 b 0x7a6fc                                         |     goto label_63;
                                                                 | label_64:
    0x0007a778 ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x0007a77a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0007a77c beq 0x7a6fc                                       |         goto label_63;
                                                                 |     }
                                                                 | label_216:
    0x0007a77e ldr r1, [r2]                                      |     r1 = *(r2);
    0x0007a780 cmp r0, r1                                        |     
                                                                 |     if (r0 != r1) {
    0x0007a782 bne 0x7a778                                       |         goto label_64;
                                                                 |     }
    0x0007a784 b 0x7a6fc                                         |     goto label_63;
                                                                 | label_119:
    0x0007a786 ldr r2, [pc, 0x314]                               |     
    0x0007a788 add r2, pc                                        |     r2 = 0xf522a;
    0x0007a78a adds r2, 4                                        |     r2 += 4;
    0x0007a78c b.w 0x79582                                       |     goto label_65;
                                                                 | label_124:
    0x0007a790 ldr r2, [pc, 0x30c]                               |     
    0x0007a792 add r2, pc                                        |     r2 = 0xf5236;
    0x0007a794 adds r2, 4                                        |     r2 += 4;
    0x0007a796 b.w 0x79666                                       |     goto label_66;
                                                                 | label_123:
    0x0007a79a mov r3, r6                                        |     r3 = r6;
    0x0007a79c movs r1, 0xb                                      |     r1 = 0xb;
    0x0007a79e mov r0, fp                                        |     r0 = fp;
    0x0007a7a0 str r6, [sp]                                      |     *(sp) = r6;
    0x0007a7a2 bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007a7a6 mov r4, r0                                        |     r4 = r0;
    0x0007a7a8 b.w 0x79608                                       |     goto label_67;
                                                                 | label_122:
    0x0007a7ac ldr r3, [r0, 0x2c]                                |     r3 = *((r0 + 0x2c));
                                                                 |     do {
    0x0007a7ae add.w sl, r3, 1                                   |         sl = r3 + 1;
    0x0007a7b2 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0007a7b4 str.w sl, [r3, 0x2c]                              |         __asm ("str.w sl, [r3, 0x2c]");
    0x0007a7b8 b.w 0x795ca                                       |         goto label_68;
                                                                 | label_121:
    0x0007a7bc ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0007a7be ldr r3, [r3, 0x2c]                                |         r3 = *((r3 + 0x2c));
    0x0007a7c0 adds r7, r3, 1                                    |         r7 = r3 + 1;
    0x0007a7c2 mov r3, r7                                        |         r3 = r7;
    0x0007a7c4 b 0x7a7ae                                         |         
                                                                 |     } while (1);
                                                                 | label_200:
    0x0007a7c6 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0007a7c8 ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x0007a7ca adds r3, 1                                        |     r3++;
    0x0007a7cc str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0007a7ce str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0007a7d0 b 0x7a48c                                         |     goto label_69;
                                                                 | label_204:
    0x0007a7d2 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0007a7d4 ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x0007a7d6 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0007a7d8 ldr r3, [r2]                                      |     r3 = *(r2);
    0x0007a7da mov r0, r5                                        |     r0 = r5;
    0x0007a7dc str r3, [sp]                                      |     *(sp) = r3;
    0x0007a7de movs r3, 1                                        |     r3 = 1;
    0x0007a7e0 ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x0007a7e2 bl 0x2bab8                                        |     fcn_0002bab8 (r0, r1, r2, r3);
    0x0007a7e6 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0007a7ea mov r0, r5                                        |     r0 = r5;
    0x0007a7ec ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0007a7ee str r3, [sp]                                      |     *(sp) = r3;
    0x0007a7f0 movs r3, 0                                        |     r3 = 0;
    0x0007a7f2 ldr.w r2, [sl, 0x14]                              |     r2 = *((sl + 0x14));
    0x0007a7f6 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x0007a7f8 bl 0x2bab8                                        |     fcn_0002bab8 (r0, r1, r2, r3);
    0x0007a7fc b 0x7a5e4                                         |     goto label_70;
                                                                 | label_203:
    0x0007a7fe ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x0007a800 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007a802 bne.w 0x7a4e4                                     |         goto label_71;
                                                                 |     }
    0x0007a806 b 0x7a4d8                                         |     goto label_72;
                                                                 | label_207:
    0x0007a808 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0007a80a ldrd fp, r7, [sp, 0x68]                           |     __asm ("ldrd fp, r7, [var_68h]");
    0x0007a80e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007a810 bne.w 0x7a97e                                     |         goto label_217;
                                                                 |     }
                                                                 |     if (r7 != 0) {
                                                                 | label_74:
    0x0007a814 cbz r7, 0x7a81e                                   |         
    0x0007a816 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007a818 mov r1, r7                                        |         r1 = r7;
    0x0007a81a bl 0xf624                                         |         fcn_0000f624 (r0, r1);
                                                                 |     }
    0x0007a81e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
                                                                 |     if (r3 != 0) {
    0x0007a820 cbz r3, 0x7a82a                                   |         
    0x0007a822 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007a824 mov r1, r3                                        |         r1 = r3;
    0x0007a826 bl 0xf624                                         |         fcn_0000f624 (r0, r1);
                                                                 |     }
    0x0007a82a ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0007a82c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007a82e beq.w 0x7a95a                                     |         
    0x0007a832 ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007a834 ldr r3, [r0, 0x70]                                |         r3 = *((r0 + 0x70));
                                                                 |         if (r3 != 0) {
    0x0007a836 cbz r3, 0x7a83c                                   |             
    0x0007a838 bl 0x2bbb8                                        |             fcn_0002bbb8 (r0, r1);
                                                                 |         }
    0x0007a83c movs r6, 0                                        |         r6 = 0;
    0x0007a83e movs r1, 0x46                                     |         r1 = 0x46;
    0x0007a840 mov r3, r6                                        |         r3 = r6;
    0x0007a842 mov r2, r6                                        |         r2 = r6;
    0x0007a844 mov r0, r4                                        |         r0 = r4;
    0x0007a846 str r6, [sp]                                      |         *(sp) = r6;
    0x0007a848 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a84c ldr r1, [sp, 0x5c]                                |         r1 = var_5ch;
    0x0007a84e mov r0, r4                                        |         r0 = r4;
    0x0007a850 ldr r2, [r4, 0x6c]                                |         r2 = *((r4 + 0x6c));
    0x0007a852 bl 0xbc2c                                         |         fcn_0000bc2c (r0, r1, r2);
    0x0007a856 mov r2, r8                                        |         r2 = r8;
    0x0007a858 mov r3, r6                                        |         r3 = r6;
    0x0007a85a movs r1, 0x7a                                     |         r1 = 0x7a;
    0x0007a85c str r6, [sp]                                      |         *(sp) = r6;
    0x0007a85e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a862 b.w 0x793da                                       |         goto label_22;
                                                                 | label_209:
    0x0007a866 ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x0007a868 mov r2, r7                                        |         r2 = r7;
    0x0007a86a movs r1, 0x70                                     |         r1 = 0x70;
    0x0007a86c mov r0, r4                                        |         r0 = r4;
    0x0007a86e str r3, [sp]                                      |         *(sp) = r3;
    0x0007a870 ldr r3, [r6, 0x2c]                                |         r3 = *((r6 + 0x2c));
    0x0007a872 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a876 ldr r5, [sp, 0x2c]                                |         r5 = var_2ch;
    0x0007a878 mov r1, r6                                        |         r1 = r6;
    0x0007a87a mov r0, r5                                        |         r0 = r5;
    0x0007a87c bl 0x27dcc                                        |         fcn_00027dcc (r0, r1);
    0x0007a880 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x0007a882 mov r2, r8                                        |         r2 = r8;
    0x0007a884 movs r1, 0x71                                     |         r1 = 0x71;
    0x0007a886 mov r0, r4                                        |         r0 = r4;
    0x0007a888 str r3, [sp]                                      |         *(sp) = r3;
    0x0007a88a ldr.w r3, [fp, 0x2c]                              |         r3 = *(arg_2ch);
    0x0007a88e bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a892 mov r1, fp                                        |         r1 = fp;
    0x0007a894 mov r0, r5                                        |         r0 = r5;
    0x0007a896 bl 0x27dcc                                        |         fcn_00027dcc (r0, r1);
    0x0007a89a ldr r2, [r4, 0x6c]                                |         r2 = *((r4 + 0x6c));
    0x0007a89c cmp r2, 0                                         |         
                                                                 |         if (r2 > 0) {
    0x0007a89e ble 0x7a8ae                                       |             
    0x0007a8a0 ldr r3, [r4, 0x68]                                |             r3 = *((r4 + 0x68));
    0x0007a8a2 movs r1, 0x14                                     |             r1 = 0x14;
    0x0007a8a4 mla r3, r1, r2, r3                                |             __asm ("mla r3, r1, r2, r3");
    0x0007a8a8 movs r2, 1                                        |             r2 = 1;
    0x0007a8aa strh r2, [r3, -0x12]                              |             *((r3 - 0x12)) = r2;
                                                                 |         }
    0x0007a8ae movs r3, 0                                        |         r3 = 0;
    0x0007a8b0 mov r2, r7                                        |         r2 = r7;
    0x0007a8b2 str r3, [sp]                                      |         *(sp) = r3;
    0x0007a8b4 movs r1, 0x23                                     |         r1 = 0x23;
    0x0007a8b6 mov r0, r4                                        |         r0 = r4;
    0x0007a8b8 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a8bc ldr.w r2, [sb, 0x18]                              |         r2 = *((sb + 0x18));
    0x0007a8c0 mov r5, r0                                        |         r5 = r0;
    0x0007a8c2 movs r3, 0                                        |         r3 = 0;
    0x0007a8c4 tst.w r2, 4                                       |         
                                                                 |         if ((r2 & 4) != 0) {
    0x0007a8c8 bne 0x7a98e                                       |             goto label_218;
                                                                 |         }
    0x0007a8ca ldr.w r3, [sl, 0x1c]                              |         r3 = *((sl + 0x1c));
    0x0007a8ce lsls r3, r3, 0x18                                 |         r3 <<= 0x18;
                                                                 |         if (r3 >= r3) {
    0x0007a8d0 bpl 0x7a98a                                       |             goto label_80;
                                                                 |         }
    0x0007a8d2 ldrb.w r6, [fp, 0x37]                             |         r6 = *(arg_37h);
    0x0007a8d6 and r6, r6, 3                                     |         r6 &= 3;
    0x0007a8da sub.w ip, r6, 2                                   |         
    0x0007a8de rsbs.w r6, ip, 0                                  |         r6 = ip - ;
    0x0007a8e2 adc.w r6, r6, ip                                  |         __asm ("adc.w r6, r6, ip");
                                                                 | label_75:
    0x0007a8e6 movs r3, 1                                        |         r3 = 1;
    0x0007a8e8 mov r2, r7                                        |         r2 = r7;
    0x0007a8ea str r3, [sp]                                      |         *(sp) = r3;
    0x0007a8ec movs r1, 0x86                                     |         r1 = 0x86;
    0x0007a8ee ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0007a8f0 mov r0, r4                                        |         r0 = r4;
    0x0007a8f2 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_81:
    0x0007a8f6 movs r3, 0                                        |         r3 = 0;
    0x0007a8f8 movs r1, 0x8a                                     |         r1 = 0x8a;
    0x0007a8fa mov r2, r8                                        |         r2 = r8;
    0x0007a8fc str r3, [sp]                                      |         *(sp) = r3;
    0x0007a8fe mov r0, r4                                        |         r0 = r4;
    0x0007a900 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0007a902 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a906 ldr r2, [r4, 0x6c]                                |         r2 = *((r4 + 0x6c));
    0x0007a908 orr r6, r6, 8                                     |         r6 |= 8;
    0x0007a90c mov r0, r4                                        |         r0 = r4;
    0x0007a90e cmp r2, 0                                         |         
    0x0007a910 ittt gt                                           |         
                                                                 |         if (r2 <= 0) {
    0x0007a912 ldrgt r3, [r4, 0x68]                              |             r3 = *((r4 + 0x68));
                                                                 |         }
                                                                 |         if (r2 <= 0) {
    0x0007a914 movgt r1, 0x14                                    |             r1 = 0x14;
                                                                 |         }
                                                                 |         if (r2 > 0) {
    0x0007a916 mlagt r3, r1, r2, r3                              |             __asm ("mlagt r3, r1, r2, r3");
                                                                 |         }
    0x0007a91a mov r2, r7                                        |         r2 = r7;
    0x0007a91c mov.w r1, 0x26                                    |         r1 = 0x26;
    0x0007a920 it gt                                             |         
                                                                 |         if (r2 > 0) {
    0x0007a922 strhgt r6, [r3, -0x12]                            |             __asm ("strhgt r6, [r3, -0x12]");
                                                                 |         }
    0x0007a926 movs r6, 0                                        |         r6 = 0;
    0x0007a928 adds r3, r5, 1                                    |         r3 = r5 + 1;
    0x0007a92a str r6, [sp]                                      |         *(sp) = r6;
    0x0007a92c bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a930 ldr r2, [r4, 0x6c]                                |         r2 = *((r4 + 0x6c));
    0x0007a932 mov r1, r5                                        |         r1 = r5;
    0x0007a934 mov r0, r4                                        |         r0 = r4;
    0x0007a936 bl 0xbc2c                                         |         fcn_0000bc2c (r0, r1, r2);
    0x0007a93a mov r3, r6                                        |         r3 = r6;
    0x0007a93c mov r2, r7                                        |         r2 = r7;
    0x0007a93e movs r1, 0x7a                                     |         r1 = 0x7a;
    0x0007a940 str r6, [sp]                                      |         *(sp) = r6;
    0x0007a942 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a946 mov r3, r6                                        |         r3 = r6;
    0x0007a948 mov r2, r8                                        |         r2 = r8;
    0x0007a94a movs r1, 0x7a                                     |         r1 = 0x7a;
    0x0007a94c mov r0, r4                                        |         r0 = r4;
    0x0007a94e str r6, [sp]                                      |         *(sp) = r6;
    0x0007a950 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a954 ldr.w fp, [fp, 0x14]                              |         fp = *(arg_14h);
    0x0007a958 b 0x7a5fc                                         |         goto label_73;
                                                                 |     }
    0x0007a95a ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0007a95c ldrb r3, [r2, 0x12]                               |     r3 = *((r2 + 0x12));
    0x0007a95e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007a960 bne.w 0x792d4                                     |         goto label_0;
                                                                 |     }
    0x0007a964 ldr r3, [r2, 0x78]                                |     r3 = *((r2 + 0x78));
    0x0007a966 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007a968 bne.w 0x792d4                                     |         goto label_0;
                                                                 |     }
    0x0007a96c ldr r3, [r2, 0x70]                                |     r3 = *((r2 + 0x70));
    0x0007a96e mov r0, r2                                        |     r0 = r2;
    0x0007a970 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007a972 beq.w 0x792d4                                     |         goto label_0;
                                                                 |     }
    0x0007a976 bl 0x2bbb8                                        |     fcn_0002bbb8 (r0, r1);
    0x0007a97a b.w 0x792d4                                       |     goto label_0;
                                                                 | label_217:
    0x0007a97e ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x0007a980 mov r1, r3                                        |     r1 = r3;
    0x0007a982 mov r0, r4                                        |     r0 = r4;
    0x0007a984 bl 0xbc2c                                         |     fcn_0000bc2c (r0, r1, r2);
    0x0007a988 b 0x7a814                                         |     goto label_74;
                                                                 | label_80:
    0x0007a98a movs r6, 0                                        |     r6 = 0;
    0x0007a98c b 0x7a8e6                                         |     goto label_75;
                                                                 | label_218:
    0x0007a98e mov r5, r4                                        |     r5 = r4;
    0x0007a990 mov r4, r3                                        |     r4 = r3;
    0x0007a992 str r0, [sp, 0x54]                                |     var_54h = r0;
                                                                 |     do {
    0x0007a994 ldrh r2, [r6, 0x34]                               |         r2 = *((r6 + 0x34));
    0x0007a996 cmp r4, r2                                        |         
                                                                 |         if (r4 >= r2) {
    0x0007a998 bge 0x7aa02                                       |             goto label_219;
                                                                 |         }
    0x0007a99a ldr r2, [r6, 0x20]                                |         r2 = *((r6 + 0x20));
    0x0007a99c ldr r0, [sp, 0x60]                                |         r0 = var_60h;
    0x0007a99e ldr.w r1, [r2, r4, lsl 2]                         |         offset_5 = r4 << 2;
                                                                 |         r1 = *((r2 + offset_5));
    0x0007a9a2 blx 0x9754                                        |         r0 = fcn_00009754 ();
                                                                 |         if (r0 != 0) {
    0x0007a9a6 cbnz r0, 0x7a9d4                                  |             goto label_220;
                                                                 |         }
    0x0007a9a8 adds r4, 1                                        |         r4++;
    0x0007a9aa b 0x7a994                                         |         
                                                                 |     } while (1);
                                                                 | label_202:
    0x0007a9ac movs r3, 0                                        |     r3 = 0;
    0x0007a9ae str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0007a9b0 b 0x7a50e                                         |     goto label_76;
                                                                 | label_201:
    0x0007a9b2 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0007a9b4 ldr r3, [r2, 0x2c]                                |     r3 = *((r2 + 0x2c));
    0x0007a9b6 adds r7, r3, 1                                    |     r7 = r3 + 1;
    0x0007a9b8 str r7, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r7;
    0x0007a9ba b 0x7a4b2                                         |     goto label_77;
                                                                 | label_199:
    0x0007a9bc mov.w r3, 0x8000                                  |     
    0x0007a9c0 movt r3, 0xffff                                   |     r3 = 0x-8000;
    0x0007a9c4 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0007a9c6 b 0x7a440                                         |     goto label_78;
                                                                 | label_196:
    0x0007a9c8 ldr r2, [r5, 0x2c]                                |     r2 = *((r5 + 0x2c));
    0x0007a9ca ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x0007a9cc cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0007a9ce beq 0x7aa0a                                       |         goto label_221;
                                                                 |     }
                                                                 | label_83:
    0x0007a9d0 ldr r6, [r6, 0x14]                                |     r6 = *((r6 + 0x14));
    0x0007a9d2 b 0x7a3b2                                         |     goto label_79;
                                                                 | label_220:
    0x0007a9d4 mov r3, r4                                        |     r3 = r4;
    0x0007a9d6 ldrh r2, [r6, 0x34]                               |     r2 = *((r6 + 0x34));
    0x0007a9d8 mov r4, r5                                        |     r4 = r5;
    0x0007a9da ldr r5, [sp, 0x54]                                |     r5 = var_54h;
                                                                 | label_82:
    0x0007a9dc cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x0007a9de bne 0x7a98a                                       |         goto label_80;
                                                                 |     }
    0x0007a9e0 movs r6, 0                                        |     r6 = 0;
    0x0007a9e2 mov r2, r8                                        |     r2 = r8;
    0x0007a9e4 mov r3, r6                                        |     r3 = r6;
    0x0007a9e6 movs r1, 0x89                                     |     r1 = 0x89;
    0x0007a9e8 str r6, [sp]                                      |     *(sp) = r6;
    0x0007a9ea mov r0, r4                                        |     r0 = r4;
    0x0007a9ec bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007a9f0 str r6, [sp]                                      |     *(sp) = r6;
    0x0007a9f2 mov r3, r7                                        |     r3 = r7;
    0x0007a9f4 mov r2, r8                                        |     r2 = r8;
    0x0007a9f6 movs r1, 0x81                                     |     r1 = 0x81;
    0x0007a9f8 mov r0, r4                                        |     r0 = r4;
    0x0007a9fa movs r6, 0x90                                     |     r6 = 0x90;
    0x0007a9fc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007aa00 b 0x7a8f6                                         |     goto label_81;
                                                                 | label_219:
    0x0007aa02 mov r3, r4                                        |     r3 = r4;
    0x0007aa04 mov r4, r5                                        |     r4 = r5;
    0x0007aa06 ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x0007aa08 b 0x7a9dc                                         |     goto label_82;
                                                                 | label_221:
    0x0007aa0a ldr.w r2, [sl, 0x3c]                              |     r2 = *((sl + 0x3c));
    0x0007aa0e ldr.w r3, [r8, 0x3c]                              |     r3 = *((r8 + 0x3c));
    0x0007aa12 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0007aa14 bne 0x7a9d0                                       |         goto label_83;
                                                                 |     }
    0x0007aa16 ldr.w r3, [r4, 0x100]                             |     r3 = *((r4 + 0x100));
    0x0007aa1a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007aa1c beq.w 0x793da                                     |         goto label_22;
                                                                 |     }
    0x0007aa20 movw r0, 0x19b                                    |     r0 = 0x19b;
    0x0007aa24 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t) (r0);
    0x0007aa26 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007aa28 bne 0x7a9d0                                       |         goto label_83;
                                                                 |     }
    0x0007aa2a b.w 0x793da                                       |     goto label_22;
                                                                 | label_136:
    0x0007aa2e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0007aa30 ldrb.w r2, [r2, 0x95]                             |     r2 = *((r2 + 0x95));
    0x0007aa34 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0007aa36 bne.w 0x799b8                                     |         goto label_84;
                                                                 |     }
    0x0007aa3a ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0007aa3c mov r0, fp                                        |     r0 = fp;
    0x0007aa3e str r2, [sp]                                      |     *(sp) = r2;
    0x0007aa40 ldr r3, [r1, 0x2c]                                |     r3 = *((r1 + 0x2c));
    0x0007aa42 adds r3, 1                                        |     r3++;
    0x0007aa44 str r3, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r3;
    0x0007aa46 movs r1, 0x47                                     |     r1 = 0x47;
    0x0007aa48 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x0007aa4a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007aa4e b.w 0x798b4                                       |     goto label_16;
                                                                 | label_140:
    0x0007aa52 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0007aa54 ldr r1, [pc, 0x4c]                                |     
    0x0007aa56 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007aa58 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0007aa5a add r1, pc                                        |     r1 = 0xf5502;
    0x0007aa5c bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_96:
    0x0007aa60 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x0007aa62 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0007aa64 bl 0x16a58                                        |     fcn_00016a58 (r0, r1);
    0x0007aa68 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
                                                                 |     if (r3 != 0) {
    0x0007aa6a cbz r3, 0x7aa74                                   |         
    0x0007aa6c ldr r1, [sp, 0x58]                                |         r1 = var_58h;
    0x0007aa6e ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x0007aa70 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
                                                                 |     }
    0x0007aa74 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0007aa76 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0007aa78 b.w 0x792f2                                       |     goto label_3;
                                                                 | label_142:
    0x0007aaa8 ldrd r2, r5, [sp, 0xb4]                           |     __asm ("ldrd r2, r5, [var_b4h]");
    0x0007aaac ldr r4, [sp, 0x4c]                                |     r4 = var_4ch;
    0x0007aaae ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0007aab0 ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
    0x0007aab4 mov sb, r2                                        |     sb = r2;
    0x0007aab6 mov r6, r4                                        |     r6 = r4;
    0x0007aab8 mov sl, r5                                        |     sl = r5;
    0x0007aaba str r2, [r3, 0x30]                                |     *((r3 + 0x30)) = r2;
    0x0007aabc add r3, sp, 0xfc                                  |     r3 += var_fch;
    0x0007aabe str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0007aac0 strd fp, r7, [sp, 0xa8]                           |     __asm ("strd fp, r7, [var_a8h]");
                                                                 | label_89:
    0x0007aac4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0007aac6 ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x0007aac8 str.w sl, [r6, 0x2c]                              |     __asm ("str.w sl, [r6, 0x2c]");
    0x0007aacc str r3, [r6, 0x20]                                |     *((r6 + 0x20)) = r3;
    0x0007aace strd r2, sb, [r6, 0x24]                           |     __asm ("strd r2, sb, [r6, 0x24]");
    0x0007aad2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007aad4 beq.w 0x7ac0e                                     |         goto label_222;
                                                                 |     }
    0x0007aad8 movs r5, 0                                        |     r5 = 0;
    0x0007aada strd r8, r3, [sp, 0xdc]                           |     __asm ("strd r8, r3, [var_dch]");
    0x0007aade mov fp, r5                                        |     
    0x0007aae0 strd r5, r5, [sp, 0xe4]                           |     __asm ("strd r5, r5, [var_e4h]");
    0x0007aae4 strd r5, r5, [sp, 0xec]                           |     __asm ("strd r5, r5, [var_ech]");
    0x0007aae8 strd r5, r5, [sp, 0xf4]                           |     __asm ("strd r5, r5, [var_f4h]");
    0x0007aaec mov r5, r6                                        |     r5 = r6;
    0x0007aaee strd sb, r6, [sp, 0x98]                           |     __asm ("strd sb, r6, [var_98h]");
    0x0007aaf2 str.w sl, [sp, 0xa0]                              |     __asm ("str.w sl, [var_a0h]");
                                                                 | label_87:
    0x0007aaf6 ldr r1, [r5]                                      |     r1 = *(r5);
    0x0007aaf8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007aafa beq.w 0x7ac06                                     |         goto label_223;
                                                                 |     }
    0x0007aafe add r4, sp, 0xdc                                  |     r4 += var_dch;
    0x0007ab00 mov r0, r4                                        |     r0 = r4;
    0x0007ab02 bl 0x2d0d0                                        |     r0 = fcn_0002d0d0 (r0, r1);
    0x0007ab06 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007ab08 bne.w 0x79cd6                                     |         goto label_85;
                                                                 |     }
    0x0007ab0c ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0007ab0e mov r0, r4                                        |     r0 = r4;
    0x0007ab10 bl 0x2cfe8                                        |     r0 = fcn_0002cfe8 (r0, r1);
    0x0007ab14 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007ab16 bne.w 0x79cd6                                     |         goto label_85;
                                                                 |     }
    0x0007ab1a ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0007ab1c ldr r2, [r5]                                      |     r2 = *(r5);
    0x0007ab1e ldr r4, [r3, 0x18]                                |     r4 = *((r3 + 0x18));
    0x0007ab20 ldr r7, [r3, 0x30]                                |     r7 = *((r3 + 0x30));
    0x0007ab22 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x0007ab24 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x0007ab26 lsls r6, r3, 0x18                                 |     r6 = r3 << 0x18;
                                                                 |     if (r6 >= r3) {
    0x0007ab28 bmi 0x7ab40                                       |         
    0x0007ab2a ldr r3, [r2]                                      |         r3 = *(r2);
    0x0007ab2c cmp r3, 1                                         |         
                                                                 |         if (r3 != 1) {
    0x0007ab2e bne 0x7ab40                                       |             goto label_224;
                                                                 |         }
    0x0007ab30 ldr r3, [r2, 8]                                   |         r3 = *((r2 + 8));
    0x0007ab32 ldrb r2, [r3]                                     |         r2 = *(r3);
    0x0007ab34 cmp r2, 0xa7                                      |         
                                                                 |         if (r2 != 0xa7) {
    0x0007ab36 bne 0x7ab40                                       |             goto label_224;
                                                                 |         }
    0x0007ab38 ldrsh.w r3, [r3, 0x20]                            |         r3 = *((r3 + 0x20));
    0x0007ab3c adds r3, 1                                        |         r3++;
                                                                 |         if (r3 == 1) {
    0x0007ab3e beq 0x7abfa                                       |             goto label_95;
                                                                 |         }
                                                                 |     }
                                                                 | label_224:
    0x0007ab40 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0007ab42 movs r2, 0x68                                     |     r2 = 0x68;
    0x0007ab44 movs r1, 0                                        |     r1 = 0;
    0x0007ab46 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0007ab4a movs r3, 0xa7                                     |     r3 = 0xa7;
    0x0007ab4c str r7, [sp, 0x14c]                               |     var_14ch = r7;
    0x0007ab4e strb.w r3, [sp, 0x130]                            |     var_130h = r3;
    0x0007ab52 movs r3, 0x71                                     |     r3 = 0x71;
    0x0007ab54 ldr r6, [r4, 8]                                   |     r6 = *((r4 + 8));
    0x0007ab56 strb.w r3, [sp, 0xfc]                             |     var_fch = r3;
    0x0007ab5a add r3, sp, 0x130                                 |     r3 += var_130h;
    0x0007ab5c str r3, [sp, 0x68]                                |     var_68h = r3;
    0x0007ab5e str r3, [sp, 0x108]                               |     var_108h = r3;
    0x0007ab60 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0007ab62 beq 0x7ac48                                       |         goto label_225;
                                                                 |     }
    0x0007ab64 str r5, [sp, 0x6c]                                |     var_6ch = r5;
    0x0007ab66 str.w fp, [sp, 0x88]                              |     __asm ("str.w fp, [var_88h]");
    0x0007ab6a b 0x7ab72                                         |     
                                                                 |     while (r3 == 0) {
                                                                 | label_86:
    0x0007ab6c ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
    0x0007ab6e cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0007ab70 beq 0x7ac42                                       |             goto label_226;
                                                                 |         }
    0x0007ab72 ldrb.w r3, [r6, 0x36]                             |         r3 = *((r6 + 0x36));
    0x0007ab76 cmp r3, 0                                         |         
    0x0007ab78 beq 0x7ab6c                                       |         
                                                                 |     }
    0x0007ab7a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0007ab7c ldrh.w sl, [r6, 0x32]                             |     sl = *((r6 + 0x32));
    0x0007ab80 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0007ab82 cmp r2, sl                                        |     
                                                                 |     if (r2 != sl) {
    0x0007ab84 bne 0x7ab6c                                       |         goto label_86;
                                                                 |     }
    0x0007ab86 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
                                                                 |     if (r2 == 0) {
    0x0007ab88 cbz r2, 0x7aba2                                   |         goto label_227;
                                                                 |     }
    0x0007ab8a ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0007ab8c ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0007ab8e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007ab90 beq 0x7ab6c                                       |         goto label_86;
                                                                 |     }
    0x0007ab92 mov r3, r7                                        |     r3 = r7;
    0x0007ab94 mov r0, r8                                        |     r0 = r8;
    0x0007ab96 bl 0x3480c                                        |     r0 = fcn_0003480c (r0, r1, r2, r3);
    0x0007ab9a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0007ab9c bne 0x7ab6c                                       |         goto label_86;
                                                                 |     }
    0x0007ab9e ldrh.w sl, [r6, 0x32]                             |     sl = *((r6 + 0x32));
                                                                 | label_227:
    0x0007aba2 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0007aba6 beq 0x7abf2                                       |         goto label_92;
                                                                 |     }
    0x0007aba8 mov r5, sl                                        |     r5 = sl;
    0x0007abaa mov.w fp, 0                                       |     
    0x0007abae mov sl, r7                                        |     sl = r7;
                                                                 | label_91:
    0x0007abb0 ldr r2, [r6, 0x20]                                |     r2 = *((r6 + 0x20));
    0x0007abb2 ldr.w r2, [r2, fp, lsl 2]                         |     offset_6 = fp << 2;
                                                                 |     r2 = *((r2 + offset_6));
    0x0007abb6 str r2, [sp, 0x104]                               |     var_104h = r2;
    0x0007abb8 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0007abba ldrsh.w r2, [r2, fp, lsl 1]                       |     offset_7 = fp << 1;
                                                                 |     r2 = *((r2 + offset_7));
    0x0007abbe adds r4, r2, 2                                    |     r4 = r2 + 2;
                                                                 |     if (r4 == r2) {
    0x0007abc0 beq 0x7ac28                                       |         goto label_228;
                                                                 |     }
    0x0007abc2 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0007abc4 strh.w r2, [sp, 0x150]                            |     var_150h = r2;
    0x0007abc8 str r3, [sp, 0x108]                               |     var_108h = r3;
                                                                 | label_93:
    0x0007abca ldr.w sb, [sp, 0x40]                              |     sb = var_40h;
                                                                 | label_94:
    0x0007abce ldr r7, [sp, 0x34]                                |     r7 = var_34h;
    0x0007abd0 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x0007abd2 ldr r1, [r7, 8]                                   |         r1 = *((r7 + 8));
                                                                 |         if (r1 != 0) {
    0x0007abd4 cbz r1, 0x7abe4                                   |             
    0x0007abd6 mov r3, sl                                        |             r3 = sl;
    0x0007abd8 mov r2, sb                                        |             r2 = sb;
    0x0007abda mov r0, r8                                        |             r0 = r8;
    0x0007abdc bl 0x3480c                                        |             r0 = fcn_0003480c (r0, r1, r2, r3);
    0x0007abe0 cmp r0, 1                                         |             
                                                                 |             if (r0 <= 1) {
    0x0007abe2 ble 0x7ac1a                                       |                 goto label_229;
                                                                 |             }
                                                                 |         }
    0x0007abe4 adds r4, 1                                        |         r4++;
    0x0007abe6 adds r7, 0x10                                     |         r7 += 0x10;
    0x0007abe8 cmp r4, r5                                        |         
    0x0007abea bne 0x7abd2                                       |         
                                                                 |     } while (r4 != r5);
                                                                 | label_90:
    0x0007abec cmp r5, fp                                        |     
    0x0007abee mov r7, sl                                        |     r7 = sl;
                                                                 |     if (r5 > fp) {
    0x0007abf0 bgt 0x7ab6c                                       |         goto label_86;
                                                                 |     }
                                                                 | label_92:
    0x0007abf2 ldr.w fp, [sp, 0x88]                              |     fp = var_88h;
    0x0007abf6 ldr r5, [sp, 0x6c]                                |     r5 = var_6ch;
    0x0007abf8 str r6, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r6;
                                                                 | label_95:
    0x0007abfa ldr r5, [r5, 0x10]                                |     r5 = *((r5 + 0x10));
    0x0007abfc add.w fp, fp, 1                                   |     
    0x0007ac00 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0007ac02 bne.w 0x7aaf6                                     |         goto label_87;
                                                                 |     }
                                                                 | label_223:
    0x0007ac06 ldrd sb, r6, [sp, 0x98]                           |     __asm ("ldrd sb, r6, [var_98h]");
    0x0007ac0a ldr.w sl, [sp, 0xa0]                              |     sl = var_a0h;
                                                                 | label_222:
    0x0007ac0e ldr r6, [r6, 0x10]                                |     r6 = *((r6 + 0x10));
    0x0007ac10 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0007ac12 beq.w 0x799bc                                     |         goto label_88;
                                                                 |     }
    0x0007ac16 ldr r1, [r6]                                      |     r1 = *(r6);
    0x0007ac18 b 0x7aac4                                         |     goto label_89;
                                                                 | label_229:
    0x0007ac1a cmp r5, r4                                        |     
                                                                 |     if (r5 <= r4) {
    0x0007ac1c ble 0x7abec                                       |         goto label_90;
                                                                 |     }
    0x0007ac1e add.w fp, fp, 1                                   |     
    0x0007ac22 cmp fp, r5                                        |     
                                                                 |     if (fp != r5) {
    0x0007ac24 bne 0x7abb0                                       |         goto label_91;
                                                                 |     }
    0x0007ac26 b 0x7abf2                                         |     goto label_92;
                                                                 | label_228:
    0x0007ac28 ldr r2, [r6, 0x28]                                |     r2 = *((r6 + 0x28));
    0x0007ac2a add.w r2, r2, fp, lsl 4                           |     r2 += (fp << 4);
    0x0007ac2e ldr.w sb, [r2, 8]                                 |     sb = *((r2 + 8));
    0x0007ac32 ldrb.w r1, [sb]                                   |     r1 = *(sb);
    0x0007ac36 cmp r1, 0x71                                      |     
    0x0007ac38 it ne                                             |     
                                                                 |     if (r1 != 0x71) {
    0x0007ac3a strne sb, [sp, 0x108]                             |         var_108h = sb;
                                                                 |         goto label_230;
                                                                 |     }
                                                                 |     if (r1 != 0x71) {
                                                                 | label_230:
    0x0007ac3e bne 0x7abca                                       |         goto label_93;
                                                                 |     }
    0x0007ac40 b 0x7abce                                         |     goto label_94;
                                                                 | label_226:
    0x0007ac42 ldr r5, [sp, 0x6c]                                |     r5 = var_6ch;
    0x0007ac44 ldr.w fp, [sp, 0x88]                              |     fp = var_88h;
                                                                 | label_225:
    0x0007ac48 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x0007ac4a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0007ac4c bne 0x7abfa                                       |         goto label_95;
                                                                 |     }
    0x0007ac4e mov r3, fp                                        |     r3 = fp;
                                                                 |     if (r3 == 0) {
    0x0007ac50 cbnz r3, 0x7ac56                                  |         
    0x0007ac52 ldr r2, [r5, 0x10]                                |         r2 = *((r5 + 0x10));
                                                                 |         if (r2 == 0) {
    0x0007ac54 cbz r2, 0x7ac74                                   |             goto label_231;
                                                                 |         }
                                                                 |     }
    0x0007ac56 ldr r2, [pc, 0x130]                               |     
    0x0007ac58 add r4, sp, 0x164                                 |     r4 += var_164h;
    0x0007ac5a adds r3, 1                                        |     r3++;
    0x0007ac5c mov r1, r4                                        |     r1 = r4;
    0x0007ac5e movs r0, 0x10                                     |     r0 = 0x10;
    0x0007ac60 add r2, pc                                        |     r2 = 0xf59ee;
    0x0007ac62 blx 0x9724                                        |     fcn_00009724 ();
                                                                 |     do {
    0x0007ac66 ldr r1, [pc, 0x124]                               |         
    0x0007ac68 mov r2, r4                                        |         r2 = r4;
    0x0007ac6a ldr r0, [sp, 0x2c]                                |         r0 = var_2ch;
    0x0007ac6c add r1, pc                                        |         r1 = 0xf59fe;
    0x0007ac6e bl 0x1d554                                        |         fcn_0001d554 (r0, r1);
    0x0007ac72 b 0x7aa60                                         |         goto label_96;
                                                                 | label_231:
    0x0007ac74 add r4, sp, 0x164                                 |         r4 += var_164h;
    0x0007ac76 strb.w fp, [sp, 0x164]                            |         var_164h = fp;
    0x0007ac7a b 0x7ac66                                         |         
                                                                 |     } while (1);
                                                                 | label_141:
    0x0007ac7c ldr r1, [pc, 0x110]                               |     
    0x0007ac7e ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007ac80 add r1, pc                                        |     r1 = 0xf5a14;
    0x0007ac82 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0007ac86 b 0x7aa60                                         |     goto label_96;
                                                                 | label_134:
    0x0007ac88 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0007ac8a ldr r1, [pc, 0x108]                               |     
    0x0007ac8c ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0007ac8e str r2, [sp]                                      |     *(sp) = r2;
    0x0007ac90 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0007ac92 add r1, pc                                        |     r1 = 0xf5a2c;
    0x0007ac94 adds r2, 8                                        |     r2 += 8;
    0x0007ac96 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x0007ac9a b.w 0x792d4                                       |     goto label_0;
                                                                 | label_130:
    0x0007ac9e ldr r4, [sp, 0x38]                                |     r4 = var_38h;
    0x0007aca0 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x0007aca2 mov r0, r4                                        |     r0 = r4;
    0x0007aca4 bl 0x16a58                                        |     fcn_00016a58 (r0, r1);
    0x0007aca8 ldr r1, [sp, 0x58]                                |     r1 = var_58h;
    0x0007acaa mov r0, r4                                        |     r0 = r4;
    0x0007acac bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
    0x0007acb0 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0007acb2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0007acb4 beq.w 0x7972c                                     |         goto label_97;
                                                                 |     }
    0x0007acb8 mov r0, r4                                        |     r0 = r4;
    0x0007acba bl 0x16f28                                        |     fcn_00016f28 (r0, r1);
    0x0007acbe ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0007acc0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0007acc2 beq.w 0x79704                                     |         goto label_98;
                                                                 |     }
    0x0007acc6 ldr r2, [pc, 0xd0]                                |     
    0x0007acc8 ldr r3, [pc, 0xd0]                                |     r3 = *(0x7ad9c);
    0x0007acca add r2, pc                                        |     r2 = 0xf5a68;
    0x0007accc ldr r3, [r2, r3]                                  |     r3 = *(0xf5a68);
    0x0007acce ldr r2, [r3]                                      |     r2 = *(0xf5a68);
    0x0007acd0 ldr r3, [sp, 0x174]                               |     r3 = var_174h;
    0x0007acd2 eors r2, r3                                       |     r2 ^= r3;
    0x0007acd4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x0007acd8 beq.w 0x796dc                                     |         goto label_7;
                                                                 |     }
    0x0007acdc b.w 0x7974a                                       |     goto label_99;
                                                                 | label_135:
    0x0007ace0 movs r3, 0                                        |     r3 = 0;
    0x0007ace2 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x0007ace4 b.w 0x798b4                                       |     goto label_16;
                                                                 | label_145:
    0x0007ace8 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x0007acea b.w 0x79a10                                       |     goto label_100;
                                                                 | label_144:
    0x0007acee ldrd r6, r3, [fp, 0x6c]                           |     __asm ("ldrd r6, r3, [arg_6ch]");
    0x0007acf2 cmp r6, r3                                        |     
                                                                 |     if (r6 >= r3) {
    0x0007acf4 bge 0x7ad5a                                       |         goto label_232;
                                                                 |     }
    0x0007acf6 add.w r3, r6, r6, lsl 2                           |     r3 = r6 + (r6 << 2);
    0x0007acfa ldr.w r0, [fp, 0x68]                              |     r0 = *(arg_68h);
    0x0007acfe ldr r5, [sp, 0x60]                                |     r5 = var_60h;
    0x0007ad00 adds r2, r6, 1                                    |     r2 = r6 + 1;
    0x0007ad02 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0007ad04 str.w r2, [fp, 0x6c]                              |     __asm ("str.w r2, [arg_6ch]");
    0x0007ad08 movs r1, 0                                        |     r1 = 0;
    0x0007ad0a str r2, [sp, 0x34]                                |     var_34h = r2;
    0x0007ad0c movs r4, 0x23                                     |     r4 = 0x23;
    0x0007ad0e adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x0007ad10 strd r5, r1, [r2, 4]                              |     __asm ("strd r5, r1, [r2, 4]");
    0x0007ad14 strd r1, r1, [r2, 0xc]                            |     __asm ("strd r1, r1, [r2, 0xc]");
    0x0007ad18 str r4, [r0, r3]                                  |     *((r0 + r3)) = r4;
    0x0007ad1a b.w 0x79a12                                       |     goto label_101;
                                                                 | label_211:
    0x0007ad1e movs r3, 0                                        |     r3 = 0;
    0x0007ad20 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0007ad22 str r3, [sp]                                      |     *(sp) = r3;
    0x0007ad24 movs r1, 0x9f                                     |     r1 = 0x9f;
    0x0007ad26 mov r3, r7                                        |     r3 = r7;
    0x0007ad28 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007ad2c b 0x7a562                                         |     goto label_55;
                                                                 | label_210:
    0x0007ad2e mov r2, r8                                        |     r2 = r8;
    0x0007ad30 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x0007ad32 mov r0, r4                                        |     r0 = r4;
    0x0007ad34 str r7, [sp]                                      |     *(sp) = r7;
    0x0007ad36 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007ad3a ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0007ad3c mov r6, r0                                        |     r6 = r0;
    0x0007ad3e ldrd r0, r2, [sp, 0x2c]                           |     __asm ("ldrd r0, r2, [var_2ch]");
    0x0007ad42 bl 0x2adc0                                        |     fcn_0002adc0 (r0, r1, r2);
    0x0007ad46 ldr r2, [r4, 0x6c]                                |     r2 = *((r4 + 0x6c));
    0x0007ad48 mov r1, r6                                        |     r1 = r6;
    0x0007ad4a mov r0, r4                                        |     r0 = r4;
    0x0007ad4c bl 0xbc2c                                         |     fcn_0000bc2c (r0, r1, r2);
    0x0007ad50 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0007ad52 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0007ad54 ble.w 0x7a562                                     |         goto label_55;
                                                                 |     }
    0x0007ad58 b 0x7a670                                         |     goto label_102;
                                                                 | label_232:
    0x0007ad5a movs r3, 0                                        |     r3 = 0;
    0x0007ad5c ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0007ad5e str r3, [sp]                                      |     *(sp) = r3;
    0x0007ad60 movs r1, 0x23                                     |     r1 = 0x23;
    0x0007ad62 mov r0, fp                                        |     r0 = fp;
    0x0007ad64 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007ad68 ldr.w r3, [fp, 0x6c]                              |     r3 = *(arg_6ch);
    0x0007ad6c mov r6, r0                                        |     r6 = r0;
    0x0007ad6e str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0007ad70 b.w 0x79a12                                       |     goto label_101;
                                                                 | label_138:
    0x0007ad74 mov r6, r4                                        |     r6 = r4;
    0x0007ad76 b.w 0x79924                                       |     goto label_103;
                                                                 | label_143:
    0x0007ad7a ldr r2, [pc, 0x24]                                |     
    0x0007ad7c add r2, pc                                        |     r2 = 0xf5b22;
    0x0007ad7e b.w 0x79980                                       |     goto label_104;
                                                                 | label_208:
    0x0007ad82 ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x0007ad84 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x7ada4 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0007ada4 ()                                          | void fcn_0007ada4 (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     arithmetic var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     arithmetic var_2ch;
                                                                     |     arithmetic var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_38h;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_40h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_50h;
                                                                     |     int16_t var_54h;
                                                                     |     int16_t var_58h;
                                                                     |     int16_t var_5ch;
                                                                     |     int16_t var_60h;
                                                                     |     int16_t var_64h;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_70h;
                                                                     |     int16_t var_74h;
                                                                     |     int16_t var_78h;
                                                                     |     arithmetic x;
                                                                     |     int32_t var_7ch_2;
                                                                     |     int32_t var_84h;
                                                                     |     int32_t var_84h_2;
                                                                     |     int32_t var_8ch;
                                                                     |     int32_t var_8ch_2;
                                                                     |     int16_t var_94h;
                                                                     |     int32_t var_94h_2;
                                                                     |     int16_t var_9ch;
                                                                     |     int16_t var_a0h;
                                                                     |     int16_t var_a4h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0007ada4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0007ada8 mov r6, r2                                            |     r6 = r2;
    0x0007adaa ldr.w r2, [pc, 0xa68]                                 |     
    0x0007adae sub sp, 0xac                                          |     
    0x0007adb0 ldr.w r3, [pc, 0xa64]                                 |     r3 = *(0x7b818);
    0x0007adb4 add r2, pc                                            |     r2 = 0xf65ce;
    0x0007adb6 ldr.w sl, [r0, 0x24]                                  |     sl = *((r0 + 0x24));
    0x0007adba ldr r7, [r0]                                          |     r7 = *(r0);
    0x0007adbc ldr r3, [r2, r3]                                      |     
    0x0007adbe ldr r3, [r3]                                          |     r3 = *(0xf65ce);
    0x0007adc0 str r3, [sp, 0xa4]                                    |     var_a4h = r3;
    0x0007adc2 mov.w r3, 0                                           |     r3 = 0;
    0x0007adc6 movs r3, 0                                            |     r3 = 0;
    0x0007adc8 str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0007adca strd r3, r3, [sp, 0x6c]                               |     __asm ("strd r3, r3, [var_6ch]");
    0x0007adce str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0007add0 cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x0007add4 beq 0x7ae06                                           |         goto label_38;
                                                                     |     }
    0x0007add6 mov r0, r7                                            |     r0 = r7;
    0x0007add8 bl 0x16a58                                            |     fcn_00016a58 (r0, r1);
                                                                     |     if (r6 == 0) {
    0x0007addc cbz r6, 0x7ade6                                       |         goto label_0;
                                                                     |     }
    0x0007adde mov r1, r6                                            |     r1 = r6;
    0x0007ade0 mov r0, r7                                            |     r0 = r7;
    0x0007ade2 bl 0x16c0c                                            |     fcn_00016c0c (r0, r1);
                                                                     |     do {
                                                                     | label_0:
    0x0007ade6 ldr.w r2, [pc, 0xa34]                                 |         r2 = *(0x0007b81c);
    0x0007adea ldr.w r3, [pc, 0xa2c]                                 |         r3 = *(0x7b81a);
    0x0007adee add r2, pc                                            |         r2 += pc;
    0x0007adf0 ldr r3, [r2, r3]                                      |         r3 = *((r2 + r3));
    0x0007adf2 ldr r2, [r3]                                          |         r2 = *(0x7b81a);
    0x0007adf4 ldr r3, [sp, 0xa4]                                    |         r3 = var_a4h;
    0x0007adf6 eors r2, r3                                           |         r2 ^= r3;
    0x0007adf8 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0007adfc bne.w 0x7b80a                                         |             goto label_39;
                                                                     |         }
    0x0007ae00 add sp, 0xac                                          |         
    0x0007ae02 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_38:
    0x0007ae06 mov r4, r0                                            |         r4 = r0;
    0x0007ae08 mov fp, r1                                            |         
    0x0007ae0a bl 0x745a0                                            |         r0 = fcn_000745a0 (r0, r1);
    0x0007ae0e mov r5, r0                                            |         r5 = r0;
    0x0007ae10 cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0007ae12 beq.w 0x7b366                                         |             goto label_40;
                                                                     |         }
    0x0007ae16 ldr r3, [r0, 0x38]                                    |         r3 = *((r0 + 0x38));
    0x0007ae18 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0007ae1a beq.w 0x7b36a                                         |             goto label_41;
                                                                     |         }
                                                                     | label_4:
    0x0007ae1e ldrb.w r3, [r4, 0x97]                                 |         r3 = *((r4 + 0x97));
    0x0007ae22 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0007ae24 bne.w 0x7b382                                         |             goto label_42;
                                                                     |         }
    0x0007ae28 str r3, [sp]                                          |         *(sp) = r3;
    0x0007ae2a movs r2, 0x80                                         |         r2 = 0x80;
    0x0007ae2c mov r1, r5                                            |         r1 = r5;
    0x0007ae2e mov r0, r4                                            |         r0 = r4;
    0x0007ae30 bl 0x2042c                                            |         fcn_0002042c (r0, r1, r2, r3);
    0x0007ae34 ldrb.w r3, [r5, 0x2b]                                 |         r3 = *((r5 + 0x2b));
    0x0007ae38 str r0, [sp, 0x28]                                    |         var_28h = r0;
    0x0007ae3a str r3, [sp, 0x24]                                    |         var_24h = r3;
    0x0007ae3c cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0007ae3e beq.w 0x7b7ae                                         |             goto label_43;
                                                                     |         }
    0x0007ae42 mov.w sl, 1                                           |         sl = 1;
                                                                     | label_5:
    0x0007ae46 mov r1, r5                                            |         r1 = r5;
    0x0007ae48 mov r0, r4                                            |         r0 = r4;
    0x0007ae4a bl 0x68bfc                                            |         r0 = fcn_00068bfc (r0, r1, r2);
                                                                     |         if (r0 == 0) {
    0x0007ae4e cbz r0, 0x7ae80                                       |             goto label_44;
                                                                     |         }
                                                                     | label_1:
    0x0007ae50 ldr r3, [sp, 0x78]                                    |         r3 = var_78h;
    0x0007ae52 movs r5, 0                                            |         r5 = 0;
                                                                     |         if (r3 != 0) {
                                                                     | label_3:
    0x0007ae54 cbz r3, 0x7ae60                                       |             
    0x0007ae56 ldr r2, [sp, 0x74]                                    |             r2 = var_74h;
    0x0007ae58 str.w r2, [r3, 0xf8]                                  |             __asm ("str.w r2, [r3, 0xf8]");
    0x0007ae5c movs r3, 0                                            |             r3 = 0;
    0x0007ae5e str r3, [sp, 0x78]                                    |             var_78h = r3;
                                                                     |         }
    0x0007ae60 mov r1, fp                                            |         r1 = fp;
    0x0007ae62 mov r0, r7                                            |         r0 = r7;
    0x0007ae64 bl 0x16a58                                            |         fcn_00016a58 (r0, r1);
                                                                     |         if (r6 != 0) {
    0x0007ae68 cbz r6, 0x7ae72                                       |             
    0x0007ae6a mov r1, r6                                            |             r1 = r6;
    0x0007ae6c mov r0, r7                                            |             r0 = r7;
    0x0007ae6e bl 0x16c0c                                            |             fcn_00016c0c (r0, r1);
                                                                     |         }
    0x0007ae72 cmp r5, 0                                             |         
    0x0007ae74 beq 0x7ade6                                           |         
                                                                     |     } while (r5 == 0);
    0x0007ae76 mov r1, r5                                            |     r1 = r5;
    0x0007ae78 mov r0, r7                                            |     r0 = r7;
    0x0007ae7a bl 0x137d0                                            |     fcn_000137d0 (r0, r1);
    0x0007ae7e b 0x7ade6                                             |     goto label_0;
                                                                     | label_44:
    0x0007ae80 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0007ae82 mov r1, r5                                            |     r1 = r5;
    0x0007ae84 mov r0, r4                                            |     r0 = r4;
    0x0007ae86 subs r2, r3, 0                                        |     r2 = r3 - 0;
    0x0007ae88 it ne                                                 |     
                                                                     |     if (r2 == r3) {
    0x0007ae8a movne r2, 1                                           |         r2 = 1;
                                                                     |     }
    0x0007ae8c bl 0x20534                                            |     r0 = fcn_00020534 (r0, r1, r2);
    0x0007ae90 mov sb, r0                                            |     sb = r0;
    0x0007ae92 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007ae94 bne 0x7ae50                                           |         goto label_1;
                                                                     |     }
    0x0007ae96 ldr r0, [r5, 0x3c]                                    |     r0 = *((r5 + 0x3c));
    0x0007ae98 ldr r2, [r7, 0x10]                                    |     r2 = *((r7 + 0x10));
    0x0007ae9a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007ae9c beq.w 0x7b7e0                                         |         goto label_45;
                                                                     |     }
    0x0007aea0 ldr r3, [r2, 0xc]                                     |     r3 = *((r2 + 0xc));
    0x0007aea2 cmp r0, r3                                            |     
                                                                     |     if (r0 == r3) {
    0x0007aea4 beq.w 0x7b430                                         |         goto label_46;
                                                                     |     }
    0x0007aea8 add.w r3, r2, 0x10                                    |     r3 = r2 + 0x10;
    0x0007aeac mov r8, sb                                            |     r8 = sb;
                                                                     |     do {
    0x0007aeae mov r2, r3                                            |         r2 = r3;
    0x0007aeb0 add.w r8, r8, 1                                       |         r8++;
    0x0007aeb4 ldr r1, [r3, 0xc]                                     |         r1 = *((r3 + 0xc));
    0x0007aeb6 adds r3, 0x10                                         |         r3 += 0x10;
    0x0007aeb8 cmp r0, r1                                            |         
    0x0007aeba bne 0x7aeae                                           |         
                                                                     |     } while (r0 != r1);
    0x0007aebc lsl.w r3, r8, 4                                       |     r3 = r8 << 4;
    0x0007aec0 str r3, [sp, 0x40]                                    |     var_40h = r3;
                                                                     | label_13:
    0x0007aec2 ldr r3, [r2]                                          |     r3 = *(r2);
    0x0007aec4 movs r1, 9                                            |     r1 = 9;
    0x0007aec6 ldr r2, [r5]                                          |     r2 = *(r5);
    0x0007aec8 mov r0, r4                                            |     r0 = r4;
    0x0007aeca str r3, [sp]                                          |     *(sp) = r3;
    0x0007aecc movs r3, 0                                            |     r3 = 0;
    0x0007aece bl 0x200fc                                            |     r0 = fcn_000200fc (r0, r1);
    0x0007aed2 cmp r0, 1                                             |     
    0x0007aed4 str r0, [sp, 0x38]                                    |     var_38h = r0;
                                                                     |     if (r0 == 1) {
    0x0007aed6 beq 0x7ae50                                           |         goto label_1;
                                                                     |     }
    0x0007aed8 ldr r2, [r4, 0x28]                                    |     r2 = *((r4 + 0x28));
    0x0007aeda ldr r3, [r5, 8]                                       |     r3 = *((r5 + 8));
    0x0007aedc adds r1, r2, 1                                        |     r1 = r2 + 1;
    0x0007aede str r2, [sp, 0x30]                                    |     var_30h = r2;
    0x0007aee0 str r1, [r4, 0x28]                                    |     *((r4 + 0x28)) = r1;
    0x0007aee2 str r1, [sp, 0x3c]                                    |     var_3ch = r1;
    0x0007aee4 str.w r2, [fp, 0x30]                                  |     __asm ("str.w r2, [arg_30h]");
                                                                     |     if (r3 == 0) {
    0x0007aee8 cbz r3, 0x7aefe                                       |         goto label_47;
                                                                     |     }
                                                                     |     do {
    0x0007aeea ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0007aeec mov r2, sb                                            |         r2 = sb;
    0x0007aeee add.w sb, sb, 1                                       |         sb++;
    0x0007aef2 cmp r3, 0                                             |         
    0x0007aef4 bne 0x7aeea                                           |         
                                                                     |     } while (r3 != 0);
    0x0007aef6 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0007aef8 adds r3, 2                                            |     r3 += 2;
    0x0007aefa add r3, r2                                            |     r3 += r2;
    0x0007aefc str r3, [r4, 0x28]                                    |     *((r4 + 0x28)) = r3;
                                                                     | label_47:
    0x0007aefe ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007af00 cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0007af02 bne 0x7af12                                           |         
    0x0007af04 ldr r2, [r5]                                          |         r2 = *(r5);
    0x0007af06 ldr.w r3, [r4, 0xf8]                                  |         r3 = *((r4 + 0xf8));
    0x0007af0a str r4, [sp, 0x78]                                    |         var_78h = r4;
    0x0007af0c str.w r2, [r4, 0xf8]                                  |         __asm ("str.w r2, [r4, 0xf8]");
    0x0007af10 str r3, [sp, 0x74]                                    |         var_74h = r3;
                                                                     |     }
    0x0007af12 ldr r3, [r4, 8]                                       |     r3 = *((r4 + 8));
    0x0007af14 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0007af16 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007af18 beq.w 0x7b3ae                                         |         goto label_48;
                                                                     |     }
                                                                     | label_7:
    0x0007af1c ldrb r3, [r4, 0x12]                                   |     r3 = *((r4 + 0x12));
    0x0007af1e cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007af20 beq.w 0x7b39e                                         |         goto label_49;
                                                                     |     }
                                                                     | label_6:
    0x0007af24 mov r2, r8                                            |     r2 = r8;
    0x0007af26 mov r1, sl                                            |     r1 = sl;
    0x0007af28 mov r0, r4                                            |     r0 = r4;
    0x0007af2a bl 0x4a5bc                                            |     fcn_0004a5bc (r0, r1, r2);
    0x0007af2e ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007af30 cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0007af32 beq.w 0x7b3f6                                         |         goto label_50;
                                                                     |     }
                                                                     | label_10:
    0x0007af36 movs r2, 0                                            |     r2 = 0;
    0x0007af38 mov r1, r6                                            |     r1 = r6;
    0x0007af3a add r0, sp, 0x7c                                      |     r0 += x;
    0x0007af3c strd r4, fp, [sp, 0x7c]                               |     __asm ("strd r4, fp, [var_0hx7c]");
    0x0007af40 strd r2, r2, [sp, 0x84]                               |     __asm ("strd r2, r2, [var_84h]");
    0x0007af44 strd r2, r2, [sp, 0x8c]                               |     __asm ("strd r2, r2, [var_8ch]");
    0x0007af48 strd r2, r2, [sp, 0x94]                               |     __asm ("strd r2, r2, [var_94h]");
    0x0007af4c bl 0x2cfe8                                            |     fcn_0002cfe8 (r0, r1);
    0x0007af50 str r0, [sp, 0x34]                                    |     var_34h = r0;
    0x0007af52 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007af54 bne.w 0x7ae50                                         |         goto label_1;
                                                                     |     }
    0x0007af58 ldr r3, [r7, 0x24]                                    |     r3 = *((r7 + 0x24));
    0x0007af5a lsls r0, r3, 0x1f                                     |     r0 = r3 << 0x1f;
                                                                     |     if (r0 < r3) {
    0x0007af5c bpl 0x7af82                                           |         
    0x0007af5e ldrb r3, [r4, 0x12]                                   |         r3 = *((r4 + 0x12));
                                                                     |         if (r3 == 0) {
    0x0007af60 cbnz r3, 0x7af82                                      |             
    0x0007af62 ldr r3, [r4, 0x78]                                    |             r3 = *((r4 + 0x78));
                                                                     |             if (r3 != 0) {
    0x0007af64 cbnz r3, 0x7af82                                      |                 goto label_51;
                                                                     |             }
    0x0007af66 ldrb.w r3, [r4, 0x95]                                 |             r3 = *((r4 + 0x95));
                                                                     |             if (r3 != 0) {
    0x0007af6a cbnz r3, 0x7af82                                      |                 goto label_51;
                                                                     |             }
    0x0007af6c ldr r2, [sp, 0x34]                                    |             r2 = var_34h;
    0x0007af6e movs r1, 0x47                                         |             r1 = 0x47;
    0x0007af70 ldr r0, [sp, 0x2c]                                    |             r0 = var_2ch;
    0x0007af72 str r2, [sp]                                          |             *(sp) = r2;
    0x0007af74 ldr r3, [r4, 0x2c]                                    |             r3 = *((r4 + 0x2c));
    0x0007af76 adds r3, 1                                            |             r3++;
    0x0007af78 str r3, [r4, 0x2c]                                    |             *((r4 + 0x2c)) = r3;
    0x0007af7a str r3, [sp, 0x44]                                    |             var_44h = r3;
    0x0007af7c bl 0x29ac4                                            |             fcn_00029ac4 (r0, r1, r2, r3);
    0x0007af80 b 0x7af86                                             |             
                                                                     |         }
                                                                     |     } else {
                                                                     | label_51:
    0x0007af82 ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0007af84 str r3, [sp, 0x44]                                    |         var_44h = r3;
                                                                     |     }
    0x0007af86 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0007af88 orrs r3, r6                                           |     r3 |= r6;
                                                                     |     if (r3 != r6) {
    0x0007af8a bne 0x7b062                                           |         goto label_52;
                                                                     |     }
    0x0007af8c cmp.w sl, 0                                           |     
                                                                     |     if (sl != 0) {
    0x0007af90 bne.w 0x7b42a                                         |         goto label_53;
                                                                     |     }
    0x0007af94 ldrb.w r3, [r5, 0x2b]                                 |     r3 = *((r5 + 0x2b));
    0x0007af98 cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0007af9a beq.w 0x7b5aa                                         |         goto label_54;
                                                                     |     }
    0x0007af9e cmp.w r8, 1                                           |     
                                                                     |     if (r8 != 1) {
    0x0007afa2 beq 0x7afc2                                           |         
    0x0007afa4 ldr r3, [r4]                                          |         r3 = *(r4);
    0x0007afa6 ldr r2, [sp, 0x40]                                    |         r2 = var_40h;
    0x0007afa8 ldr r3, [r3, 0x10]                                    |         r3 = *((r3 + 0x10));
    0x0007afaa add r3, r2                                            |         r3 += r2;
    0x0007afac ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x0007afae ldrb r3, [r3, 9]                                      |         r3 = *((r3 + 9));
                                                                     |         if (r3 == 0) {
    0x0007afb0 cbz r3, 0x7afc2                                       |             goto label_55;
                                                                     |         }
    0x0007afb2 ldr r3, [r5]                                          |         r3 = *(r5);
    0x0007afb4 mov r1, r8                                            |         r1 = r8;
    0x0007afb6 ldr r2, [r5, 0x14]                                    |         r2 = *((r5 + 0x14));
    0x0007afb8 mov r0, r4                                            |         r0 = r4;
    0x0007afba str r3, [sp]                                          |         *(sp) = r3;
    0x0007afbc movs r3, 1                                            |         r3 = 1;
    0x0007afbe bl 0x2ba0c                                            |         fcn_0002ba0c (r0, r1, r2, r3, r4);
                                                                     |     }
                                                                     | label_55:
    0x0007afc2 ldr r3, [r5, 0x1c]                                    |     r3 = *((r5 + 0x1c));
    0x0007afc4 lsls r1, r3, 0x18                                     |     r1 = r3 << 0x18;
                                                                     |     if (r1 >= r3) {
    0x0007afc6 bmi 0x7afec                                           |         
    0x0007afc8 ldr r1, [sp, 0x44]                                    |         r1 = var_44h;
    0x0007afca mov.w r3, -1                                          |         r3 = -1;
    0x0007afce ldr r2, [r5, 0x14]                                    |         r2 = *((r5 + 0x14));
    0x0007afd0 str r3, [sp, 8]                                       |         var_8h = r3;
    0x0007afd2 ldr r3, [r5]                                          |         r3 = *(r5);
    0x0007afd4 cmp r1, 0                                             |         
    0x0007afd6 ldr r0, [sp, 0x2c]                                    |         r0 = var_2ch;
    0x0007afd8 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0007afda ite ne                                                |         
                                                                     |         if (r1 == 0) {
    0x0007afdc movne r3, r1                                          |             r3 = r1;
                                                                     |         }
                                                                     |         if (r1 != 0) {
    0x0007afde moveq r3, -1                                          |             r3 = -1;
                                                                     |         }
    0x0007afe2 movs r1, 0x91                                         |         r1 = 0x91;
    0x0007afe4 str r3, [sp]                                          |         *(sp) = r3;
    0x0007afe6 mov r3, r8                                            |         r3 = r8;
    0x0007afe8 bl 0x2a324                                            |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
                                                                     |     }
    0x0007afec ldr.w sb, [r5, 8]                                     |     sb = *((r5 + 8));
    0x0007aff0 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0007aff4 beq.w 0x7b5be                                         |         goto label_56;
                                                                     |     }
    0x0007aff8 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0007affa mov.w sl, 0                                           |     sl = 0;
    0x0007affe cmp r3, 0                                             |     
    0x0007b000 it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0007b002 moveq r3, -1                                          |         r3 = -1;
                                                                     |     }
    0x0007b006 strd r3, r7, [sp, 0x24]                               |     __asm ("strd r3, r7, [var_24h]");
    0x0007b00a mov r7, sb                                            |     r7 = sb;
    0x0007b00c ldr.w sb, [sp, 0x2c]                                  |     sb = var_2ch;
    0x0007b010 b 0x7b01a                                             |     
                                                                     |     while (r3 != 2) {
                                                                     | label_2:
    0x0007b012 ldr r7, [r7, 0x14]                                    |         r7 = *((r7 + 0x14));
    0x0007b014 cmp r7, 0                                             |         
                                                                     |         if (r7 == 0) {
    0x0007b016 beq.w 0x7b5bc                                         |             goto label_57;
                                                                     |         }
    0x0007b01a ldr r2, [r7, 0x2c]                                    |         r2 = *((r7 + 0x2c));
    0x0007b01c mov r3, r8                                            |         r3 = r8;
    0x0007b01e movs r1, 0x91                                         |         r1 = 0x91;
    0x0007b020 mov r0, sb                                            |         r0 = sb;
    0x0007b022 str.w sl, [sp]                                        |         __asm ("str.w sl, [sp]");
    0x0007b026 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b02a ldrb.w r3, [r7, 0x37]                                 |         r3 = *((r7 + 0x37));
    0x0007b02e and r3, r3, 3                                         |         r3 &= 3;
    0x0007b032 cmp r3, 2                                             |         
    0x0007b034 bne 0x7b012                                           |         
                                                                     |     }
    0x0007b036 ldr r3, [r5, 0x1c]                                    |     r3 = *((r5 + 0x1c));
    0x0007b038 lsls r2, r3, 0x18                                     |     r2 = r3 << 0x18;
                                                                     |     if (r2 >= r3) {
    0x0007b03a bpl 0x7b012                                           |         goto label_2;
                                                                     |     }
    0x0007b03c ldr.w r3, [sb]                                        |     r3 = *(sb);
    0x0007b040 ldrb.w r2, [r3, 0x57]                                 |     r2 = *((r3 + 0x57));
    0x0007b044 ldr.w r3, [sb, 0x6c]                                  |     r3 = *((sb + 0x6c));
    0x0007b048 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0007b04a bne.w 0x7b686                                         |         goto label_58;
                                                                     |     }
    0x0007b04e subs r3, 1                                            |     r3--;
    0x0007b050 add.w r2, r3, r3, lsl 2                               |     r2 = r3 + (r3 << 2);
    0x0007b054 ldr.w r3, [sb, 0x68]                                  |     r3 = *((sb + 0x68));
    0x0007b058 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
                                                                     | label_29:
    0x0007b05c ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0007b05e str r2, [r3, 0xc]                                     |     *((r3 + 0xc)) = r2;
    0x0007b060 b 0x7b012                                             |     goto label_2;
                                                                     | label_52:
    0x0007b062 ldr r3, [sp, 0x94]                                    |     r3 = var_94h;
    0x0007b064 and r3, r3, 0x40                                      |     r3 &= 0x40;
    0x0007b068 orrs.w r3, r3, sl                                     |     r3 |= sl;
    0x0007b06c ite eq                                                |     
                                                                     |     if (r3 != r3) {
    0x0007b06e moveq r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r3 == r3) {
    0x0007b070 movne r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0007b072 lsls r3, r3, 3                                        |     r3 <<= 3;
    0x0007b074 orr sl, r3, 0x14                                      |     sl = r3 | 0x14;
                                                                     | label_12:
    0x0007b078 ldr r2, [r5, 0x1c]                                    |     r2 = *((r5 + 0x1c));
    0x0007b07a ands r2, r2, 0x80                                     |     r2 &= 0x80;
                                                                     |     if (r2 == r2) {
    0x0007b07e beq.w 0x7b40a                                         |         goto label_59;
                                                                     |     }
    0x0007b082 ldr.w r8, [r5, 8]                                     |     r8 = *((r5 + 8));
    0x0007b086 mov r2, r8                                            |     r2 = r8;
    0x0007b088 cmp.w r8, 0                                           |     
                                                                     |     if (r8 != 0) {
    0x0007b08c bne 0x7b098                                           |         goto label_60;
                                                                     |     }
    0x0007b08e b 0x7b80e                                             |     goto label_61;
                                                                     |     do {
    0x0007b090 ldr r2, [r2, 0x14]                                    |         r2 = *((r2 + 0x14));
    0x0007b092 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0007b094 beq.w 0x7b80e                                         |             goto label_61;
                                                                     |         }
                                                                     | label_60:
    0x0007b098 ldrb.w r3, [r2, 0x37]                                 |         r3 = *((r2 + 0x37));
    0x0007b09c and r3, r3, 3                                         |         r3 &= 3;
    0x0007b0a0 cmp r3, 2                                             |         
    0x0007b0a2 bne 0x7b090                                           |         
                                                                     |     } while (r3 != 2);
    0x0007b0a4 ldrsh.w r1, [r2, 0x32]                                |     r1 = *((r2 + 0x32));
    0x0007b0a8 mov r8, r2                                            |     r8 = r2;
    0x0007b0aa ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0007b0ac ldrd r0, ip, [r4, 0x28]                               |     __asm ("ldrd r0, ip, [r4, 0x28]");
    0x0007b0b0 str r1, [sp, 0x38]                                    |     var_38h = r1;
    0x0007b0b2 ldr r3, [r2, 0x6c]                                    |     r3 = *((r2 + 0x6c));
    0x0007b0b4 ldr r2, [r2, 0x70]                                    |     r2 = *((r2 + 0x70));
    0x0007b0b6 add r1, ip                                            |     r1 += ip;
    0x0007b0b8 str r1, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r1;
    0x0007b0ba add.w r1, ip, 1                                       |     r1 = ip + 1;
    0x0007b0be str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0007b0c0 adds r3, r0, 1                                        |     r3 = r0 + 1;
    0x0007b0c2 str r3, [r4, 0x28]                                    |     *((r4 + 0x28)) = r3;
    0x0007b0c4 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0007b0c6 str r0, [sp, 0x48]                                    |     var_48h = r0;
    0x0007b0c8 str r1, [sp, 0x4c]                                    |     var_4ch = r1;
    0x0007b0ca cmp r3, r2                                            |     
                                                                     |     if (r3 >= r2) {
    0x0007b0cc bge.w 0x7b5c2                                         |         goto label_62;
                                                                     |     }
    0x0007b0d0 ldr r2, [sp, 0x50]                                    |     r2 = var_50h;
    0x0007b0d2 movs r0, 0                                            |     r0 = 0;
    0x0007b0d4 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0007b0d6 mov.w ip, 0x76                                        |     
    0x0007b0da add.w r3, r2, r2, lsl 2                               |     r3 = r2 + (r2 << 2);
    0x0007b0de ldr.w lr, [r1, 0x68]                                  |     
    0x0007b0e2 adds r2, 1                                            |     r2++;
    0x0007b0e4 str r2, [r1, 0x6c]                                    |     *((r1 + 0x6c)) = r2;
    0x0007b0e6 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0007b0e8 ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0007b0ea add.w r2, lr, r3                                      |     r2 = lr + r3;
    0x0007b0ee str r0, [r2, 0x10]                                    |     *((r2 + 0x10)) = r0;
    0x0007b0f0 str r1, [r2, 4]                                       |     *((r2 + 4)) = r1;
    0x0007b0f2 ldr r1, [sp, 0x38]                                    |     r1 = var_38h;
    0x0007b0f4 strd r1, r0, [r2, 8]                                  |     __asm ("strd r1, r0, [r2, 8]");
    0x0007b0f8 str.w ip, [lr, r3]                                    |     __asm ("str.w ip, [lr, r3]");
                                                                     | label_22:
    0x0007b0fc movs r3, 0                                            |     r3 = 0;
    0x0007b0fe mov r1, r8                                            |     r1 = r8;
    0x0007b100 mov r0, r4                                            |     r0 = r4;
    0x0007b102 str r3, [sp, 0x58]                                    |     var_58h = r3;
    0x0007b104 bl 0x27dcc                                            |     fcn_00027dcc (r0, r1);
                                                                     | label_11:
    0x0007b108 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b10a mov r2, r6                                            |     r2 = r6;
    0x0007b10c mov r1, fp                                            |     r1 = fp;
    0x0007b10e mov r0, r4                                            |     r0 = r4;
    0x0007b110 strd sl, r3, [sp, 8]                                  |     __asm ("strd sl, r3, [var_8h]");
    0x0007b114 movs r3, 0                                            |     r3 = 0;
    0x0007b116 strd r3, r3, [sp]                                     |     __asm ("strd r3, r3, [sp]");
    0x0007b11a bl 0x61f10                                            |     fcn_00061f10 (r0, r1, r2, r3, r4, r5, r6);
    0x0007b11e str r0, [sp, 0x40]                                    |     var_40h = r0;
    0x0007b120 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007b122 beq.w 0x7ae50                                         |         goto label_1;
                                                                     |     }
    0x0007b126 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0007b128 ldr r0, [r3, 0x18]                                    |     r0 = *((r3 + 0x18));
    0x0007b12a ldr r1, [r3, 0x1c]                                    |     r1 = *((r3 + 0x1c));
    0x0007b12c ldrb.w r3, [r3, 0x32]                                 |     r3 = *((r3 + 0x32));
    0x0007b130 mov r2, r3                                            |     r2 = r3;
    0x0007b132 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0007b134 cmp r2, 1                                             |     
    0x0007b136 add r3, sp, 0x9c                                      |     r3 += var_9ch;
    0x0007b138 stm r3!, {r0, r1}                                     |     *(r3!) = r0;
                                                                     |     *((r3! + 4)) = r1;
                                                                     |     if (r2 != 1) {
    0x0007b13a beq 0x7b148                                           |         
    0x0007b13c ldr r3, [r4, 0x74]                                    |         r3 = *((r4 + 0x74));
    0x0007b13e movs r2, 1                                            |         r2 = 1;
    0x0007b140 cmp r3, 0                                             |         
    0x0007b142 it eq                                                 |         
                                                                     |         if (r3 != 0) {
    0x0007b144 moveq r3, r4                                          |             r3 = r4;
                                                                     |         }
    0x0007b146 strb r2, [r3, 0x14]                                   |         *((r3 + 0x14)) = r2;
                                                                     |     }
    0x0007b148 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0007b14a ldrb.w r3, [r3, 0x34]                                 |     r3 = *((r3 + 0x34));
    0x0007b14e lsls r3, r3, 0x1f                                     |     r3 <<= 0x1f;
                                                                     |     if (r3 < r3) {
    0x0007b150 bmi.w 0x7b446                                         |         goto label_63;
                                                                     |     }
                                                                     | label_15:
    0x0007b154 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0007b156 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007b158 bne.w 0x7b3e4                                         |         goto label_64;
                                                                     |     }
                                                                     | label_9:
    0x0007b15c cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0007b160 beq.w 0x7b606                                         |         goto label_65;
                                                                     |     }
    0x0007b164 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0007b166 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0007b168 ble 0x7b1a8                                           |         goto label_66;
                                                                     |     }
    0x0007b16a str r7, [sp, 0x54]                                    |     var_54h = r7;
    0x0007b16c mov.w sl, 0                                           |     sl = 0;
    0x0007b170 str r4, [sp, 0x60]                                    |     var_60h = r4;
    0x0007b172 str r6, [sp, 0x64]                                    |     var_64h = r6;
    0x0007b174 ldr r7, [sp, 0x4c]                                    |     r7 = var_4ch;
    0x0007b176 ldr r4, [sp, 0x30]                                    |     r4 = var_30h;
    0x0007b178 ldr r6, [sp, 0x2c]                                    |     r6 = var_2ch;
    0x0007b17a str.w sb, [sp, 0x5c]                                  |     __asm ("str.w sb, [var_5ch]");
    0x0007b17e mov sb, r3                                            |     sb = r3;
                                                                     |     do {
    0x0007b180 ldr.w r3, [r8, 4]                                     |         r3 = *((r8 + 4));
    0x0007b184 add.w r2, r7, sl                                      |         r2 = r7 + sl;
    0x0007b188 mov r1, r5                                            |         r1 = r5;
    0x0007b18a mov r0, r6                                            |         r0 = r6;
    0x0007b18c ldrsh.w r3, [r3, sl, lsl 1]                           |         offset_0 = sl << 1;
                                                                     |         r3 = *((r3 + offset_0));
    0x0007b190 add.w sl, sl, 1                                       |         sl++;
    0x0007b194 str r2, [sp]                                          |         *(sp) = r2;
    0x0007b196 mov r2, r4                                            |         r2 = r4;
    0x0007b198 bl 0x5b0d4                                            |         fcn_0005b0d4 (r0, r1, r2, r3, r4);
    0x0007b19c cmp sl, sb                                            |         
    0x0007b19e bne 0x7b180                                           |         
                                                                     |     } while (sl != sb);
    0x0007b1a0 ldr r7, [sp, 0x54]                                    |     r7 = var_54h;
    0x0007b1a2 ldrd sb, r4, [sp, 0x5c]                               |     __asm ("ldrd sb, r4, [var_5ch]");
    0x0007b1a6 ldr r6, [sp, 0x64]                                    |     r6 = var_64h;
                                                                     | label_66:
    0x0007b1a8 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b1aa cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007b1ac bne.w 0x7b45a                                         |         goto label_67;
                                                                     |     }
    0x0007b1b0 ldr r3, [r4, 0x2c]                                    |     r3 = *((r4 + 0x2c));
    0x0007b1b2 mov r1, r8                                            |     r1 = r8;
    0x0007b1b4 ldr r0, [r4]                                          |     r0 = *(r4);
    0x0007b1b6 add.w sl, r3, 1                                       |     sl = r3 + 1;
    0x0007b1ba str.w sl, [r4, 0x2c]                                  |     __asm ("str.w sl, [r4, 0x2c]");
    0x0007b1be bl 0x319d4                                            |     fcn_000319d4 (r0, r1);
    0x0007b1c2 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0007b1c4 movs r1, 0x61                                         |     r1 = 0x61;
    0x0007b1c6 ldr.w sb, [sp, 0x2c]                                  |     sb = var_2ch;
    0x0007b1ca ldr r2, [sp, 0x4c]                                    |     r2 = var_4ch;
    0x0007b1cc str r0, [sp, 4]                                       |     var_4h = r0;
    0x0007b1ce str r3, [sp, 8]                                       |     var_8h = r3;
    0x0007b1d0 mov r0, sb                                            |     r0 = sb;
    0x0007b1d2 str.w sl, [sp]                                        |     __asm ("str.w sl, [sp]");
    0x0007b1d6 bl 0x2a324                                            |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0007b1da ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0007b1dc movs r1, 0x8a                                         |     r1 = 0x8a;
    0x0007b1de ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
    0x0007b1e0 mov r0, sb                                            |     r0 = sb;
    0x0007b1e2 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0007b1e4 ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0007b1e6 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b1e8 mov r3, sl                                            |     r3 = sl;
    0x0007b1ea bl 0x2a744                                            |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0007b1ee ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b1f0 str r3, [sp, 0x38]                                    |     var_38h = r3;
                                                                     | label_25:
    0x0007b1f2 ldr r0, [sp, 0x40]                                    |     r0 = var_40h;
    0x0007b1f4 bl 0x6554c                                            |     fcn_0006554c (r0, r1);
    0x0007b1f8 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007b1fa cmp r3, 2                                             |     
    0x0007b1fc itt eq                                                |     
                                                                     |     if (r3 != 2) {
    0x0007b1fe moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r3 != 2) {
    0x0007b200 streq r3, [sp, 0x54]                                  |         var_54h = r3;
                                                                     |     }
                                                                     |     if (r3 != 2) {
    0x0007b202 beq 0x7b22a                                           |         
    0x0007b204 ldr r3, [sp, 0x30]                                    |         r3 = var_30h;
    0x0007b206 movs r2, 0x71                                         |         r2 = 0x71;
    0x0007b208 mov r1, r5                                            |         r1 = r5;
    0x0007b20a mov r0, r4                                            |         r0 = r4;
    0x0007b20c str r3, [sp]                                          |         *(sp) = r3;
    0x0007b20e movs r3, 0                                            |         r3 = 0;
    0x0007b210 mov sb, r3                                            |         sb = r3;
    0x0007b212 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0007b214 add r3, sp, 0x70                                      |         r3 += var_70h;
    0x0007b216 str r3, [sp, 0xc]                                     |         var_ch = r3;
    0x0007b218 add r3, sp, 0x6c                                      |         r3 += var_6ch;
    0x0007b21a str r3, [sp, 8]                                       |         var_8h = r3;
    0x0007b21c movs r3, 8                                            |         r3 = 8;
    0x0007b21e bl 0x2bc74                                            |         fcn_0002bc74 (r0, r1, r2, r3, r4, r5, r6);
    0x0007b222 str.w sb, [sp, 0x54]                                  |         __asm ("str.w sb, [var_54h]");
                                                                     | label_16:
    0x0007b226 str.w sb, [sp, 0x34]                                  |         __asm ("str.w sb, [var_34h]");
                                                                     |     }
    0x0007b22a ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0007b22c ldr r2, [r3, 0x6c]                                    |     r2 = *((r3 + 0x6c));
    0x0007b22e ldr r3, [r3, 0x70]                                    |     r3 = *((r3 + 0x70));
    0x0007b230 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0007b232 cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0007b236 beq.w 0x7b658                                         |         goto label_68;
                                                                     |     }
    0x0007b23a cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0007b23c bge.w 0x7b77e                                         |         goto label_69;
                                                                     |     }
    0x0007b240 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0007b242 mov.w lr, 0                                           |     lr = 0;
    0x0007b246 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0007b248 mov.w ip, 0x23                                        |     
    0x0007b24c add.w r3, r2, r2, lsl 2                               |     r3 = r2 + (r2 << 2);
    0x0007b250 ldr r0, [r1, 0x68]                                    |     r0 = *((r1 + 0x68));
    0x0007b252 adds r2, 1                                            |     r2++;
    0x0007b254 str r2, [r1, 0x6c]                                    |     *((r1 + 0x6c)) = r2;
    0x0007b256 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0007b258 ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0007b25a adds r2, r0, r3                                       |     r2 = r0 + r3;
    0x0007b25c strd lr, lr, [r2, 0xc]                                |     __asm ("strd lr, lr, [r2, 0xc]");
    0x0007b260 strd r1, lr, [r2, 4]                                  |     __asm ("strd r1, lr, [r2, 4]");
    0x0007b264 str.w ip, [r0, r3]                                    |     __asm ("str.w ip, [r0, r3]");
                                                                     | label_33:
    0x0007b268 ldrb.w r3, [r5, 0x2b]                                 |     r3 = *((r5 + 0x2b));
    0x0007b26c cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0007b26e beq.w 0x7b70c                                         |         goto label_70;
                                                                     |     }
    0x0007b272 movs r3, 0                                            |     r3 = 0;
    0x0007b274 ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
    0x0007b276 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b278 movs r1, 0x86                                         |     r1 = 0x86;
    0x0007b27a ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b27c mov r3, sl                                            |     r3 = sl;
    0x0007b27e bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_28:
    0x0007b282 ldrb.w r3, [r5, 0x2b]                                 |     r3 = *((r5 + 0x2b));
    0x0007b286 cmp r3, 1                                             |     
                                                                     |     if (r3 != 1) {
    0x0007b288 bne.w 0x7b59e                                         |         goto label_71;
                                                                     |     }
                                                                     | label_27:
    0x0007b28c ldr.w sb, [r5, 0x34]                                  |     sb = *((r5 + 0x34));
    0x0007b290 mov r3, sb                                            |     r3 = sb;
    0x0007b292 cmp.w sb, 0                                           |     
                                                                     |     if (sb != 0) {
    0x0007b296 bne 0x7b29e                                           |         goto label_72;
                                                                     |     }
    0x0007b298 b 0x7b2a6                                             |     goto label_73;
                                                                     |     do {
    0x0007b29a ldr r3, [r3, 0x18]                                    |         r3 = *((r3 + 0x18));
                                                                     |         if (r3 == 0) {
    0x0007b29c cbz r3, 0x7b2a4                                       |             goto label_74;
                                                                     |         }
                                                                     | label_72:
    0x0007b29e ldr r2, [r3]                                          |         r2 = *(r3);
    0x0007b2a0 cmp r7, r2                                            |         
    0x0007b2a2 bne 0x7b29a                                           |         
                                                                     |     } while (r7 != r2);
                                                                     | label_74:
    0x0007b2a4 mov sb, r3                                            |     sb = r3;
                                                                     | label_73:
    0x0007b2a6 mov r1, r5                                            |     r1 = r5;
    0x0007b2a8 mov r0, r4                                            |     r0 = r4;
    0x0007b2aa bl 0x1fe7c                                            |     fcn_0001fe7c (r0, r1);
    0x0007b2ae ldr r2, [r4, 0x74]                                    |     r2 = *((r4 + 0x74));
    0x0007b2b0 movs r3, 1                                            |     r3 = 1;
    0x0007b2b2 cmp r2, 0                                             |     
    0x0007b2b4 it eq                                                 |     
                                                                     |     if (r2 != 0) {
    0x0007b2b6 moveq r2, r4                                          |         r2 = r4;
                                                                     |     }
    0x0007b2b8 strb r3, [r2, 0x15]                                   |     *((r2 + 0x15)) = r3;
    0x0007b2ba ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0007b2bc cmp r2, r3                                            |     
                                                                     |     if (r2 == r3) {
    0x0007b2be beq.w 0x7b53e                                         |         goto label_75;
                                                                     |     }
    0x0007b2c2 ldr r5, [sp, 0x2c]                                    |     r5 = var_2ch;
    0x0007b2c4 mvn r2, 0xa                                           |     r2 = ~0xa;
    0x0007b2c8 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0007b2ca movs r1, 7                                            |     r1 = 7;
    0x0007b2cc movs r2, 0                                            |     r2 = 0;
    0x0007b2ce strd sl, sb, [sp]                                     |     __asm ("strd sl, sb, [sp]");
    0x0007b2d2 mov r0, r5                                            |     r0 = r5;
    0x0007b2d4 bl 0x2a324                                            |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0007b2d8 ldr r3, [r5, 0x6c]                                    |     r3 = *((r5 + 0x6c));
    0x0007b2da cmp r3, 0                                             |     
                                                                     |     if (r3 > 0) {
    0x0007b2dc ble 0x7b2f0                                           |         
                                                                     | label_19:
    0x0007b2de ldr r2, [sp, 0x2c]                                    |         r2 = var_2ch;
    0x0007b2e0 add.w r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
    0x0007b2e4 ldr r2, [r2, 0x68]                                    |         r2 = *((r2 + 0x68));
    0x0007b2e6 add.w r2, r2, r3, lsl 2                               |         r2 += (r3 << 2);
    0x0007b2ea movs r3, 2                                            |         r3 = 2;
    0x0007b2ec strh r3, [r2, -0x12]                                  |         *((r2 - 0x12)) = r3;
                                                                     |     }
    0x0007b2f0 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007b2f2 ldr.w sb, [sp, 0x34]                                  |     sb = var_34h;
    0x0007b2f6 str r3, [sp, 0x34]                                    |     var_34h = r3;
                                                                     | label_17:
    0x0007b2f8 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b2fa cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007b2fc bne.w 0x7b578                                         |         goto label_76;
                                                                     |     }
    0x0007b300 cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0007b304 beq.w 0x7b5d6                                         |         goto label_77;
                                                                     |     }
    0x0007b308 ldr.w r8, [sp, 0x2c]                                  |     r8 = var_2ch;
    0x0007b30c movs r1, 0x26                                         |     r1 = 0x26;
    0x0007b30e ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b310 ldr r5, [sp, 0x34]                                    |     r5 = var_34h;
    0x0007b312 ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
    0x0007b314 mov r0, r8                                            |     r0 = r8;
    0x0007b316 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b318 adds r3, r5, 1                                        |     r3 = r5 + 1;
    0x0007b31a bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b31e ldr.w r2, [r8, 0x6c]                                  |     r2 = *((r8 + 0x6c));
    0x0007b322 cmp r5, 0                                             |     
    0x0007b324 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b326 mov r3, r8                                            |     r3 = r8;
    0x0007b328 itt lt                                                |     
                                                                     |     if (r5 >= 0) {
    0x0007b32a addlt r3, r2, -1                                      |         r3 = r2 + -1;
                                                                     |     }
                                                                     |     if (r5 < 0) {
    0x0007b32e str r3, [sp, 0x34]                                    |         var_34h = r3;
                                                                     |     }
    0x0007b330 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0007b332 ldrb.w r3, [r3, 0x57]                                 |     r3 = *((r3 + 0x57));
    0x0007b336 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007b338 beq.w 0x7b530                                         |         goto label_23;
                                                                     |     }
    0x0007b33c ldr.w r3, [pc, 0x4e0]                                 |     
    0x0007b340 add r3, pc                                            |     r3 = 0xf6b64;
    0x0007b342 adds r3, 4                                            |     r3 += 4;
                                                                     | label_18:
    0x0007b344 ldr r5, [sp, 0x54]                                    |     r5 = var_54h;
    0x0007b346 str r2, [r3, 8]                                       |     *((r3 + 8)) = r2;
                                                                     | label_20:
    0x0007b348 ldrb r3, [r4, 0x12]                                   |     r3 = *((r4 + 0x12));
                                                                     |     if (r3 == 0) {
    0x0007b34a cbnz r3, 0x7b354                                      |         
    0x0007b34c ldr r3, [r4, 0x78]                                    |         r3 = *((r4 + 0x78));
    0x0007b34e cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0007b350 beq.w 0x7b63e                                         |             goto label_78;
                                                                     |         }
                                                                     |     }
                                                                     | label_26:
    0x0007b354 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
                                                                     |     if (r3 != 0) {
    0x0007b356 cbz r3, 0x7b366                                       |         
    0x0007b358 ldr.w r2, [pc, 0x4c8]                                 |         
    0x0007b35c ldr r1, [sp, 0x44]                                    |         r1 = var_44h;
    0x0007b35e ldr r0, [sp, 0x2c]                                    |         r0 = var_2ch;
    0x0007b360 add r2, pc                                            |         r2 = 0xf6b88;
    0x0007b362 bl 0x2aa28                                            |         fcn_0002aa28 (r0, r1, r2);
                                                                     |     }
                                                                     | label_40:
    0x0007b366 ldr r3, [sp, 0x78]                                    |     r3 = var_78h;
    0x0007b368 b 0x7ae54                                             |     goto label_3;
                                                                     | label_41:
    0x0007b36a ldr r3, [r4]                                          |     r3 = *(r4);
    0x0007b36c ldr r2, [r3, 0x10]                                    |     r2 = *((r3 + 0x10));
    0x0007b36e ldr r2, [r2, 0x1c]                                    |     r2 = *((r2 + 0x1c));
                                                                     |     if (r2 == 0) {
    0x0007b370 cbz r2, 0x7b37a                                       |         goto label_79;
                                                                     |     }
    0x0007b372 ldr r2, [r2, 0x30]                                    |     r2 = *((r2 + 0x30));
    0x0007b374 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0007b376 bne.w 0x7ae1e                                         |         goto label_4;
                                                                     |     }
                                                                     | label_79:
    0x0007b37a ldrb.w r2, [r5, 0x2b]                                 |     r2 = *((r5 + 0x2b));
    0x0007b37e str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0007b380 b 0x7b38a                                             |     goto label_35;
                                                                     | label_42:
    0x0007b382 ldrb.w r3, [r5, 0x2b]                                 |     r3 = *((r5 + 0x2b));
    0x0007b386 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0007b388 ldr r3, [r4]                                          |     r3 = *(r4);
                                                                     | label_35:
    0x0007b38a ldr r2, [r3, 0x20]                                    |     r2 = *((r3 + 0x20));
    0x0007b38c ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007b38e clz r3, r3                                            |     r3 &= r3;
    0x0007b392 lsrs r3, r3, 5                                        |     r3 >>= 5;
    0x0007b394 ands.w r3, r3, r2, lsr 14                             |     r3 &= (r2 >> 14);
                                                                     |     if (r3 != r3) {
    0x0007b398 bne 0x7b3c4                                           |         goto label_80;
                                                                     |     }
                                                                     | label_8:
    0x0007b39a str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0007b39c b 0x7ae46                                             |     goto label_5;
                                                                     | label_49:
    0x0007b39e ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0007b3a0 ldrb.w r3, [r2, 0x96]                                 |     r3 = *((r2 + 0x96));
    0x0007b3a4 orr r3, r3, 0x10                                      |     r3 |= 0x10;
    0x0007b3a8 strb.w r3, [r2, 0x96]                                 |     *((r2 + 0x96)) = r3;
    0x0007b3ac b 0x7af24                                             |     goto label_6;
                                                                     | label_48:
    0x0007b3ae ldr r3, [r4, 0x74]                                    |     r3 = *((r4 + 0x74));
    0x0007b3b0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007b3b2 beq 0x7b438                                           |         goto label_81;
                                                                     |     }
                                                                     | label_14:
    0x0007b3b4 mov r0, r4                                            |     r0 = r4;
    0x0007b3b6 bl 0x29b0c                                            |     fcn_00029b0c (r0);
    0x0007b3ba str r0, [sp, 0x2c]                                    |     var_2ch = r0;
    0x0007b3bc cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0007b3be bne.w 0x7af1c                                         |         goto label_7;
                                                                     |     }
    0x0007b3c2 b 0x7ae50                                             |     goto label_1;
                                                                     | label_80:
    0x0007b3c4 ldr r0, [r5, 0x3c]                                    |     r0 = *((r5 + 0x3c));
    0x0007b3c6 movs r2, 0                                            |     r2 = 0;
    0x0007b3c8 ldr r1, [r5]                                          |     r1 = *(r5);
    0x0007b3ca adds r0, 0x38                                         |     r0 += 0x38;
    0x0007b3cc bl 0x146e4                                            |     fcn_000146e4 (r0, r1, r2);
    0x0007b3d0 ldr r3, [r0, 8]                                       |     r3 = *((r0 + 8));
    0x0007b3d2 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0007b3d4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007b3d6 beq.w 0x7b68e                                         |         goto label_82;
                                                                     |     }
    0x0007b3da movs r3, 0                                            |     r3 = 0;
    0x0007b3dc mov.w sl, 1                                           |     sl = 1;
    0x0007b3e0 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0007b3e2 b 0x7b39a                                             |     goto label_8;
                                                                     | label_64:
    0x0007b3e4 movs r3, 0                                            |     r3 = 0;
    0x0007b3e6 ldr r2, [sp, 0x44]                                    |     r2 = var_44h;
    0x0007b3e8 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b3ea movs r1, 0x56                                         |     r1 = 0x56;
    0x0007b3ec ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b3ee movs r3, 1                                            |     r3 = 1;
    0x0007b3f0 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b3f4 b 0x7b15c                                             |     goto label_9;
                                                                     | label_50:
    0x0007b3f6 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0007b3f8 mov r2, r6                                            |     r2 = r6;
    0x0007b3fa mov r1, r5                                            |     r1 = r5;
    0x0007b3fc mov r0, r4                                            |     r0 = r4;
    0x0007b3fe bl 0x68ae0                                            |     fcn_00068ae0 (r0, r1, r2, r3);
    0x0007b402 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0007b404 strd r3, r3, [sp, 0x6c]                               |     __asm ("strd r3, r3, [var_6ch]");
    0x0007b408 b 0x7af36                                             |     goto label_10;
                                                                     | label_59:
    0x0007b40a str r2, [sp]                                          |     *(sp) = r2;
    0x0007b40c movs r1, 0x4b                                         |     r1 = 0x4b;
    0x0007b40e ldr r3, [r4, 0x2c]                                    |     r3 = *((r4 + 0x2c));
    0x0007b410 mov r8, r2                                            |     r8 = r2;
    0x0007b412 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b414 str r2, [sp, 0x50]                                    |     var_50h = r2;
    0x0007b416 adds r3, 1                                            |     r3++;
    0x0007b418 str r3, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r3;
    0x0007b41a str r3, [sp, 0x58]                                    |     var_58h = r3;
    0x0007b41c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b420 movs r2, 1                                            |     r2 = 1;
    0x0007b422 strd r8, r8, [sp, 0x48]                               |     __asm ("strd r8, r8, [var_4ch]");
    0x0007b426 str r2, [sp, 0x38]                                    |     var_38h = r2;
    0x0007b428 b 0x7b108                                             |     goto label_11;
                                                                     | label_53:
    0x0007b42a mov.w sl, 0x14                                        |     sl = 0x14;
    0x0007b42e b 0x7b078                                             |     goto label_12;
                                                                     | label_46:
    0x0007b430 mov r8, sb                                            |     r8 = sb;
    0x0007b432 str.w sb, [sp, 0x40]                                  |     __asm ("str.w sb, [var_40h]");
    0x0007b436 b 0x7aec2                                             |     goto label_13;
                                                                     | label_81:
    0x0007b438 ldr r3, [r4]                                          |     r3 = *(r4);
    0x0007b43a ldr r3, [r3, 0x50]                                    |     r3 = *((r3 + 0x50));
    0x0007b43c lsls r3, r3, 0x1c                                     |     r3 <<= 0x1c;
    0x0007b43e itt pl                                                |     
                                                                     |     if (r3 < r3) {
    0x0007b440 movpl r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r3 < r3) {
    0x0007b442 strbpl r3, [r4, 0x17]                                 |         *((r4 + 0x17)) = r3;
                                                                     |     }
    0x0007b444 b 0x7b3b4                                             |     goto label_14;
                                                                     | label_63:
    0x0007b446 movs r3, 0                                            |     r3 = 0;
    0x0007b448 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0007b44a ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b44c movs r1, 0x8f                                         |     r1 = 0x8f;
    0x0007b44e str r3, [sp]                                          |     *(sp) = r3;
    0x0007b450 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b454 b 0x7b154                                             |     goto label_15;
                                                                     | label_24:
    0x0007b456 str.w sl, [sp, 0x4c]                                  |     __asm ("str.w sl, [var_4ch]");
                                                                     | label_67:
    0x0007b45a add.w r2, sb, 2                                       |     r2 = sb + 2;
    0x0007b45e mov r0, r7                                            |     r0 = r7;
    0x0007b460 asrs r3, r2, 0x1f                                     |     r3 = r2 >> 0x1f;
    0x0007b462 bl 0x1d740                                            |     r0 = fcn_0001d740 (r0, r1);
    0x0007b466 mov r3, r0                                            |     r3 = r0;
    0x0007b468 str r0, [sp, 0x54]                                    |     var_54h = r0;
    0x0007b46a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007b46c beq.w 0x7b7b2                                         |         goto label_83;
                                                                     |     }
    0x0007b470 add.w r2, sb, 1                                       |     r2 = sb + 1;
    0x0007b474 movs r1, 1                                            |     r1 = 1;
    0x0007b476 blx 0x97d4                                            |     fcn_000097d4 ();
    0x0007b47a ldr r1, [sp, 0x54]                                    |     r1 = var_54h;
    0x0007b47c movs r2, 0                                            |     r2 = 0;
    0x0007b47e add sb, r1                                            |     sb += r1;
    0x0007b480 strb.w r2, [sb, 1]                                    |     *((sb + 1)) = r2;
    0x0007b484 ldr r3, [sp, 0x9c]                                    |     r3 = var_9ch;
    0x0007b486 cmp r3, r2                                            |     
    0x0007b488 ittt ge                                               |     
                                                                     |     if (r3 < r2) {
    0x0007b48a ldrge r0, [sp, 0x30]                                  |         r0 = var_30h;
                                                                     |     }
                                                                     |     if (r3 < r2) {
    0x0007b48c subge r3, r3, r0                                      |         r3 -= r0;
                                                                     |     }
                                                                     |     if (r3 < r2) {
    0x0007b48e strbge r2, [r1, r3]                                   |         *((r1 + r3)) = r2;
                                                                     |     }
    0x0007b490 ldr r3, [sp, 0xa0]                                    |     r3 = var_a0h;
    0x0007b492 cmp r3, 0                                             |     
                                                                     |     if (r3 >= 0) {
    0x0007b494 blt 0x7b4a0                                           |         
    0x0007b496 ldr r2, [sp, 0x30]                                    |         r2 = var_30h;
    0x0007b498 ldr r1, [sp, 0x54]                                    |         r1 = var_54h;
    0x0007b49a subs r3, r3, r2                                       |         r3 -= r2;
    0x0007b49c movs r2, 0                                            |         r2 = 0;
    0x0007b49e strb r2, [r1, r3]                                     |         *((r1 + r3)) = r2;
                                                                     |     }
    0x0007b4a0 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0007b4a2 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007b4a4 bne.w 0x7b73c                                         |         goto label_84;
                                                                     |     }
                                                                     | label_31:
    0x0007b4a8 ldr r3, [r4, 0x38]                                    |     r3 = *((r4 + 0x38));
    0x0007b4aa add.w sb, r3, -1                                      |     sb = r3 + -1;
    0x0007b4ae ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007b4b0 str.w sb, [r4, 0x38]                                  |     __asm ("str.w sb, [r4, 0x38]");
    0x0007b4b4 cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0007b4b6 beq.w 0x7b706                                         |         goto label_34;
                                                                     |     }
    0x0007b4ba ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b4bc cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0007b4be beq.w 0x7b6a2                                         |         goto label_85;
                                                                     |     }
    0x0007b4c2 ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0007b4c4 movs r2, 0x71                                         |     r2 = 0x71;
    0x0007b4c6 mov r1, r5                                            |     r1 = r5;
    0x0007b4c8 mov r0, r4                                            |     r0 = r4;
    0x0007b4ca str r3, [sp, 4]                                       |     var_4h = r3;
    0x0007b4cc ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0007b4ce str r3, [sp]                                          |     *(sp) = r3;
    0x0007b4d0 add r3, sp, 0x70                                      |     r3 += var_70h;
    0x0007b4d2 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0007b4d4 add r3, sp, 0x6c                                      |     r3 += var_6ch;
    0x0007b4d6 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0007b4d8 movs r3, 8                                            |     r3 = 8;
    0x0007b4da bl 0x2bc74                                            |     fcn_0002bc74 (r0, r1, r2, r3, r4, r5, r6);
    0x0007b4de ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b4e0 ldr.w sl, [sp, 0x4c]                                  |     sl = var_4ch;
    0x0007b4e4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007b4e6 beq.w 0x7b226                                         |         goto label_16;
                                                                     |     }
                                                                     | label_30:
    0x0007b4ea ldrb.w r3, [r5, 0x2b]                                 |     r3 = *((r5 + 0x2b));
    0x0007b4ee cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0007b4f0 beq.w 0x7b64e                                         |         goto label_86;
                                                                     |     }
    0x0007b4f4 ldr r3, [sp, 0x6c]                                    |     r3 = var_6ch;
    0x0007b4f6 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0007b4f8 ldr r1, [sp, 0x54]                                    |     r1 = var_54h;
    0x0007b4fa subs r2, r3, r2                                       |     r2 = r3 - r2;
    0x0007b4fc ldrb r2, [r1, r2]                                     |     r2 = *((r1 + r2));
    0x0007b4fe cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0007b500 bne.w 0x7b71e                                         |         goto label_87;
                                                                     |     }
                                                                     | label_21:
    0x0007b504 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0007b506 mov r1, r5                                            |     r1 = r5;
    0x0007b508 ldr r0, [sp, 0x3c]                                    |     r0 = var_3ch;
    0x0007b50a strd sl, r2, [sp, 4]                                  |     __asm ("strd sl, r2, [var_8h]");
    0x0007b50e str r0, [sp, 0x14]                                    |     var_14h = r0;
    0x0007b510 ldrb r0, [r4, 0x12]                                   |     r0 = *((r4 + 0x12));
    0x0007b512 ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0007b514 clz r0, r0                                            |     r0 &= r0;
    0x0007b518 lsrs r0, r0, 5                                        |     r0 >>= 5;
    0x0007b51a str r0, [sp, 0xc]                                     |     var_ch = r0;
    0x0007b51c ldr r0, [sp, 0xa0]                                    |     r0 = var_a0h;
    0x0007b51e str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0007b520 ldr r0, [sp, 0x70]                                    |     r0 = var_70h;
    0x0007b522 str r0, [sp]                                          |     *(sp) = r0;
    0x0007b524 movs r0, 0xb                                          |     r0 = 0xb;
    0x0007b526 str r0, [sp, 0x10]                                    |     var_10h = r0;
    0x0007b528 mov r0, r4                                            |     r0 = r4;
    0x0007b52a bl 0x779bc                                            |     fcn_000779bc (r0, r1, r2, r3, r4, r5, r6);
    0x0007b52e b 0x7b2f8                                             |     goto label_17;
                                                                     | label_23:
    0x0007b530 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0007b532 add.w r1, r3, r3, lsl 2                               |     r1 = r3 + (r3 << 2);
    0x0007b536 ldr r3, [r0, 0x68]                                    |     r3 = *((r0 + 0x68));
    0x0007b538 add.w r3, r3, r1, lsl 2                               |     r3 += (r1 << 2);
    0x0007b53c b 0x7b344                                             |     goto label_18;
                                                                     | label_75:
    0x0007b53e movs r3, 0                                            |     r3 = 0;
    0x0007b540 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0007b542 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b544 movs r1, 0x7a                                         |     r1 = 0x7a;
    0x0007b546 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b548 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b54c ldr r3, [r4, 0x74]                                    |     r3 = *((r4 + 0x74));
    0x0007b54e cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007b550 beq.w 0x7b7c8                                         |         goto label_88;
                                                                     |     }
                                                                     | label_36:
    0x0007b554 ldr r5, [sp, 0x2c]                                    |     r5 = var_2ch;
    0x0007b556 mvn r3, 0xa                                           |     r3 = ~0xa;
    0x0007b55a str r3, [sp, 8]                                       |     var_8h = r3;
    0x0007b55c movs r2, 0                                            |     r2 = 0;
    0x0007b55e movs r3, 1                                            |     r3 = 1;
    0x0007b560 movs r1, 7                                            |     r1 = 7;
    0x0007b562 mov r0, r5                                            |     r0 = r5;
    0x0007b564 strd sl, sb, [sp]                                     |     __asm ("strd sl, sb, [sp]");
    0x0007b568 bl 0x2a324                                            |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x0007b56c ldr r3, [r5, 0x6c]                                    |     r3 = *((r5 + 0x6c));
    0x0007b56e cmp r3, 0                                             |     
                                                                     |     if (r3 > 0) {
    0x0007b570 bgt.w 0x7b2de                                         |         goto label_19;
                                                                     |     }
    0x0007b574 ldr.w sb, [sp, 0x34]                                  |     sb = var_34h;
                                                                     | label_76:
    0x0007b578 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0007b57a mvn.w r2, sb                                          |     r2 = ~sb;
    0x0007b57e ldr r0, [r3, 0xc]                                     |     r0 = *((r3 + 0xc));
    0x0007b580 ldrd r3, r1, [r0, 0x38]                               |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x0007b584 cmn r1, r3                                            |     
                                                                     |     if (r1 < r3) {
    0x0007b586 bmi.w 0x7b776                                         |         goto label_89;
                                                                     |     }
    0x0007b58a ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0007b58c ldr r3, [r0, 0x40]                                    |     r3 = *((r0 + 0x40));
    0x0007b58e ldr r1, [r1, 0x6c]                                    |     r1 = *((r1 + 0x6c));
    0x0007b590 str.w r1, [r3, r2, lsl 2]                             |     __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                     | label_32:
    0x0007b594 ldr r0, [sp, 0x40]                                    |     r0 = var_40h;
    0x0007b596 bl 0x6554c                                            |     fcn_0006554c (r0, r1);
    0x0007b59a ldr r5, [sp, 0x54]                                    |     r5 = var_54h;
    0x0007b59c b 0x7b348                                             |     goto label_20;
                                                                     | label_71:
    0x0007b59e ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007b5a0 ldr.w sb, [sp, 0x34]                                  |     sb = var_34h;
    0x0007b5a4 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0007b5a6 ldr r3, [sp, 0x6c]                                    |     r3 = var_6ch;
    0x0007b5a8 b 0x7b504                                             |     goto label_21;
                                                                     | label_54:
    0x0007b5aa ldr r3, [sp, 0x94]                                    |     r3 = var_94h;
    0x0007b5ac eor r3, r3, 0x40                                      |     r3 ^= 0x40;
    0x0007b5b0 ubfx r3, r3, 6, 1                                     |     r3 = (r3 >> 6) & ((1 << 1) - 1);
    0x0007b5b4 lsls r3, r3, 3                                        |     r3 <<= 3;
    0x0007b5b6 orr sl, r3, 0x14                                      |     sl = r3 | 0x14;
    0x0007b5ba b 0x7b078                                             |     goto label_12;
                                                                     | label_57:
    0x0007b5bc ldr r7, [sp, 0x28]                                    |     r7 = var_28h;
                                                                     | label_56:
    0x0007b5be movs r5, 0                                            |     r5 = 0;
    0x0007b5c0 b 0x7b348                                             |     goto label_20;
                                                                     | label_62:
    0x0007b5c2 movs r3, 0                                            |     r3 = 0;
    0x0007b5c4 mov r2, r0                                            |     r2 = r0;
    0x0007b5c6 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b5c8 movs r1, 0x76                                         |     r1 = 0x76;
    0x0007b5ca ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0007b5cc ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b5ce bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007b5d2 str r0, [sp, 0x50]                                    |     var_50h = r0;
    0x0007b5d4 b 0x7b0fc                                             |     goto label_22;
                                                                     | label_77:
    0x0007b5d6 ldr.w r8, [sp, 0x34]                                  |     r8 = var_34h;
    0x0007b5da ldr r5, [sp, 0x2c]                                    |     r5 = var_2ch;
    0x0007b5dc mov r1, r8                                            |     r1 = r8;
    0x0007b5de mov r0, r5                                            |     r0 = r5;
    0x0007b5e0 bl 0x2a2e4                                            |     fcn_0002a2e4 (r0, r1, r2);
    0x0007b5e4 ldr r2, [r5, 0x6c]                                    |     r2 = *((r5 + 0x6c));
    0x0007b5e6 mov r3, r8                                            |     r3 = r8;
    0x0007b5e8 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b5ea cmp r3, 0                                             |     
    0x0007b5ec itt lt                                                |     
                                                                     |     if (r3 >= 0) {
    0x0007b5ee addlt r3, r2, -1                                      |         r3 = r2 + -1;
                                                                     |     }
                                                                     |     if (r3 < 0) {
    0x0007b5f2 str r3, [sp, 0x34]                                    |         var_34h = r3;
                                                                     |     }
    0x0007b5f4 ldr r3, [r0]                                          |     r3 = *(r0);
    0x0007b5f6 ldrb.w r3, [r3, 0x57]                                 |     r3 = *((r3 + 0x57));
    0x0007b5fa cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007b5fc beq 0x7b530                                           |         goto label_23;
                                                                     |     }
    0x0007b5fe ldr r3, [pc, 0x228]                                   |     
    0x0007b600 add r3, pc                                            |     r3 = 0xf6e2e;
    0x0007b602 adds r3, 4                                            |     r3 += 4;
    0x0007b604 b 0x7b344                                             |     goto label_18;
                                                                     | label_65:
    0x0007b606 str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0007b60a movs r1, 0x87                                         |     r1 = 0x87;
    0x0007b60c ldr r3, [r4, 0x2c]                                    |     r3 = *((r4 + 0x2c));
    0x0007b60e ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0007b610 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b612 add.w sl, r3, 1                                       |     sl = r3 + 1;
    0x0007b616 mov r3, sl                                            |     r3 = sl;
    0x0007b618 str.w sl, [r4, 0x2c]                                  |     __asm ("str.w sl, [r4, 0x2c]");
    0x0007b61c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b620 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b622 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007b624 bne.w 0x7b456                                         |         goto label_24;
                                                                     |     }
    0x0007b628 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0007b62a movs r1, 0x9c                                         |     r1 = 0x9c;
    0x0007b62c ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0007b62e ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b630 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b632 mov r3, sl                                            |     r3 = sl;
    0x0007b634 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b638 movs r3, 1                                            |     r3 = 1;
    0x0007b63a str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0007b63c b 0x7b1f2                                             |     goto label_25;
                                                                     | label_78:
    0x0007b63e ldr r3, [r4, 0x70]                                    |     r3 = *((r4 + 0x70));
    0x0007b640 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007b642 beq.w 0x7b354                                         |         goto label_26;
                                                                     |     }
    0x0007b646 mov r0, r4                                            |     r0 = r4;
    0x0007b648 bl 0x2bbb8                                            |     fcn_0002bbb8 (r0, r1);
    0x0007b64c b 0x7b354                                             |     goto label_26;
                                                                     | label_86:
    0x0007b64e movs r3, 0                                            |     r3 = 0;
    0x0007b650 str.w sb, [sp, 0x34]                                  |     __asm ("str.w sb, [var_34h]");
    0x0007b654 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0007b656 b 0x7b28c                                             |     goto label_27;
                                                                     | label_68:
    0x0007b658 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0007b65a cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0007b65c bge.w 0x7b7cc                                         |         goto label_90;
                                                                     |     }
    0x0007b660 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0007b662 mov.w ip, 0x2d                                        |     
    0x0007b666 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b668 add.w r3, r2, r2, lsl 2                               |     r3 = r2 + (r2 << 2);
    0x0007b66c ldr r1, [r0, 0x68]                                    |     r1 = *((r0 + 0x68));
    0x0007b66e adds r2, 1                                            |     r2++;
    0x0007b670 str r2, [r0, 0x6c]                                    |     *((r0 + 0x6c)) = r2;
    0x0007b672 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0007b674 ldr r0, [sp, 0x58]                                    |     r0 = var_58h;
    0x0007b676 adds r2, r1, r3                                       |     r2 = r1 + r3;
    0x0007b678 strd sl, r8, [r2, 0xc]                                |     __asm ("strd sl, r8, [r2, 0xc]");
    0x0007b67c strd r0, r8, [r2, 4]                                  |     __asm ("strd r0, r8, [r2, 4]");
    0x0007b680 str.w ip, [r1, r3]                                    |     __asm ("str.w ip, [r1, r3]");
    0x0007b684 b 0x7b282                                             |     goto label_28;
                                                                     | label_58:
    0x0007b686 ldr r3, [pc, 0x1a4]                                   |     
    0x0007b688 add r3, pc                                            |     r3 = 0xf6eba;
    0x0007b68a adds r3, 4                                            |     r3 += 4;
    0x0007b68c b 0x7b05c                                             |     goto label_29;
                                                                     | label_82:
    0x0007b68e ldr r3, [r5, 0x30]                                    |     r3 = *((r5 + 0x30));
    0x0007b690 subs.w sl, r3, 0                                      |     sl = r3 - 0;
    0x0007b694 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0007b696 it ne                                                 |     
                                                                     |     if (sl == r3) {
    0x0007b698 movne sl, 1                                           |         sl = 1;
                                                                     |     }
    0x0007b69c str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0007b69e b.w 0x7ae46                                           |     goto label_5;
                                                                     | label_85:
    0x0007b6a2 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0007b6a4 ldrd sl, r3, [r3, 0x6c]                               |     __asm ("ldrd sl, r3, [r3, 0x6c]");
    0x0007b6a8 cmp sl, r3                                            |     
                                                                     |     if (sl >= r3) {
    0x0007b6aa bge.w 0x7b7f8                                         |         goto label_91;
                                                                     |     }
    0x0007b6ae ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0007b6b0 add.w r2, sl, sl, lsl 2                               |     r2 = sl + (sl << 2);
    0x0007b6b4 add.w r0, sl, 1                                       |     r0 = sl + 1;
    0x0007b6b8 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0007b6bc lsls r2, r2, 2                                        |     r2 <<= 2;
    0x0007b6be movs r1, 0                                            |     r1 = 0;
    0x0007b6c0 ldr.w ip, [r3, 0x68]                                  |     ip = *((r3 + 0x68));
    0x0007b6c4 str r0, [r3, 0x6c]                                    |     *((r3 + 0x6c)) = r0;
    0x0007b6c6 movs r0, 0xe                                          |     r0 = 0xe;
    0x0007b6c8 add.w r3, ip, r2                                      |     r3 = ip + r2;
    0x0007b6cc str.w r0, [ip, r2]                                    |     __asm ("str.w r0, [ip, r2]");
    0x0007b6d0 adds r2, r3, 4                                        |     r2 = r3 + 4;
    0x0007b6d2 vst1.32 {d16}, [r2]                                   |     __asm ("vst1.32 {d16}, [r2]");
    0x0007b6d6 strd r1, r1, [r3, 0xc]                                |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                     | label_37:
    0x0007b6da ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0007b6dc movs r2, 0x71                                         |     r2 = 0x71;
    0x0007b6de mov r1, r5                                            |     r1 = r5;
    0x0007b6e0 mov r0, r4                                            |     r0 = r4;
    0x0007b6e2 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0007b6e4 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0007b6e6 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b6e8 add r3, sp, 0x70                                      |     r3 += var_70h;
    0x0007b6ea str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0007b6ec add r3, sp, 0x6c                                      |     r3 += var_6ch;
    0x0007b6ee str r3, [sp, 8]                                       |     var_8h = r3;
    0x0007b6f0 movs r3, 8                                            |     r3 = 8;
    0x0007b6f2 bl 0x2bc74                                            |     fcn_0002bc74 (r0, r1, r2, r3, r4, r5, r6);
    0x0007b6f6 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0007b6f8 ldr r3, [r3, 0x6c]                                    |     r3 = *((r3 + 0x6c));
    0x0007b6fa subs r2, r3, 1                                        |     r2 = r3 - 1;
    0x0007b6fc cmp sl, r2                                            |     
                                                                     |     if (sl != r2) {
    0x0007b6fe bne 0x7b790                                           |         goto label_92;
                                                                     |     }
    0x0007b700 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0007b702 str.w sl, [r3, 0x6c]                                  |     __asm ("str.w sl, [r3, 0x6c]");
                                                                     | label_34:
    0x0007b706 ldr.w sl, [sp, 0x4c]                                  |     sl = var_4ch;
    0x0007b70a b 0x7b4ea                                             |     goto label_30;
                                                                     | label_70:
    0x0007b70c ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
    0x0007b70e movs r3, 0                                            |     r3 = 0;
    0x0007b710 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b712 movs r1, 0x5e                                         |     r1 = 0x5e;
    0x0007b714 str.w sl, [sp]                                        |     __asm ("str.w sl, [sp]");
    0x0007b718 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0007b71c b 0x7b282                                             |     goto label_28;
                                                                     | label_87:
    0x0007b71e ldr r2, [sp, 0x4c]                                    |     r2 = var_4ch;
    0x0007b720 movs r1, 0x1b                                         |     r1 = 0x1b;
    0x0007b722 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b724 str.w sb, [sp, 0x34]                                  |     __asm ("str.w sb, [var_34h]");
    0x0007b728 str r2, [sp]                                          |     *(sp) = r2;
    0x0007b72a mov r2, r3                                            |     r2 = r3;
    0x0007b72c ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0007b72e str r3, [sp, 4]                                       |     var_4h = r3;
    0x0007b730 mov r3, sb                                            |     r3 = sb;
    0x0007b732 bl 0x2a744                                            |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
    0x0007b736 movs r3, 0                                            |     r3 = 0;
    0x0007b738 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0007b73a b 0x7b282                                             |     goto label_28;
                                                                     | label_84:
    0x0007b73c ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0007b73e ldr r0, [r2]                                          |     r0 = *(r2);
    0x0007b740 ldrb.w sl, [r0, 0x57]                                 |     sl = *((r0 + 0x57));
    0x0007b744 cmp.w sl, 0                                           |     
                                                                     |     if (sl != 0) {
    0x0007b748 bne.w 0x7b4a8                                         |         goto label_31;
                                                                     |     }
    0x0007b74c add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0007b750 ldr r1, [r2, 0x68]                                    |     r1 = *((r2 + 0x68));
    0x0007b752 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0007b754 str r1, [sp, 0x50]                                    |     var_50h = r1;
    0x0007b756 add.w sb, r1, r3                                      |     sb = r1 + r3;
    0x0007b75a str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0007b75c ldr.w r2, [sb, 0x10]                                  |     r2 = *((sb + 0x10));
    0x0007b760 ldrsb.w r1, [sb, 1]                                   |     r1 = *((sb + 1));
    0x0007b764 bl 0x187b8                                            |     fcn_000187b8 (r0);
    0x0007b768 ldr r1, [sp, 0x50]                                    |     r1 = var_50h;
    0x0007b76a movs r2, 0xb8                                         |     r2 = 0xb8;
    0x0007b76c ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0007b76e str.w sl, [sb, 0x10]                                  |     __asm ("str.w sl, [sb, 0x10]");
    0x0007b772 strh r2, [r1, r3]                                     |     *((r1 + r3)) = r2;
    0x0007b774 b 0x7b4a8                                             |     goto label_31;
                                                                     | label_89:
    0x0007b776 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0007b778 bl 0x2bed8                                            |     fcn_0002bed8 (r0, r1, r2);
    0x0007b77c b 0x7b594                                             |     goto label_32;
                                                                     | label_69:
    0x0007b77e movs r3, 0                                            |     r3 = 0;
    0x0007b780 ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
    0x0007b782 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b784 movs r1, 0x23                                         |     r1 = 0x23;
    0x0007b786 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b788 bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007b78c str r0, [sp, 0x24]                                    |     var_24h = r0;
    0x0007b78e b 0x7b268                                             |     goto label_33;
                                                                     | label_92:
    0x0007b790 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0007b792 bics.w sl, sl, sl, asr 32                             |     __asm ("bics.w sl, sl, sl, asr 32");
    0x0007b796 it hs                                                 |     
                                                                     |     if (r1 < 0x23) {
    0x0007b798 movhs sl, r2                                          |         sl = r2;
                                                                     |     }
    0x0007b79a ldr r2, [r1]                                          |     r2 = *(r1);
    0x0007b79c ldrb.w r2, [r2, 0x57]                                 |     r2 = *((r2 + 0x57));
                                                                     |     if (r2 != 0) {
    0x0007b7a0 cbnz r2, 0x7b7c0                                      |         goto label_93;
                                                                     |     }
    0x0007b7a2 ldr r2, [r1, 0x68]                                    |     r2 = *((r1 + 0x68));
    0x0007b7a4 movs r1, 0x14                                         |     r1 = 0x14;
    0x0007b7a6 mla r2, r1, sl, r2                                    |     __asm ("mla r2, r1, sl, r2");
                                                                     |     do {
    0x0007b7aa str r3, [r2, 8]                                       |         *((r2 + 8)) = r3;
    0x0007b7ac b 0x7b706                                             |         goto label_34;
                                                                     | label_43:
    0x0007b7ae ldr r3, [r4]                                          |         r3 = *(r4);
    0x0007b7b0 b 0x7b38a                                             |         goto label_35;
                                                                     | label_83:
    0x0007b7b2 ldr r0, [sp, 0x40]                                    |         r0 = var_40h;
    0x0007b7b4 mov r5, r3                                            |         r5 = r3;
    0x0007b7b6 bl 0x6554c                                            |         fcn_0006554c (r0, r1);
    0x0007b7ba ldr r3, [sp, 0x78]                                    |         r3 = var_78h;
    0x0007b7bc b.w 0x7ae54                                           |         goto label_3;
                                                                     | label_93:
    0x0007b7c0 ldr r2, [pc, 0x6c]                                    |         
    0x0007b7c2 add r2, pc                                            |         r2 = 0xf6ff6;
    0x0007b7c4 adds r2, 4                                            |         r2 += 4;
    0x0007b7c6 b 0x7b7aa                                             |         
                                                                     |     } while (1);
                                                                     | label_88:
    0x0007b7c8 strb r3, [r4, 0x14]                                   |     *((r4 + 0x14)) = r3;
    0x0007b7ca b 0x7b554                                             |     goto label_36;
                                                                     | label_90:
    0x0007b7cc ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0007b7ce mov r3, r8                                            |     r3 = r8;
    0x0007b7d0 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b7d2 movs r1, 0x2d                                         |     r1 = 0x2d;
    0x0007b7d4 str.w sl, [sp]                                        |     __asm ("str.w sl, [sp]");
    0x0007b7d8 bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007b7dc str r0, [sp, 0x24]                                    |     var_24h = r0;
    0x0007b7de b 0x7b282                                             |     goto label_28;
                                                                     | label_45:
    0x0007b7e0 movs r3, 0                                            |     r3 = 0;
    0x0007b7e2 mov.w r8, 0x8000                                      |     r8 = 0x8000;
    0x0007b7e6 movt r3, 0xfff8                                       |     r3 = (r3 & 0xFFFF) | 0xfff80000;
    0x0007b7ea sub.w r2, r2, 0x80000                                 |     r2 -= 0x80000;
    0x0007b7ee movt r8, 0xffff                                       |     r8 = (r8 & 0xFFFF) | 0xffff0000;
    0x0007b7f2 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0007b7f4 b.w 0x7aec2                                           |     goto label_13;
                                                                     | label_91:
    0x0007b7f8 movs r3, 0                                            |     r3 = 0;
    0x0007b7fa ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0007b7fc mov r2, r3                                            |     r2 = r3;
    0x0007b7fe movs r1, 0xe                                          |     r1 = 0xe;
    0x0007b800 str r3, [sp]                                          |     *(sp) = r3;
    0x0007b802 bl 0x29a7c                                            |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0007b806 mov sl, r0                                            |     sl = r0;
    0x0007b808 b 0x7b6da                                             |     goto label_37;
                                                                     | label_39:
    0x0007b80a blx 0x9b44                                            |     fcn_00009b44 ();
                                                                     | label_61:
    0x0007b80e movs r3, 0                                            |     r3 = 0;
    0x0007b810 ldrh r3, [r3, 0x32]                                   |     r3 = *((r3 + 0x32));
    0x0007b812 udf 0xff                                              |     __asm ("udf 0xff");
                                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x7c2d4).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x840fc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000840fc ()                                      | void fcn_000840fc (int16_t arg_0h, int16_t arg_4h, int16_t arg_9h, int16_t arg_ah, int16_t arg_ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_40h;
                                                                 |     int32_t var_44h;
                                                                 |     int32_t var_44h_2;
                                                                 |     int16_t var_64h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000840fc svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00084100 mov r8, r2                                        |     r8 = r2;
    0x00084102 ldr.w r2, [pc, 0x580]                             |     
    0x00084106 mov r7, r3                                        |     r7 = r3;
    0x00084108 mov r4, r1                                        |     r4 = r1;
    0x0008410a mov r6, r0                                        |     r6 = r0;
    0x0008410c ldr.w r3, [pc, 0x578]                             |     r3 = *(0x84688);
    0x00084110 vpush {d8, d9}                                    |     __asm ("vpush {d8, d9}");
    0x00084114 add r2, pc                                        |     r2 = 0x10879e;
    0x00084116 ldrb.w r1, [r1, 0x55]                             |     r1 = *((r1 + 0x55));
    0x0008411a sub sp, 0x6c                                      |     
    0x0008411c ldr r3, [r2, r3]                                  |     
    0x0008411e ldr r3, [r3]                                      |     r3 = imp.atan;
    0x00084120 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x00084122 mov.w r3, 0                                       |     r3 = 0;
    0x00084126 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00084128 beq.w 0x8440c                                     |         goto label_14;
                                                                 |     }
    0x0008412c ldr.w r3, [r4, 0xb8]                              |     r3 = *((r4 + 0xb8));
    0x00084130 cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x00084132 bgt.w 0x843d2                                     |         goto label_15;
                                                                 |     }
    0x00084136 ldr.w fp, [r4, 0x3c]                              |     fp = *((r4 + 0x3c));
                                                                 |     if (r7 != 0) {
    0x0008413a cbz r7, 0x84150                                   |         
    0x0008413c mov r0, r7                                        |         r0 = r7;
    0x0008413e blx 0x9bd8                                        |         r0 = fcn_00009bd8 ();
    0x00084142 cmp r0, 3                                         |         
                                                                 |         if (r0 == 3) {
    0x00084144 beq.w 0x84412                                     |             goto label_16;
                                                                 |         }
    0x00084148 ldr.w r1, [pc, 0x540]                             |         
    0x0008414c add r1, pc                                        |         r1 = 0x1087dc;
    0x0008414e b 0x843d6                                         |         goto label_17;
                                                                 |     }
    0x00084150 ldr.w r3, [pc, 0x53c]                             |     
    0x00084154 add r3, pc                                        |     r3 = 0x1087e8;
                                                                 | label_1:
    0x00084156 ldr r2, [r4, 0x10]                                |     r2 = *((r4 + 0x10));
    0x00084158 lsl.w sl, r8, 4                                   |     sl = r8 << 4;
    0x0008415c movs r1, 0                                        |     r1 = 0;
    0x0008415e ldrb.w r0, [r4, 0x5e]                             |     r0 = *((r4 + 0x5e));
    0x00084162 strb.w r1, [r4, 0x5e]                             |     *((r4 + 0x5e)) = r1;
    0x00084166 add.w r1, r2, sl                                  |     r1 = r2 + sl;
    0x0008416a ldr.w r2, [r2, sl]                                |     r2 = *((r2 + sl));
    0x0008416e ldr.w sb, [r1, 4]                                 |     sb = *((r1 + 4));
    0x00084172 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x00084174 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00084176 ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x00084178 ldr r1, [r4, 0x18]                                |     r1 = *((r4 + 0x18));
    0x0008417a ldr r0, [r4, 0x20]                                |     r0 = *((r4 + 0x20));
    0x0008417c str r2, [sp, 4]                                   |     var_4h = r2;
    0x0008417e ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x00084182 mov r5, r1                                        |     r5 = r1;
    0x00084184 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00084186 vldr d8, [r4, 0x68]                               |     __asm ("vldr d8, [r4, 0x68]");
    0x0008418a vldr d9, [r4, 0x70]                               |     __asm ("vldr d9, [r4, 0x70]");
    0x0008418e ldr r1, [r2]                                      |     r1 = *(r2);
    0x00084190 bic r2, r0, 0x10000000                            |     r2 = BIT_MASK (r0, 0x10000000);
    0x00084194 bic r2, r2, 0x5000                                |     r2 = BIT_MASK (r2, 0x5000);
    0x00084198 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0008419a orr r2, r2, 0x200                                 |     r2 |= 0x200;
    0x0008419e orr r2, r2, 1                                     |     r2 |= 1;
    0x000841a2 str r2, [r4, 0x20]                                |     *((r4 + 0x20)) = r2;
    0x000841a4 orr r2, r5, 6                                     |     r2 = r5 | 6;
    0x000841a8 str r2, [r4, 0x18]                                |     *((r4 + 0x18)) = r2;
    0x000841aa ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x000841ac bic r2, r2, 1                                     |     r2 = BIT_MASK (r2, 1);
    0x000841b0 str r2, [r4, 0x24]                                |     *((r4 + 0x24)) = r2;
    0x000841b2 ldrb r2, [r1, 0xc]                                |     r2 = *((r1 + 0xc));
    0x000841b4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000841b6 bne.w 0x843cc                                     |         goto label_18;
                                                                 |     }
    0x000841ba ldrb r2, [r1, 0x10]                               |     r2 = *((r1 + 0x10));
    0x000841bc subs r2, 0                                        |     
    0x000841be it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x000841c0 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x000841c2 str r2, [sp, 0x1c]                                |     var_1ch = r2;
                                                                 | label_0:
    0x000841c4 ldr.w r2, [pc, 0x4cc]                             |     r2 = *(0x00084694);
    0x000841c8 mov r1, r6                                        |     r1 = r6;
    0x000841ca ldr r5, [r4, 0x14]                                |     r5 = *((r4 + 0x14));
    0x000841cc mov r0, r4                                        |     r0 = r4;
    0x000841ce add r2, pc                                        |     r2 += pc;
    0x000841d0 str r5, [sp, 0x14]                                |     var_14h = r5;
    0x000841d2 bl 0x84088                                        |     fcn_00084088 (r0, r1);
    0x000841d6 str.w fp, [r4, 0x3c]                              |     __asm ("str.w fp, [r4, 0x3c]");
    0x000841da mov r5, r0                                        |     r5 = r0;
    0x000841dc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000841de bne.w 0x84428                                     |         goto label_19;
                                                                 |     }
    0x000841e2 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x000841e4 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x000841e6 add.w r3, r3, r5, lsl 4                           |     r3 += (r5 << 4);
    0x000841ea ldr.w fp, [r3, 4]                                 |     fp = *((r3 + 4));
    0x000841ee str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     if (r7 != 0) {
    0x000841f0 cbz r7, 0x84228                                   |         
    0x000841f2 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
    0x000841f6 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x000841fa ldr r3, [r3]                                      |         r3 = *(r3);
    0x000841fc ldr r0, [r3, 0x40]                                |         r0 = *((r3 + 0x40));
    0x000841fe vstr d16, [sp, 0x30]                              |         __asm ("vstr d16, [sp, 0x30]");
    0x00084202 ldr r3, [r0]                                      |         r3 = *(r0);
                                                                 |         if (r3 != 0) {
    0x00084204 cbz r3, 0x84220                                   |             
    0x00084206 ldr r3, [r3, 0x18]                                |             r3 = *((r3 + 0x18));
    0x00084208 add r1, sp, 0x30                                  |             r1 += var_30h;
    0x0008420a blx r3                                            |             r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x0008420c cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x0008420e bne.w 0x8445c                                     |                 goto label_20;
                                                                 |             }
    0x00084212 ldrd r2, r3, [sp, 0x30]                           |             __asm ("ldrd r2, r3, [var_30h]");
    0x00084216 cmp r2, 1                                         |             
    0x00084218 sbcs r3, r3, 0                                    |             __asm ("sbcs r3, r3, 0");
                                                                 |             if (r2 >= 1) {
    0x0008421c bge.w 0x8445c                                     |                 goto label_20;
                                                                 |             }
                                                                 |         }
    0x00084220 ldr r3, [r4, 0x18]                                |         r3 = *((r4 + 0x18));
    0x00084222 orr r3, r3, 8                                     |         r3 |= 8;
    0x00084226 str r3, [r4, 0x18]                                |         *((r4 + 0x18)) = r3;
                                                                 |     }
    0x00084228 mov r0, sb                                        |     r0 = sb;
    0x0008422a bl 0x15978                                        |     fcn_00015978 (r0, r1);
    0x0008422e ldr r3, [r4, 0x64]                                |     r3 = *((r4 + 0x64));
    0x00084230 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00084232 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00084234 bne.w 0x84478                                     |         goto label_21;
                                                                 |     }
                                                                 | label_4:
    0x00084238 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0008423a mov r0, fp                                        |     r0 = fp;
    0x0008423c add r3, sl                                        |     r3 += sl;
    0x0008423e ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00084240 ldr r1, [r3, 0x50]                                |     r1 = *((r3 + 0x50));
    0x00084242 bl 0x16590                                        |     fcn_00016590 (r0, r1);
    0x00084246 movs r1, 0                                        |     r1 = 0;
    0x00084248 mov r0, sb                                        |     r0 = sb;
    0x0008424a bl 0x16738                                        |     r0 = fcn_00016738 (r0, r1);
    0x0008424e mov r1, r0                                        |     r1 = r0;
    0x00084250 mov r0, fp                                        |     r0 = fp;
    0x00084252 bl 0x16738                                        |     fcn_00016738 (r0, r1);
    0x00084256 movs r1, 0x21                                     |     r1 = 0x21;
    0x00084258 mov r0, fp                                        |     r0 = fp;
    0x0008425a bl 0x1768c                                        |     fcn_0001768c (r0, r1);
    0x0008425e ldr.w r2, [pc, 0x438]                             |     r2 = *(0x00084698);
    0x00084262 mov r1, r6                                        |     r1 = r6;
    0x00084264 mov r0, r4                                        |     r0 = r4;
    0x00084266 add r2, pc                                        |     r2 += pc;
    0x00084268 bl 0x83fb0                                        |     r0 = fcn_00083fb0 (r0, r1, r2);
    0x0008426c mov r5, r0                                        |     r5 = r0;
    0x0008426e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084270 bne.w 0x84384                                     |         goto label_3;
                                                                 |     }
    0x00084274 clz r8, r7                                        |     r8 &= r7;
    0x00084278 mov r2, r0                                        |     r2 = r0;
    0x0008427a lsr.w r8, r8, 5                                   |     r8 >>= 5;
    0x0008427e mov r0, sb                                        |     r0 = sb;
    0x00084280 lsl.w r1, r8, 1                                   |     r1 = r8 << 1;
    0x00084284 bl 0x4b890                                        |     r0 = fcn_0004b890 (r0, r1, r2, r3);
    0x00084288 mov r5, r0                                        |     r5 = r0;
    0x0008428a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008428c bne 0x84384                                       |         goto label_3;
                                                                 |     }
    0x0008428e ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x00084292 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00084294 ldrb r1, [r3, 5]                                  |     r1 = *((r3 + 5));
    0x00084296 cmp r1, 5                                         |     
    0x00084298 ite ne                                            |     
                                                                 |     if (r1 == 5) {
    0x0008429a movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r1 != 5) {
    0x0008429c andeq r3, r8, 1                                   |         r3 = r8 & 1;
                                                                 |     }
    0x000842a0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000842a2 bne.w 0x844a8                                     |         goto label_22;
                                                                 |     }
                                                                 | label_6:
    0x000842a6 ldr r1, [r2, 0x24]                                |     r1 = *((r2 + 0x24));
    0x000842a8 movs r3, 0                                        |     r3 = 0;
    0x000842aa ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000842ac mov r0, fp                                        |     r0 = fp;
    0x000842ae bl 0x19d84                                        |     r0 = fcn_00019d84 (r0, r1, r2, r3);
    0x000842b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000842b4 bne.w 0x844a4                                     |         goto label_23;
                                                                 |     }
    0x000842b8 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000842ba cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000842bc beq.w 0x84492                                     |         goto label_24;
                                                                 |     }
                                                                 | label_5:
    0x000842c0 ldrb.w r3, [r4, 0x57]                             |     r3 = *((r4 + 0x57));
    0x000842c4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000842c6 bne.w 0x844a4                                     |         goto label_23;
                                                                 |     }
    0x000842ca ldrsb.w r1, [r4, 0x5a]                            |     r1 = *((r4 + 0x5a));
    0x000842ce cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x000842d0 blt.w 0x844ac                                     |         goto label_25;
                                                                 |     }
                                                                 | label_7:
    0x000842d4 mov r0, fp                                        |     r0 = fp;
    0x000842d6 bl 0x164dc                                        |     fcn_000164dc (r0, r1);
    0x000842da ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000842dc mov r1, r6                                        |     r1 = r6;
    0x000842de ldr.w r8, [sp, 0x20]                              |     r8 = var_20h;
    0x000842e2 mov r0, r4                                        |     r0 = r4;
    0x000842e4 ldr r2, [pc, 0x3b4]                               |     
    0x000842e6 strb.w r3, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r3;
    0x000842ea mov r3, r8                                        |     r3 = r8;
    0x000842ec add r2, pc                                        |     r2 = 0x10898c;
    0x000842ee bl 0x84088                                        |     r0 = fcn_00084088 (r0, r1);
    0x000842f2 mov r5, r0                                        |     r5 = r0;
    0x000842f4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000842f6 bne 0x84384                                       |         goto label_3;
                                                                 |     }
    0x000842f8 ldr r2, [pc, 0x3a4]                               |     
    0x000842fa mov r3, r8                                        |     r3 = r8;
    0x000842fc mov r1, r6                                        |     r1 = r6;
    0x000842fe mov r0, r4                                        |     r0 = r4;
    0x00084300 add r2, pc                                        |     r2 = 0x1089a4;
    0x00084302 bl 0x84088                                        |     r0 = fcn_00084088 (r0, r1);
    0x00084306 mov r5, r0                                        |     r5 = r0;
    0x00084308 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008430a bne 0x84384                                       |         goto label_3;
                                                                 |     }
    0x0008430c ldr r2, [pc, 0x394]                               |     
    0x0008430e mov r3, r8                                        |     r3 = r8;
    0x00084310 strb.w r0, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r0;
    0x00084314 mov r1, r6                                        |     r1 = r6;
    0x00084316 mov r0, r4                                        |     r0 = r4;
    0x00084318 add r2, pc                                        |     r2 = 0x1089c0;
    0x0008431a bl 0x84088                                        |     fcn_00084088 (r0, r1);
    0x0008431e ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00084320 mov r5, r0                                        |     r5 = r0;
    0x00084322 bic r3, r3, 4                                     |     r3 = BIT_MASK (r3, 4);
    0x00084326 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
                                                                 |     if (r0 != 0) {
    0x00084328 cbnz r0, 0x84384                                  |         goto label_3;
                                                                 |     }
    0x0008432a ldr r2, [pc, 0x37c]                               |     
    0x0008432c mov r3, r8                                        |     r3 = r8;
    0x0008432e mov r1, r6                                        |     r1 = r6;
    0x00084330 mov r0, r4                                        |     r0 = r4;
    0x00084332 add r2, pc                                        |     r2 = 0x1089e0;
    0x00084334 bl 0x84088                                        |     r0 = fcn_00084088 (r0, r1);
    0x00084338 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 != 0) {
    0x0008433a cbnz r0, 0x84384                                  |         goto label_3;
                                                                 |     }
    0x0008433c ldr r3, [pc, 0x36c]                               |     
    0x0008433e add r6, sp, 0x2c                                  |     r6 += var_2ch;
    0x00084340 add r3, pc                                        |     r3 = 0x1089f0;
    0x00084342 add.w sl, r3, 0x24c                               |     sl = r3 + 0x24c;
    0x00084346 addw r8, r3, 0x256                                |     __asm ("addw r8, r3, aav.0x000000ff");
                                                                 |     do {
    0x0008434a ldrb.w r5, [sl]                                   |         r5 = *(sl);
    0x0008434e mov r2, r6                                        |         r2 = r6;
    0x00084350 mov r0, sb                                        |         r0 = sb;
    0x00084352 mov r1, r5                                        |         r1 = r5;
    0x00084354 bl 0x1653c                                        |         fcn_0001653c (r0, r1, r2);
    0x00084358 ldrb.w r2, [sl, 1]                                |         r2 = *((sl + 1));
    0x0008435c mov r1, r5                                        |         r1 = r5;
    0x0008435e ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00084360 mov r0, fp                                        |         r0 = fp;
    0x00084362 add r2, r3                                        |         r2 += r3;
    0x00084364 bl 0x4bfa0                                        |         r0 = fcn_0004bfa0 (r0, r1, r2);
    0x00084368 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0008436a bne.w 0x844b6                                     |             goto label_26;
                                                                 |         }
    0x0008436e add.w sl, sl, 2                                   |         sl += 2;
    0x00084372 cmp r8, sl                                        |         
    0x00084374 bne 0x8434a                                       |         
                                                                 |     } while (r8 != sl);
    0x00084376 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00084378 beq.w 0x844be                                     |         goto label_27;
                                                                 |     }
    0x0008437c mov r0, fp                                        |     r0 = fp;
    0x0008437e bl 0x506b4                                        |     r0 = fcn_000506b4 (r0, r1);
    0x00084382 mov r5, r0                                        |     r5 = r0;
                                                                 | label_3:
    0x00084384 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00084386 movs r6, 0                                        |     r6 = 0;
    0x00084388 mov r2, r6                                        |     r2 = r6;
    0x0008438a mov.w r1, -1                                      |     r1 = -1;
    0x0008438e mov r0, sb                                        |     r0 = sb;
    0x00084390 vstr d8, [r4, 0x68]                               |     __asm ("vstr d8, [r4, 0x68]");
    0x00084394 vstr d9, [r4, 0x70]                               |     __asm ("vstr d9, [r4, 0x70]");
    0x00084398 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x0008439a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0008439c strb.w r6, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r6;
    0x000843a0 str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x000843a2 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000843a4 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x000843a6 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000843a8 strb.w r3, [r4, 0x5e]                             |     *((r4 + 0x5e)) = r3;
    0x000843ac movs r3, 1                                        |     r3 = 1;
    0x000843ae bl 0x19d84                                        |     fcn_00019d84 (r0, r1, r2, r3);
    0x000843b2 ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x000843b4 movs r3, 1                                        |     r3 = 1;
    0x000843b6 strb.w r3, [r4, 0x55]                             |     *((r4 + 0x55)) = r3;
    0x000843ba ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x000843bc bl 0x51358                                        |     fcn_00051358 (r0);
    0x000843c0 str r6, [r7, 4]                                   |     *((r7 + 4)) = r6;
    0x000843c2 str r6, [r7, 0xc]                                 |     *((r7 + 0xc)) = r6;
                                                                 | label_2:
    0x000843c4 mov r0, r4                                        |     r0 = r4;
    0x000843c6 bl 0x1741c                                        |     fcn_0001741c (r0);
    0x000843ca b 0x843ec                                         |     goto label_28;
                                                                 | label_18:
    0x000843cc movs r2, 1                                        |     r2 = 1;
    0x000843ce str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x000843d0 b 0x841c4                                         |     goto label_0;
                                                                 | label_15:
    0x000843d2 ldr r1, [pc, 0x2dc]                               |     
    0x000843d4 add r1, pc                                        |     r1 = 0x108a8a;
                                                                 |     do {
                                                                 | label_17:
    0x000843d6 mov r0, r4                                        |         r0 = r4;
    0x000843d8 bl 0x1e948                                        |         fcn_0001e948 (r0, r1);
    0x000843dc ldr r1, [r6]                                      |         r1 = *(r6);
    0x000843de mov r7, r0                                        |         r7 = r0;
                                                                 |         if (r1 != 0) {
    0x000843e0 cbz r1, 0x843e8                                   |             
    0x000843e2 mov r0, r4                                        |             r0 = r4;
    0x000843e4 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x000843e8 movs r5, 1                                        |         r5 = 1;
    0x000843ea str r7, [r6]                                      |         *(r6) = r7;
                                                                 | label_28:
    0x000843ec ldr r2, [pc, 0x2c4]                               |         
    0x000843ee ldr r3, [pc, 0x298]                               |         r3 = *(0x8468a);
    0x000843f0 add r2, pc                                        |         r2 = 0x108aa8;
    0x000843f2 ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x000843f4 ldr r2, [r3]                                      |         r2 = imp.atan;
    0x000843f6 ldr r3, [sp, 0x64]                                |         r3 = var_64h;
    0x000843f8 eors r2, r3                                       |         r2 ^= r3;
    0x000843fa mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000843fe bne 0x844ba                                       |             goto label_29;
                                                                 |         }
    0x00084400 mov r0, r5                                        |         r0 = r5;
    0x00084402 add sp, 0x6c                                      |         
    0x00084404 vpop {d8, d9}                                     |         __asm ("vpop {d8, d9}");
    0x00084408 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_14:
    0x0008440c ldr r1, [pc, 0x2a8]                               |         
    0x0008440e add r1, pc                                        |         r1 = 0x108aca;
    0x00084410 b 0x843d6                                         |         
                                                                 |     } while (1);
                                                                 | label_16:
    0x00084412 mov r0, r7                                        |     r0 = r7;
    0x00084414 blx 0x9688                                        |     fcn_00009688 ();
    0x00084418 ldr r2, [r4, 0x3c]                                |     r2 = *((r4 + 0x3c));
    0x0008441a mov r3, r0                                        |     r3 = r0;
    0x0008441c bic r2, r2, 1                                     |     r2 = BIT_MASK (r2, 1);
    0x00084420 orr r2, r2, 6                                     |     r2 |= 6;
    0x00084424 str r2, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r2;
    0x00084426 b 0x84156                                         |     goto label_1;
                                                                 | label_19:
    0x00084428 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0008442a mov r0, sb                                        |     r0 = sb;
    0x0008442c ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0008442e mov.w r1, -1                                      |     r1 = -1;
    0x00084432 vstr d8, [r4, 0x68]                               |     __asm ("vstr d8, [r4, 0x68]");
    0x00084436 vstr d9, [r4, 0x70]                               |     __asm ("vstr d9, [r4, 0x70]");
    0x0008443a str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x0008443c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0008443e strb.w r2, [r4, 0x5e]                             |     *((r4 + 0x5e)) = r2;
    0x00084442 movs r2, 0                                        |     r2 = 0;
    0x00084444 strb.w r2, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r2;
    0x00084448 str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x0008444a ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0008444c str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x0008444e movs r3, 1                                        |     r3 = 1;
    0x00084450 bl 0x19d84                                        |     fcn_00019d84 (r0, r1, r2, r3);
    0x00084454 movs r3, 1                                        |     r3 = 1;
    0x00084456 strb.w r3, [r4, 0x55]                             |     *((r4 + 0x55)) = r3;
    0x0008445a b 0x843c4                                         |     goto label_2;
                                                                 | label_20:
    0x0008445c ldr r1, [pc, 0x25c]                               |     
    0x0008445e mov r0, r4                                        |     r0 = r4;
    0x00084460 add r1, pc                                        |     r1 = 0x108b20;
    0x00084462 bl 0x1e948                                        |     fcn_0001e948 (r0, r1);
    0x00084466 ldr r1, [r6]                                      |     r1 = *(r6);
    0x00084468 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r1 != 0) {
    0x0008446a cbz r1, 0x84472                                   |         
    0x0008446c mov r0, r4                                        |         r0 = r4;
    0x0008446e bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x00084472 str r5, [r6]                                      |     *(r6) = r5;
    0x00084474 movs r5, 1                                        |     r5 = 1;
    0x00084476 b 0x84384                                         |     goto label_3;
                                                                 | label_21:
    0x00084478 add r3, sp, 0x2c                                  |     r3 += var_2ch;
    0x0008447a mov r1, r8                                        |     r1 = r8;
    0x0008447c add r2, sp, 0x30                                  |     r2 += var_30h;
    0x0008447e mov r0, r4                                        |     r0 = r4;
    0x00084480 blx 0x9678                                        |     fcn_00009678 ();
    0x00084484 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00084486 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00084488 beq.w 0x84238                                     |         goto label_4;
                                                                 |     }
    0x0008448c movs r3, 0                                        |     r3 = 0;
    0x0008448e str r3, [r4, 0x64]                                |     *((r4 + 0x64)) = r3;
    0x00084490 b 0x84238                                         |     goto label_4;
                                                                 | label_24:
    0x00084492 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00084494 mov r0, fp                                        |     r0 = fp;
    0x00084496 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00084498 ldr r1, [r4, 0x64]                                |     r1 = *((r4 + 0x64));
    0x0008449a bl 0x19d84                                        |     r0 = fcn_00019d84 (r0, r1, r2, r3);
    0x0008449e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000844a0 beq.w 0x842c0                                     |         goto label_5;
                                                                 |     }
                                                                 | label_23:
    0x000844a4 movs r5, 7                                        |     r5 = 7;
    0x000844a6 b 0x84384                                         |     goto label_3;
                                                                 | label_22:
    0x000844a8 str r0, [r4, 0x64]                                |     *((r4 + 0x64)) = r0;
    0x000844aa b 0x842a6                                         |     goto label_6;
                                                                 | label_25:
    0x000844ac mov r0, sb                                        |     r0 = sb;
    0x000844ae bl 0x159e4                                        |     r0 = fcn_000159e4 (r0);
    0x000844b2 mov r1, r0                                        |     r1 = r0;
    0x000844b4 b 0x842d4                                         |     goto label_7;
                                                                 | label_26:
    0x000844b6 mov r5, r0                                        |     r5 = r0;
    0x000844b8 b 0x84384                                         |     goto label_3;
                                                                 | label_29:
    0x000844ba blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_27:
    0x000844be ldrb.w r3, [sb, 9]                                |     r3 = *((sb + 9));
                                                                 |     if (r3 != 0) {
    0x000844c2 cbz r3, 0x844da                                   |         
    0x000844c4 ldr.w r3, [sb, 0xc]                               |         r3 = *((sb + 0xc));
    0x000844c8 adds r3, 1                                        |         r3++;
    0x000844ca str.w r3, [sb, 0xc]                               |         __asm ("str.w r3, [sb, 0xc]");
    0x000844ce ldrb.w r3, [sb, 0xa]                              |         r3 = *((sb + 0xa));
                                                                 |         if (r3 != 0) {
    0x000844d2 cbnz r3, 0x844da                                  |             goto label_30;
                                                                 |         }
    0x000844d4 mov r0, sb                                        |         r0 = sb;
    0x000844d6 bl 0x11258                                        |         fcn_00011258 (r0);
                                                                 |     }
                                                                 | label_30:
    0x000844da ldrb.w r3, [fp, 9]                                |     r3 = *(arg_9h);
                                                                 |     if (r3 != 0) {
    0x000844de cbz r3, 0x844f6                                   |         
    0x000844e0 ldr.w r3, [fp, 0xc]                               |         r3 = *(arg_ch);
    0x000844e4 adds r3, 1                                        |         r3++;
    0x000844e6 str.w r3, [fp, 0xc]                               |         __asm ("str.w r3, [arg_ch]");
    0x000844ea ldrb.w r3, [fp, 0xa]                              |         r3 = *(arg_ah);
                                                                 |         if (r3 != 0) {
    0x000844ee cbnz r3, 0x844f6                                  |             goto label_31;
                                                                 |         }
    0x000844f0 mov r0, fp                                        |         r0 = fp;
    0x000844f2 bl 0x11258                                        |         fcn_00011258 (r0);
                                                                 |     }
                                                                 | label_31:
    0x000844f6 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x000844fa ldr r3, [r3]                                      |     r3 = *(r3);
    0x000844fc ldr r0, [r3, 0x40]                                |     r0 = *((r3 + 0x40));
    0x000844fe ldr r3, [r0]                                      |     r3 = *(r0);
    0x00084500 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00084502 beq.w 0x8463a                                     |         goto label_32;
                                                                 |     }
    0x00084506 ldr.w r5, [fp, 4]                                 |     r5 = *(arg_4h);
    0x0008450a add r6, sp, 0x30                                  |     r6 += var_30h;
    0x0008450c ldr.w r8, [r3, 0x28]                              |     r8 = *((r3 + 0x28));
    0x00084510 mov r2, r6                                        |     r2 = r6;
    0x00084512 movs r1, 0xb                                      |     r1 = 0xb;
    0x00084514 ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x00084516 ldr r5, [r5, 0x30]                                |     r5 = *((r5 + 0x30));
    0x00084518 asrs r7, r3, 0x1f                                 |     r7 = r3 >> 0x1f;
    0x0008451a umull ip, r3, r3, r5                              |     ip:r3 = r3 * r5;
    0x0008451e mla r3, r5, r7, r3                                |     __asm ("mla r3, r5, r7, r3");
    0x00084522 strd ip, r3, [sp, 0x30]                           |     __asm ("strd ip, r3, [var_30h]");
    0x00084526 blx r8                                            |     r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00084528 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 != 0) {
    0x0008452a cbz r0, 0x84530                                   |         
    0x0008452c cmp r0, 0xc                                       |         
                                                                 |         if (r0 != 0xc) {
    0x0008452e bne 0x845e4                                       |             goto label_11;
                                                                 |         }
                                                                 |     }
                                                                 | label_10:
    0x00084530 movs r2, 0x30                                     |     r2 = 0x30;
    0x00084532 movs r1, 0                                        |     r1 = 0;
    0x00084534 mov r0, r6                                        |     r0 = r6;
    0x00084536 blx 0x97d4                                        |     fcn_000097d4 ();
    0x0008453a ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0008453e movs r1, 1                                        |     r1 = 1;
    0x00084540 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00084542 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x00084546 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00084548 ldrsh.w r2, [r3, 0x96]                            |     r2 = *((r3 + 0x96));
    0x0008454c ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00084550 str.w sb, [sp, 0x34]                              |     __asm ("str.w sb, [var_34h]");
    0x00084554 strd r3, fp, [sp, 0x44]                           |     __asm ("strd r3, fp, [var_0hx44]");
    0x00084558 ldrsh.w r3, [r0, 0x96]                            |     r3 = *((r0 + 0x96));
    0x0008455c str r1, [sp, 0x40]                                |     var_40h = r1;
    0x0008455e cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00084560 beq 0x84576                                       |         
    0x00084562 ldr.w r3, [r0, 0xe4]                              |         r3 = *((r0 + 0xe4));
    0x00084566 strh.w r2, [r0, 0x96]                             |         *((r0 + 0x96)) = r2;
                                                                 |         if (r3 == 0) {
    0x0008456a cbz r3, 0x84576                                   |             goto label_33;
                                                                 |         }
    0x0008456c ldr.w r1, [r0, 0xa8]                              |         r1 = *((r0 + 0xa8));
    0x00084570 ldr.w r0, [r0, 0xec]                              |         r0 = *((r0 + 0xec));
    0x00084574 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
                                                                 |     }
                                                                 | label_33:
    0x00084576 mvn r1, 0x80000000                                |     r1 = ~0x80000000;
    0x0008457a mov r0, r6                                        |     r0 = r6;
    0x0008457c blx 0x9dac                                        |     fcn_00009dac ();
    0x00084580 mov r0, r6                                        |     r0 = r6;
    0x00084582 blx 0x985c                                        |     r0 = fcn_0000985c ();
    0x00084586 mov r5, r0                                        |     r5 = r0;
    0x00084588 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008458a bne 0x8463e                                       |         goto label_34;
                                                                 |     }
    0x0008458c ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x00084590 ldrh r3, [r2, 0x18]                               |     r3 = *((r2 + 0x18));
    0x00084592 bic r3, r3, 2                                     |     r3 = BIT_MASK (r3, 2);
    0x00084596 strh r3, [r2, 0x18]                               |     *((r2 + 0x18)) = r3;
    0x00084598 ldrb.w r3, [fp, 9]                                |     r3 = *(arg_9h);
                                                                 |     if (r3 != 0) {
    0x0008459c cbnz r3, 0x8460c                                  |         goto label_35;
                                                                 |     }
    0x0008459e ldrb.w r3, [sb, 9]                                |     r3 = *((sb + 9));
    0x000845a2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000845a4 bne 0x8465e                                       |         goto label_36;
                                                                 |     }
                                                                 | label_8:
    0x000845a6 mov r0, fp                                        |     r0 = fp;
    0x000845a8 bl 0x506b4                                        |     r0 = fcn_000506b4 (r0, r1);
    0x000845ac mov r5, r0                                        |     r5 = r0;
    0x000845ae cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000845b0 bne.w 0x84384                                     |         goto label_3;
                                                                 |     }
    0x000845b4 mov r0, fp                                        |     r0 = fp;
    0x000845b6 bl 0x159e4                                        |     r0 = fcn_000159e4 (r0);
    0x000845ba mov r1, r0                                        |     r1 = r0;
    0x000845bc mov r0, sb                                        |     r0 = sb;
    0x000845be bl 0x164dc                                        |     fcn_000164dc (r0, r1);
    0x000845c2 mov r0, fp                                        |     r0 = fp;
    0x000845c4 bl 0x15978                                        |     fcn_00015978 (r0, r1);
    0x000845c8 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x000845cc mov r2, r0                                        |     r2 = r0;
    0x000845ce mov r0, sb                                        |     r0 = sb;
    0x000845d0 ldr r1, [r3, 0x24]                                |     r1 = *((r3 + 0x24));
    0x000845d2 movs r3, 1                                        |     r3 = 1;
    0x000845d4 bl 0x19d84                                        |     r0 = fcn_00019d84 (r0, r1, r2, r3);
    0x000845d8 mov r5, r0                                        |     r5 = r0;
    0x000845da b 0x84384                                         |     goto label_3;
                                                                 | label_12:
    0x000845dc ldr.w r0, [r3, 0xf4]                              |     r0 = *((r3 + 0xf4));
    0x000845e0 bl 0x136cc                                        |     fcn_000136cc (r0);
                                                                 | label_11:
    0x000845e4 ldrb.w r3, [fp, 9]                                |     r3 = *(arg_9h);
                                                                 |     if (r3 != 0) {
    0x000845e8 cbnz r3, 0x8460c                                  |         goto label_35;
                                                                 |     }
    0x000845ea ldrb.w r3, [sb, 9]                                |     r3 = *((sb + 9));
    0x000845ee cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000845f0 beq.w 0x84384                                     |         goto label_3;
                                                                 |     }
    0x000845f4 ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
    0x000845f8 subs r3, 1                                        |     r3--;
    0x000845fa str.w r3, [sb, 0xc]                               |     __asm ("str.w r3, [sb, 0xc]");
    0x000845fe cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00084600 bne.w 0x84384                                     |         goto label_3;
                                                                 |     }
    0x00084604 mov r0, sb                                        |     r0 = sb;
    0x00084606 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0008460a b 0x84384                                         |     goto label_3;
                                                                 | label_35:
    0x0008460c ldr.w r3, [fp, 0xc]                               |     r3 = *(arg_ch);
    0x00084610 subs r3, 1                                        |     r3--;
    0x00084612 str.w r3, [fp, 0xc]                               |     __asm ("str.w r3, [arg_ch]");
                                                                 |     if (r3 == 0) {
    0x00084616 cbz r3, 0x84632                                   |         goto label_37;
                                                                 |     }
                                                                 | label_9:
    0x00084618 ldrb.w r3, [sb, 9]                                |     r3 = *((sb + 9));
                                                                 |     if (r3 != 0) {
    0x0008461c cbz r3, 0x8462a                                   |         
    0x0008461e ldr.w r3, [sb, 0xc]                               |         r3 = *((sb + 0xc));
    0x00084622 subs r3, 1                                        |         r3--;
    0x00084624 str.w r3, [sb, 0xc]                               |         __asm ("str.w r3, [sb, 0xc]");
                                                                 |         if (r3 == 0) {
    0x00084628 cbz r3, 0x84674                                   |             goto label_38;
                                                                 |         }
                                                                 |     }
    0x0008462a cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0008462c bne.w 0x84384                                     |         goto label_3;
                                                                 |     }
    0x00084630 b 0x845a6                                         |     goto label_8;
                                                                 | label_37:
    0x00084632 mov r0, fp                                        |     r0 = fp;
    0x00084634 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00084638 b 0x84618                                         |     goto label_9;
                                                                 | label_32:
    0x0008463a add r6, sp, 0x30                                  |     r6 += var_30h;
    0x0008463c b 0x84530                                         |     goto label_10;
                                                                 | label_34:
    0x0008463e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00084640 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00084642 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00084644 ldrb r2, [r3, 0xc]                                |     r2 = *((r3 + 0xc));
    0x00084646 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00084648 bne 0x845e4                                       |         goto label_11;
                                                                 |     }
    0x0008464a ldr r2, [r3, 0x6c]                                |     r2 = *((r3 + 0x6c));
    0x0008464c ldr r1, [r3, 0x60]                                |     r1 = *((r3 + 0x60));
    0x0008464e adds r2, 1                                        |     r2++;
    0x00084650 str r2, [r3, 0x6c]                                |     *((r3 + 0x6c)) = r2;
    0x00084652 movs r2, 1                                        |     r2 = 1;
                                                                 | label_13:
    0x00084654 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00084656 beq 0x845dc                                       |         goto label_12;
                                                                 |     }
    0x00084658 str r2, [r1, 0x10]                                |     *((r1 + 0x10)) = r2;
    0x0008465a ldr r1, [r1, 0x2c]                                |     r1 = *((r1 + 0x2c));
    0x0008465c b 0x84654                                         |     goto label_13;
                                                                 | label_36:
    0x0008465e ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
    0x00084662 subs r3, 1                                        |     r3--;
    0x00084664 str.w r3, [sb, 0xc]                               |     __asm ("str.w r3, [sb, 0xc]");
    0x00084668 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0008466a bne 0x845a6                                       |         goto label_8;
                                                                 |     }
    0x0008466c mov r0, sb                                        |     r0 = sb;
    0x0008466e bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00084672 b 0x845a6                                         |     goto label_8;
                                                                 | label_38:
    0x00084674 mov r0, sb                                        |     r0 = sb;
    0x00084676 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0008467a cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0008467c bne.w 0x84384                                     |         goto label_3;
                                                                 |     }
    0x00084680 b 0x845a6                                         |     goto label_8;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x85c90 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00085c90 ()                                      | void fcn_00085c90 (int16_t arg_120h, int16_t arg_110h, arithmetic arg1) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     r0 = arg1;
    0x00085c90 push {r1, r2, r3}                                 |     
    0x00085c92 ldr r2, [pc, 0xb4]                                |     
    0x00085c94 ldr r3, [pc, 0xb4]                                |     r3 = *(0x85d4c);
    0x00085c96 push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x00085c9a add r2, pc                                        |     r2 = 0x10b9e8;
    0x00085c9c ldr r7, [r0, 0x24]                                |     r7 = *((r0 + 0x24));
    0x00085c9e sub sp, 0x5c                                      |     
    0x00085ca0 ldr r3, [r2, r3]                                  |     
    0x00085ca2 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00085ca4 ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x00085ca6 ldr r3, [r3]                                      |     r3 = imp.atan;
    0x00085ca8 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00085caa mov.w r3, 0                                       |     r3 = 0;
    0x00085cae ldr.w sb, [r5, 0x18]                              |     sb = *((r5 + 0x18));
    0x00085cb2 cbz r7, 0x85cd2                                   |     
                                                                 |     while (1) {
                                                                 | label_0:
    0x00085cb4 ldr r2, [pc, 0x98]                                |         
    0x00085cb6 ldr r3, [pc, 0x94]                                |         r3 = *(0x85d4e);
    0x00085cb8 add r2, pc                                        |         r2 = 0x10ba0c;
    0x00085cba ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x00085cbc ldr r2, [r3]                                      |         r2 = imp.atan;
    0x00085cbe ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x00085cc0 eors r2, r3                                       |         r2 ^= r3;
    0x00085cc2 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00085cc6 bne 0x85d44                                       |             goto label_1;
                                                                 |         }
    0x00085cc8 add sp, 0x5c                                      |         
    0x00085cca pop.w {r4, r5, r6, r7, r8, sb, sl, lr}            |         
    0x00085cce add sp, 0xc                                       |         
    0x00085cd0 bx lr                                             |         return;
    0x00085cd2 add r2, sp, 0x80                                  |         r2 += var_80h;
    0x00085cd4 mov r4, r0                                        |         r4 = r0;
    0x00085cd6 mov r0, r5                                        |         r0 = r5;
    0x00085cd8 str r2, [sp, 4]                                   |         var_4h = r2;
    0x00085cda bl 0x1d4b0                                        |         r0 = fcn_0001d4b0 (r0);
    0x00085cde mov r6, r0                                        |         r6 = r0;
                                                                 |         if (r0 == 0) {
    0x00085ce0 cbz r0, 0x85d32                                   |             goto label_2;
                                                                 |         }
    0x00085ce2 ldrb r3, [r4, 0x12]                               |         r3 = *((r4 + 0x12));
    0x00085ce4 add.w sl, r4, 0xc4                                |         sl = r4 + 0xc4;
    0x00085ce8 add.w r8, sp, 8                                   |         r8 += var_8h;
    0x00085cec movs r2, 0x4c                                     |         r2 = 0x4c;
    0x00085cee mov r1, sl                                        |         r1 = sl;
    0x00085cf0 mov r0, r8                                        |         r0 = r8;
    0x00085cf2 adds r3, 1                                        |         r3++;
    0x00085cf4 strb r3, [r4, 0x12]                               |         *((r4 + 0x12)) = r3;
    0x00085cf6 blx 0x9e2c                                        |         fcn_00009e2c ();
    0x00085cfa movs r2, 0x4c                                     |         r2 = 0x4c;
    0x00085cfc mov r1, r7                                        |         r1 = r7;
    0x00085cfe mov r0, sl                                        |         r0 = sl;
    0x00085d00 blx 0x97d4                                        |         fcn_000097d4 ();
    0x00085d04 ldr r3, [r5, 0x18]                                |         r3 = *((r5 + 0x18));
    0x00085d06 mov r1, r6                                        |         r1 = r6;
    0x00085d08 mov r0, r4                                        |         r0 = r4;
    0x00085d0a orr r3, r3, 2                                     |         r3 |= 2;
    0x00085d0e str r3, [r5, 0x18]                                |         *((r5 + 0x18)) = r3;
    0x00085d10 bl 0x71754                                        |         fcn_00071754 (r0, r1, r2, r3, r4, r5, r6);
    0x00085d14 mov r1, r6                                        |         r1 = r6;
    0x00085d16 mov r0, r5                                        |         r0 = r5;
    0x00085d18 str.w sb, [r5, 0x18]                              |         __asm ("str.w sb, [r5, 0x18]");
    0x00085d1c bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x00085d20 movs r2, 0x4c                                     |         r2 = 0x4c;
    0x00085d22 mov r1, r8                                        |         r1 = r8;
    0x00085d24 mov r0, sl                                        |         r0 = sl;
    0x00085d26 blx 0x9e2c                                        |         fcn_00009e2c ();
    0x00085d2a ldrb r3, [r4, 0x12]                               |         r3 = *((r4 + 0x12));
    0x00085d2c subs r3, 1                                        |         r3--;
    0x00085d2e strb r3, [r4, 0x12]                               |         *((r4 + 0x12)) = r3;
    0x00085d30 b 0x85cb4                                         |         
                                                                 |     }
                                                                 | label_2:
    0x00085d32 ldrb.w r3, [r5, 0x57]                             |     r3 = *((r5 + 0x57));
                                                                 |     if (r3 == 0) {
    0x00085d36 cbnz r3, 0x85d3c                                  |         
    0x00085d38 movs r3, 0x12                                     |         r3 = 0x12;
    0x00085d3a str r3, [r4, 0xc]                                 |         *((r4 + 0xc)) = r3;
                                                                 |     }
    0x00085d3c ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00085d3e adds r3, 1                                        |     r3++;
    0x00085d40 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x00085d42 b 0x85cb4                                         |     goto label_0;
                                                                 | label_1:
    0x00085d44 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00085d48 add r6, sp, 0x198                                 |     r6 += arg_110h;
    0x00085d4a movs r1, r0                                       |     r1 = r0;
    0x00085d4c lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00085d4e movs r0, r0                                       |     
    0x00085d50 add r6, sp, 0x120                                 |     r6 += arg_120h;
    0x00085d52 movs r1, r0                                       |     r1 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x85d54 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00085d54 ()                                      | void fcn_00085d54 (int16_t arg_268h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00085d54 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00085d58 mov sb, r2                                        |     sb = r2;
    0x00085d5a ldr r2, [pc, 0x78]                                |     
    0x00085d5c mov r8, r3                                        |     r8 = r3;
    0x00085d5e mov r6, r0                                        |     r6 = r0;
    0x00085d60 sub sp, 0x2c                                      |     
    0x00085d62 ldr r3, [pc, 0x74]                                |     r3 = *(0x85dda);
    0x00085d64 lsls r1, r1, 4                                    |     r1 <<= 4;
    0x00085d66 add r2, pc                                        |     r2 = 0x10bb40;
    0x00085d68 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00085d6a ldr.w sl, [pc, 0x70]                              |     sl = fcn.0000e2e0;
    0x00085d6e movs r4, 1                                        |     r4 = 1;
    0x00085d70 ldr r3, [r2, r3]                                  |     
    0x00085d72 add r5, sp, 0xc                                   |     r5 += var_ch_2;
    0x00085d74 ldr.w fp, [pc, 0x68]                              |     
    0x00085d78 add sl, pc                                        |     sl += pc;
    0x00085d7a ldr r3, [r3]                                      |     r3 = imp.atan;
    0x00085d7c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00085d7e mov.w r3, 0                                       |     r3 = 0;
    0x00085d82 ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x00085d84 add fp, pc                                        |     fp = 0x10bb68;
    0x00085d86 ldr r7, [r3, r1]                                  |     r7 = *((r3 + r1));
                                                                 |     do {
    0x00085d88 mov r2, sl                                        |         r2 = sl;
    0x00085d8a mov r1, r5                                        |         r1 = r5;
    0x00085d8c mov r3, r4                                        |         r3 = r4;
    0x00085d8e movs r0, 0x18                                     |         r0 = 0x18;
    0x00085d90 blx 0x9724                                        |         fcn_00009724 ();
    0x00085d94 ldr r0, [r6]                                      |         r0 = *(r6);
    0x00085d96 mov r2, r7                                        |         r2 = r7;
    0x00085d98 mov r1, r5                                        |         r1 = r5;
    0x00085d9a bl 0x38d4c                                        |         r0 = fcn_00038d4c (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x00085d9e cbz r0, 0x85db0                                   |             
    0x00085da0 mov r3, r5                                        |             r3 = r5;
    0x00085da2 mov r2, r7                                        |             r2 = r7;
    0x00085da4 mov r1, fp                                        |             r1 = fp;
    0x00085da6 mov r0, r6                                        |             r0 = r6;
    0x00085da8 strd sb, r8, [sp]                                 |             __asm ("strd sb, r8, [sp]");
    0x00085dac bl 0x85c90                                        |             fcn_00085c90 (r0, r1, r2);
                                                                 |         }
    0x00085db0 adds r4, 1                                        |         r4++;
    0x00085db2 cmp r4, 5                                         |         
    0x00085db4 bne 0x85d88                                       |         
                                                                 |     } while (r4 != 5);
    0x00085db6 ldr r2, [pc, 0x2c]                                |     
    0x00085db8 ldr r3, [pc, 0x1c]                                |     r3 = *(0x85dd8);
    0x00085dba add r2, pc                                        |     r2 = 0x10bba4;
    0x00085dbc ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00085dbe ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00085dc0 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00085dc2 eors r2, r3                                       |     r2 ^= r3;
    0x00085dc4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x00085dc8 bne 0x85dd0                                       |         
    0x00085dca add sp, 0x2c                                      |         
    0x00085dcc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00085dd0 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00085dd4 add r5, sp, 0x268                                 |     r5 += arg_268h;
    0x00085dd6 movs r1, r0                                       |     r1 = r0;
    0x00085dd8 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00085dda movs r0, r0                                       |     
    0x00085ddc b 0x863a0                                         |     
                                                                 |     while (r1 >= r2) {
                                                                 | label_1:
    0x0008617c mov r1, r7                                        |         r1 = r7;
    0x0008617e mov r0, r8                                        |         r0 = r8;
    0x00086180 add sp, 0x24                                      |         
    0x00086182 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00086186 b.w 0x16a58                                       |         void (*0x16a58)() ();
    0x000863a0 ldr r3, [r5]                                      |         r3 = *(r5);
    0x000863a2 mov r2, r4                                        |         r2 = r4;
    0x000863a4 ldr r0, [r5, 8]                                   |         r0 = *((r5 + 8));
    0x000863a6 movs r1, 0x64                                     |         r1 = 0x64;
    0x000863a8 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x000863aa add r3, r6                                        |         r3 += r6;
    0x000863ac ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000863ae ldr r3, [r3]                                      |         r3 = *(r3);
    0x000863b0 adds r3, 1                                        |         r3++;
    0x000863b2 str r3, [sp]                                      |         *(sp) = r3;
    0x000863b4 movs r3, 1                                        |         r3 = 1;
    0x000863b6 bl 0x29ac4                                        |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000863ba ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x000863bc ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x000863be add r3, r6                                        |         r3 += r6;
    0x000863c0 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000863c2 ldrh.w r2, [r3, 0x4e]                             |         r2 = *((r3 + 0x4e));
    0x000863c6 lsls r1, r2, 0x1e                                 |         r1 = r2 << 0x1e;
    0x000863c8 bpl.w 0x8617c                                     |         
                                                                 |     }
    0x000863cc ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
                                                                 |     if (r4 != 0) {
    0x000863ce cbnz r4, 0x863da                                  |         goto label_2;
                                                                 |     }
    0x000863d0 b 0x86540                                         |     goto label_3;
                                                                 |     do {
                                                                 | label_0:
    0x000863d2 ldr r4, [r4]                                      |         r4 = *(r4);
    0x000863d4 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x000863d6 beq.w 0x86534                                     |             goto label_4;
                                                                 |         }
                                                                 | label_2:
    0x000863da ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x000863dc ldrb.w r3, [r1, 0x2b]                             |         r3 = *((r1 + 0x2b));
    0x000863e0 cmp r3, 2                                         |         
    0x000863e2 bne 0x863d2                                       |         
                                                                 |     } while (r3 != 2);
    0x000863e4 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000863e6 bl 0x16cd8                                        |     fcn_00016cd8 (r0, r1);
    0x000863ea b 0x863d2                                         |     goto label_0;
                                                                 | label_4:
    0x00086534 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00086536 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00086538 add r3, r6                                        |     r3 += r6;
    0x0008653a ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0008653c ldrh.w r2, [r3, 0x4e]                             |     r2 = *((r3 + 0x4e));
                                                                 | label_3:
    0x00086540 bic r2, r2, 2                                     |     r2 = BIT_MASK (r2, 2);
    0x00086544 strh.w r2, [r3, 0x4e]                             |     *((r3 + 0x4e)) = r2;
    0x00086548 b 0x8617c                                         |     goto label_1;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x85de8 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00085de8 ()                              | void fcn_00085de8 (int16_t arg1, int16_t arg2) {
                                                         |     int16_t var_0h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00085de8 push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x00085dec mov r6, r1                                |     r6 = r1;
    0x00085dee ldr r5, [r1, 0x14]                        |     r5 = *((r1 + 0x14));
    0x00085df0 sub sp, 0xc                               |     
    0x00085df2 mov r7, r0                                |     r7 = r0;
    0x00085df4 ldr.w r8, [r0]                            |     r8 = *(r0);
    0x00085df8 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00085dfa beq.w 0x85f52                             |         goto label_5;
                                                         |     }
    0x00085dfe ldr.w r3, [r8, 0x10]                      |     r3 = *((r8 + 0x10));
    0x00085e02 ldr r2, [r3, 0xc]                         |     r2 = *((r3 + 0xc));
    0x00085e04 cmp r5, r2                                |     
                                                         |     if (r5 == r2) {
    0x00085e06 beq.w 0x85f1c                             |         goto label_6;
                                                         |     }
    0x00085e0a adds r3, 0x10                             |     r3 += 0x10;
    0x00085e0c movs r4, 0                                |     r4 = 0;
                                                         |     do {
    0x00085e0e ldr r2, [r3, 0xc]                         |         r2 = *((r3 + 0xc));
    0x00085e10 mov sb, r3                                |         sb = r3;
    0x00085e12 adds r4, 1                                |         r4++;
    0x00085e14 adds r3, 0x10                             |         r3 += 0x10;
    0x00085e16 cmp r5, r2                                |         
    0x00085e18 bne 0x85e0e                               |         
                                                         |     } while (r5 != r2);
    0x00085e1a ldr r0, [r6, 0x18]                        |     r0 = *((r6 + 0x18));
    0x00085e1c movs r2, 0                                |     r2 = 0;
    0x00085e1e ldr r1, [r6, 4]                           |     r1 = *((r6 + 4));
    0x00085e20 adds r0, 8                                |     r0 += 8;
    0x00085e22 bl 0x146e4                                |     fcn_000146e4 (r0, r1, r2);
    0x00085e26 ldr r3, [r0, 8]                           |     r3 = *((r0 + 8));
                                                         |     if (r3 != 0) {
    0x00085e28 cbz r3, 0x85e5c                           |         
    0x00085e2a cmp r4, 1                                 |         
    0x00085e2c ldr.w r5, [sb]                            |         r5 = *(sb);
                                                         |         if (r4 == 1) {
    0x00085e30 beq 0x85f04                               |             goto label_7;
                                                         |         }
    0x00085e32 ldr.w sb, [pc, 0x128]                     |         
    0x00085e36 movs r1, 0x10                             |         r1 = 0x10;
    0x00085e38 add sb, pc                                |         sb = 0x10bd9a;
                                                         | label_0:
    0x00085e3a ldr r3, [r3]                              |         r3 = *(r3);
    0x00085e3c mov r0, r7                                |         r0 = r7;
    0x00085e3e str r5, [sp]                              |         *(sp) = r5;
    0x00085e40 ldr r2, [r6]                              |         r2 = *(r6);
    0x00085e42 bl 0x200fc                                |         r0 = fcn_000200fc (r0, r1);
    0x00085e46 cmp r0, 0                                 |         
                                                         |         if (r0 != 0) {
    0x00085e48 bne 0x85efe                               |             goto label_8;
                                                         |         }
    0x00085e4a mov r3, r0                                |         r3 = r0;
    0x00085e4c mov r2, sb                                |         r2 = sb;
    0x00085e4e movs r1, 9                                |         r1 = 9;
    0x00085e50 mov r0, r7                                |         r0 = r7;
    0x00085e52 str r5, [sp]                              |         *(sp) = r5;
    0x00085e54 bl 0x200fc                                |         r0 = fcn_000200fc (r0, r1);
    0x00085e58 cmp r0, 0                                 |         
                                                         |         if (r0 != 0) {
    0x00085e5a bne 0x85efe                               |             goto label_8;
                                                         |         }
                                                         |     }
                                                         | label_2:
    0x00085e5c ldr r5, [r7, 8]                           |     r5 = *((r7 + 8));
    0x00085e5e cmp r5, 0                                 |     
    0x00085e60 beq 0x85eee                               |     
                                                         |     while (r0 != 0) {
    0x00085e62 ldr.w r3, [r8, 0x10]                      |         r3 = *((r8 + 0x10));
    0x00085e66 lsl.w r8, r4, 4                           |         r8 = r4 << 4;
    0x00085e6a ldr r1, [pc, 0xf4]                        |         
    0x00085e6c mov r0, r7                                |         r0 = r7;
    0x00085e6e ldr.w r2, [r3, r8]                        |         r2 = *((r3 + r8));
    0x00085e72 add r1, pc                                |         r1 = 0x10bdd8;
    0x00085e74 ldr r3, [r6]                              |         r3 = *(r6);
    0x00085e76 bl 0x85c90                                |         fcn_00085c90 (r0, r1, r2);
    0x00085e7a ldr r3, [r7]                              |         r3 = *(r7);
    0x00085e7c mov r2, r4                                |         r2 = r4;
    0x00085e7e ldr r0, [r7, 8]                           |         r0 = *((r7 + 8));
    0x00085e80 movs r1, 0x64                             |         r1 = 0x64;
    0x00085e82 ldr r3, [r3, 0x10]                        |         r3 = *((r3 + 0x10));
    0x00085e84 add r3, r8                                |         r3 += r8;
    0x00085e86 ldr r3, [r3, 0xc]                         |         r3 = *((r3 + 0xc));
    0x00085e88 ldr r3, [r3]                              |         r3 = *(r3);
    0x00085e8a adds r3, 1                                |         r3++;
    0x00085e8c str r3, [sp]                              |         *(sp) = r3;
    0x00085e8e movs r3, 1                                |         r3 = 1;
    0x00085e90 bl 0x29ac4                                |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00085e94 ldrd r0, r3, [r5, 0x6c]                   |         __asm ("ldrd r0, r3, [r5, 0x6c]");
    0x00085e98 ldr r6, [r6]                              |         r6 = *(r6);
    0x00085e9a cmp r0, r3                                |         
                                                         |         if (r0 >= r3) {
    0x00085e9c bge 0x85f42                               |             goto label_9;
                                                         |         }
    0x00085e9e adds r3, r0, 1                            |         r3 = r0 + 1;
    0x00085ea0 ldr r7, [r5, 0x68]                        |         r7 = *((r5 + 0x68));
    0x00085ea2 str r3, [r5, 0x6c]                        |         *((r5 + 0x6c)) = r3;
    0x00085ea4 add.w r3, r0, r0, lsl 2                   |         r3 = r0 + (r0 << 2);
    0x00085ea8 movs r1, 0                                |         r1 = 0;
    0x00085eaa lsls r3, r3, 2                            |         r3 <<= 2;
    0x00085eac mov.w ip, 0x9a                            |         
    0x00085eb0 adds r2, r7, r3                           |         r2 = r7 + r3;
    0x00085eb2 strd r4, r1, [r2, 4]                      |         __asm ("strd r4, r1, [r2, 4]");
    0x00085eb6 strd r1, r1, [r2, 0xc]                    |         __asm ("strd r1, r1, [r2, 0xc]");
    0x00085eba str.w ip, [r7, r3]                        |         __asm ("str.w ip, [r7, r3]");
                                                         | label_3:
    0x00085ebe ldr r3, [r5]                              |         r3 = *(r5);
    0x00085ec0 ldrb.w r3, [r3, 0x57]                     |         r3 = *((r3 + 0x57));
                                                         |         if (r3 != 0) {
    0x00085ec4 cbnz r3, 0x85efe                          |             goto label_8;
                                                         |         }
    0x00085ec6 cmp r0, 0                                 |         
    0x00085ec8 ldr r4, [r5, 0x68]                        |         r4 = *((r5 + 0x68));
    0x00085eca it lt                                     |         
                                                         |         if (r0 >= 0) {
    0x00085ecc ldrlt r0, [r5, 0x6c]                      |             r0 = *((r5 + 0x6c));
                                                         |         }
    0x00085ece mov.w r3, 0                               |         r3 = 0;
    0x00085ed2 mov r2, r6                                |         r2 = r6;
    0x00085ed4 it lt                                     |         
                                                         |         if (r0 >= 0) {
    0x00085ed6 addlt r0, r0, -1                          |             r0 += -1;
                                                         |         }
    0x00085eda add.w r1, r0, r0, lsl 2                   |         r1 = r0 + (r0 << 2);
    0x00085ede mov r0, r5                                |         r0 = r5;
    0x00085ee0 add.w r1, r4, r1, lsl 2                   |         r1 = r4 + (r1 << 2);
    0x00085ee4 add sp, 0xc                               |         
    0x00085ee6 pop.w {r4, r5, r6, r7, r8, sb, lr}        |         
    0x00085eea b.w 0x1ebdc                               |         void (*0x1ebdc)() ();
    0x00085eee ldr r3, [r7, 0x74]                        |         r3 = *((r7 + 0x74));
                                                         |         if (r3 == 0) {
    0x00085ef0 cbz r3, 0x85f0e                           |             goto label_10;
                                                         |         }
                                                         | label_1:
    0x00085ef2 mov r0, r7                                |         r0 = r7;
    0x00085ef4 bl 0x29b0c                                |         r0 = fcn_00029b0c (r0);
    0x00085ef8 mov r5, r0                                |         r5 = r0;
    0x00085efa cmp r0, 0                                 |         
    0x00085efc bne 0x85e62                               |         
                                                         |     }
                                                         | label_8:
    0x00085efe add sp, 0xc                               |     
    0x00085f00 pop.w {r4, r5, r6, r7, r8, sb, pc}        |     
                                                         | label_7:
    0x00085f04 ldr.w sb, [pc, 0x5c]                      |     sb = *(0x00085f64);
    0x00085f08 movs r1, 0xe                              |     r1 = 0xe;
    0x00085f0a add sb, pc                                |     sb += pc;
    0x00085f0c b 0x85e3a                                 |     goto label_0;
                                                         | label_10:
    0x00085f0e ldr r3, [r7]                              |     r3 = *(r7);
    0x00085f10 ldr r3, [r3, 0x50]                        |     r3 = *((r3 + 0x50));
    0x00085f12 lsls r3, r3, 0x1c                         |     r3 <<= 0x1c;
    0x00085f14 itt pl                                    |     
                                                         |     if (r3 < r3) {
    0x00085f16 movpl r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 < r3) {
    0x00085f18 strbpl r3, [r7, 0x17]                     |         *((r7 + 0x17)) = r3;
                                                         |     }
    0x00085f1a b 0x85ef2                                 |     goto label_1;
                                                         | label_6:
    0x00085f1c movs r4, 0                                |     r4 = 0;
                                                         | label_4:
    0x00085f1e ldr r0, [r6, 0x18]                        |     r0 = *((r6 + 0x18));
    0x00085f20 movs r2, 0                                |     r2 = 0;
    0x00085f22 ldr r1, [r6, 4]                           |     r1 = *((r6 + 4));
    0x00085f24 adds r0, 8                                |     r0 += 8;
    0x00085f26 bl 0x146e4                                |     fcn_000146e4 (r0, r1, r2);
    0x00085f2a ldr r3, [r0, 8]                           |     r3 = *((r0 + 8));
    0x00085f2c cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00085f2e beq 0x85e5c                               |         goto label_2;
                                                         |     }
    0x00085f30 ldr.w r1, [r8, 0x10]                      |     r1 = *((r8 + 0x10));
    0x00085f34 lsls r2, r4, 4                            |     r2 = r4 << 4;
    0x00085f36 ldr.w sb, [pc, 0x30]                      |     sb = *(0x00085f68);
    0x00085f3a ldr r5, [r1, r2]                          |     r5 = *((r1 + r2));
    0x00085f3c movs r1, 0x10                             |     r1 = 0x10;
    0x00085f3e add sb, pc                                |     sb += pc;
    0x00085f40 b 0x85e3a                                 |     goto label_0;
                                                         | label_9:
    0x00085f42 movs r3, 0                                |     r3 = 0;
    0x00085f44 mov r2, r4                                |     r2 = r4;
    0x00085f46 movs r1, 0x9a                             |     r1 = 0x9a;
    0x00085f48 mov r0, r5                                |     r0 = r5;
    0x00085f4a str r3, [sp]                              |     *(sp) = r3;
    0x00085f4c bl 0x29a7c                                |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00085f50 b 0x85ebe                                 |     goto label_3;
                                                         | label_5:
    0x00085f52 mov.w r4, 0x8000                          |     
    0x00085f56 movt r4, 0xffff                           |     r4 = 0x-8000;
    0x00085f5a b 0x85f1e                                 |     goto label_4;
                                                         | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x860b0 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.000860b0 ()                          | void fcn_000860b0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                     |     int16_t var_0h;
                                                     |     int32_t var_0h_2;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x000860b0 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x000860b4 mov r4, r0                            |     r4 = r0;
    0x000860b6 ldr.w r8, [r0, 8]                     |     r8 = *((r0 + 8));
    0x000860ba sub sp, 8                             |     
    0x000860bc mov r7, r1                            |     r7 = r1;
    0x000860be mov r6, r2                            |     r6 = r2;
    0x000860c0 cmp.w r8, 0                           |     
                                                     |     if (r8 == 0) {
    0x000860c4 beq 0x86128                           |         goto label_2;
                                                     |     }
    0x000860c6 ldrb r5, [r4, 0x13]                   |     r5 = *((r4 + 0x13));
    0x000860c8 cmp r5, 0                             |     
                                                     |     if (r5 == 0) {
    0x000860ca beq 0x8613a                           |         goto label_3;
                                                     |     }
                                                     |     do {
    0x000860cc subs r5, 1                            |         r5--;
    0x000860ce cmp r7, 1                             |         
    0x000860d0 uxtb r5, r5                           |         r5 = (int8_t) r5;
    0x000860d2 strb r5, [r4, 0x13]                   |         *((r4 + 0x13)) = r5;
    0x000860d4 add.w r5, r5, 0x26                    |         r5 += 0x26;
    0x000860d8 ldr.w r5, [r4, r5, lsl 2]             |         offset_0 = r5 << 2;
                                                     |         r5 = *((r4 + offset_0));
                                                     |         if (r7 <= 1) {
    0x000860dc ble 0x86146                           |             goto label_4;
                                                     |         }
                                                     | label_0:
    0x000860de mov r3, r5                            |         r3 = r5;
    0x000860e0 mov r2, r7                            |         r2 = r7;
    0x000860e2 movs r1, 0x90                         |         r1 = 0x90;
    0x000860e4 str r6, [sp]                          |         *(sp) = r6;
    0x000860e6 mov r0, r8                            |         r0 = r8;
    0x000860e8 lsls r6, r6, 4                        |         r6 <<= 4;
    0x000860ea bl 0x29ac4                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000860ee ldr r2, [r4, 0x74]                    |         r2 = *((r4 + 0x74));
    0x000860f0 movs r1, 1                            |         r1 = 1;
    0x000860f2 mov r3, r7                            |         r3 = r7;
    0x000860f4 mov r0, r4                            |         r0 = r4;
    0x000860f6 cmp r2, 0                             |         
    0x000860f8 it eq                                 |         
                                                     |         if (r2 != 0) {
    0x000860fa moveq r2, r4                          |             r2 = r4;
                                                     |         }
    0x000860fc strb r1, [r2, 0x15]                   |         *((r2 + 0x15)) = r1;
    0x000860fe ldr r2, [r4]                          |         r2 = *(r4);
    0x00086100 ldr r1, [pc, 0x5c]                    |         
    0x00086102 ldr r2, [r2, 0x10]                    |         r2 = *((r2 + 0x10));
    0x00086104 add r1, pc                            |         r1 = 0x10c268;
    0x00086106 ldr r2, [r2, r6]                      |         r2 = *((r2 + r6));
    0x00086108 strd r5, r5, [sp]                     |         __asm ("strd r5, r5, [sp]");
    0x0008610c bl 0x85c90                            |         fcn_00085c90 (r0, r1, r2);
                                                     |         if (r5 != 0) {
    0x00086110 cbz r5, 0x86122                       |             
    0x00086112 ldrb r3, [r4, 0x13]                   |             r3 = *((r4 + 0x13));
    0x00086114 cmp r3, 7                             |             
    0x00086116 itttt ls                              |             
                                                     |             if (r3 > 7) {
    0x00086118 addls r2, r3, 1                       |                 r2 = r3 + 1;
                                                     |             }
                                                     |             if (r3 > 7) {
    0x0008611a addls r3, 0x26                        |                 r3 += 0x26;
                                                     |             }
                                                     |             if (r3 > 7) {
    0x0008611c strbls r2, [r4, 0x13]                 |                 *((r4 + 0x13)) = r2;
                                                     |             }
                                                     |             if (r3 <= 7) {
    0x0008611e strls r5, [r4, r3, lsl 2]             |                 offset_1 = r3 << 2;
                                                     |                 *((r4 + offset_1)) = r5;
                                                     |                 goto label_5;
                                                     |             }
                                                     |         }
                                                     | label_5:
    0x00086122 add sp, 8                             |         
    0x00086124 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_2:
    0x00086128 ldr r3, [r0, 0x74]                    |         r3 = *((r0 + 0x74));
                                                     |         if (r3 == 0) {
    0x0008612a cbz r3, 0x86152                       |             goto label_6;
                                                     |         }
                                                     | label_1:
    0x0008612c mov r0, r4                            |         r0 = r4;
    0x0008612e bl 0x29b0c                            |         fcn_00029b0c (r0);
    0x00086132 ldrb r5, [r4, 0x13]                   |         r5 = *((r4 + 0x13));
    0x00086134 mov r8, r0                            |         r8 = r0;
    0x00086136 cmp r5, 0                             |         
    0x00086138 bne 0x860cc                           |         
                                                     |     } while (r5 != 0);
                                                     | label_3:
    0x0008613a ldr r5, [r4, 0x2c]                    |     r5 = *((r4 + 0x2c));
    0x0008613c cmp r7, 1                             |     
    0x0008613e add.w r5, r5, 1                       |     r5++;
    0x00086142 str r5, [r4, 0x2c]                    |     *((r4 + 0x2c)) = r5;
                                                     |     if (r7 > 1) {
    0x00086144 bgt 0x860de                           |         goto label_0;
                                                     |     }
                                                     | label_4:
    0x00086146 ldr r1, [pc, 0x1c]                    |     
    0x00086148 mov r0, r4                            |     r0 = r4;
    0x0008614a add r1, pc                            |     r1 = 0x10c2b4;
    0x0008614c bl 0x1d554                            |     fcn_0001d554 (r0, r1);
    0x00086150 b 0x860de                             |     goto label_0;
                                                     | label_6:
    0x00086152 ldr r3, [r0]                          |     r3 = *(r0);
    0x00086154 ldr r3, [r3, 0x50]                    |     r3 = *((r3 + 0x50));
    0x00086156 lsls r3, r3, 0x1c                     |     r3 <<= 0x1c;
    0x00086158 itt pl                                |     
                                                     |     if (r3 < r3) {
    0x0008615a movpl r3, 1                           |         r3 = 1;
                                                     |     }
                                                     |     if (r3 < r3) {
    0x0008615c strbpl r3, [r0, 0x17]                 |         *((r0 + 0x17)) = r3;
                                                     |     }
    0x0008615e b 0x8612c                             |     goto label_1;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x86168 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00086168 ()                                      | void fcn_00086168 (int16_t arg_0h, int16_t arg_68h, int16_t arg_6ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00086168 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0008616c mov r6, r3                                        |     r6 = r3;
    0x0008616e ldr.w r8, [r0]                                    |     r8 = *(r0);
    0x00086172 sub sp, 0x24                                      |     
    0x00086174 mov r7, r1                                        |     r7 = r1;
    0x00086176 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
                                                                 |     if (r3 != 0) {
    0x0008617a cbz r3, 0x8618a                                   |         
                                                                 |     }
    0x0008618a mov r5, r0                                        |     r5 = r0;
    0x0008618c mov sb, r2                                        |     sb = r2;
    0x0008618e bl 0x72b28                                        |     r0 = fcn_00072b28 (r0);
    0x00086192 mov r4, r0                                        |     r4 = r0;
    0x00086194 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00086196 bne 0x8617c                                       |         void (*0x8617c)() ();
                                                                 |     }
    0x00086198 add.w r2, r7, 8                                   |     r2 = r7 + 8;
    0x0008619c cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0008619e bne.w 0x863ec                                     |         goto label_28;
                                                                 |     }
    0x000861a2 mov r1, sb                                        |     r1 = sb;
    0x000861a4 mov r0, r5                                        |     r0 = r5;
    0x000861a6 bl 0x73364                                        |     r0 = fcn_00073364 (r0, r1, r2);
    0x000861aa mov sl, r0                                        |     sl = r0;
    0x000861ac cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000861ae beq 0x8617c                                       |         void (*0x8617c)() ();
                                                                 |     }
                                                                 | label_0:
    0x000861b0 ldr.w r1, [sl, 0x3c]                              |     r1 = *((sl + 0x3c));
    0x000861b4 ldrb.w lr, [sl, 0x2b]                             |     
    0x000861b8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000861ba beq.w 0x866be                                     |         goto label_29;
                                                                 |     }
    0x000861be ldr.w ip, [r8, 0x10]                              |     ip = *((r8 + 0x10));
    0x000861c2 ldr.w r3, [ip, 0xc]                               |     r3 = *((ip + 0xc));
    0x000861c6 cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x000861c8 beq.w 0x86456                                     |         goto label_30;
                                                                 |     }
    0x000861cc movs r3, 0x10                                     |     r3 = 0x10;
    0x000861ce sub.w r0, ip, 4                                   |     r0 = ip - 4;
                                                                 |     do {
    0x000861d2 mov r6, r3                                        |         r6 = r3;
    0x000861d4 adds r3, 0x10                                     |         r3 += 0x10;
    0x000861d6 ldr r2, [r0, r3]                                  |         r2 = *((r0 + r3));
    0x000861d8 adds r4, 1                                        |         r4++;
    0x000861da cmp r1, r2                                        |         
    0x000861dc bne 0x861d2                                       |         
                                                                 |     } while (r1 != r2);
    0x000861de cmp.w lr, 1                                       |     
                                                                 |     if (lr == 1) {
    0x000861e2 beq.w 0x86442                                     |         goto label_31;
                                                                 |     }
                                                                 | label_3:
    0x000861e6 cmp r4, 1                                         |     
    0x000861e8 it ne                                             |     
                                                                 |     if (r4 == 1) {
    0x000861ea addne ip, r6                                      |         
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x000861ec beq.w 0x86420                                     |         goto label_32;
                                                                 |     }
                                                                 | label_4:
    0x000861f0 ldr.w r2, [pc, 0x640]                             |     
    0x000861f4 add r2, pc                                        |     r2 = 0x10ca2c;
                                                                 | label_1:
    0x000861f6 ldr.w fp, [ip]                                    |     fp = *(ip);
    0x000861fa movs r3, 0                                        |     r3 = 0;
    0x000861fc movs r1, 9                                        |     r1 = 9;
    0x000861fe mov r0, r5                                        |     r0 = r5;
    0x00086200 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00086204 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00086208 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008620a bne 0x8617c                                       |         void (*0x8617c)() ();
                                                                 |     }
    0x0008620c cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00086210 beq.w 0x8642e                                     |         goto label_33;
                                                                 |     }
    0x00086214 cmp r4, 1                                         |     
    0x00086216 mov r3, r0                                        |     r3 = r0;
    0x00086218 ite eq                                            |     
                                                                 |     if (r4 != 1) {
    0x0008621a moveq r1, 0xf                                     |         r1 = 0xf;
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x0008621c movne r1, 0x11                                    |         r1 = 0x11;
                                                                 |     }
                                                                 | label_2:
    0x0008621e ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x00086222 mov r0, r5                                        |     r0 = r5;
    0x00086224 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00086228 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x0008622c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008622e bne 0x8617c                                       |         void (*0x8617c)() ();
                                                                 |     }
    0x00086230 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x00086234 mov r3, r0                                        |     r3 = r0;
    0x00086236 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0008623a movs r1, 9                                        |     r1 = 9;
    0x0008623c mov r0, r5                                        |     r0 = r5;
    0x0008623e bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00086242 mov fp, r0                                        |     
    0x00086244 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00086246 bne 0x8617c                                       |         void (*0x8617c)() ();
                                                                 |     }
    0x00086248 ldr.w r1, [pc, 0x5ec]                             |     r1 = *(0x00086838);
    0x0008624c movs r2, 7                                        |     r2 = 7;
    0x0008624e ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00086252 add r1, pc                                        |     r1 += pc;
    0x00086254 blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x00086258 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008625a beq.w 0x8654a                                     |         goto label_34;
                                                                 |     }
    0x0008625e ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x00086262 lsls r1, r3, 0x13                                 |     r1 = r3 << 0x13;
                                                                 |     if (r1 < r3) {
    0x00086264 bpl 0x86278                                       |         
    0x00086266 ldr.w r2, [r8, 0x20]                              |         r2 = *((r8 + 0x20));
    0x0008626a lsls r2, r2, 3                                    |         r2 <<= 3;
                                                                 |         if (r2 >= r2) {
    0x0008626c bpl 0x86278                                       |             goto label_21;
                                                                 |         }
    0x0008626e ldr.w r2, [r8, 0x190]                             |         r2 = *((r8 + 0x190));
    0x00086272 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00086274 beq.w 0x866e2                                     |             goto label_35;
                                                                 |         }
                                                                 |     }
                                                                 | label_21:
    0x00086278 lsls r0, r3, 0x10                                 |     r0 = r3 << 0x10;
                                                                 |     if (r0 < r3) {
    0x0008627a bmi.w 0x86576                                     |         goto label_22;
                                                                 |     }
                                                                 | label_8:
    0x0008627e ldrb.w r3, [sl, 0x2b]                             |     r3 = *((sl + 0x2b));
    0x00086282 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00086286 beq.w 0x864a6                                     |         goto label_36;
                                                                 |     }
    0x0008628a cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x0008628c bne.w 0x865d0                                     |         goto label_37;
                                                                 |     }
    0x00086290 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00086292 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086294 beq.w 0x86586                                     |         goto label_38;
                                                                 |     }
    0x00086298 mov r2, r4                                        |     r2 = r4;
    0x0008629a movs r1, 1                                        |     r1 = 1;
    0x0008629c mov r0, r5                                        |     r0 = r5;
    0x0008629e bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x000862a2 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000862a4 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_7:
    0x000862a6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000862a8 ldr.w fp, [r5, 8]                                 |     fp = *((r5 + 8));
    0x000862ac ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x000862ae add r3, r6                                        |     r3 += r6;
    0x000862b0 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000862b2 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x000862b6 beq.w 0x865ac                                     |         goto label_39;
                                                                 |     }
                                                                 | label_11:
    0x000862ba mov r2, r4                                        |     r2 = r4;
    0x000862bc movs r1, 1                                        |     r1 = 1;
    0x000862be mov r0, r5                                        |     r0 = r5;
    0x000862c0 bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x000862c4 ldrb.w r3, [sl, 0x2b]                             |     r3 = *((sl + 0x2b));
    0x000862c8 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x000862ca beq.w 0x86672                                     |         goto label_40;
                                                                 |     }
                                                                 | label_18:
    0x000862ce ldr r0, [r5]                                      |     r0 = *(r5);
    0x000862d0 mov r1, sl                                        |     r1 = sl;
    0x000862d2 bl 0x17770                                        |     r0 = fcn_00017770 (r0, r1, r2);
                                                                 |     if (r0 == 0) {
    0x000862d6 cbz r0, 0x862ec                                   |         goto label_41;
                                                                 |     }
    0x000862d8 str r4, [sp, 0x1c]                                |     var_1ch = r4;
    0x000862da mov r4, r0                                        |     r4 = r0;
                                                                 |     do {
    0x000862dc mov r1, r4                                        |         r1 = r4;
    0x000862de mov r0, r5                                        |         r0 = r5;
    0x000862e0 bl 0x85de8                                        |         fcn_00085de8 (r0, r1);
    0x000862e4 ldr r4, [r4, 0x20]                                |         r4 = *((r4 + 0x20));
    0x000862e6 cmp r4, 0                                         |         
    0x000862e8 bne 0x862dc                                       |         
                                                                 |     } while (r4 != 0);
    0x000862ea ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
                                                                 | label_41:
    0x000862ec ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x000862f0 lsls r0, r3, 0x1c                                 |     r0 = r3 << 0x1c;
                                                                 |     if (r0 < r3) {
    0x000862f2 bmi.w 0x865bc                                     |         goto label_42;
                                                                 |     }
                                                                 | label_12:
    0x000862f6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000862f8 mov r0, r5                                        |     r0 = r5;
    0x000862fa ldr.w r1, [pc, 0x540]                             |     
    0x000862fe ldr r2, [r3]                                      |     r2 = *(r3);
    0x00086300 add r1, pc                                        |     r1 = 0x10cb42;
    0x00086302 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00086306 bl 0x85c90                                        |     fcn_00085c90 (r0, r1, r2);
    0x0008630a cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0008630e bne.w 0x8649a                                     |         goto label_43;
                                                                 |     }
    0x00086312 ldrb.w r3, [sl, 0x2b]                             |     r3 = *((sl + 0x2b));
    0x00086316 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00086318 bne.w 0x865e0                                     |         goto label_44;
                                                                 |     }
                                                                 | label_6:
    0x0008631c movs r3, 0                                        |     r3 = 0;
    0x0008631e movs r1, 0xac                                     |     r1 = 0xac;
    0x00086320 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00086322 mov r0, fp                                        |     r0 = fp;
    0x00086324 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x00086328 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x0008632c mov r2, r4                                        |     r2 = r4;
    0x0008632e bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00086332 ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
    0x00086334 movs r2, 1                                        |     r2 = 1;
    0x00086336 cmp r3, 0                                         |     
    0x00086338 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0008633a moveq r3, r5                                      |         r3 = r5;
                                                                 |     }
    0x0008633c strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
                                                                 | label_5:
    0x0008633e ldrd r1, r3, [fp, 0x6c]                           |     __asm ("ldrd r1, r3, [arg_6ch]");
    0x00086342 ldr.w sb, [sl]                                    |     sb = *(sl);
    0x00086346 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x00086348 bge.w 0x86660                                     |         goto label_45;
                                                                 |     }
    0x0008634c add.w r3, r1, r1, lsl 2                           |     r3 = r1 + (r1 << 2);
    0x00086350 ldr.w ip, [fp, 0x68]                              |     ip = *(arg_68h);
    0x00086354 adds r2, r1, 1                                    |     r2 = r1 + 1;
    0x00086356 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00086358 str.w r2, [fp, 0x6c]                              |     __asm ("str.w r2, [arg_6ch]");
    0x0008635c movs r0, 0                                        |     r0 = 0;
    0x0008635e add.w r2, ip, r3                                  |     r2 = ip + r3;
    0x00086362 mov.w lr, 0x97                                    |     lr = 0x97;
    0x00086366 strd r4, r0, [r2, 4]                              |     __asm ("strd r4, r0, [r2, 4]");
    0x0008636a strd r0, r0, [r2, 0xc]                            |     __asm ("strd r0, r0, [r2, 0xc]");
    0x0008636e str.w lr, [ip, r3]                                |     __asm ("str.w lr, [ip, r3]");
                                                                 | label_17:
    0x00086372 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00086376 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 != 0) {
    0x0008637a cbnz r3, 0x863a0                                  |         void (*0x863a0)() ();
                                                                 |     }
    0x0008637c cmp r1, 0                                         |     
    0x0008637e ldr.w r3, [fp, 0x68]                              |     r3 = *(arg_68h);
    0x00086382 it lt                                             |     
                                                                 |     if (r1 >= 0) {
    0x00086384 ldrlt r1, [fp, 0x6c]                              |         r1 = *(arg_6ch);
                                                                 |     }
    0x00086388 mov r2, sb                                        |     r2 = sb;
    0x0008638a mov r0, fp                                        |     r0 = fp;
    0x0008638c it lt                                             |     
                                                                 |     if (r1 >= 0) {
    0x0008638e addlt r1, r1, -1                                  |         r1 += -1;
                                                                 |     }
    0x00086392 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x00086396 add.w r1, r3, r1, lsl 2                           |     r1 = r3 + (r1 << 2);
    0x0008639a movs r3, 0                                        |     r3 = 0;
    0x0008639c bl 0x1ebdc                                        |     fcn_0001ebdc (r0, r1, r2, r3);
                                                                 | label_28:
    0x000863ec ldrb.w r3, [r8, 0x5b]                             |     r3 = *((r8 + 0x5b));
    0x000863f0 mov r1, sb                                        |     r1 = sb;
    0x000863f2 mov r0, r5                                        |     r0 = r5;
    0x000863f4 adds r3, 1                                        |     r3++;
    0x000863f6 strb.w r3, [r8, 0x5b]                             |     *((r8 + 0x5b)) = r3;
    0x000863fa bl 0x73364                                        |     fcn_00073364 (r0, r1, r2);
    0x000863fe ldrb.w r3, [r8, 0x5b]                             |     r3 = *((r8 + 0x5b));
    0x00086402 mov sl, r0                                        |     sl = r0;
    0x00086404 subs r3, 1                                        |     r3--;
    0x00086406 strb.w r3, [r8, 0x5b]                             |     *((r8 + 0x5b)) = r3;
    0x0008640a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008640c bne.w 0x861b0                                     |         goto label_0;
                                                                 |     }
    0x00086410 mov r0, r5                                        |     r0 = r5;
    0x00086412 ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x00086414 bl 0x4a528                                        |     fcn_0004a528 (r0, r1);
    0x00086418 mov r0, r5                                        |     r0 = r5;
    0x0008641a bl 0x2b228                                        |     fcn_0002b228 (r0, r1);
    0x0008641e b 0x8617c                                         |     void (*0x8617c)() ();
                                                                 | label_32:
    0x00086420 ldr.w r2, [pc, 0x41c]                             |     r2 = *(0x00086840);
    0x00086424 add.w ip, ip, 0x10                                |     
    0x00086428 movs r6, 0x10                                     |     r6 = 0x10;
    0x0008642a add r2, pc                                        |     r2 += pc;
    0x0008642c b 0x861f6                                         |     goto label_1;
                                                                 | label_33:
    0x0008642e ldrb.w r3, [sl, 0x2b]                             |     r3 = *((sl + 0x2b));
    0x00086432 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00086434 beq 0x8647a                                       |         goto label_46;
                                                                 |     }
    0x00086436 cmp r4, 1                                         |     
    0x00086438 mov r3, sb                                        |     r3 = sb;
    0x0008643a ite eq                                            |     
                                                                 |     if (r4 != 1) {
    0x0008643c moveq r1, 0xd                                     |         r1 = 0xd;
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x0008643e movne r1, 0xb                                     |         r1 = 0xb;
                                                                 |     }
    0x00086440 b 0x8621e                                         |     goto label_2;
                                                                 | label_31:
    0x00086442 mov r1, sl                                        |     r1 = sl;
    0x00086444 mov r0, r5                                        |     r0 = r5;
    0x00086446 bl 0x68bfc                                        |     r0 = fcn_00068bfc (r0, r1, r2);
    0x0008644a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008644c bne.w 0x8617c                                     |         void (*0x8617c)() ();
                                                                 |     }
    0x00086450 ldr.w ip, [r8, 0x10]                              |     ip = *((r8 + 0x10));
    0x00086454 b 0x861e6                                         |     goto label_3;
                                                                 | label_30:
    0x00086456 cmp.w lr, 1                                       |     
    0x0008645a it ne                                             |     
                                                                 |     if (lr != 1) {
    0x0008645c movne r6, 0                                       |         r6 = 0;
                                                                 |         goto label_47;
                                                                 |     }
                                                                 |     if (lr != 1) {
                                                                 | label_47:
    0x0008645e bne.w 0x861f0                                     |         goto label_4;
                                                                 |     }
    0x00086462 mov r1, sl                                        |     r1 = sl;
    0x00086464 mov r0, r5                                        |     r0 = r5;
    0x00086466 bl 0x68bfc                                        |     r0 = fcn_00068bfc (r0, r1, r2);
    0x0008646a mov r4, r0                                        |     r4 = r0;
    0x0008646c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008646e bne.w 0x8617c                                     |         void (*0x8617c)() ();
                                                                 |     }
    0x00086472 ldr.w ip, [r8, 0x10]                              |     ip = *((r8 + 0x10));
    0x00086476 mov r6, r0                                        |     r6 = r0;
    0x00086478 b 0x861f0                                         |     goto label_4;
                                                                 | label_46:
    0x0008647a ldr.w r3, [sl, 0x34]                              |     r3 = *((sl + 0x34));
                                                                 |     if (r3 != 0) {
    0x0008647e cbnz r3, 0x8648a                                  |         goto label_48;
                                                                 |     }
    0x00086480 b 0x8682c                                         |     goto label_49;
                                                                 |     do {
    0x00086482 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00086484 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00086486 beq.w 0x8682c                                     |             goto label_49;
                                                                 |         }
                                                                 | label_48:
    0x0008648a ldr r2, [r3]                                      |         r2 = *(r3);
    0x0008648c cmp r8, r2                                        |         
    0x0008648e bne 0x86482                                       |         
                                                                 |     } while (r8 != r2);
    0x00086490 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00086492 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x00086494 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00086496 b 0x8621e                                         |     goto label_2;
                                                                 | label_13:
    0x00086498 ldr r4, [sp, 0x18]                                |     r4 = var_18h;
                                                                 | label_43:
    0x0008649a ldrb.w r3, [sl, 0x2b]                             |     r3 = *((sl + 0x2b));
    0x0008649e cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x000864a0 bne.w 0x8633e                                     |         goto label_5;
                                                                 |     }
    0x000864a4 b 0x8631c                                         |     goto label_6;
                                                                 | label_36:
    0x000864a6 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x000864a8 beq.w 0x86702                                     |         goto label_50;
                                                                 |     }
    0x000864ac ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000864ae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000864b0 beq 0x86586                                       |         goto label_38;
                                                                 |     }
    0x000864b2 mov r2, r4                                        |     r2 = r4;
    0x000864b4 movs r1, 1                                        |     r1 = 1;
    0x000864b6 mov r0, r5                                        |     r0 = r5;
    0x000864b8 bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
                                                                 | label_10:
    0x000864bc ldr r2, [pc, 0x384]                               |     
    0x000864be mov r1, r4                                        |     r1 = r4;
    0x000864c0 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000864c4 mov r0, r5                                        |     r0 = r5;
    0x000864c6 add r2, pc                                        |     r2 = 0x10cd0e;
    0x000864c8 bl 0x85d54                                        |     fcn_00085d54 (r0, r1, r2, r3, r4);
    0x000864cc ldr r3, [r5]                                      |     r3 = *(r5);
    0x000864ce str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000864d0 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x000864d2 lsls r2, r3, 0x11                                 |     r2 = r3 << 0x11;
                                                                 |     if (r2 >= r3) {
    0x000864d4 bpl.w 0x862a6                                     |         goto label_7;
                                                                 |     }
    0x000864d8 ldrb.w r3, [sl, 0x2b]                             |     r3 = *((sl + 0x2b));
    0x000864dc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000864de bne.w 0x862a6                                     |         goto label_7;
                                                                 |     }
    0x000864e2 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000864e4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000864e6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000864e8 beq.w 0x867d4                                     |         goto label_51;
                                                                 |     }
                                                                 | label_25:
    0x000864ec ldr.w r0, [sl, 0x3c]                              |     r0 = *((sl + 0x3c));
    0x000864f0 movs r2, 0                                        |     r2 = 0;
    0x000864f2 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x000864f6 adds r0, 0x38                                     |     r0 += 0x38;
    0x000864f8 bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x000864fc ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x000864fe cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086500 beq.w 0x86722                                     |         goto label_52;
                                                                 |     }
    0x00086504 movs r3, 1                                        |     r3 = 1;
    0x00086506 movs r2, 0                                        |     r2 = 0;
    0x00086508 strb.w r3, [r5, 0x97]                             |     *((r5 + 0x97)) = r3;
    0x0008650c mov r1, r7                                        |     r1 = r7;
    0x0008650e ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00086510 bl 0x2ea98                                        |     fcn_0002ea98 (r0, r1, r2);
    0x00086514 movs r2, 0                                        |     r2 = 0;
    0x00086516 mov r1, r0                                        |     r1 = r0;
    0x00086518 mov r0, r5                                        |     r0 = r5;
    0x0008651a bl 0x7ada4                                        |     fcn_0007ada4 (r0, r1, r2, r3);
    0x0008651e movs r3, 0                                        |     r3 = 0;
    0x00086520 strb.w r3, [r5, 0x97]                             |     *((r5 + 0x97)) = r3;
    0x00086524 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00086526 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00086528 lsls r2, r3, 0xc                                  |     r2 = r3 << 0xc;
                                                                 |     if (r2 >= r3) {
    0x0008652a bpl.w 0x867a8                                     |         goto label_53;
                                                                 |     }
                                                                 | label_9:
    0x0008652e ldr r3, [r5]                                      |     r3 = *(r5);
    0x00086530 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00086532 b 0x862a6                                         |     goto label_7;
                                                                 | label_34:
    0x0008654a ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x0008654e movs r2, 4                                        |     r2 = 4;
    0x00086550 ldr r1, [pc, 0x2f4]                               |     
    0x00086552 adds r0, 7                                        |     r0 += 7;
    0x00086554 add r1, pc                                        |     r1 = 0x10cda0;
    0x00086556 blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x0008655a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008655c beq.w 0x8627e                                     |         goto label_8;
                                                                 |     }
    0x00086560 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00086564 movs r2, 0xa                                      |     r2 = 0xa;
    0x00086566 ldr r1, [pc, 0x2e4]                               |     
    0x00086568 adds r0, 7                                        |     r0 += 7;
    0x0008656a add r1, pc                                        |     r1 = 0x10cdbc;
    0x0008656c blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x00086570 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086572 beq.w 0x8627e                                     |         goto label_8;
                                                                 |     }
                                                                 | label_22:
    0x00086576 ldr r1, [pc, 0x2d8]                               |     
    0x00086578 mov r0, r5                                        |     r0 = r5;
    0x0008657a ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x0008657e add r1, pc                                        |     r1 = 0x10cdd4;
    0x00086580 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00086584 b 0x8617c                                         |     void (*0x8617c)() ();
                                                                 | label_38:
    0x00086586 ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
    0x00086588 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0008658a beq.w 0x866a2                                     |         goto label_54;
                                                                 |     }
                                                                 | label_19:
    0x0008658e mov r0, r5                                        |     r0 = r5;
    0x00086590 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x00086594 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086596 beq.w 0x8617c                                     |         void (*0x8617c)() ();
                                                                 |     }
    0x0008659a mov r2, r4                                        |     r2 = r4;
    0x0008659c movs r1, 1                                        |     r1 = 1;
    0x0008659e mov r0, r5                                        |     r0 = r5;
    0x000865a0 bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x000865a4 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x000865a8 bne 0x8652e                                       |         goto label_9;
                                                                 |     }
    0x000865aa b 0x864bc                                         |     goto label_10;
                                                                 | label_39:
    0x000865ac ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
    0x000865ae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000865b0 beq 0x866b0                                       |         goto label_55;
                                                                 |     }
                                                                 | label_20:
    0x000865b2 mov r0, r5                                        |     r0 = r5;
    0x000865b4 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x000865b8 mov fp, r0                                        |     
    0x000865ba b 0x862ba                                         |     goto label_11;
                                                                 | label_42:
    0x000865bc ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000865be mov r0, r5                                        |     r0 = r5;
    0x000865c0 ldr r1, [pc, 0x290]                               |     
    0x000865c2 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000865c6 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000865c8 add r1, pc                                        |     r1 = 0x10ce20;
    0x000865ca bl 0x85c90                                        |     fcn_00085c90 (r0, r1, r2);
    0x000865ce b 0x862f6                                         |     goto label_12;
                                                                 | label_37:
    0x000865d0 ldr r1, [pc, 0x284]                               |     
    0x000865d2 mov r0, r5                                        |     r0 = r5;
    0x000865d4 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x000865d8 add r1, pc                                        |     r1 = 0x10ce34;
    0x000865da bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x000865de b 0x8617c                                         |     void (*0x8617c)() ();
                                                                 | label_44:
    0x000865e0 mov ip, sb                                        |     
    0x000865e2 ldr.w sb, [sl, 0x14]                              |     sb = *((sl + 0x14));
    0x000865e6 str r4, [sp, 0x18]                                |     var_18h = r4;
                                                                 | label_14:
    0x000865e8 clz lr, ip                                        |     lr &= ip;
    0x000865ec ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x000865f0 lsr.w lr, lr, 5                                   |     lr >>= 5;
    0x000865f4 cmp sb, ip                                        |     
    0x000865f6 ite hs                                            |     
                                                                 |     if (sb < ip) {
    0x000865f8 movhs r4, lr                                      |         r4 = lr;
                                                                 |     }
                                                                 |     if (sb >= ip) {
    0x000865fa orrlo r4, lr, 1                                   |         r4 = lr | 1;
                                                                 |     }
                                                                 |     if (r4 != 0) {
    0x000865fe cbnz r4, 0x86658                                  |         goto label_56;
                                                                 |     }
    0x00086600 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086602 beq.w 0x86498                                     |         goto label_13;
                                                                 |     }
                                                                 |     do {
                                                                 | label_15:
    0x00086606 ldr r2, [r3, 0x2c]                                |         r2 = *((r3 + 0x2c));
    0x00086608 cmp ip, r2                                        |         
    0x0008660a ite ls                                            |         
                                                                 |         if (ip > r2) {
    0x0008660c movls r1, lr                                      |             r1 = lr;
                                                                 |         }
                                                                 |         if (ip <= r2) {
    0x0008660e orrhi r1, lr, 1                                   |             r1 = lr | 1;
                                                                 |         }
                                                                 |         if (r1 != 0) {
    0x00086612 cbz r1, 0x8661a                                   |             
    0x00086614 cmp r4, r2                                        |             
    0x00086616 it lo                                             |             
                                                                 |             if (r4 < r2) {
    0x00086618 movlo r4, r2                                      |                 r4 = r2;
                                                                 |                 goto label_57;
                                                                 |             }
                                                                 |         }
                                                                 | label_57:
    0x0008661a ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0008661c cmp r3, 0                                         |         
    0x0008661e bne 0x86606                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_16:
    0x00086620 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00086622 beq.w 0x86498                                     |         goto label_13;
                                                                 |     }
    0x00086626 ldr.w r2, [sl, 0x3c]                              |     r2 = *((sl + 0x3c));
    0x0008662a ldr r3, [r5]                                      |     r3 = *(r5);
    0x0008662c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0008662e beq.w 0x867e2                                     |         goto label_58;
                                                                 |     }
    0x00086632 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x00086634 mov.w ip, 0                                       |     
    0x00086638 ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x0008663a cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0008663c beq 0x8664a                                       |         goto label_26;
                                                                 |     }
                                                                 |     do {
    0x0008663e ldr r3, [r1, 0x1c]                                |         r3 = *((r1 + 0x1c));
    0x00086640 adds r1, 0x10                                     |         r1 += 0x10;
    0x00086642 add.w ip, ip, 1                                   |         
    0x00086646 cmp r2, r3                                        |         
    0x00086648 bne 0x8663e                                       |         
                                                                 |     } while (r2 != r3);
                                                                 | label_26:
    0x0008664a mov r2, ip                                        |     r2 = ip;
    0x0008664c mov r1, r4                                        |     r1 = r4;
    0x0008664e mov r0, r5                                        |     r0 = r5;
    0x00086650 bl 0x860b0                                        |     fcn_000860b0 (r0, r1, r2);
    0x00086654 mov ip, r4                                        |     
    0x00086656 b 0x865e8                                         |     goto label_14;
                                                                 | label_56:
    0x00086658 mov r4, sb                                        |     r4 = sb;
    0x0008665a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0008665c bne 0x86606                                       |         goto label_15;
                                                                 |     }
    0x0008665e b 0x86620                                         |     goto label_16;
                                                                 | label_45:
    0x00086660 movs r3, 0                                        |     r3 = 0;
    0x00086662 movs r1, 0x97                                     |     r1 = 0x97;
    0x00086664 mov r2, r4                                        |     r2 = r4;
    0x00086666 mov r0, fp                                        |     r0 = fp;
    0x00086668 str r3, [sp]                                      |     *(sp) = r3;
    0x0008666a bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0008666e mov r1, r0                                        |     r1 = r0;
    0x00086670 b 0x86372                                         |     goto label_17;
                                                                 | label_40:
    0x00086672 ldrd r3, r2, [fp, 0x6c]                           |     __asm ("ldrd r3, r2, [arg_6ch]");
    0x00086676 cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00086678 bge 0x86712                                       |         goto label_59;
                                                                 |     }
    0x0008667a add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x0008667e adds r3, 1                                        |     r3++;
    0x00086680 str.w r3, [fp, 0x6c]                              |     __asm ("str.w r3, [arg_6ch]");
    0x00086684 movs r0, 0xaa                                     |     r0 = 0xaa;
    0x00086686 ldr.w r3, [fp, 0x68]                              |     r3 = *(arg_68h);
    0x0008668a lsls r2, r2, 2                                    |     r2 <<= 2;
    0x0008668c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00086690 movs r1, 0                                        |     r1 = 0;
    0x00086692 str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00086694 add r3, r2                                        |     r3 += r2;
    0x00086696 adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00086698 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x0008669c strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
    0x000866a0 b 0x862ce                                         |     goto label_18;
                                                                 | label_54:
    0x000866a2 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000866a4 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x000866a6 lsls r1, r3, 0x1c                                 |     r1 = r3 << 0x1c;
    0x000866a8 itt pl                                            |     
                                                                 |     if (r1 < r3) {
    0x000866aa movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x000866ac strbpl r3, [r5, 0x17]                             |         *((r5 + 0x17)) = r3;
                                                                 |     }
    0x000866ae b 0x8658e                                         |     goto label_19;
                                                                 | label_55:
    0x000866b0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000866b2 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x000866b4 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x000866b6 itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x000866b8 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x000866ba strbpl r3, [r5, 0x17]                             |         *((r5 + 0x17)) = r3;
                                                                 |     }
    0x000866bc b 0x865b2                                         |     goto label_20;
                                                                 | label_29:
    0x000866be cmp.w lr, 1                                       |     
                                                                 |     if (lr == 1) {
    0x000866c2 beq.w 0x867ec                                     |         goto label_60;
                                                                 |     }
    0x000866c6 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x000866ca movs r6, 0                                        |     r6 = 0;
    0x000866cc ldr r2, [pc, 0x18c]                               |     
    0x000866ce mov.w r4, 0x8000                                  |     r4 = 0x8000;
    0x000866d2 movt r6, 0xfff8                                   |     r6 = (r6 & 0xFFFF) | 0xfff80000;
    0x000866d6 movt r4, 0xffff                                   |     r4 = (r4 & 0xFFFF) | 0xffff0000;
    0x000866da sub.w ip, r3, 0x80000                             |     
    0x000866de add r2, pc                                        |     r2 = 0x10cf3e;
    0x000866e0 b 0x861f6                                         |     goto label_1;
                                                                 | label_35:
    0x000866e2 ldr.w r2, [r8, 0xc4]                              |     r2 = *((r8 + 0xc4));
    0x000866e6 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000866e8 bne.w 0x86278                                     |         goto label_21;
                                                                 |     }
    0x000866ec ldr.w r2, [r8, 0x17c]                             |     r2 = *((r8 + 0x17c));
    0x000866f0 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x000866f2 ble.w 0x86576                                     |         goto label_22;
                                                                 |     }
    0x000866f6 ldr.w r2, [r8, 0x194]                             |     r2 = *((r8 + 0x194));
    0x000866fa cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000866fc bne.w 0x86576                                     |         goto label_22;
                                                                 |     }
    0x00086700 b 0x86278                                         |     goto label_21;
                                                                 | label_50:
    0x00086702 ldr r1, [pc, 0x15c]                               |     
    0x00086704 mov r0, r5                                        |     r0 = r5;
    0x00086706 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x0008670a add r1, pc                                        |     r1 = 0x10cf70;
    0x0008670c bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00086710 b 0x8617c                                         |     void (*0x8617c)() ();
                                                                 | label_59:
    0x00086712 movs r3, 0                                        |     r3 = 0;
    0x00086714 movs r1, 0xaa                                     |     r1 = 0xaa;
    0x00086716 mov r2, r3                                        |     r2 = r3;
    0x00086718 mov r0, fp                                        |     r0 = fp;
    0x0008671a str r3, [sp]                                      |     *(sp) = r3;
    0x0008671c bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00086720 b 0x862ce                                         |     goto label_18;
                                                                 | label_52:
    0x00086722 ldr.w r3, [sl, 0x30]                              |     r3 = *((sl + 0x30));
    0x00086726 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
                                                                 |     if (r3 != 0) {
    0x00086728 cbnz r3, 0x8673a                                  |         goto label_61;
                                                                 |     }
    0x0008672a b 0x8652e                                         |     goto label_9;
                                                                 | label_23:
    0x0008672c ldr r2, [r1, 0x20]                                |     r2 = *((r1 + 0x20));
    0x0008672e lsls r0, r2, 0xc                                  |     r0 = r2 << 0xc;
                                                                 |     if (r0 < r2) {
    0x00086730 bmi 0x86740                                       |         goto label_62;
                                                                 |     }
    0x00086732 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00086734 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086736 beq.w 0x8652e                                     |         goto label_9;
                                                                 |     }
                                                                 | label_61:
    0x0008673a ldrb r2, [r3, 0x18]                               |     r2 = *((r3 + 0x18));
    0x0008673c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0008673e beq 0x8672c                                       |         goto label_23;
                                                                 |     }
                                                                 | label_62:
    0x00086740 ldr r3, [r5, 0x38]                                |     r3 = *((r5 + 0x38));
    0x00086742 movs r2, 1                                        |     r2 = 1;
    0x00086744 movs r1, 0x30                                     |     r1 = 0x30;
    0x00086746 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00086748 add.w fp, r3, -1                                  |     
    0x0008674c movs r3, 0                                        |     r3 = 0;
    0x0008674e str.w fp, [r5, 0x38]                              |     __asm ("str.w fp, [r5, 0x38]");
    0x00086752 str r3, [sp]                                      |     *(sp) = r3;
    0x00086754 mov r3, fp                                        |     r3 = fp;
    0x00086756 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0008675a movs r3, 1                                        |     r3 = 1;
    0x0008675c movs r2, 0                                        |     r2 = 0;
    0x0008675e strb.w r3, [r5, 0x97]                             |     *((r5 + 0x97)) = r3;
    0x00086762 mov r1, r7                                        |     r1 = r7;
    0x00086764 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00086766 bl 0x2ea98                                        |     fcn_0002ea98 (r0, r1, r2);
    0x0008676a movs r2, 0                                        |     r2 = 0;
    0x0008676c mov r1, r0                                        |     r1 = r0;
    0x0008676e mov r0, r5                                        |     r0 = r5;
    0x00086770 bl 0x7ada4                                        |     fcn_0007ada4 (r0, r1, r2, r3);
    0x00086774 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00086776 mov.w r2, 0                                       |     r2 = 0;
    0x0008677a strb.w r2, [r5, 0x97]                             |     *((r5 + 0x97)) = r2;
    0x0008677e ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00086780 lsls r3, r3, 0xc                                  |     r3 <<= 0xc;
                                                                 |     if (r3 >= r3) {
    0x00086782 bpl 0x867a8                                       |         goto label_53;
                                                                 |     }
                                                                 | label_24:
    0x00086784 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00086788 beq.w 0x8652e                                     |         goto label_9;
                                                                 |     }
    0x0008678c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0008678e mvn.w r2, fp                                      |     r2 = ~fp;
    0x00086792 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00086794 ldrd r3, r1, [r0, 0x38]                           |     __asm ("ldrd r3, r1, [r0, 0x38]");
    0x00086798 cmn r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x0008679a bmi 0x86812                                       |         goto label_63;
                                                                 |     }
    0x0008679c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0008679e ldr r1, [r3, 0x6c]                                |     r1 = *((r3 + 0x6c));
    0x000867a0 ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x000867a2 str.w r1, [r3, r2, lsl 2]                         |     __asm ("str.w r1, [r3, r2, lsl 2]");
    0x000867a6 b 0x8652e                                         |     goto label_9;
                                                                 | label_53:
    0x000867a8 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x000867aa movs r2, 0                                        |     r2 = 0;
    0x000867ac movs r1, 0x30                                     |     r1 = 0x30;
    0x000867ae ldr r3, [r0, 0x6c]                                |     r3 = *((r0 + 0x6c));
    0x000867b0 str r2, [sp]                                      |     *(sp) = r2;
    0x000867b2 adds r3, 2                                        |     r3 += 2;
    0x000867b4 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000867b8 movs r2, 0                                        |     r2 = 0;
    0x000867ba movs r1, 4                                        |     r1 = 4;
    0x000867bc mov r3, r2                                        |     r3 = r2;
    0x000867be mov.w r2, -1                                      |     r2 = -1;
    0x000867c2 strd r2, r1, [sp]                                 |     __asm ("strd r2, r1, [sp]");
    0x000867c6 mov r0, r5                                        |     r0 = r5;
    0x000867c8 movs r2, 2                                        |     r2 = 2;
    0x000867ca movw r1, 0x313                                    |     r1 = 0x313;
    0x000867ce bl 0x2abf0                                        |     fcn_0002abf0 (r0, r1, r2, r3, r4, r5);
    0x000867d2 b 0x86784                                         |     goto label_24;
                                                                 | label_51:
    0x000867d4 ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
                                                                 |     if (r3 == 0) {
    0x000867d6 cbz r3, 0x8681e                                   |         goto label_64;
                                                                 |     }
                                                                 | label_27:
    0x000867d8 mov r0, r5                                        |     r0 = r5;
    0x000867da bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x000867de str r0, [sp, 0x18]                                |     var_18h = r0;
    0x000867e0 b 0x864ec                                         |     goto label_25;
                                                                 | label_58:
    0x000867e2 mov.w ip, 0x8000                                  |     
    0x000867e6 movt ip, 0xffff                                   |     
    0x000867ea b 0x8664a                                         |     goto label_26;
                                                                 | label_60:
    0x000867ec mov r1, sl                                        |     r1 = sl;
    0x000867ee mov r0, r5                                        |     r0 = r5;
    0x000867f0 bl 0x68bfc                                        |     r0 = fcn_00068bfc (r0, r1, r2);
    0x000867f4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000867f6 bne.w 0x8617c                                     |         void (*0x8617c)() ();
                                                                 |     }
    0x000867fa ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x000867fe movs r6, 0                                        |     r6 = 0;
    0x00086800 mov.w r4, 0x8000                                  |     r4 = 0x8000;
    0x00086804 movt r6, 0xfff8                                   |     r6 = (r6 & 0xFFFF) | 0xfff80000;
    0x00086808 movt r4, 0xffff                                   |     r4 = (r4 & 0xFFFF) | 0xffff0000;
    0x0008680c sub.w ip, r3, 0x80000                             |     
    0x00086810 b 0x861f0                                         |     goto label_4;
                                                                 | label_63:
    0x00086812 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00086814 bl 0x2bed8                                        |     fcn_0002bed8 (r0, r1, r2);
    0x00086818 ldr r3, [r5]                                      |     r3 = *(r5);
    0x0008681a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0008681c b 0x862a6                                         |     goto label_7;
                                                                 | label_64:
    0x0008681e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00086820 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00086822 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x00086824 itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x00086826 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00086828 strbpl r3, [r5, 0x17]                             |         *((r5 + 0x17)) = r3;
                                                                 |     }
    0x0008682a b 0x867d8                                         |     goto label_27;
                                                                 | label_49:
    0x0008682c movs r3, 0                                        |     r3 = 0;
    0x0008682e ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00086830 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x86864 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00086864 ()                                      | void fcn_00086864 (int16_t arg_100h, int16_t arg_104h, int16_t arg_108h, int16_t arg_10ch, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int16_t var_10h;
                                                                 |     arithmetic x;
                                                                 |     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_88h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_d4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00086864 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00086868 mov r4, r2                                        |     r4 = r2;
    0x0008686a ldr.w r2, [pc, 0xb5c]                             |     r2 = *(0x000873c8);
    0x0008686e mov fp, r3                                        |     
    0x00086870 sub sp, 0xdc                                      |     
    0x00086872 ldr.w r3, [pc, 0xb58]                             |     
    0x00086876 add r2, pc                                        |     r2 += pc;
    0x00086878 ldr.w sl, [sp, 0x100]                             |     sl = *(arg_100h);
    0x0008687c ldr r7, [sp, 0x10c]                               |     r7 = *(arg_10ch);
    0x0008687e ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00086880 ldr r2, [r0, 0x24]                                |     r2 = *(arg_100hx24);
    0x00086882 ldr.w r8, [r0]                                    |     r8 = *(r0);
    0x00086886 ldr r3, [r3]                                      |     r3 = *(0x873ce);
    0x00086888 str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x0008688a mov.w r3, 0                                       |     r3 = 0;
    0x0008688e movs r3, 0                                        |     r3 = 0;
    0x00086890 strd r3, r3, [sp, 0x40]                           |     __asm ("strd r3, r3, [var_40h]");
    0x00086894 ldr r3, [sp, 0x108]                               |     r3 = *(arg_108h);
    0x00086896 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00086898 ldrb.w r3, [sp, 0x118]                            |     r3 = *(arg_118h);
    0x0008689c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0008689e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000868a0 bne 0x86958                                       |         goto label_1;
                                                                 |     }
    0x000868a2 ldrb.w r3, [r0, 0xd0]                             |     r3 = *(arg_100hxd0);
    0x000868a6 mov r6, r0                                        |     r6 = r0;
    0x000868a8 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x000868aa sub.w r3, r3, 1                                   |     r3--;
    0x000868ae clz r3, r3                                        |     r3 &= r3;
    0x000868b2 cmp r2, 2                                         |     
    0x000868b4 lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x000868b8 it eq                                             |     
                                                                 |     if (r2 != 2) {
    0x000868ba moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000868bc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000868be bne 0x86958                                       |         goto label_1;
                                                                 |     }
    0x000868c0 mov r5, r1                                        |     r5 = r1;
    0x000868c2 bl 0x72b28                                        |     r0 = fcn_00072b28 (r0);
    0x000868c6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000868c8 bne 0x86958                                       |         goto label_1;
                                                                 |     }
    0x000868ca cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000868ce beq 0x86976                                       |         goto label_58;
                                                                 |     }
    0x000868d0 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x000868d4 cmp r2, 0                                         |     
                                                                 |     if (r2 > 0) {
    0x000868d6 bgt 0x868de                                       |         goto label_59;
                                                                 |     }
    0x000868d8 b 0x86976                                         |     goto label_58;
                                                                 |     do {
    0x000868da cmp r2, r0                                        |         
                                                                 |         if (r2 == r0) {
    0x000868dc beq 0x86976                                       |             goto label_58;
                                                                 |         }
                                                                 | label_59:
    0x000868de adds r0, 1                                        |         r0++;
    0x000868e0 lsls r3, r0, 4                                    |         r3 = r0 << 4;
    0x000868e2 add.w r1, sl, r3                                  |         r1 = sl + r3;
    0x000868e6 ldrb r1, [r1, 1]                                  |         r1 = *((r1 + 1));
    0x000868e8 lsls r1, r1, 0x1a                                 |         r1 <<= 0x1a;
    0x000868ea bpl 0x868da                                       |         
                                                                 |     } while (r1 >= r1);
    0x000868ec ldrb.w r3, [sl, r3]                               |     r3 = *((sl + r3));
    0x000868f0 cmp r3, 3                                         |     
    0x000868f2 it ne                                             |     
                                                                 |     if (r3 != 3) {
    0x000868f4 cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
                                                                 |     if (r3 != 3) {
    0x000868f6 bne.w 0x86bd6                                     |         goto label_60;
                                                                 |     }
    0x000868fa ldr.w r2, [pc, 0xad4]                             |     r2 = *(0x000873d0);
    0x000868fe add r2, pc                                        |     r2 += pc;
                                                                 | label_7:
    0x00086900 ldr.w r1, [pc, 0xad0]                             |     r1 = *(0x000873d4);
    0x00086904 mov r0, r6                                        |     r0 = r6;
    0x00086906 add r1, pc                                        |     r1 += pc;
    0x00086908 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 |     if (r7 != 0) {
    0x0008690c cbz r7, 0x86916                                   |         
    0x0008690e mov r1, r7                                        |         r1 = r7;
    0x00086910 mov r0, r8                                        |         r0 = r8;
    0x00086912 bl 0x16c0c                                        |         fcn_00016c0c (r0, r1);
                                                                 |     }
    0x00086916 mov r1, sl                                        |     r1 = sl;
    0x00086918 mov r0, r8                                        |     r0 = r8;
    0x0008691a mov.w sb, 0                                       |     sb = 0;
    0x0008691e bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
                                                                 |     do {
                                                                 | label_0:
    0x00086922 mov r1, fp                                        |         r1 = fp;
    0x00086924 mov r0, r8                                        |         r0 = r8;
    0x00086926 bl 0x16a58                                        |         fcn_00016a58 (r0, r1);
    0x0008692a cmp.w sb, 0                                       |         
                                                                 |         if (sb != 0) {
    0x0008692e beq 0x86938                                       |             
                                                                 | label_56:
    0x00086930 mov r1, sb                                        |             r1 = sb;
    0x00086932 mov r0, r8                                        |             r0 = r8;
    0x00086934 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x00086938 ldr.w r2, [pc, 0xa9c]                             |         
    0x0008693c ldr.w r3, [pc, 0xa8c]                             |         r3 = *(0x873cc);
    0x00086940 add r2, pc                                        |         r2 = 0x10dd1c;
    0x00086942 ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x00086944 ldr r2, [r3]                                      |         r2 = imp.atan;
    0x00086946 ldr r3, [sp, 0xd4]                                |         r3 = var_d4h;
    0x00086948 eors r2, r3                                       |         r2 ^= r3;
    0x0008694a mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0008694e bne.w 0x87578                                     |             goto label_61;
                                                                 |         }
    0x00086952 add sp, 0xdc                                      |         
    0x00086954 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_1:
    0x00086958 mov.w sb, 0                                       |         sb = 0;
                                                                 |         if (r7 != 0) {
                                                                 | label_2:
    0x0008695c cbz r7, 0x86966                                   |             
    0x0008695e mov r1, r7                                        |             r1 = r7;
    0x00086960 mov r0, r8                                        |             r0 = r8;
    0x00086962 bl 0x16c0c                                        |             fcn_00016c0c (r0, r1);
    0x00086964 invalid                                           |             
                                                                 |         }
    0x00086966 cmp.w sl, 0                                       |         
    0x0008696a beq 0x86922                                       |         
                                                                 |     } while (sl == 0);
    0x0008696c mov r1, sl                                        |     r1 = sl;
    0x0008696e mov r0, r8                                        |     r0 = r8;
    0x00086970 bl 0x16c98                                        |     fcn_00016c98 (r0, r1);
    0x00086974 b 0x86922                                         |     goto label_0;
                                                                 | label_58:
    0x00086976 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0008697a beq.w 0x86adc                                     |         goto label_62;
                                                                 |     }
    0x0008697e mov r2, r4                                        |     r2 = r4;
    0x00086980 mov r1, r5                                        |     r1 = r5;
    0x00086982 add r3, sp, 0x40                                  |     r3 += var_40h;
    0x00086984 mov r0, r6                                        |     r0 = r6;
    0x00086986 bl 0x20164                                        |     r0 = fcn_00020164 (r0, r1, r2, r3);
    0x0008698a subs r2, r0, 0                                    |     r2 = r0 - 0;
    0x0008698c str r2, [sp, 0x1c]                                |     var_1ch = r2;
                                                                 |     if (r2 < r0) {
    0x0008698e blt 0x86958                                       |         goto label_1;
                                                                 |     }
    0x00086990 ldrb.w r3, [r8, 0xb1]                             |     r3 = *((r8 + 0xb1));
    0x00086994 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086996 beq.w 0x86d0a                                     |         goto label_63;
                                                                 |     }
    0x0008699a mov r3, r2                                        |     r3 = r2;
                                                                 | label_10:
    0x0008699c sub.w r5, r3, 1                                   |     r5 = r3 - 1;
    0x000869a0 lsls r2, r3, 4                                    |     r2 = r3 << 4;
    0x000869a2 clz r5, r5                                        |     r5 &= r5;
    0x000869a6 lsrs r5, r5, 5                                    |     r5 >>= 5;
    0x000869a8 str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 | label_23:
    0x000869aa ldr r3, [r6]                                      |     r3 = *(r6);
    0x000869ac ldr.w r0, [pc, 0xa2c]                             |     r0 = *(0x000873dc);
    0x000869b0 ldr.w r1, [pc, 0xa2c]                             |     r1 = *(0x000873e0);
    0x000869b4 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x000869b6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000869b8 add r0, pc                                        |     r0 += pc;
    0x000869ba ldr.w r2, [pc, 0xa28]                             |     r2 = *(0x000873e4);
    0x000869be add r1, pc                                        |     r1 += pc;
    0x000869c0 ldr.w lr, [pc, 0xa24]                             |     
    0x000869c4 add.w ip, r4, r3                                  |     
    0x000869c8 ldr r4, [r4, r3]                                  |     r4 = *((r4 + r3));
    0x000869ca ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000869cc add r2, pc                                        |     r2 += pc;
    0x000869ce str r0, [sp, 0x58]                                |     var_58h = r0;
    0x000869d0 add lr, pc                                        |     lr += pc;
    0x000869d2 ldr.w r0, [ip, 0xc]                               |     r0 = *((ip + 0xc));
    0x000869d6 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x000869d8 add r3, sp, 0x50                                  |     r3 += var_50h;
    0x000869da vdup.32 d16, r6                                   |     __asm ("vdup.32 d16, r6");
    0x000869de strb.w r5, [sp, 0x74]                             |     var_74h = r5;
    0x000869e2 movs r5, 0                                        |     r5 = 0;
    0x000869e4 str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x000869e6 add r3, sp, 0x88                                  |     r3 += var_88h;
    0x000869e8 str r1, [sp, 0x7c]                                |     var_7ch = r1;
    0x000869ea mov r1, r5                                        |     r1 = r5;
    0x000869ec str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x000869ee movs r2, 0x4c                                     |     r2 = 0x4c;
    0x000869f0 str r0, [sp, 0x70]                                |     var_70h = r0;
    0x000869f2 mov r0, r3                                        |     r0 = r3;
    0x000869f4 str.w lr, [sp, 0x60]                              |     __asm ("str.w lr, [var_60h]");
    0x000869f8 vstr d16, [sp, 0x50]                              |     __asm ("vstr d16, [sp, 0x50]");
    0x000869fc str r4, [sp, 0x78]                                |     var_78h = r4;
    0x000869fe str r5, [sp, 0x64]                                |     var_64h = r5;
    0x00086a00 strh.w r5, [sp, 0x68]                             |     var_68h = r5;
    0x00086a04 blx 0x97d4                                        |     r0 = fcn_000097d4 ();
    0x00086a08 mov r1, r0                                        |     r1 = r0;
    0x00086a0a add r0, sp, 0x54                                  |     r0 += var_54h;
    0x00086a0c str.w fp, [sp, 0xa8]                              |     __asm ("str.w fp, [var_a8h]");
    0x00086a10 bl 0x2d9bc                                        |     fcn_0002d9bc (r0, r1, r2, r3, r4, r5);
    0x00086a14 add.w r2, fp, 8                                   |     r2 += arg_108h;
    0x00086a18 mov r1, r5                                        |     r1 = r5;
    0x00086a1a mov r0, r6                                        |     r0 = r6;
    0x00086a1c bl 0x73364                                        |     fcn_00073364 (r0, r1, r2);
    0x00086a20 str r0, [sp, 0x14]                                |     x = r0;
    0x00086a22 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086a24 beq 0x86958                                       |         goto label_1;
                                                                 |     }
    0x00086a26 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00086a28 ldr.w r1, [r8, 0x10]                              |     r1 = *((r8 + 0x10));
    0x00086a2c ldr r0, [r0]                                      |     r0 = *(r0);
    0x00086a2e cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00086a30 beq.w 0x86d2c                                     |         goto label_64;
                                                                 |     }
                                                                 | label_11:
    0x00086a34 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00086a36 ldr r2, [sp, 0x14]                                |     r2 = x;
    0x00086a38 adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00086a3a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00086a3c ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x00086a3e ands r3, r3, 0x80                                 |     r3 &= 0x80;
    0x00086a42 it eq                                             |     
                                                                 |     if (r3 != r3) {
    0x00086a44 streq r3, [sp, 0x28]                              |         var_28h = r3;
                                                                 |     }
                                                                 |     if (r3 == r3) {
    0x00086a46 beq 0x86a64                                       |         goto label_65;
                                                                 |     }
    0x00086a48 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00086a4a str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00086a4c ldr r2, [sp, 0x28]                                |     r2 = var_28h;
                                                                 |     if (r3 != 0) {
    0x00086a4e cbnz r3, 0x86a56                                  |         goto label_66;
                                                                 |     }
    0x00086a50 b 0x86a64                                         |     goto label_65;
                                                                 |     do {
    0x00086a52 ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
                                                                 |         if (r2 == 0) {
    0x00086a54 cbz r2, 0x86a62                                   |             goto label_67;
                                                                 |         }
                                                                 | label_66:
    0x00086a56 ldrb.w r3, [r2, 0x37]                             |         r3 = *((r2 + 0x37));
    0x00086a5a and r3, r3, 3                                     |         r3 &= 3;
    0x00086a5e cmp r3, 2                                         |         
    0x00086a60 bne 0x86a52                                       |         
                                                                 |     } while (r3 != 2);
                                                                 | label_67:
    0x00086a62 str r2, [sp, 0x28]                                |     var_28h = r2;
                                                                 | label_65:
    0x00086a64 ldr.w r1, [pc, 0x984]                             |     r1 = *(0x000873ec);
    0x00086a68 movs r2, 7                                        |     r2 = 7;
    0x00086a6a add r1, pc                                        |     r1 += pc;
    0x00086a6c blx 0x9890                                        |     r0 = fcn_00009890 ();
    0x00086a70 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00086a72 bne 0x86b2e                                       |         goto label_25;
                                                                 |     }
    0x00086a74 ldrb.w r3, [r8, 0xb1]                             |     r3 = *((r8 + 0xb1));
    0x00086a78 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00086a7a bne 0x86b2e                                       |         goto label_25;
                                                                 |     }
    0x00086a7c ldr.w r1, [pc, 0x970]                             |     r1 = *(0x000873f0);
    0x00086a80 mov sb, r3                                        |     sb = r3;
    0x00086a82 ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086a84 mov r0, r6                                        |     r0 = r6;
    0x00086a86 add r1, pc                                        |     r1 += pc;
    0x00086a88 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00086a8a bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_5:
    0x00086a8e ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086a90 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x00086a92 add.w r4, r3, 8                                   |     r4 = r3 + 8;
    0x00086a96 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00086a98 beq.w 0x8695c                                     |         goto label_2;
                                                                 |     }
                                                                 | label_33:
    0x00086a9c ldrb.w r2, [r5, 0x36]                             |     r2 = *((r5 + 0x36));
    0x00086aa0 ldr r3, [r5, 0x14]                                |     r3 = *((r5 + 0x14));
    0x00086aa2 cmp r2, 5                                         |     
                                                                 |     if (r2 == 5) {
    0x00086aa4 beq 0x86abc                                       |         goto label_4;
                                                                 |     }
                                                                 | label_3:
    0x00086aa6 add.w r4, r5, 0x14                                |     r4 = r5 + 0x14;
    0x00086aaa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086aac beq.w 0x8695c                                     |         goto label_2;
                                                                 |     }
    0x00086ab0 mov r5, r3                                        |     r5 = r3;
    0x00086ab2 ldrb.w r2, [r5, 0x36]                             |     r2 = *((r5 + 0x36));
    0x00086ab6 ldr r3, [r5, 0x14]                                |     r3 = *((r5 + 0x14));
    0x00086ab8 cmp r2, 5                                         |     
                                                                 |     if (r2 != 5) {
    0x00086aba bne 0x86aa6                                       |         goto label_3;
                                                                 |     }
                                                                 | label_4:
    0x00086abc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086abe beq.w 0x8695c                                     |         goto label_2;
                                                                 |     }
    0x00086ac2 ldrb.w r2, [r3, 0x36]                             |     r2 = *((r3 + 0x36));
    0x00086ac6 cmp r2, 5                                         |     
                                                                 |     if (r2 == 5) {
    0x00086ac8 beq.w 0x8695c                                     |         goto label_2;
                                                                 |     }
    0x00086acc str r3, [r4]                                      |     *(r4) = r3;
    0x00086ace mov r4, r3                                        |     r4 = r3;
    0x00086ad0 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x00086ad2 str r2, [r5, 0x14]                                |     *((r5 + 0x14)) = r2;
    0x00086ad4 str r5, [r4, 0x14]!                               |     *((r4 += 0x14)) = r5;
    0x00086ad8 ldr r3, [r5, 0x14]                                |     r3 = *((r5 + 0x14));
    0x00086ada b 0x86abc                                         |     goto label_4;
                                                                 | label_62:
    0x00086adc ldr.w r3, [r6, 0xec]                              |     r3 = *((r6 + 0xec));
    0x00086ae0 str r3, [sp, 0x14]                                |     x = r3;
    0x00086ae2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086ae4 beq.w 0x86958                                     |         goto label_1;
                                                                 |     }
    0x00086ae8 ldr r1, [r3, 0x3c]                                |     r1 = *((r3 + 0x3c));
    0x00086aea ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x00086aee str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00086af0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00086af2 beq.w 0x8759e                                     |         goto label_68;
                                                                 |     }
    0x00086af6 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00086af8 cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x00086afa beq.w 0x87090                                     |         goto label_69;
                                                                 |     }
    0x00086afe mov r3, r2                                        |     r3 = r2;
    0x00086b00 mov r2, fp                                        |     r2 = fp;
    0x00086b02 adds r3, 0x10                                     |     r3 += 0x10;
                                                                 |     do {
    0x00086b04 mov r0, r3                                        |         r0 = r3;
    0x00086b06 adds r2, 1                                        |         r2++;
    0x00086b08 ldr r4, [r3, 0xc]                                 |         r4 = *((r3 + 0xc));
    0x00086b0a adds r3, 0x10                                     |         r3 += 0x10;
    0x00086b0c cmp r1, r4                                        |         
    0x00086b0e bne 0x86b04                                       |         
                                                                 |     } while (r1 != r4);
    0x00086b10 ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086b12 ldr.w r1, [pc, 0x8e0]                             |     
    0x00086b16 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00086b18 movs r2, 7                                        |     r2 = 7;
    0x00086b1a str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00086b1c add r1, pc                                        |     r1 = 0x10df16;
    0x00086b1e ldr r0, [r3]                                      |     r0 = *(r3);
    0x00086b20 blx 0x9890                                        |     fcn_00009890 ();
    0x00086b24 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00086b26 lsls r3, r3, 4                                    |     r3 <<= 4;
    0x00086b28 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00086b2a movs r3, 0                                        |     r3 = 0;
    0x00086b2c str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_25:
    0x00086b2e ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086b30 ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x00086b34 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00086b36 beq.w 0x86caa                                     |         goto label_70;
                                                                 |     }
    0x00086b3a cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00086b3c beq.w 0x87004                                     |         goto label_71;
                                                                 |     }
    0x00086b40 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00086b42 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00086b44 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086b46 beq 0x86bde                                       |         goto label_72;
                                                                 |     }
    0x00086b48 mov r1, r3                                        |     r1 = r3;
    0x00086b4a mov r0, r8                                        |     r0 = r8;
    0x00086b4c bl 0x1e9ec                                        |     r0 = fcn_0001e9ec (r0, r1);
    0x00086b50 mov sb, r0                                        |     sb = r0;
    0x00086b52 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086b54 beq 0x86a8e                                       |         goto label_5;
                                                                 |     }
    0x00086b56 ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086b58 mov r1, r0                                        |     r1 = r0;
    0x00086b5a ldr.w r2, [pc, 0x89c]                             |     r2 = *(0x000873f8);
    0x00086b5e mov r0, r6                                        |     r0 = r6;
    0x00086b60 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00086b62 add r2, pc                                        |     r2 += pc;
    0x00086b64 bl 0x39074                                        |     r0 = fcn_00039074 (r0, r1, r2, r3);
    0x00086b68 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00086b6a bne 0x86a8e                                       |         goto label_5;
                                                                 |     }
    0x00086b6c ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x00086b70 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00086b72 bls 0x86c52                                       |         goto label_73;
                                                                 |     }
                                                                 | label_8:
    0x00086b74 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00086b78 beq.w 0x87016                                     |         goto label_74;
                                                                 |     }
    0x00086b7c ldr r3, [r6]                                      |     r3 = *(r6);
    0x00086b7e ldr.w r2, [r3, 0x80]                              |     r2 = *((r3 + 0x80));
    0x00086b82 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00086b86 cmp r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x00086b88 blt.w 0x870c2                                     |         goto label_75;
                                                                 |     }
                                                                 | label_27:
    0x00086b8c ldr r3, [r6, 0x24]                                |     r3 = *((r6 + 0x24));
    0x00086b8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00086b90 bne.w 0x86a8e                                     |         goto label_5;
                                                                 |     }
    0x00086b94 ldr.w r3, [sl]                                    |     r3 = *(sl);
                                                                 | label_21:
    0x00086b98 cmp r3, 0                                         |     
    0x00086b9a mov.w r2, 0                                       |     r2 = 0;
                                                                 |     if (r3 <= 0) {
    0x00086b9e ble.w 0x86cc4                                     |         goto label_76;
                                                                 |     }
    0x00086ba2 str r6, [sp, 0x2c]                                |     var_2ch = r6;
    0x00086ba4 mov r5, r2                                        |     r5 = r2;
    0x00086ba6 str r7, [sp, 0x34]                                |     var_34h = r7;
    0x00086ba8 mov r4, sl                                        |     r4 = sl;
    0x00086baa mov r6, r2                                        |     r6 = r2;
    0x00086bac mov r7, r3                                        |     r7 = r3;
    0x00086bae b 0x86bba                                         |     
                                                                 |     while (r0 != 0x71) {
                                                                 | label_6:
    0x00086bb0 adds r5, 1                                        |         r5++;
    0x00086bb2 adds r4, 0x10                                     |         r4 += 0x10;
    0x00086bb4 cmp r5, r7                                        |         
                                                                 |         if (r5 == r7) {
    0x00086bb6 beq.w 0x86cbc                                     |             goto label_77;
                                                                 |         }
    0x00086bba ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x00086bbc ldrb r0, [r1]                                     |         r0 = *(r1);
    0x00086bbe cmp r0, 0x71                                      |         
    0x00086bc0 bne 0x86bb0                                       |         
                                                                 |     }
    0x00086bc2 ldr r0, [r1, 8]                                   |     r0 = *((r1 + 8));
    0x00086bc4 movs r1, 1                                        |     r1 = 1;
                                                                 |     if (r0 != 0) {
    0x00086bc6 cbz r0, 0x86bd2                                   |         
    0x00086bc8 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00086bcc bic r1, r0, 0xc0000000                            |         r1 = BIT_MASK (r0, 0xc0000000);
    0x00086bd0 adds r1, 1                                        |         r1++;
                                                                 |     }
    0x00086bd2 add r6, r1                                        |     r6 += r1;
    0x00086bd4 b 0x86bb0                                         |     goto label_6;
                                                                 | label_60:
    0x00086bd6 ldr.w r2, [pc, 0x824]                             |     r2 = *(0x000873fc);
    0x00086bda add r2, pc                                        |     r2 += pc;
    0x00086bdc b 0x86900                                         |     goto label_7;
                                                                 | label_72:
    0x00086bde ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086be0 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00086be2 movs r3, 1                                        |     r3 = 1;
                                                                 |     if (r2 == 0) {
    0x00086be4 cbz r2, 0x86bee                                   |         goto label_78;
                                                                 |     }
                                                                 |     do {
    0x00086be6 ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x00086be8 adds r3, 1                                        |         r3++;
    0x00086bea cmp r2, 0                                         |         
    0x00086bec bne 0x86be6                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_78:
    0x00086bee ldr r2, [sp, 0x14]                                |     r2 = x;
    0x00086bf0 mov r0, r8                                        |     r0 = r8;
    0x00086bf2 ldr.w r1, [pc, 0x80c]                             |     r1 = fcn.0000d6e4;
    0x00086bf6 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00086bf8 add r1, pc                                        |     r1 += pc;
    0x00086bfa bl 0x20e84                                        |     r0 = fcn_00020e84 (r0);
    0x00086bfe mov sb, r0                                        |     sb = r0;
    0x00086c00 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086c02 beq 0x86cb6                                       |         goto label_79;
                                                                 |     }
    0x00086c04 ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
                                                                 |     if (r3 == 0) {
    0x00086c08 cbz r3, 0x86c18                                   |         goto label_80;
                                                                 |     }
    0x00086c0a ldrb r3, [r0, 7]                                  |     r3 = *((r0 + 7));
    0x00086c0c adds r3, 1                                        |     r3++;
    0x00086c0e strb r3, [r0, 7]                                  |     *((r0 + 7)) = r3;
                                                                 | label_9:
    0x00086c10 ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x00086c14 cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x00086c16 bhi 0x86b74                                       |         goto label_8;
                                                                 |     }
                                                                 | label_80:
    0x00086c18 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00086c1a ldr r5, [r3]                                      |     r5 = *(r3);
                                                                 | label_30:
    0x00086c1c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00086c1e cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00086c20 beq.w 0x870a8                                     |         goto label_81;
                                                                 |     }
    0x00086c24 ldr.w r2, [pc, 0x7dc]                             |     
    0x00086c28 movs r1, 0x12                                     |     r1 = 0x12;
    0x00086c2a movs r3, 0                                        |     r3 = 0;
    0x00086c2c mov r0, r6                                        |     r0 = r6;
    0x00086c2e str r5, [sp]                                      |     *(sp) = r5;
    0x00086c30 add r2, pc                                        |     r2 = 0x10e038;
    0x00086c32 bl 0x200fc                                        |     fcn_000200fc (r0, r1);
    0x00086c36 movs r1, 1                                        |     r1 = 1;
    0x00086c38 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00086c3a bne.w 0x86a8e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_26:
    0x00086c3e ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086c40 mov r2, sb                                        |     r2 = sb;
    0x00086c42 mov r0, r6                                        |     r0 = r6;
    0x00086c44 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00086c46 str r5, [sp]                                      |     *(sp) = r5;
    0x00086c48 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00086c4c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086c4e beq 0x86b74                                       |         goto label_8;
                                                                 |     }
    0x00086c50 b 0x86a8e                                         |     goto label_5;
                                                                 | label_73:
    0x00086c52 ldrb.w r2, [r8, 0xb1]                             |     r2 = *((r8 + 0xb1));
    0x00086c56 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00086c58 bne.w 0x870de                                     |         goto label_82;
                                                                 |     }
    0x00086c5c mov r1, sb                                        |     r1 = sb;
    0x00086c5e mov r0, r8                                        |     r0 = r8;
    0x00086c60 bl 0x38d4c                                        |     r0 = fcn_00038d4c (r0, r1, r2, r3);
    0x00086c64 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00086c66 bne.w 0x871cc                                     |         goto label_83;
                                                                 |     }
    0x00086c6a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00086c6c mov r1, sb                                        |     r1 = sb;
    0x00086c6e mov r0, r8                                        |     r0 = r8;
    0x00086c70 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00086c72 bl 0x18a0c                                        |     r0 = fcn_00018a0c (r0, r1, r2, r3);
    0x00086c76 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086c78 beq 0x86c10                                       |         goto label_9;
                                                                 |     }
                                                                 | label_29:
    0x00086c7a ldr r3, [sp, 0x114]                               |     r3 = *(arg_114h);
    0x00086c7c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086c7e beq.w 0x87364                                     |         goto label_84;
                                                                 |     }
    0x00086c82 ldr r0, [r6, 0x74]                                |     r0 = *((r6 + 0x74));
    0x00086c84 movs r2, 1                                        |     r2 = 1;
    0x00086c86 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00086c88 cmp r0, 0                                         |     
    0x00086c8a it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00086c8c moveq r0, r6                                      |         r0 = r6;
                                                                 |     }
    0x00086c8e ldr r3, [r0, 0x54]                                |     r3 = *((r0 + 0x54));
    0x00086c90 lsls r2, r1                                       |     r2 <<= r1;
    0x00086c92 tst r3, r2                                        |     
                                                                 |     if ((r3 & r2) == 0) {
    0x00086c94 bne 0x86ca2                                       |         
    0x00086c96 cmp r1, 1                                         |         
    0x00086c98 orr.w r3, r3, r2                                  |         r3 |= r2;
    0x00086c9c str r3, [r0, 0x54]                                |         *((r0 + 0x54)) = r3;
                                                                 |         if (r1 == 1) {
    0x00086c9e beq.w 0x87580                                     |             goto label_85;
                                                                 |         }
                                                                 |     }
                                                                 | label_51:
    0x00086ca2 mov r0, r6                                        |     r0 = r6;
    0x00086ca4 bl 0x2b228                                        |     fcn_0002b228 (r0, r1);
    0x00086ca8 b 0x86a8e                                         |     goto label_5;
                                                                 | label_70:
    0x00086caa ldr.w r1, [pc, 0x75c]                             |     
    0x00086cae mov r0, r6                                        |     r0 = r6;
    0x00086cb0 add r1, pc                                        |     r1 = 0x10e0be;
    0x00086cb2 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_79:
    0x00086cb6 mov.w sb, 0                                       |     sb = 0;
    0x00086cba b 0x86a8e                                         |     goto label_5;
                                                                 | label_77:
    0x00086cbc mov r2, r6                                        |     r2 = r6;
    0x00086cbe mov r3, r7                                        |     r3 = r7;
    0x00086cc0 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00086cc2 ldr r7, [sp, 0x34]                                |     r7 = var_34h;
                                                                 | label_76:
    0x00086cc4 mov r0, sb                                        |     r0 = sb;
    0x00086cc6 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00086cc8 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00086cca blx 0x9e8c                                        |     fcn_00009e8c ();
    0x00086cce ldrd r1, r2, [sp, 0x28]                           |     __asm ("ldrd r1, r2, [var_28h]");
    0x00086cd2 bic r3, r0, 0xc0000000                            |     r3 = BIT_MASK (r0, 0xc0000000);
    0x00086cd6 mov r4, r3                                        |     r4 = r3;
    0x00086cd8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00086cda cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00086cdc beq.w 0x8708c                                     |         goto label_86;
                                                                 |     }
    0x00086ce0 ldrh r1, [r1, 0x32]                               |     r1 = *((r1 + 0x32));
                                                                 | label_24:
    0x00086ce2 add r1, r3                                        |     r1 += r3;
    0x00086ce4 add r2, r4                                        |     r2 += r4;
    0x00086ce6 add r3, sp, 0x44                                  |     r3 += var_44h;
    0x00086ce8 sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x00086cea adds r2, 1                                        |     r2++;
    0x00086cec mov r0, r8                                        |     r0 = r8;
    0x00086cee bl 0x1f0c4                                        |     fcn_0001f0c4 (r0, r1, r2, r3);
    0x00086cf2 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00086cf6 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r3 == 0) {
    0x00086cf8 cbz r3, 0x86d4a                                   |         goto label_87;
                                                                 |     }
    0x00086cfa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00086cfc beq.w 0x86a8e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_18:
    0x00086d00 mov r1, r5                                        |     r1 = r5;
    0x00086d02 mov r0, r8                                        |     r0 = r8;
    0x00086d04 bl 0x16f74                                        |     fcn_00016f74 (r0, r1);
    0x00086d08 b 0x86a8e                                         |     goto label_5;
                                                                 | label_63:
    0x00086d0a mov r1, fp                                        |     r1 = fp;
    0x00086d0c mov r0, r6                                        |     r0 = r6;
    0x00086d0e bl 0x745a0                                        |     fcn_000745a0 (r0, r1);
    0x00086d12 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00086d14 cmp r0, 0                                         |     
    0x00086d16 clz r3, r3                                        |     r3 &= r3;
    0x00086d18 invalid                                           |     
    0x00086d1c asrs r3, r2, 0xd                                  |     r3 = r2 >> 0xd;
    0x00086d1e it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00086d20 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00086d22 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00086d24 bne.w 0x87074                                     |         goto label_88;
                                                                 |     }
                                                                 | label_22:
    0x00086d28 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00086d2a b 0x8699c                                         |     goto label_10;
                                                                 | label_64:
    0x00086d2c ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00086d2e ldr r2, [r1, 0x1c]                                |     r2 = *((r1 + 0x1c));
    0x00086d30 ldr r3, [r3, 0x3c]                                |     r3 = *((r3 + 0x3c));
    0x00086d32 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00086d34 beq.w 0x86a34                                     |         goto label_11;
                                                                 |     }
    0x00086d38 ldr.w r1, [pc, 0x6d0]                             |     r1 = *(0x0008740c);
    0x00086d3c mov r2, r0                                        |     r2 = r0;
    0x00086d3e mov r0, r6                                        |     r0 = r6;
    0x00086d40 mov sb, r5                                        |     sb = r5;
    0x00086d42 add r1, pc                                        |     r1 += pc;
    0x00086d44 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00086d48 b 0x86a8e                                         |     goto label_5;
                                                                 | label_87:
    0x00086d4a ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00086d4c mov r2, r4                                        |     r2 = r4;
    0x00086d4e adds r2, 1                                        |     r2++;
    0x00086d50 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00086d52 adds r1, r0, r2                                   |     r1 = r0 + r2;
    0x00086d54 str r0, [r5]                                      |     *(r5) = r0;
    0x00086d56 str r1, [sp, 0x44]                                |     var_44h = r1;
    0x00086d58 mov r1, sb                                        |     r1 = sb;
    0x00086d5a blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00086d5e ldr r3, [sp, 0x104]                               |     r3 = *(arg_104h);
    0x00086d60 ldrb.w r1, [r5, 0x37]                             |     r1 = *((r5 + 0x37));
    0x00086d64 ldr r0, [sp, 0x14]                                |     r0 = x;
    0x00086d66 strb.w r3, [r5, 0x36]                             |     *((r5 + 0x36)) = r3;
    0x00086d6a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00086d6c bic r1, r1, 0xb                                   |     r1 = BIT_MASK (r1, 0xb);
    0x00086d70 ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x00086d74 str r0, [r5, 0xc]                                 |     *((r5 + 0xc)) = r0;
    0x00086d76 add r2, r3                                        |     r2 += r3;
    0x00086d78 ldr r3, [sp, 0x104]                               |     r3 = *(arg_104h);
    0x00086d7a ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x00086d7c str r2, [r5, 0x18]                                |     *((r5 + 0x18)) = r2;
    0x00086d7e subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x00086d80 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00086d82 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00086d84 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00086d86 orr.w r2, r3, r2, lsl 3                           |     r2 = r3 | (r2 << 3);
    0x00086d8a and r2, r2, 0xb                                   |     r2 &= 0xb;
    0x00086d8e orrs r2, r1                                       |     r2 |= r1;
    0x00086d90 strb.w r2, [r5, 0x37]                             |     *((r5 + 0x37)) = r2;
    0x00086d94 ldrh.w r2, [sl]                                   |     r2 = *(sl);
    0x00086d98 strh r2, [r5, 0x32]                               |     *((r5 + 0x32)) = r2;
                                                                 |     if (r7 != 0) {
    0x00086d9a cbz r7, 0x86db0                                   |         
    0x00086d9c ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00086d9e movs r2, 2                                        |         r2 = 2;
    0x00086da0 mov r1, r0                                        |         r1 = r0;
    0x00086da2 mov r0, r6                                        |         r0 = r6;
    0x00086da4 str r3, [sp]                                      |         *(sp) = r3;
    0x00086da6 mov r3, r7                                        |         r3 = r7;
    0x00086da8 bl 0x2d1e8                                        |         fcn_0002d1e8 (r0, r1, r2, r3, r4, r5);
    0x00086dac ldrh r2, [r5, 0x32]                               |         r2 = *((r5 + 0x32));
    0x00086dae str r7, [r5, 0x24]                                |         *((r5 + 0x24)) = r7;
                                                                 |     }
    0x00086db0 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00086db2 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00086db4 ldrb.w r3, [r3, 0x4c]                             |     r3 = *((r3 + 0x4c));
    0x00086db8 cmp r3, 3                                         |     
    0x00086dba mov.w r3, -1                                      |     r3 = -1;
    0x00086dbe it ls                                             |     
                                                                 |     if (r3 > 3) {
    0x00086dc0 movls r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00086dc2 mov r1, r3                                        |     r1 = r3;
    0x00086dc4 ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x00086dc8 cmp r3, 1                                         |     
    0x00086dca it ls                                             |     
                                                                 |     if (r3 > 1) {
    0x00086dcc strls sl, [sp, 0x2c]                              |         var_2ch = sl;
                                                                 |     }
                                                                 |     if (r3 >= 1) {
    0x00086dd0 bls 0x86dda                                       |         
    0x00086dd2 movs r3, 0                                        |         r3 = 0;
    0x00086dd4 str.w sl, [r5, 0x28]                              |         __asm ("str.w sl, [r5, 0x28]");
    0x00086dd8 str r3, [sp, 0x2c]                                |         var_2ch = r3;
                                                                 |     }
    0x00086dda cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00086ddc beq.w 0x8757c                                     |         goto label_89;
                                                                 |     }
    0x00086de0 ldr.w r3, [pc, 0x62c]                             |     r3 = case.0xfdba.28;
    0x00086de4 add.w r7, sl, 0x18                                |     r7 = sl + 0x18;
    0x00086de8 ldr r4, [sp, 0x14]                                |     r4 = x;
    0x00086dea mov.w sl, 0                                       |     sl = 0;
    0x00086dee str.w sb, [sp, 0x38]                              |     __asm ("str.w sb, [var_38h]");
    0x00086df2 mov sb, r1                                        |     sb = r1;
    0x00086df4 add r3, pc                                        |     r3 += pc;
    0x00086df6 str.w fp, [sp, 0x3c]                              |     __asm ("str.w fp, [var_3ch]");
    0x00086dfa addw r3, r3, 0xeec                                |     __asm ("addw r3, r3, aav.0x000000ff");
    0x00086dfe str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 | label_12:
    0x00086e00 ldr r3, [r7, -0x10]                               |     r3 = *((r7 - 0x10));
    0x00086e04 ldrb r2, [r3]                                     |     r2 = *(r3);
    0x00086e06 cmp r2, 0x75                                      |     
    0x00086e08 itt eq                                            |     
                                                                 |     if (r2 != 0x75) {
    0x00086e0a moveq r2, 0x3b                                    |         r2 = 0x3b;
                                                                 |     }
                                                                 |     if (r2 != 0x75) {
    0x00086e0c strbeq r2, [r3]                                   |         *(r3) = r2;
                                                                 |     }
                                                                 |     if (r2 != 0x75) {
    0x00086e0e beq 0x86e20                                       |         
    0x00086e10 cmp r2, 0x71                                      |         
                                                                 |         if (r2 != 0x71) {
    0x00086e12 bne 0x86e20                                       |             goto label_90;
                                                                 |         }
    0x00086e14 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00086e16 ldrb r1, [r2]                                     |         r1 = *(r2);
    0x00086e18 cmp r1, 0x75                                      |         
    0x00086e1a itt eq                                            |         
                                                                 |         if (r1 != 0x75) {
    0x00086e1c moveq r1, 0x3b                                    |             r1 = 0x3b;
                                                                 |         }
                                                                 |         if (r1 == 0x75) {
    0x00086e1e strbeq r1, [r2]                                   |             *(r2) = r1;
                                                                 |             goto label_90;
                                                                 |         }
                                                                 |     }
                                                                 | label_90:
    0x00086e20 movs r2, 0                                        |     r2 = 0;
    0x00086e22 mov r1, r4                                        |     r1 = r4;
    0x00086e24 str r2, [sp]                                      |     *(sp) = r2;
    0x00086e26 mov r0, r6                                        |     r0 = r6;
    0x00086e28 movs r2, 0x20                                     |     r2 = 0x20;
    0x00086e2a bl 0x2d1e8                                        |     fcn_0002d1e8 (r0, r1, r2, r3, r4, r5);
    0x00086e2e ldr r3, [r6, 0x24]                                |     r3 = *((r6 + 0x24));
    0x00086e30 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00086e32 bne.w 0x86fd2                                     |         goto label_91;
                                                                 |     }
    0x00086e36 ldr r3, [r7, -0x10]                               |     r3 = *((r7 - 0x10));
    0x00086e3a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086e3c beq.w 0x87646                                     |         goto label_92;
                                                                 |     }
    0x00086e40 mov r2, r3                                        |     r2 = r3;
    0x00086e42 b 0x86e4c                                         |     
                                                                 |     while (r1 != r1) {
    0x00086e44 ldr r2, [r2, 0xc]                                 |         r2 = *((r2 + 0xc));
    0x00086e46 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00086e48 beq.w 0x87646                                     |             goto label_92;
                                                                 |         }
    0x00086e4c ldr r1, [r2, 4]                                   |         r1 = *((r2 + 4));
    0x00086e4e ands r1, r1, 0x2000                               |         r1 &= 0x2000;
    0x00086e52 bne 0x86e44                                       |         
                                                                 |     }
    0x00086e54 ldrb r0, [r2]                                     |     r0 = *(r2);
    0x00086e56 cmp r0, 0xa7                                      |     
                                                                 |     if (r0 == 0xa7) {
    0x00086e58 beq 0x86f1c                                       |         goto label_93;
                                                                 |     }
    0x00086e5a ldr.w r2, [r6, 0xec]                              |     r2 = *((r6 + 0xec));
    0x00086e5e cmp r2, r4                                        |     
                                                                 |     if (r2 == r4) {
    0x00086e60 beq.w 0x871b2                                     |         goto label_94;
                                                                 |     }
    0x00086e64 ldr r2, [r5, 0x28]                                |     r2 = *((r5 + 0x28));
    0x00086e66 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00086e68 beq.w 0x86fde                                     |         goto label_95;
                                                                 |     }
                                                                 | label_19:
    0x00086e6c ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00086e6e movw r1, 0xfffe                                   |     r1 = 0xfffe;
    0x00086e72 strh.w r1, [r2, sl, lsl 1]                        |     offset_0 = sl << 1;
                                                                 |     *((r2 + offset_0)) = r1;
    0x00086e76 ldrb.w r2, [r5, 0x37]                             |     r2 = *((r5 + 0x37));
    0x00086e7a bfc r2, 3, 1                                      |     value_1 = BIT_MASK (1, );
                                                                 |     value_1 = ~value_1;
                                                                 |     r2 &= value_1;
    0x00086e7e strb.w r2, [r5, 0x37]                             |     *((r5 + 0x37)) = r2;
    0x00086e82 ldrb r2, [r3]                                     |     r2 = *(r3);
    0x00086e84 cmp r2, 0x71                                      |     
                                                                 |     if (r2 == 0x71) {
    0x00086e86 beq.w 0x86f96                                     |         goto label_20;
                                                                 |     }
    0x00086e8a ldr.w fp, [sp, 0x34]                              |     fp = var_34h;
                                                                 | label_14:
    0x00086e8e ldrb.w r3, [r8, 0xb1]                             |     r3 = *((r8 + 0xb1));
    0x00086e92 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086e94 beq.w 0x86fc4                                     |         goto label_96;
                                                                 |     }
                                                                 | label_17:
    0x00086e98 ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x00086e9a adds r7, 0x10                                     |     r7 += 0x10;
    0x00086e9c ldr r2, [r5, 0x1c]                                |     r2 = *((r5 + 0x1c));
    0x00086e9e str.w fp, [r3, sl, lsl 2]                         |     __asm ("str.w fp, [r3, sl, lsl 2]");
    0x00086ea0 add sp, 0xa8                                      |     
    0x00086ea2 ldrb r3, [r7, -0x18]                              |     r3 = *((r7 - 0x18));
    0x00086ea6 and.w r3, r3, sb                                  |     r3 &= sb;
    0x00086eaa strb.w r3, [r2, sl]                               |     *((r2 + sl)) = r3;
    0x00086eae add.w sl, sl, 1                                   |     sl++;
    0x00086eb2 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x00086eb4 cmp r3, sl                                        |     
                                                                 |     if (r3 > sl) {
    0x00086eb6 bgt 0x86e00                                       |         goto label_12;
                                                                 |     }
    0x00086eb8 ldrd sb, fp, [sp, 0x38]                           |     __asm ("ldrd sb, fp, [var_38h]");
                                                                 | label_50:
    0x00086ebc ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00086ebe cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00086ec0 beq.w 0x87374                                     |         goto label_97;
                                                                 |     }
    0x00086ec4 ldrh r3, [r2, 0x32]                               |     r3 = *((r2 + 0x32));
    0x00086ec6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00086ec8 beq.w 0x870f6                                     |         goto label_44;
                                                                 |     }
    0x00086ecc str r6, [sp, 0x24]                                |     var_24h = r6;
    0x00086ece movs r7, 0                                        |     r7 = 0;
    0x00086ed0 mov r6, r2                                        |     r6 = r2;
    0x00086ed2 b 0x86ee4                                         |     
                                                                 |     while (r0 != 0) {
    0x00086ed4 ldrh r3, [r5, 0x34]                               |         r3 = *((r5 + 0x34));
    0x00086ed6 subs r3, 1                                        |         r3--;
    0x00086ed8 strh r3, [r5, 0x34]                               |         *((r5 + 0x34)) = r3;
                                                                 | label_13:
    0x00086eda ldrh r3, [r6, 0x32]                               |         r3 = *((r6 + 0x32));
    0x00086edc adds r7, 1                                        |         r7++;
    0x00086ede cmp r3, r7                                        |         
                                                                 |         if (r3 <= r7) {
    0x00086ee0 ble.w 0x870f4                                     |             goto label_98;
                                                                 |         }
    0x00086ee4 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x00086ee6 mov r2, r6                                        |         r2 = r6;
    0x00086ee8 ldrh r1, [r5, 0x32]                               |         r1 = *((r5 + 0x32));
    0x00086eea mov r0, r5                                        |         r0 = r5;
    0x00086eec ldrsh.w r4, [r3, r7, lsl 1]                       |         offset_2 = r7 << 1;
                                                                 |         r4 = *((r3 + offset_2));
    0x00086ef0 mov r3, r7                                        |         r3 = r7;
    0x00086ef2 bl 0x15848                                        |         r0 = fcn_00015848 (r0, r1, r2, r3, r4);
    0x00086ef6 cmp r0, 0                                         |         
    0x00086ef8 bne 0x86ed4                                       |         
                                                                 |     }
    0x00086efa ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x00086efc ldr.w r1, [r3, r7, lsl 2]                         |     offset_3 = r7 << 2;
                                                                 |     r1 = *((r3 + offset_3));
    0x00086f00 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00086f02 strh.w r4, [r3, sl, lsl 1]                        |     offset_4 = sl << 1;
                                                                 |     *((r3 + offset_4)) = r4;
    0x00086f06 ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x00086f08 str.w r1, [r3, sl, lsl 2]                         |     __asm ("str.w r1, [r3, sl, lsl 2]");
    0x00086f0c ldr r3, [r6, 0x1c]                                |     r3 = *((r6 + 0x1c));
    0x00086f0e ldrb r1, [r3, r7]                                 |     r1 = *((r3 + r7));
    0x00086f10 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x00086f12 strb.w r1, [r3, sl]                               |     *((r3 + sl)) = r1;
    0x00086f16 add.w sl, sl, 1                                   |     sl++;
    0x00086f1a b 0x86eda                                         |     goto label_13;
                                                                 | label_93:
    0x00086f1c ldrsh.w r1, [r2, 0x20]                            |     r1 = *((r2 + 0x20));
    0x00086f20 lsl.w lr, sl, 1                                   |     lr = sl << 1;
    0x00086f24 ldr.w ip, [r5, 4]                                 |     ip = *((r5 + 4));
    0x00086f28 cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x00086f2a blt 0x86fe6                                       |         goto label_99;
                                                                 |     }
    0x00086f2c ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00086f2e add.w r2, r1, r1, lsl 1                           |     r2 = r1 + (r1 << 1);
    0x00086f32 add.w r2, r0, r2, lsl 2                           |     r2 = r0 + (r2 << 2);
    0x00086f36 ldrb r0, [r2, 4]                                  |     r0 = *((r2 + 4));
    0x00086f38 ands r0, r0, 0xf                                  |     r0 &= 0xf;
    0x00086f3c ittt eq                                           |     
                                                                 |     if (r0 != r0) {
    0x00086f3e ldrbeq fp, [r5, 0x37]                             |         fp = *((r5 + 0x37));
                                                                 |     }
                                                                 |     if (r0 == r0) {
    0x00086f42 bfieq fp, r0, 3, 1                                |         __asm ("bfieq fp, r0, 3, 1");
                                                                 |     }
                                                                 |     if (r0 == r0) {
    0x00086f46 strb.w fp, [r5, 0x37]                             |         *((r5 + 0x37)) = fp;
                                                                 |     }
    0x00086f4a ldrh r0, [r2, 0xa]                                |     r0 = *((r2 + 0xa));
    0x00086f4c lsls r0, r0, 0x1a                                 |     r0 <<= 0x1a;
                                                                 |     if (r0 < r0) {
    0x00086f4e bpl 0x86f5c                                       |         
    0x00086f50 ldrb.w r0, [r5, 0x38]                             |         r0 = *((r5 + 0x38));
    0x00086f54 orr r0, r0, 4                                     |         r0 |= 4;
    0x00086f58 strb.w r0, [r5, 0x38]                             |         *((r5 + 0x38)) = r0;
                                                                 |     }
    0x00086f5c strh.w r1, [ip, lr]                               |     *((ip + lr)) = r1;
    0x00086f60 ldrb r1, [r3]                                     |     r1 = *(r3);
    0x00086f62 cmp r1, 0x71                                      |     
                                                                 |     if (r1 == 0x71) {
    0x00086f64 beq 0x86f96                                       |         goto label_20;
                                                                 |     }
                                                                 | label_28:
    0x00086f66 ldrh r1, [r2, 0xa]                                |     r1 = *((r2 + 0xa));
    0x00086f68 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00086f6a lsls r0, r1, 0x16                                 |     r0 = r1 << 0x16;
                                                                 |     if (r0 >= r1) {
    0x00086f6c bpl 0x86ff8                                       |         goto label_100;
                                                                 |     }
    0x00086f6e ldrb r2, [r3]                                     |     r2 = *(r3);
                                                                 |     if (r2 == 0) {
    0x00086f70 cbz r2, 0x86f7a                                   |         goto label_101;
                                                                 |     }
                                                                 |     do {
    0x00086f72 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00086f76 cmp r2, 0                                         |         
    0x00086f78 bne 0x86f72                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_101:
    0x00086f7a lsls r2, r1, 0x1d                                 |     r2 = r1 << 0x1d;
    0x00086f7c bmi 0x86f84                                       |     
                                                                 |     while (r2 == 0) {
                                                                 | label_16:
    0x00086f7e add.w fp, r3, 1                                   |         
    0x00086f82 b 0x86e8e                                         |         goto label_14;
                                                                 | label_15:
    0x00086f84 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00086f88 cmp r2, 0                                         |         
    0x00086f8a beq 0x86f7e                                       |         
                                                                 |     }
    0x00086f8c ldrb r2, [r3, 1]!                                 |     r2 = *((r3 += 1));
    0x00086f90 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00086f92 bne 0x86f84                                       |         goto label_15;
                                                                 |     }
    0x00086f94 b 0x86f7e                                         |     goto label_16;
                                                                 | label_20:
    0x00086f96 ldr.w fp, [r3, 8]                                 |     fp = *((r3 + 8));
    0x00086f9a movs r2, 1                                        |     r2 = 1;
    0x00086f9c cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00086fa0 beq 0x86fae                                       |         
    0x00086fa2 mov r0, fp                                        |         r0 = fp;
    0x00086fa4 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00086fa8 bic r2, r0, 0xc0000000                            |         r2 = BIT_MASK (r0, 0xc0000000);
    0x00086fac adds r2, 1                                        |         r2++;
                                                                 |     }
    0x00086fae mov r1, fp                                        |     r1 = fp;
    0x00086fb0 ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
    0x00086fb4 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00086fb6 mov r0, fp                                        |     r0 = fp;
    0x00086fb8 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x00086fbc ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00086fbe add r2, fp                                        |     r2 += fp;
    0x00086fc0 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00086fc2 b 0x86e8e                                         |     goto label_14;
                                                                 | label_96:
    0x00086fc4 mov r1, fp                                        |     r1 = fp;
    0x00086fc6 mov r0, r6                                        |     r0 = r6;
    0x00086fc8 bl 0x27ce0                                        |     r0 = fcn_00027ce0 (r0, r1);
    0x00086fcc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00086fce bne.w 0x86e98                                     |         goto label_17;
                                                                 |     }
                                                                 | label_91:
    0x00086fd2 ldrd sb, fp, [sp, 0x38]                           |     __asm ("ldrd sb, fp, [var_38h]");
                                                                 | label_36:
    0x00086fd6 ldr.w sl, [sp, 0x2c]                              |     sl = var_2ch;
    0x00086fda movs r7, 0                                        |     r7 = 0;
    0x00086fdc b 0x86d00                                         |     goto label_18;
                                                                 | label_95:
    0x00086fde ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00086fe0 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00086fe2 str r1, [r5, 0x28]                                |     *((r5 + 0x28)) = r1;
    0x00086fe4 b 0x86e6c                                         |     goto label_19;
                                                                 | label_99:
    0x00086fe6 ldrsh.w r2, [r4, 0x20]                            |     r2 = *((r4 + 0x20));
    0x00086fea strh.w r2, [ip, sl, lsl 1]                        |     offset_5 = sl << 1;
                                                                 |     *((ip + offset_5)) = r2;
    0x00086fee ldrb r1, [r3]                                     |     r1 = *(r3);
    0x00086ff0 cmp r1, 0x71                                      |     
                                                                 |     if (r1 == 0x71) {
    0x00086ff2 beq 0x86f96                                       |         goto label_20;
                                                                 |     }
    0x00086ff4 cmp r2, 0                                         |     
                                                                 |     if (r2 >= 0) {
    0x00086ff6 bge 0x870d2                                       |         goto label_102;
                                                                 |     }
                                                                 | label_100:
    0x00086ff8 ldr.w r3, [pc, 0x418]                             |     
    0x00086ffc add r3, pc                                        |     r3 = 0x10e414;
    0x00086ffe addw fp, r3, 0xeec                                |     __asm ("addw fp, r3, aav.0x000000ff");
    0x00087002 b 0x86e8e                                         |     goto label_14;
                                                                 | label_71:
    0x00087004 ldr.w r1, [pc, 0x410]                             |     r1 = *(0x00087418);
    0x00087008 mov r0, r6                                        |     r0 = r6;
    0x0008700a mov.w sb, 0                                       |     sb = 0;
    0x0008700e add r1, pc                                        |     r1 += pc;
    0x00087010 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00087014 b 0x86a8e                                         |     goto label_5;
                                                                 | label_74:
    0x00087016 ldr r0, [sp, 0x14]                                |     r0 = x;
    0x00087018 movs r1, 0xc                                      |     r1 = 0xc;
    0x0008701a mvn r2, 0xb                                       |     r2 = ~0xb;
    0x0008701e ldrh r3, [r0, 0x22]                               |     r3 = *((r0 + 0x22));
    0x00087020 smlabb r3, r3, r1, r2                             |     __asm ("smlabb r3, r3, r1, r2");
    0x00087024 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x00087026 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x00087028 ldr r0, [r1, r3]                                  |     r0 = *((r1 + r3));
    0x0008702a ldrh r3, [r2, 0xa]                                |     r3 = *((r2 + 0xa));
    0x0008702c str r0, [sp, 0x48]                                |     var_48h = r0;
    0x0008702e orr r3, r3, 8                                     |     r3 |= 8;
    0x00087032 strh r3, [r2, 0xa]                                |     *((r2 + 0xa)) = r3;
    0x00087034 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00087036 beq.w 0x871c8                                     |         goto label_103;
                                                                 |     }
    0x0008703a blx 0x9e8c                                        |     r0 = fcn_00009e8c ();
    0x0008703e bic r0, r0, 0xc0000000                            |     r0 = BIT_MASK (r0, 0xc0000000);
                                                                 | label_34:
    0x00087042 movs r3, 0                                        |     r3 = 0;
    0x00087044 add r2, sp, 0x48                                  |     r2 += var_48h;
    0x00087046 movs r1, 0x3b                                     |     r1 = 0x3b;
    0x00087048 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x0008704a mov r0, r8                                        |     r0 = r8;
    0x0008704c bl 0x1db90                                        |     r0 = fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00087050 mov r1, r0                                        |     r1 = r0;
    0x00087052 ldr r0, [r6]                                      |     r0 = *(r6);
    0x00087054 bl 0x1db50                                        |     r0 = fcn_0001db50 (r0);
    0x00087058 mov sl, r0                                        |     sl = r0;
    0x0008705a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008705c beq.w 0x86a8e                                     |         goto label_5;
                                                                 |     }
    0x00087060 ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
    0x00087062 adds r4, r3, 1                                    |     r4 = r3 + 1;
    0x00087064 it eq                                             |     
                                                                 |     if (r4 != r3) {
    0x00087066 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00087068 str r3, [sp, 0x110]                               |     *(arg_110h) = r3;
    0x0008706a ldr r3, [r0]                                      |     r3 = *(r0);
    0x0008706c ldr r1, [sp, 0x110]                               |     r1 = *(arg_110h);
    0x0008706e lsls r2, r3, 4                                    |     r2 = r3 << 4;
    0x00087070 strb r1, [r0, r2]                                 |     *((r0 + r2)) = r1;
    0x00087072 b 0x86b98                                         |     goto label_21;
                                                                 | label_88:
    0x00087074 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x00087078 ldr r2, [r0, 0x3c]                                |     r2 = *((r0 + 0x3c));
    0x0008707a ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0008707c cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0008707e bne.w 0x86d28                                     |         goto label_22;
                                                                 |     }
    0x00087082 movs r5, 1                                        |     r5 = 1;
    0x00087084 movs r3, 0x10                                     |     r3 = 0x10;
    0x00087086 strd r5, r3, [sp, 0x1c]                           |     __asm ("strd r5, r3, [var_1ch]");
    0x0008708a b 0x869aa                                         |     goto label_23;
                                                                 | label_86:
    0x0008708c movs r1, 1                                        |     r1 = 1;
    0x0008708e b 0x86ce2                                         |     goto label_24;
                                                                 | label_69:
    0x00087090 strd fp, fp, [sp, 0x1c]                           |     __asm ("strd fp, fp, [var_1ch]");
                                                                 | label_54:
    0x00087094 ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00087096 movs r2, 7                                        |     r2 = 7;
    0x00087098 ldr r1, [pc, 0x380]                               |     
    0x0008709a ldr r0, [r3]                                      |     r0 = *(r3);
    0x0008709c add r1, pc                                        |     r1 = 0x10e4bc;
    0x0008709e blx 0x9890                                        |     fcn_00009890 ();
    0x000870a2 movs r3, 0                                        |     r3 = 0;
    0x000870a4 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000870a6 b 0x86b2e                                         |     goto label_25;
                                                                 | label_81:
    0x000870a8 ldr r2, [pc, 0x374]                               |     
    0x000870aa movs r1, 0x12                                     |     r1 = 0x12;
    0x000870ac movs r3, 0                                        |     r3 = 0;
    0x000870ae mov r0, r6                                        |     r0 = r6;
    0x000870b0 str r5, [sp]                                      |     *(sp) = r5;
    0x000870b2 add r2, pc                                        |     r2 = 0x10e4d6;
    0x000870b4 bl 0x200fc                                        |     fcn_000200fc (r0, r1);
    0x000870b8 movs r1, 3                                        |     r1 = 3;
    0x000870ba cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000870bc beq.w 0x86c3e                                     |         goto label_26;
                                                                 |     }
    0x000870c0 b 0x86a8e                                         |     goto label_5;
                                                                 | label_75:
    0x000870c2 ldr r2, [pc, 0x360]                               |     
    0x000870c4 mov r0, r6                                        |     r0 = r6;
    0x000870c6 ldr r1, [pc, 0x360]                               |     
    0x000870c8 add r2, pc                                        |     r2 = 0x10e4f2;
    0x000870ca add r1, pc                                        |     r1 = 0x10e4f8;
    0x000870cc bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x000870d0 b 0x86b8c                                         |     goto label_27;
                                                                 | label_102:
    0x000870d2 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x000870d4 add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x000870d8 add.w r2, r3, r2, lsl 2                           |     r2 = r3 + (r2 << 2);
    0x000870dc b 0x86f66                                         |     goto label_28;
                                                                 | label_82:
    0x000870de ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000870e0 mov r1, sb                                        |     r1 = sb;
    0x000870e2 mov r0, r8                                        |     r0 = r8;
    0x000870e4 ldr r5, [r3]                                      |     r5 = *(r3);
    0x000870e6 mov r2, r5                                        |     r2 = r5;
    0x000870e8 bl 0x18a0c                                        |     r0 = fcn_00018a0c (r0, r1, r2, r3);
    0x000870ec cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000870ee bne.w 0x86c7a                                     |         goto label_29;
                                                                 |     }
    0x000870f2 b 0x86c1c                                         |     goto label_30;
                                                                 | label_98:
    0x000870f4 ldr r6, [sp, 0x24]                                |     r6 = var_24h;
                                                                 | label_44:
    0x000870f6 mov r0, r5                                        |     r0 = r5;
    0x000870f8 bl 0xd96c                                         |     fcn_0000d96c (r0);
    0x000870fc ldr.w r7, [r6, 0xec]                              |     r7 = *((r6 + 0xec));
    0x00087100 mov r0, r5                                        |     r0 = r5;
    0x00087102 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00087104 beq.w 0x8738e                                     |         goto label_104;
                                                                 |     }
    0x00087108 bl 0xc2a4                                         |     fcn_0000c2a4 (r0);
    0x0008710c cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00087110 beq 0x8717c                                       |         goto label_43;
                                                                 |     }
    0x00087112 ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00087114 ldrh.w lr, [r5, 0x34]                             |     
    0x00087118 ldrsh.w sl, [r3, 0x22]                            |     sl = *((r3 + 0x22));
    0x0008711c cmp lr, sl                                        |     
                                                                 |     if (lr < sl) {
    0x0008711e blt 0x8717c                                       |         goto label_43;
                                                                 |     }
    0x00087120 ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x00087124 cmp.w sl, 0                                       |     
    0x00087128 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x0008712c strb.w r3, [r5, 0x37]                             |     *((r5 + 0x37)) = r3;
                                                                 |     if (sl <= 0) {
    0x00087130 ble 0x8717c                                       |         goto label_43;
                                                                 |     }
                                                                 | label_45:
    0x00087132 ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00087134 movs r2, 0                                        |     r2 = 0;
    0x00087136 ldrsh.w r0, [r3, 0x20]                            |     r0 = *((r3 + 0x20));
                                                                 | label_32:
    0x0008713a cmp r0, r2                                        |     
                                                                 |     if (r0 == r2) {
    0x0008713c beq 0x87176                                       |         goto label_105;
                                                                 |     }
    0x0008713e cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x00087142 beq.w 0x87356                                     |         goto label_106;
                                                                 |     }
    0x00087146 ldr r4, [r5, 4]                                   |     r4 = *((r5 + 4));
                                                                 | label_31:
    0x00087148 sxth.w ip, r2                                     |     __asm ("sxth.w ip, r2");
    0x0008714c subs r1, r4, 2                                    |     r1 = r4 - 2;
    0x0008714e movs r3, 0                                        |     r3 = 0;
    0x00087150 str r5, [sp, 0x24]                                |     var_24h = r5;
    0x00087152 b 0x8715c                                         |     
                                                                 |     while (r5 != ip) {
    0x00087154 adds r3, 1                                        |         r3++;
    0x00087156 cmp lr, r3                                        |         
                                                                 |         if (lr == r3) {
    0x00087158 beq.w 0x87354                                     |             goto label_107;
                                                                 |         }
    0x0008715c ldrsh r5, [r1, 2]!                                |         r5 = *((r1 += 2));
    0x00087160 cmp r5, ip                                        |         
    0x00087162 bne 0x87154                                       |         
                                                                 |     }
    0x00087164 lsls r3, r3, 0x10                                 |     r3 <<= 0x10;
    0x00087166 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
                                                                 |     if (r3 < r3) {
    0x00087168 bmi.w 0x87356                                     |         goto label_106;
                                                                 |     }
    0x0008716c adds r2, 1                                        |     r2++;
    0x0008716e cmp sl, r2                                        |     
                                                                 |     if (sl == r2) {
    0x00087170 beq 0x8717c                                       |         goto label_43;
                                                                 |     }
    0x00087172 cmp r0, r2                                        |     
                                                                 |     if (r0 != r2) {
    0x00087174 bne 0x87148                                       |         goto label_31;
                                                                 |     }
                                                                 | label_105:
    0x00087176 adds r2, 1                                        |     r2++;
    0x00087178 cmp sl, r2                                        |     
                                                                 |     if (sl != r2) {
    0x0008717a bne 0x8713a                                       |         goto label_32;
                                                                 |     }
                                                                 | label_43:
    0x0008717c ldr r3, [sp, 0x14]                                |     r3 = x;
    0x0008717e cmp r7, r3                                        |     
                                                                 |     if (r7 == r3) {
    0x00087180 beq 0x87276                                       |         goto label_108;
                                                                 |     }
                                                                 | label_37:
    0x00087182 ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x00087186 ldrb.w r2, [r8, 0xb1]                             |     r2 = *((r8 + 0xb1));
    0x0008718a cmp r3, 1                                         |     
                                                                 |     if (r3 >= 1) {
    0x0008718c bls 0x871da                                       |         
                                                                 | label_46:
    0x0008718e clz r3, fp                                        |         r3 &= fp;
    0x00087192 lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x00087194 cmp r2, 0                                         |         
    0x00087196 it ne                                             |         
                                                                 |         if (r2 == 0) {
    0x00087198 orrne r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
    0x0008719c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0008719e beq 0x8725c                                       |             goto label_109;
                                                                 |         }
                                                                 | label_35:
    0x000871a0 ldr r4, [sp, 0x14]                                |         r4 = x;
    0x000871a2 movs r7, 0                                        |         r7 = 0;
    0x000871a4 ldr.w sl, [sp, 0x2c]                              |         sl = var_2ch;
    0x000871a8 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x000871aa str r3, [r5, 0x14]                                |         *((r5 + 0x14)) = r3;
    0x000871ac str r5, [r4, 8]!                                  |         *((r4 += 8)) = r5;
    0x000871b0 b 0x86a9c                                         |         goto label_33;
                                                                 | label_94:
    0x000871b2 mov r7, r1                                        |         r7 = r1;
    0x000871b4 ldr r1, [pc, 0x274]                               |         
    0x000871b6 mov r0, r6                                        |         r0 = r6;
    0x000871b8 ldrd sb, fp, [sp, 0x38]                           |         __asm ("ldrd sb, fp, [var_38h]");
    0x000871bc ldr.w sl, [sp, 0x2c]                              |         sl = var_2ch;
    0x000871c0 add r1, pc                                        |         r1 = 0x10e5f0;
    0x000871c2 bl 0x1d554                                        |         fcn_0001d554 (r0, r1);
    0x000871c6 b 0x86d00                                         |         goto label_18;
                                                                 | label_103:
    0x000871c8 mov r0, sl                                        |         r0 = sl;
    0x000871ca b 0x87042                                         |         goto label_34;
                                                                 | label_83:
    0x000871cc ldr r1, [pc, 0x260]                               |         
    0x000871ce mov r0, r6                                        |         r0 = r6;
    0x000871d0 mov r2, sb                                        |         r2 = sb;
    0x000871d2 add r1, pc                                        |         r1 = 0x10e606;
    0x000871d4 bl 0x1d554                                        |         fcn_0001d554 (r0, r1);
    0x000871d8 b 0x86a8e                                         |         goto label_5;
                                                                 |     }
    0x000871da cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000871dc beq.w 0x87458                                     |         goto label_53;
                                                                 |     }
    0x000871e0 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x000871e4 beq 0x8721e                                       |         goto label_52;
                                                                 |     }
                                                                 | label_47:
    0x000871e6 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000871e8 ldr.w r2, [r8, 0xac]                              |     r2 = *((r8 + 0xac));
    0x000871ec ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x000871ee str r2, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r2;
                                                                 |     if (r3 == 0) {
    0x000871f0 cbz r3, 0x8721e                                   |         goto label_52;
                                                                 |     }
    0x000871f2 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x000871f4 cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x000871f6 bne 0x87218                                       |         goto label_110;
                                                                 |     }
    0x000871f8 cmp r5, r3                                        |     
                                                                 |     if (r5 == r3) {
    0x000871fa beq 0x87218                                       |         goto label_110;
                                                                 |     }
    0x000871fc b 0x875f8                                         |     goto label_111;
                                                                 |     do {
    0x000871fe ldr r1, [r3, 0x2c]                                |         r1 = *((r3 + 0x2c));
    0x00087200 cmp r5, r3                                        |         
    0x00087202 sub.w r1, r1, r2                                  |         r1 -= r2;
    0x00087206 clz r1, r1                                        |         r1 &= r1;
    0x0008720a lsr.w r1, r1, 5                                   |         r1 >>= 5;
    0x0008720e it eq                                             |         
                                                                 |         if (r5 != r3) {
    0x00087210 moveq r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x00087212 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x00087214 bne.w 0x875f8                                     |             goto label_111;
                                                                 |         }
                                                                 | label_110:
    0x00087218 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0008721a cmp r3, 0                                         |         
    0x0008721c bne 0x871fe                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_52:
    0x0008721e ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00087220 mov r2, r5                                        |     r2 = r5;
    0x00087222 ldr r1, [r5]                                      |     r1 = *(r5);
    0x00087224 adds r0, 0x18                                     |     r0 += 0x18;
    0x00087226 bl 0x147a8                                        |     r0 = fcn_000147a8 (r0, r1, r2, r3, r4);
    0x0008722a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008722c bne.w 0x875ba                                     |         goto label_112;
                                                                 |     }
    0x00087230 ldr.w r3, [r8, 0x18]                              |     r3 = *((r8 + 0x18));
    0x00087234 orr r3, r3, 1                                     |     r3 |= 1;
    0x00087238 str.w r3, [r8, 0x18]                              |     __asm ("str.w r3, [r8, 0x18]");
                                                                 | label_48:
    0x0008723c ldrb.w r2, [r8, 0xb1]                             |     r2 = *((r8 + 0xb1));
    0x00087240 clz r3, fp                                        |     r3 &= fp;
    0x00087244 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00087246 cmp r2, 0                                         |     
    0x00087248 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0008724a orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0008724e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00087250 bne 0x871a0                                       |         goto label_35;
                                                                 |     }
    0x00087252 ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x00087256 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00087258 bls.w 0x86fd6                                     |         goto label_36;
                                                                 |     }
                                                                 | label_109:
    0x0008725c ldr r3, [sp, 0x14]                                |     r3 = x;
    0x0008725e str.w r5, [r6, 0xf0]                              |     __asm ("str.w r5, [r6, 0xf0]");
    0x00087262 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
                                                                 | label_39:
    0x00087264 ldr r4, [sp, 0x14]                                |     r4 = x;
    0x00087266 adds r4, 8                                        |     r4 += 8;
    0x00087268 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0008726a beq.w 0x87618                                     |         goto label_113;
                                                                 |     }
    0x0008726e ldr.w sl, [sp, 0x2c]                              |     sl = var_2ch;
    0x00087272 movs r7, 0                                        |     r7 = 0;
    0x00087274 b 0x86a9c                                         |     goto label_33;
                                                                 | label_108:
    0x00087276 ldr r7, [r3, 8]                                   |     r7 = *((r3 + 8));
    0x00087278 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0008727a beq 0x87182                                       |         goto label_37;
                                                                 |     }
    0x0008727c ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x0008727e ldr r1, [pc, 0x1b4]                               |     
    0x00087280 str.w sb, [sp, 0x24]                              |     __asm ("str.w sb, [var_24h]");
    0x00087284 mov ip, r3                                        |     
    0x00087286 add r1, pc                                        |     r1 = 0x10e6c0;
    0x00087288 b 0x87292                                         |     
                                                                 |     while (r3 != ip) {
                                                                 | label_38:
    0x0008728a ldr r7, [r7, 0x14]                                |         r7 = *((r7 + 0x14));
    0x0008728c cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0008728e beq.w 0x873c2                                     |             goto label_114;
                                                                 |         }
    0x00087292 ldrh r3, [r7, 0x32]                               |         r3 = *((r7 + 0x32));
    0x00087294 cmp r3, ip                                        |         
    0x00087296 bne 0x8728a                                       |         
                                                                 |     }
    0x00087298 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x0008729c beq 0x872ea                                       |         goto label_42;
                                                                 |     }
    0x0008729e ldr r4, [r7, 4]                                   |     r4 = *((r7 + 4));
    0x000872a0 movs r0, 0                                        |     r0 = 0;
    0x000872a2 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x000872a4 subs r4, 2                                        |     r4 -= 2;
    0x000872a6 sub.w lr, r3, 2                                   |     lr = r3 - 2;
                                                                 | label_41:
    0x000872aa ldrsh r2, [r4, 2]!                                |     r2 = *((r4 += 2));
    0x000872ae ldrsh r3, [lr, 2]!                                |     r3 = *((lr += 2));
    0x000872b2 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000872b4 bne 0x872e6                                       |         goto label_115;
                                                                 |     }
    0x000872b6 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x000872b8 ldr.w r3, [r3, r0, lsl 2]                         |     offset_6 = r0 << 2;
                                                                 |     r3 = *((r3 + offset_6));
    0x000872bc add.w sb, r3, -1                                  |     sb = r3 + -1;
    0x000872c0 ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x000872c2 ldr.w r3, [r3, r0, lsl 2]                         |     offset_7 = r0 << 2;
                                                                 |     r3 = *((r3 + offset_7));
    0x000872c6 add.w sl, r3, -1                                  |     sl = r3 + -1;
                                                                 |     do {
                                                                 | label_40:
    0x000872ca ldrb r3, [sb, 1]!                                 |         r3 = *((sb += 1));
    0x000872ce ldrb r2, [sl, 1]!                                 |         r2 = *((sl += 1));
    0x000872d2 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x000872d4 beq 0x87348                                       |             goto label_116;
                                                                 |         }
    0x000872d6 add r3, r1                                        |         r3 += r1;
    0x000872d8 add r2, r1                                        |         r2 += r1;
    0x000872da ldrb.w r3, [r3, 0x140]                            |         r3 = *((r3 + 0x140));
    0x000872de ldrb.w r2, [r2, 0x140]                            |         r2 = *((r2 + 0x140));
    0x000872e2 cmp r3, r2                                        |         
    0x000872e4 beq 0x872ca                                       |         
                                                                 |     } while (r3 == r2);
                                                                 | label_115:
    0x000872e6 cmp ip, r0                                        |     
                                                                 |     if (ip != r0) {
    0x000872e8 bne 0x8728a                                       |         goto label_38;
                                                                 |     }
                                                                 | label_42:
    0x000872ea ldrb.w r3, [r7, 0x36]                             |     r3 = *((r7 + 0x36));
    0x000872ee ldrb.w r2, [r5, 0x36]                             |     r2 = *((r5 + 0x36));
    0x000872f2 ldr.w sb, [sp, 0x24]                              |     sb = var_24h;
    0x000872f6 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x000872f8 beq 0x8731a                                       |         
    0x000872fa cmp r2, 0xb                                       |         
                                                                 |         if (r2 != 0xb) {
    0x000872fc beq 0x87314                                       |             
    0x000872fe cmp r3, 0xb                                       |             
                                                                 |             if (r3 == 0xb) {
    0x00087300 beq.w 0x87630                                     |                 goto label_117;
                                                                 |             }
    0x00087304 ldr r1, [pc, 0x130]                               |             
    0x00087306 movs r2, 0                                        |             r2 = 0;
    0x00087308 mov r0, r6                                        |             r0 = r6;
    0x0008730a add r1, pc                                        |             r1 = 0x10e746;
    0x0008730c bl 0x1d554                                        |             fcn_0001d554 (r0, r1);
    0x00087310 ldrb.w r3, [r7, 0x36]                             |             r3 = *((r7 + 0x36));
                                                                 |         }
    0x00087314 cmp r3, 0xb                                       |         
                                                                 |         if (r3 == 0xb) {
    0x00087316 beq.w 0x87630                                     |             goto label_117;
                                                                 |         }
                                                                 |     }
                                                                 | label_57:
    0x0008731a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0008731c cmp r3, 2                                         |     
    0x0008731e itttt eq                                          |     
                                                                 |     if (r3 != 2) {
    0x00087320 ldrbeq r3, [r7, 0x37]                             |         r3 = *((r7 + 0x37));
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x00087324 ldreq r2, [sp, 0x10]                              |         r2 = var_10h;
                                                                 |     }
                                                                 |     if (r3 == 2) {
    0x00087326 bfieq r3, r2, 0, 2                                |         __asm ("bfieq r3, r2, 0, 2");
                                                                 |     }
                                                                 |     if (r3 == 2) {
    0x0008732a strb.w r3, [r7, 0x37]                             |         *((r7 + 0x37)) = r3;
                                                                 |     }
    0x0008732e ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x00087332 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00087334 bls.w 0x86fd6                                     |         goto label_36;
                                                                 |     }
    0x00087338 ldr.w r3, [r6, 0xf0]                              |     r3 = *((r6 + 0xf0));
    0x0008733c str r3, [r5, 0x14]                                |     *((r5 + 0x14)) = r3;
    0x0008733e ldr r3, [sp, 0x14]                                |     r3 = x;
    0x00087340 str.w r5, [r6, 0xf0]                              |     __asm ("str.w r5, [r6, 0xf0]");
    0x00087344 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x00087346 b 0x87264                                         |     goto label_39;
                                                                 | label_116:
    0x00087348 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0008734a bne 0x872ca                                       |         goto label_40;
                                                                 |     }
    0x0008734c adds r0, 1                                        |     r0++;
    0x0008734e cmp r0, ip                                        |     
                                                                 |     if (r0 != ip) {
    0x00087350 bne 0x872aa                                       |         goto label_41;
                                                                 |     }
    0x00087352 b 0x872ea                                         |     goto label_42;
                                                                 | label_107:
    0x00087354 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
                                                                 | label_106:
    0x00087356 ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x0008735a bfc r3, 5, 1                                      |     value_8 = BIT_MASK (1, );
                                                                 |     value_8 = ~value_8;
                                                                 |     r3 &= value_8;
    0x0008735e strb.w r3, [r5, 0x37]                             |     *((r5 + 0x37)) = r3;
    0x00087362 b 0x8717c                                         |     goto label_43;
                                                                 | label_84:
    0x00087364 ldr r1, [pc, 0xd4]                                |     
    0x00087366 mov r0, r6                                        |     r0 = r6;
    0x00087368 mov r2, sb                                        |     r2 = sb;
    0x0008736a add r1, pc                                        |     r1 = 0x10e7aa;
    0x0008736c bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00087370 b.w 0x86a8e                                       |     goto label_5;
                                                                 | label_97:
    0x00087374 ldr r3, [pc, 0xc8]                                |     
    0x00087376 movw r0, 0xffff                                   |     r0 = 0xffff;
    0x0008737a ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0008737c ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x0008737e add r3, pc                                        |     r3 = 0x10e7c2;
    0x00087380 addw r3, r3, 0xeec                                |     __asm ("addw r3, r3, aav.0x000000ff");
    0x00087384 strh.w r0, [r1, sl, lsl 1]                        |     offset_9 = sl << 1;
                                                                 |     *((r1 + offset_9)) = r0;
    0x00087388 str.w r3, [r2, sl, lsl 2]                         |     __asm ("str.w r3, [r2, sl, lsl 2]");
    0x0008738c b 0x870f6                                         |     goto label_44;
                                                                 | label_104:
    0x0008738e bl 0x1669c                                        |     r0 = fcn_0001669c (r0);
    0x00087392 bl 0xc2a4                                         |     fcn_0000c2a4 (r0);
    0x00087396 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0008739a beq.w 0x87588                                     |         goto label_118;
                                                                 |     }
    0x0008739e ldr r3, [sp, 0x14]                                |     r3 = x;
    0x000873a0 ldrh.w lr, [r5, 0x34]                             |     
    0x000873a4 ldrsh.w sl, [r3, 0x22]                            |     sl = *((r3 + 0x22));
    0x000873a8 cmp sl, lr                                        |     
                                                                 |     if (sl > lr) {
    0x000873aa bgt 0x87444                                       |         goto label_119;
                                                                 |     }
    0x000873ac ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x000873b0 cmp.w sl, 0                                       |     
    0x000873b4 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x000873b8 strb.w r3, [r5, 0x37]                             |     *((r5 + 0x37)) = r3;
                                                                 |     if (sl > 0) {
    0x000873bc bgt.w 0x87132                                     |         goto label_45;
                                                                 |     }
    0x000873c0 b 0x87182                                         |     goto label_37;
                                                                 | label_114:
    0x000873c2 ldr.w sb, [sp, 0x24]                              |     sb = var_24h;
    0x000873c6 b 0x87182                                         |     goto label_37;
                                                                 | label_119:
    0x00087444 ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x00087448 ldrb.w r2, [r8, 0xb1]                             |     r2 = *((r8 + 0xb1));
    0x0008744c cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x0008744e bhi.w 0x8718e                                     |         goto label_46;
                                                                 |     }
    0x00087452 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00087454 bne.w 0x871e6                                     |         goto label_47;
                                                                 |     }
                                                                 | label_53:
    0x00087458 ldr r3, [sp, 0x14]                                |     r3 = x;
    0x0008745a ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0008745c eor r3, r3, 0x80                                  |     r3 ^= 0x80;
    0x00087460 ubfx r3, r3, 7, 1                                 |     r3 = (r3 >> 7) & ((1 << 1) - 1);
    0x00087464 cmp.w fp, 0                                       |     
    0x00087468 it ne                                             |     
                                                                 |     if (fp == 0) {
    0x0008746a orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0008746e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00087470 beq.w 0x871a0                                     |         goto label_35;
                                                                 |     }
    0x00087474 ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x00087476 ldr r7, [r6, 8]                                   |     r7 = *((r6 + 8));
    0x00087478 add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x0008747c str.w sl, [r6, 0x2c]                              |     __asm ("str.w sl, [r6, 0x2c]");
    0x00087480 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00087482 beq 0x8756a                                       |         goto label_120;
                                                                 |     }
                                                                 | label_49:
    0x00087484 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00087486 movs r1, 1                                        |     r1 = 1;
    0x00087488 mov r0, r6                                        |     r0 = r6;
    0x0008748a mov r2, r4                                        |     r2 = r4;
    0x0008748c bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x00087490 movs r3, 0                                        |     r3 = 0;
    0x00087492 movs r1, 0xb8                                     |     r1 = 0xb8;
    0x00087494 mov r2, r3                                        |     r2 = r3;
    0x00087496 str r3, [sp]                                      |     *(sp) = r3;
    0x00087498 mov r0, r7                                        |     r0 = r7;
    0x0008749a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0008749e movs r3, 2                                        |     r3 = 2;
    0x000874a0 str r0, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r0;
    0x000874a2 mov r2, r4                                        |     r2 = r4;
    0x000874a4 str r3, [sp]                                      |     *(sp) = r3;
    0x000874a6 movs r1, 0x93                                     |     r1 = 0x93;
    0x000874a8 mov r3, sl                                        |     r3 = sl;
    0x000874aa mov r0, r7                                        |     r0 = r7;
    0x000874ac bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x000874b0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000874b2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000874b4 beq.w 0x875d6                                     |         goto label_121;
                                                                 |     }
    0x000874b8 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000874ba ldr.w r2, [r6, 0xc8]                              |     r2 = *((r6 + 0xc8));
    0x000874be ldr r1, [r3]                                      |     r1 = *(r3);
    0x000874c0 ldr.w r3, [r6, 0xc4]                              |     r3 = *((r6 + 0xc4));
    0x000874c4 subs r3, r3, r1                                   |     r3 -= r1;
    0x000874c6 add r3, r2                                        |     r3 += r2;
    0x000874c8 adds r2, r1, r3                                   |     r2 = r1 + r3;
    0x000874ca ldrb r2, [r2, -0x1]                               |     r2 = *((r2 - 0x1));
    0x000874ce cmp r2, 0x3b                                      |     
    0x000874d0 ldr r2, [sp, 0x104]                               |     r2 = *(arg_104h);
    0x000874d2 it eq                                             |     
                                                                 |     if (r2 != 0x3b) {
    0x000874d4 addeq r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
    0x000874d8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000874da bne 0x87564                                       |         goto label_122;
                                                                 |     }
    0x000874dc ldr r2, [pc, 0x16c]                               |     
    0x000874de add r2, pc                                        |     r2 = 0x10eb2e;
                                                                 |     do {
    0x000874e0 str r1, [sp]                                      |         *(sp) = r1;
    0x000874e2 mov r0, r8                                        |         r0 = r8;
    0x000874e4 ldr r1, [pc, 0x168]                               |         
    0x000874e6 add r1, pc                                        |         r1 = 0x10eb3a;
    0x000874e8 bl 0x20e84                                        |         fcn_00020e84 (r0);
    0x000874ec ldr r2, [sp, 0x14]                                |         r2 = x;
    0x000874ee mov r4, r0                                        |         r4 = r0;
    0x000874f0 ldr.w r3, [r8, 0x10]                              |         r3 = *((r8 + 0x10));
    0x000874f4 strd sl, r0, [sp, 4]                              |         __asm ("strd sl, r0, [var_4h]");
    0x000874f8 mov r0, r6                                        |         r0 = r6;
    0x000874fa ldr r2, [r2]                                      |         r2 = *(r2);
    0x000874fc ldr r1, [pc, 0x154]                               |         
    0x000874fe str r2, [sp]                                      |         *(sp) = r2;
    0x00087500 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00087502 add r1, pc                                        |         r1 = 0x10eb5a;
    0x00087504 ldr r2, [r3, r2]                                  |         r2 = *((r3 + r2));
    0x00087506 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00087508 bl 0x85c90                                        |         fcn_00085c90 (r0, r1, r2);
                                                                 |         if (r4 != 0) {
    0x0008750c cbz r4, 0x87516                                   |             
    0x0008750e mov r1, r4                                        |             r1 = r4;
    0x00087510 mov r0, r8                                        |             r0 = r8;
    0x00087512 bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
                                                                 | label_55:
    0x00087516 cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x0008751a beq 0x87558                                       |             
    0x0008751c mov r2, sl                                        |             r2 = sl;
    0x0008751e mov r1, r5                                        |             r1 = r5;
    0x00087520 mov r0, r6                                        |             r0 = r6;
    0x00087522 bl 0x61184                                        |             fcn_00061184 (r0, r1, r2, r3);
    0x00087526 ldr r4, [sp, 0x1c]                                |             r4 = var_1ch;
    0x00087528 ldr r1, [r6, 8]                                   |             r1 = *((r6 + 8));
    0x0008752a ldr r0, [r6]                                      |             r0 = *(r6);
    0x0008752c mov r2, r4                                        |             r2 = r4;
    0x0008752e bl 0x2a8e4                                        |             fcn_0002a8e4 (r0, r1, r2);
    0x00087532 ldr r1, [pc, 0x124]                               |             
    0x00087534 mov r0, r8                                        |             r0 = r8;
    0x00087536 ldr r2, [r5]                                      |             r2 = *(r5);
    0x00087538 add r1, pc                                        |             r1 = 0x10eb96;
    0x0008753a bl 0x20e84                                        |             fcn_00020e84 (r0);
    0x0008753e mov r1, r4                                        |             r1 = r4;
    0x00087540 mov r2, r0                                        |             r2 = r0;
    0x00087542 movs r3, 0                                        |             r3 = 0;
    0x00087544 mov r0, r7                                        |             r0 = r7;
    0x00087546 bl 0x2b06c                                        |             fcn_0002b06c (r0, r1, r2, r3);
    0x00087548 ldc2 p2, c2, [r1]                                 |             __asm ("ldc2 p2, c2, [r1]");
    0x0008754c movs r3, 1                                        |             r3 = 1;
    0x0008754e movs r1, 0xa6                                     |             r1 = 0xa6;
    0x00087550 mov r0, r7                                        |             r0 = r7;
    0x00087552 str r2, [sp]                                      |             *(sp) = r2;
    0x00087554 bl 0x29ac4                                        |             fcn_00029ac4 (r0, r1, r2, r3);
                                                                 |         }
    0x00087558 ldr r2, [r7, 0x6c]                                |         r2 = *((r7 + 0x6c));
    0x0008755a mov r0, r7                                        |         r0 = r7;
    0x0008755c ldr r1, [r5, 0x2c]                                |         r1 = *((r5 + 0x2c));
    0x0008755e bl 0xbc2c                                         |         fcn_0000bc2c (r0, r1, r2);
    0x00087562 b 0x8723c                                         |         goto label_48;
                                                                 | label_122:
    0x00087564 ldr r2, [pc, 0xf4]                                |         
    0x00087566 add r2, pc                                        |         r2 = 0x10ebc6;
    0x00087568 b 0x874e0                                         |         
                                                                 |     } while (1);
                                                                 | label_120:
    0x0008756a mov r0, r6                                        |     r0 = r6;
    0x0008756c bl 0x29b54                                        |     r0 = fcn_00029b54 (r0, r1);
    0x00087570 mov r7, r0                                        |     r7 = r0;
    0x00087572 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00087574 bne 0x87484                                       |         goto label_49;
                                                                 |     }
    0x00087576 b 0x86fd6                                         |     goto label_36;
                                                                 | label_61:
    0x00087578 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_89:
    0x0008757c mov sl, r2                                        |     sl = r2;
    0x0008757e b 0x86ebc                                         |     goto label_50;
                                                                 | label_85:
    0x00087580 bl 0x4a260                                        |     fcn_0004a260 (r0);
    0x00087584 b.w 0x86ca2                                       |     goto label_51;
                                                                 | label_118:
    0x00087588 ldrb.w r3, [r6, 0xd0]                             |     r3 = *((r6 + 0xd0));
    0x0008758c cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x0008758e bhi.w 0x871a0                                     |         goto label_35;
                                                                 |     }
    0x00087592 ldrb.w r3, [r8, 0xb1]                             |     r3 = *((r8 + 0xb1));
    0x00087596 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00087598 bne.w 0x8721e                                     |         goto label_52;
                                                                 |     }
    0x0008759c b 0x87458                                         |     goto label_53;
                                                                 | label_68:
    0x0008759e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000875a0 sub.w r3, r3, 0x80000                             |     r3 -= 0x80000;
    0x000875a4 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000875a6 movs r3, 0                                        |     
    0x000875a8 movt r3, 0xfff8                                   |     r3 = 0x-80000;
    0x000875ac str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000875ae mov.w r3, 0x8000                                  |     
    0x000875b2 movt r3, 0xffff                                   |     r3 = 0x-8000;
    0x000875b6 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000875b8 b 0x87094                                         |     goto label_54;
                                                                 | label_112:
    0x000875ba ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x000875be cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000875c0 bne.w 0x86fd6                                     |         goto label_36;
                                                                 |     }
    0x000875c4 ldrb.w r3, [r8, 0x58]                             |     r3 = *((r8 + 0x58));
    0x000875c8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000875ca bne.w 0x86fd6                                     |         goto label_36;
                                                                 |     }
    0x000875ce mov r0, r8                                        |     r0 = r8;
    0x000875d0 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x000875d4 b 0x86fd6                                         |     goto label_36;
                                                                 | label_121:
    0x000875d6 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000875d8 mov r0, r6                                        |     r0 = r6;
    0x000875da ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x000875de ldr r1, [pc, 0x80]                                |     
    0x000875e0 strd sl, r2, [sp, 4]                              |     __asm ("strd sl, r2, [var_4h]");
    0x000875e4 ldr r2, [sp, 0x14]                                |     r2 = x;
    0x000875e6 add r1, pc                                        |     r1 = 0x10ec4c;
    0x000875e8 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000875ea str r2, [sp]                                      |     *(sp) = r2;
    0x000875ec ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000875ee ldr r2, [r3, r2]                                  |     r2 = *((r3 + r2));
    0x000875f0 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000875f2 bl 0x85c90                                        |     fcn_00085c90 (r0, r1, r2);
    0x000875f6 b 0x87516                                         |     goto label_55;
                                                                 | label_111:
    0x000875f8 ldr r1, [pc, 0x68]                                |     
    0x000875fa mov r0, r6                                        |     r0 = r6;
    0x000875fc add r1, pc                                        |     r1 = 0x10ec64;
    0x000875fe bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00087602 ldr r2, [pc, 0x64]                                |     
    0x00087604 movw r1, 0xe75d                                   |     
    0x00087608 movt r1, 1                                        |     r1 = 0x1e75d;
    0x0008760c movs r0, 0xb                                      |     r0 = 0xb;
    0x0008760e add r2, pc                                        |     r2 = 0x10ec7c;
    0x00087610 bl 0x21098                                        |     fcn_00021098 (r0, r1, r2);
    0x00087614 str r0, [r6, 0xc]                                 |     *((r6 + 0xc)) = r0;
    0x00087616 b 0x86fd6                                         |     goto label_36;
                                                                 | label_113:
    0x00087618 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x0008761a cbz r3, 0x8763a                                   |         
    0x0008761c ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0008761e mov r0, r8                                        |         r0 = r8;
    0x00087620 bl 0x16c98                                        |         fcn_00016c98 (r0, r1);
    0x00087624 mov r1, fp                                        |         r1 = fp;
    0x00087626 mov r0, r8                                        |         r0 = r8;
    0x00087628 bl 0x16a58                                        |         fcn_00016a58 (r0, r1);
    0x0008762c b.w 0x86930                                       |         goto label_56;
                                                                 | label_117:
    0x00087630 ldrb.w r3, [r5, 0x36]                             |         r3 = *((r5 + 0x36));
    0x00087634 strb.w r3, [r7, 0x36]                             |         *((r7 + 0x36)) = r3;
    0x00087638 b 0x8731a                                         |         goto label_57;
                                                                 |     }
    0x0008763a mov r1, fp                                        |     r1 = fp;
    0x0008763c mov r0, r8                                        |     r0 = r8;
    0x0008763e bl 0x16a58                                        |     fcn_00016a58 (r0, r1);
    0x00087642 b.w 0x86930                                       |     goto label_56;
                                                                 | label_92:
    0x00087646 movs r3, 0                                        |     r3 = 0;
    0x00087648 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0008764a udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x87938 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00087938 ()                                      | void fcn_00087938 (int16_t arg_a0h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     arithmetic var_24h;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int32_t var_48h_2;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int32_t var_64h_2;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_74h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00087938 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0008793c sub sp, 0x7c                                      |     
    0x0008793e str r0, [sp, 0x28]                                |     x = r0;
    0x00087940 mov r5, r0                                        |     r5 = r0;
    0x00087942 mov r4, r2                                        |     r4 = r2;
    0x00087944 ldr.w r0, [pc, 0xba8]                             |     r0 = *(0x000884f0);
    0x00087948 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x0008794a ldr.w r2, [pc, 0xba8]                             |     
    0x0008794e add r0, pc                                        |     r0 += pc;
    0x00087950 ldr.w fp, [sp, 0xa0]                              |     fp = *(arg_a0h);
    0x00087954 ldr.w sl, [r5]                                    |     sl = *(r5);
    0x00087958 ldr r2, [r0, r2]                                  |     r2 = *((r0 + r2));
    0x0008795a ldr r2, [r2]                                      |     r2 = *(0x884f6);
    0x0008795c str r2, [sp, 0x74]                                |     var_74h = r2;
    0x0008795e mov.w r2, 0                                       |     r2 = 0;
    0x00087962 strd r3, r1, [sp, 0x2c]                           |     __asm ("strd r3, r1, [var_30h]");
    0x00087966 mov r3, r4                                        |     r3 = r4;
    0x00087968 orrs.w r3, r3, fp                                 |     r3 |= fp;
                                                                 |     if (r3 != r3) {
    0x0008796c beq.w 0x87a88                                     |         
    0x00087970 ldr.w r3, [r5, 0xec]                              |         r3 = *((r5 + 0xec));
    0x00087974 str r3, [sp, 0x24]                                |         var_24h = r3;
    0x00087976 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00087978 beq.w 0x87a88                                     |             goto label_6;
                                                                 |         }
    0x0008797c cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x00087980 beq.w 0x882f0                                     |             goto label_42;
                                                                 |         }
    0x00087984 ldrb.w r3, [sl, 0xb1]                             |         r3 = *((sl + 0xb1));
    0x00087988 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0008798a beq.w 0x87ab8                                     |             goto label_9;
                                                                 |         }
                                                                 | label_11:
    0x0008798e ldr.w r2, [pc, 0xb68]                             |         r2 = *(0x000884f8);
    0x00087992 ldr.w r3, [pc, 0xb60]                             |         r3 = *(0x884f6);
    0x00087996 add r2, pc                                        |         r2 += pc;
    0x00087998 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0008799a ldr r2, [r3]                                      |         r2 = *(0x884f6);
    0x0008799c ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x0008799e eors r2, r3                                       |         r2 ^= r3;
    0x000879a0 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000879a4 bne.w 0x88718                                     |             goto label_43;
                                                                 |         }
    0x000879a8 ldr.w r1, [pc, 0xb50]                             |         
    0x000879ac add r1, pc                                        |         r1 = 0x10feac;
                                                                 | label_18:
    0x000879ae ldr r0, [sp, 0x28]                                |         r0 = x;
    0x000879b0 add sp, 0x7c                                      |         
    0x000879b2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x000879b6 b.w 0x1d554                                       |         void (*0x1d554)() ();
                                                                 | label_5:
    0x000879ba ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000879bc cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000879be beq.w 0x8864c                                     |             goto label_44;
                                                                 |         }
    0x000879c2 ldr r3, [sp, 0x28]                                |         r3 = x;
    0x000879c4 add.w r1, r3, 0xc4                                |         r1 = r3 + 0xc4;
                                                                 | label_26:
    0x000879c8 ldr r3, [r1]                                      |         r3 = *(r1);
    0x000879ca ldr r0, [sp, 0x28]                                |         r0 = x;
    0x000879cc ldr.w ip, [r0, 0xbc]                              |         ip = *((r0 + 0xbc));
    0x000879d0 ldrb r0, [r3]                                     |         r0 = *(r3);
    0x000879d2 sub.w r3, r3, ip                                  |         r3 -= ip;
    0x000879d6 cmp r0, 0x3b                                      |         
    0x000879d8 mov r0, sl                                        |         r0 = sl;
    0x000879da it ne                                             |         
                                                                 |         if (r0 == 0x3b) {
    0x000879dc ldrne r1, [r1, 4]                                 |             r1 = *((r1 + 4));
                                                                 |         }
    0x000879de str.w ip, [sp]                                    |         __asm ("str.w ip, [sp]");
    0x000879e2 it ne                                             |         
                                                                 |         if (r0 == 0x3b) {
    0x000879e4 addne r3, r3, r1                                  |             r3 += r1;
                                                                 |         }
    0x000879e6 ldr.w r1, [pc, 0xb18]                             |         r1 = *(0x00088500);
    0x000879ea add r1, pc                                        |         r1 += pc;
    0x000879ec bl 0x20e84                                        |         r0 = fcn_00020e84 (r0);
    0x000879f0 mov sb, r0                                        |         sb = r0;
                                                                 | label_29:
    0x000879f2 ldr r1, [sp, 0x24]                                |         r1 = var_24h;
    0x000879f4 lsl.w r8, r7, 4                                   |         r8 = r7 << 4;
    0x000879f8 ldr.w r2, [sl, 0x10]                              |         r2 = *((sl + 0x10));
    0x000879fc ldr r0, [sp, 0x28]                                |         r0 = x;
    0x000879fe ldr r1, [r1]                                      |         r1 = *(r1);
    0x00087a00 ldr.w r2, [r2, r8]                                |         r2 = *((r2 + r8));
    0x00087a04 str.w sb, [sp, 0xc]                               |         __asm ("str.w sb, [var_ch]");
    0x00087a08 strd r1, r1, [sp]                                 |         __asm ("strd r1, r1, [sp]");
    0x00087a0c ldr r1, [r0, 0x58]                                |         r1 = *((r0 + 0x58));
    0x00087a0e ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x00087a10 str r1, [sp, 0x10]                                |         var_10h = r1;
    0x00087a12 ldr r1, [r0, 0x5c]                                |         r1 = *((r0 + 0x5c));
    0x00087a14 str r1, [sp, 8]                                   |         var_8h = r1;
    0x00087a16 ldr.w r1, [pc, 0xaec]                             |         r1 = *(0x00088504);
    0x00087a1a add r1, pc                                        |         r1 += pc;
    0x00087a1c bl 0x85c90                                        |         fcn_00085c90 (r0, r1, r2);
    0x00087a20 cmp.w sb, 0                                       |         
                                                                 |         if (sb != 0) {
    0x00087a24 beq 0x87a2e                                       |             
    0x00087a26 mov r1, sb                                        |             r1 = sb;
    0x00087a28 mov r0, sl                                        |             r0 = sl;
    0x00087a2a bl 0x137d0                                        |             fcn_000137d0 (r0, r1);
                                                                 |         }
    0x00087a2e ldr r4, [sp, 0x28]                                |         r4 = x;
    0x00087a30 mov r2, r7                                        |         r2 = r7;
    0x00087a32 ldr r1, [r4, 8]                                   |         r1 = *((r4 + 8));
    0x00087a34 ldr r0, [r4]                                      |         r0 = *(r4);
    0x00087a36 bl 0x2a8e4                                        |         fcn_0002a8e4 (r0, r1, r2);
    0x00087a3a ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00087a3c ldr r3, [r3, 0x1c]                                |         r3 = *((r3 + 0x1c));
    0x00087a3e lsls r1, r3, 0x1c                                 |         r1 = r3 << 0x1c;
                                                                 |         if (r1 < r3) {
    0x00087a40 bpl 0x87a5a                                       |             
    0x00087a42 ldrb.w r3, [r4, 0xd0]                             |             r3 = *((r4 + 0xd0));
                                                                 |             if (r3 != 0) {
    0x00087a46 cbnz r3, 0x87a5a                                  |                 goto label_39;
                                                                 |             }
    0x00087a48 ldr.w r3, [sl, 0x10]                              |             r3 = *((sl + 0x10));
    0x00087a4c add.w r2, r3, r8                                  |             r2 = r3 + r8;
    0x00087a50 ldr r2, [r2, 0xc]                                 |             r2 = *((r2 + 0xc));
    0x00087a52 ldr r2, [r2, 0x48]                                |             r2 = *((r2 + 0x48));
    0x00087a54 cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x00087a56 beq.w 0x886e6                                     |                 goto label_45;
                                                                 |             }
                                                                 |         }
                                                                 | label_39:
    0x00087a5a ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00087a5c mov r0, sl                                        |         r0 = sl;
    0x00087a5e ldr.w r1, [pc, 0xaa8]                             |         r1 = sym.sqlite3_trace;
    0x00087a62 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00087a64 add r1, pc                                        |         r1 += pc;
    0x00087a66 bl 0x20e84                                        |         fcn_00020e84 (r0);
    0x00087a6a movs r3, 0                                        |         r3 = 0;
    0x00087a6c mov r2, r0                                        |         r2 = r0;
    0x00087a6e mov r1, r7                                        |         r1 = r7;
    0x00087a70 mov r0, r6                                        |         r0 = r6;
    0x00087a72 bl 0x2b06c                                        |         fcn_0002b06c (r0, r1, r2, r3);
    0x00087a76 ldrb.w r3, [sl, 0xb1]                             |         r3 = *((sl + 0xb1));
    0x00087a7a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00087a7c bne.w 0x8836c                                     |             goto label_46;
                                                                 |         }
                                                                 | label_14:
    0x00087a80 cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x00087a84 beq.w 0x88408                                     |             goto label_47;
                                                                 |         }
                                                                 |     }
                                                                 | label_6:
    0x00087a88 ldr.w r2, [pc, 0xa80]                             |     
    0x00087a8c ldr.w r3, [pc, 0xa64]                             |     r3 = *(0x884f4);
    0x00087a90 add r2, pc                                        |     r2 = 0x10ffa0;
    0x00087a92 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00087a94 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00087a96 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00087a98 eors r2, r3                                       |     r2 ^= r3;
    0x00087a9a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00087a9e bne.w 0x88718                                     |         goto label_43;
                                                                 |     }
    0x00087aa2 add sp, 0x7c                                      |     
    0x00087aa4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_10:
    0x00087aa8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00087aaa cmp r3, 1                                         |     
    0x00087aac str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x00087aae ittt eq                                           |     
                                                                 |     if (r3 != 1) {
    0x00087ab0 ldreq r3, [r2, 0x1c]                              |         r3 = *((r2 + 0x1c));
                                                                 |     }
                                                                 |     if (r3 != 1) {
    0x00087ab2 orreq r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 == 1) {
    0x00087ab6 str r3, [r2, 0x1c]                                |         *((r2 + 0x1c)) = r3;
                                                                 |     }
                                                                 | label_9:
    0x00087ab8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00087aba lsls r7, r3, 0xf                                  |     r7 = r3 << 0xf;
                                                                 |     if (r7 >= r3) {
    0x00087abc bpl 0x87b5e                                       |         goto label_48;
                                                                 |     }
    0x00087abe ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00087ac0 ldrsh.w r0, [r5, 0x22]                            |     r0 = *((r5 + 0x22));
    0x00087ac4 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x00087ac6 cmp r0, 0                                         |     
    0x00087ac8 orr r3, r3, 0x10000                               |     r3 |= 0x10000;
    0x00087acc str r3, [r5, 0x1c]                                |     *((r5 + 0x1c)) = r3;
                                                                 |     if (r0 <= 0) {
    0x00087ace ble 0x87b5e                                       |         goto label_48;
                                                                 |     }
    0x00087ad0 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00087ad2 movs r2, 0                                        |     r2 = 0;
    0x00087ad4 movs r6, 0x41                                     |     r6 = 0x41;
    0x00087ad6 movs r7, 2                                        |     r7 = 2;
    0x00087ad8 b 0x87b0a                                         |     
                                                                 |     while (r1 > 0xf) {
    0x00087ada cmp r4, 0x10                                      |         
    0x00087adc ldrh r4, [r3, 0xa]                                |         r4 = *((r3 + 0xa));
    0x00087ade it eq                                             |         
                                                                 |         if (r4 != 0x10) {
    0x00087ae0 strbeq r6, [r3, 5]                                |             *((r3 + 5)) = r6;
                                                                 |         }
    0x00087ae2 lsls r4, r4, 0x1f                                 |         r4 <<= 0x1f;
                                                                 |         if (r4 < r4) {
    0x00087ae4 bpl 0x87b02                                       |             
    0x00087ae6 ldrsh.w r4, [r5, 0x20]                            |             r4 = *((r5 + 0x20));
    0x00087aea cmp r4, r2                                        |             
                                                                 |             if (r4 == r2) {
    0x00087aec beq 0x87b02                                       |                 goto label_49;
                                                                 |             }
    0x00087aee lsls r1, r1, 0x1c                                 |             r1 <<= 0x1c;
                                                                 |             if (r1 != r1) {
    0x00087af0 bne 0x87b02                                       |                 goto label_49;
                                                                 |             }
    0x00087af2 ldrb r1, [r3, 4]                                  |             r1 = *((r3 + 4));
    0x00087af4 bfi r1, r7, 0, 4                                  |             value_0 = BIT_MASK (0, 4);
                                                                 |             value_1 = r7 & value_0;
                                                                 |             value_0 = ~value_0;
                                                                 |             r1 &= value_0;
                                                                 |             r1 |= value_1;
    0x00087af8 strb r1, [r3, 4]                                  |             *((r3 + 4)) = r1;
    0x00087afa ldr r1, [r5, 0x1c]                                |             r1 = *((r5 + 0x1c));
    0x00087afc orr r1, r1, 0x800                                 |             r1 |= 0x800;
    0x00087b00 str r1, [r5, 0x1c]                                |             *((r5 + 0x1c)) = r1;
                                                                 |         }
                                                                 | label_49:
    0x00087b02 adds r2, 1                                        |         r2++;
    0x00087b04 adds r3, 0xc                                      |         r3 += 0xc;
    0x00087b06 cmp r0, r2                                        |         
                                                                 |         if (r0 == r2) {
    0x00087b08 beq 0x87b5e                                       |             goto label_48;
                                                                 |         }
    0x00087b0a ldrb r1, [r3, 4]                                  |         r1 = *((r3 + 4));
    0x00087b0c cmp r1, 0xf                                       |         
    0x00087b0e and r4, r1, 0xf0                                  |         r4 = r1 & 0xf0;
    0x00087b12 bhi 0x87ada                                       |         
                                                                 |     }
    0x00087b14 ldrh r2, [r3, 0xa]                                |     r2 = *((r3 + 0xa));
    0x00087b16 ldr r6, [r3]                                      |     r6 = *(r3);
    0x00087b18 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087b1a lsls r5, r2, 0x1d                                 |     r5 = r2 << 0x1d;
    0x00087b1c ldr r7, [r3]                                      |     r7 = *(r3);
                                                                 |     if (r5 >= r2) {
    0x00087b1e bpl.w 0x883d2                                     |         goto label_50;
                                                                 |     }
    0x00087b22 mov r0, r6                                        |     r0 = r6;
    0x00087b24 blx 0x9e8c                                        |     fcn_00009e8c ();
    0x00087b28 ldr.w r2, [pc, 0x9e4]                             |     
    0x00087b2c ldr.w r3, [pc, 0x9c4]                             |     r3 = *(0x884f4);
    0x00087b30 add r2, pc                                        |     r2 = 0x110044;
    0x00087b32 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00087b34 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00087b36 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00087b38 eors r2, r3                                       |     r2 ^= r3;
    0x00087b3a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00087b3e bne.w 0x88718                                     |         goto label_43;
                                                                 |     }
    0x00087b42 ldr.w r1, [pc, 0x9d0]                             |     
    0x00087b46 adds r4, r0, 1                                    |     r4 = r0 + 1;
    0x00087b48 add r4, r6                                        |     r4 += r6;
    0x00087b4a ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00087b4c mov r3, r6                                        |     r3 = r6;
    0x00087b4e mov r2, r7                                        |     r2 = r7;
    0x00087b50 add r1, pc                                        |     r1 = 0x11006a;
    0x00087b52 str r4, [sp, 0xa0]                                |     *(arg_a0h) = r4;
    0x00087b54 add sp, 0x7c                                      |     
    0x00087b56 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00087b5a b.w 0x1d554                                       |     void (*0x1d554)() ();
                                                                 | label_48:
    0x00087b5e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00087b60 lsls r6, r3, 0x18                                 |     r6 = r3 << 0x18;
                                                                 |     if (r6 >= r3) {
    0x00087b62 bpl.w 0x87e40                                     |         goto label_19;
                                                                 |     }
    0x00087b66 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087b68 ldr r2, [r3, 0x1c]                                |     r2 = *((r3 + 0x1c));
    0x00087b6a ands r5, r2, 8                                    |     r5 = r2 & 8;
                                                                 |     if (r5 != r2) {
    0x00087b6e bne.w 0x88582                                     |         goto label_51;
                                                                 |     }
    0x00087b72 lsls r4, r2, 0x1d                                 |     r4 = r2 << 0x1d;
                                                                 |     if (r4 >= r2) {
    0x00087b74 bpl.w 0x88558                                     |         goto label_52;
                                                                 |     }
    0x00087b78 ldr r1, [sp, 0x28]                                |     r1 = x;
    0x00087b7a orr r3, r2, 0x280                                 |     r3 = r2 | 0x280;
    0x00087b7c strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00087b7e ldr r6, [sp, 0x24]                                |     r6 = var_24h;
    0x00087b80 ldr r0, [r1]                                      |     r0 = *(r1);
    0x00087b82 ldr r4, [r1, 8]                                   |     r4 = *((r1 + 8));
    0x00087b84 str r3, [r6, 0x1c]                                |     *((r6 + 0x1c)) = r3;
    0x00087b86 ldrb.w r1, [r0, 0xb2]                             |     r1 = *((r0 + 0xb2));
    0x00087b8a str r0, [sp, 0x38]                                |     var_38h = r0;
    0x00087b8c ands r1, r1, 2                                    |     r1 &= 2;
                                                                 |     if (r1 != r1) {
    0x00087b90 bne 0x87bc8                                       |         goto label_53;
                                                                 |     }
    0x00087b92 ldrsh.w r6, [r6, 0x22]                            |     r6 = *((r6 + 0x22));
    0x00087b96 cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x00087b98 ble 0x87bc0                                       |         goto label_54;
                                                                 |     }
    0x00087b9a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087b9c movs r0, 0xc                                      |     r0 = 0xc;
    0x00087b9e movs r7, 2                                        |     r7 = 2;
    0x00087ba0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00087ba2 smlabb r6, r6, r0, r3                             |     __asm ("smlabb r6, r6, r0, r3");
                                                                 |     do {
    0x00087ba6 ldrh r0, [r3, 0xa]                                |         r0 = *((r3 + 0xa));
    0x00087ba8 lsls r0, r0, 0x1f                                 |         r0 <<= 0x1f;
                                                                 |         if (r0 < r0) {
    0x00087baa bpl 0x87bba                                       |             
    0x00087bac ldrb r0, [r3, 4]                                  |             r0 = *((r3 + 4));
    0x00087bae tst.w r0, 0xf                                     |             
    0x00087bb2 itt eq                                            |             
                                                                 |             if ((r0 & 0xf) == 0) {
    0x00087bb4 bfieq r0, r7, 0, 4                                |                 __asm ("bfieq r0, r7, 0, 4");
                                                                 |             }
                                                                 |             if ((r0 & 0xf) != 0) {
    0x00087bb8 strb r0, [r3, 4]                                  |                 *((r3 + 4)) = r0;
                                                                 |                 goto label_55;
                                                                 |             }
                                                                 |         }
                                                                 | label_55:
    0x00087bba adds r3, 0xc                                      |         r3 += 0xc;
    0x00087bbc cmp r6, r3                                        |         
    0x00087bbe bne 0x87ba6                                       |         
                                                                 |     } while (r6 != r3);
                                                                 | label_54:
    0x00087bc0 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087bc2 orr r2, r2, 0xa80                                 |     r2 |= 0xa80;
    0x00087bc6 str r2, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r2;
                                                                 | label_53:
    0x00087bc8 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00087bca ldr.w r3, [r3, 0x84]                              |     r3 = *((r3 + 0x84));
    0x00087bce cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00087bd0 bne.w 0x885a0                                     |         goto label_56;
                                                                 |     }
                                                                 | label_23:
    0x00087bd4 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00087bd6 ldrsh.w r3, [r2, 0x20]                            |     r3 = *((r2 + 0x20));
    0x00087bda cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00087bdc bge 0x87c56                                       |         goto label_57;
                                                                 |     }
    0x00087bde ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087be0 ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x00087be4 mov r6, sb                                        |     r6 = sb;
    0x00087be6 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00087bea bne 0x87bf8                                       |         goto label_58;
                                                                 |     }
    0x00087bec b.w 0x8873e                                       |     goto label_59;
                                                                 |     do {
    0x00087bf0 ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
    0x00087bf2 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00087bf4 beq.w 0x8873e                                     |             goto label_59;
                                                                 |         }
                                                                 | label_58:
    0x00087bf8 ldrb.w r3, [r6, 0x37]                             |         r3 = *((r6 + 0x37));
    0x00087bfc and r3, r3, 3                                     |         r3 &= 3;
    0x00087c00 cmp r3, 2                                         |         
    0x00087c02 bne 0x87bf0                                       |         
                                                                 |     } while (r3 != 2);
    0x00087c04 ldrh r2, [r6, 0x32]                               |     r2 = *((r6 + 0x32));
    0x00087c06 cmp r2, 1                                         |     
                                                                 |     if (r2 < 1) {
    0x00087c08 bls.w 0x886c0                                     |         goto label_60;
                                                                 |     }
    0x00087c0c mov.w r8, 1                                       |     r8 = 1;
    0x00087c10 mov r7, r8                                        |     r7 = r8;
    0x00087c12 b 0x87c26                                         |     
                                                                 |     while (r0 != 0) {
    0x00087c14 ldrh r3, [r6, 0x34]                               |         r3 = *((r6 + 0x34));
    0x00087c16 subs r3, 1                                        |         r3--;
    0x00087c18 strh r3, [r6, 0x34]                               |         *((r6 + 0x34)) = r3;
                                                                 | label_0:
    0x00087c1a ldrh r3, [r6, 0x32]                               |         r3 = *((r6 + 0x32));
    0x00087c1c add.w r8, r8, 1                                   |         r8++;
    0x00087c20 cmp r8, r3                                        |         
                                                                 |         if (r8 >= r3) {
    0x00087c22 bge.w 0x884d8                                     |             goto label_61;
                                                                 |         }
    0x00087c26 mov r3, r8                                        |         r3 = r8;
    0x00087c28 mov r2, r6                                        |         r2 = r6;
    0x00087c2a mov r1, r7                                        |         r1 = r7;
    0x00087c2c mov r0, r6                                        |         r0 = r6;
    0x00087c2e bl 0x15848                                        |         r0 = fcn_00015848 (r0, r1, r2, r3, r4);
    0x00087c32 cmp r0, 0                                         |         
    0x00087c34 bne 0x87c14                                       |         
                                                                 |     }
    0x00087c36 ldrd r1, r0, [r6, 0x1c]                           |     __asm ("ldrd r1, r0, [r6, 0x1c]");
    0x00087c3a ldr.w r2, [r0, r8, lsl 2]                         |     offset_2 = r8 << 2;
                                                                 |     r2 = *((r0 + offset_2));
    0x00087c3e str.w r2, [r0, r7, lsl 2]                         |     __asm ("str.w r2, [r0, r7, lsl 2]");
    0x00087c42 ldrb.w r2, [r1, r8]                               |     r2 = *((r1 + r8));
    0x00087c46 strb r2, [r1, r7]                                 |     *((r1 + r7)) = r2;
    0x00087c48 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00087c4a ldrsh.w r1, [r2, r8, lsl 1]                       |     offset_3 = r8 << 1;
                                                                 |     r1 = *((r2 + offset_3));
    0x00087c4e strh.w r1, [r2, r7, lsl 1]                        |     offset_4 = r7 << 1;
                                                                 |     *((r2 + offset_4)) = r1;
    0x00087c52 adds r7, 1                                        |     r7++;
    0x00087c54 b 0x87c1a                                         |     goto label_0;
                                                                 | label_57:
    0x00087c56 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00087c58 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00087c5c ldr.w r0, [r2, r3, lsl 2]                         |     offset_5 = r3 << 2;
                                                                 |     r0 = *((r2 + offset_5));
    0x00087c60 str r0, [sp, 0x58]                                |     var_58h = r0;
                                                                 |     if (r0 != 0) {
    0x00087c62 cbz r0, 0x87c6c                                   |         
    0x00087c64 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00087c68 bic r0, r0, 0xc0000000                            |         r0 = BIT_MASK (r0, 0xc0000000);
                                                                 |     }
    0x00087c6c movs r3, 0                                        |     r3 = 0;
    0x00087c6e movs r1, 0x3b                                     |     r1 = 0x3b;
    0x00087c70 str r0, [sp, 0x5c]                                |     var_5ch = r0;
    0x00087c72 add r2, sp, 0x58                                  |     r2 += var_58h;
    0x00087c74 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00087c76 bl 0x1db90                                        |     fcn_0001db90 (r0, r1, r2, r3, r4);
    0x00087c7a ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00087c7c mov r1, r0                                        |     r1 = r0;
    0x00087c7e ldr r0, [r3]                                      |     r0 = *(r3);
    0x00087c80 bl 0x1db50                                        |     r0 = fcn_0001db50 (r0);
    0x00087c84 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00087c86 beq.w 0x8860a                                     |         goto label_62;
                                                                 |     }
    0x00087c8a ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00087c8c ldrb.w r3, [r2, 0xd0]                             |     r3 = *((r2 + 0xd0));
    0x00087c90 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00087c92 bls 0x87cb0                                       |         goto label_63;
                                                                 |     }
    0x00087c94 ldr.w r3, [r2, 0x10c]                             |     r3 = *((r2 + 0x10c));
    0x00087c98 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00087c9a add.w r1, r2, 0x20                                |     r1 = r2 + 0x20;
                                                                 |     if (r3 != 0) {
    0x00087c9e cbnz r3, 0x87ca6                                  |         goto label_64;
                                                                 |     }
    0x00087ca0 b 0x87cb0                                         |     goto label_63;
                                                                 |     do {
    0x00087ca2 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
                                                                 |         if (r3 == 0) {
    0x00087ca4 cbz r3, 0x87cb0                                   |             goto label_63;
                                                                 |         }
                                                                 | label_64:
    0x00087ca6 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00087ca8 cmp r1, r2                                        |         
    0x00087caa bne 0x87ca2                                       |         
                                                                 |     } while (r1 != r2);
    0x00087cac ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
    0x00087cae str r2, [r3]                                      |     *(r3) = r2;
                                                                 | label_63:
    0x00087cb0 ldr r6, [sp, 0x28]                                |     r6 = x;
    0x00087cb2 movw r2, 0xffff                                   |     r2 = 0xffff;
    0x00087cb6 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00087cb8 ldrb.w r3, [r6, 0xce]                             |     r3 = *((r6 + 0xce));
    0x00087cbc strb r3, [r0, 0x10]                               |     *((r0 + 0x10)) = r3;
    0x00087cbe movs r3, 0                                        |     r3 = 0;
    0x00087cc0 strh r2, [r1, 0x20]                               |     *((r1 + 0x20)) = r2;
    0x00087cc2 movs r2, 2                                        |     r2 = 2;
    0x00087cc4 strd r3, r3, [sp, 0x10]                           |     __asm ("strd r3, r3, [var_10h]");
    0x00087cc8 strd r3, r3, [sp, 8]                              |     __asm ("strd r3, r3, [var_ch]");
    0x00087ccc str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00087cce ldrb.w r2, [r1, 0x2a]                             |     r2 = *((r1 + 0x2a));
    0x00087cd2 mov r1, r3                                        |     r1 = r3;
    0x00087cd4 strd r0, r2, [sp]                                 |     __asm ("strd r0, r2, [sp]");
    0x00087cd8 mov r2, r3                                        |     r2 = r3;
    0x00087cda mov r0, r6                                        |     r0 = r6;
    0x00087cdc bl 0x86864                                        |     fcn_00086864 (r0, r1, r2, r3, r4, r5, r6);
    0x00087ce0 ldr r3, [r6, 0x24]                                |     r3 = *((r6 + 0x24));
    0x00087ce2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00087ce4 bne.w 0x8860a                                     |         goto label_62;
                                                                 |     }
    0x00087ce8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087cea ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x00087cee mov r6, sb                                        |     r6 = sb;
    0x00087cf0 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00087cf4 bne 0x87cfc                                       |         goto label_65;
                                                                 |     }
    0x00087cf6 b 0x87d08                                         |     goto label_66;
                                                                 |     do {
    0x00087cf8 ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
                                                                 |         if (r6 == 0) {
    0x00087cfa cbz r6, 0x87d08                                   |             goto label_66;
                                                                 |         }
                                                                 | label_65:
    0x00087cfc ldrb.w r3, [r6, 0x37]                             |         r3 = *((r6 + 0x37));
    0x00087d00 and r3, r3, 3                                     |         r3 &= 3;
    0x00087d04 cmp r3, 2                                         |         
    0x00087d06 bne 0x87cf8                                       |         
                                                                 |     } while (r3 != 2);
                                                                 | label_66:
    0x00087d08 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00087d0a ldrh r0, [r6, 0x32]                               |     r0 = *((r6 + 0x32));
    0x00087d0c ldrb.w r1, [r3, 0xb2]                             |     r1 = *((r3 + 0xb2));
    0x00087d10 mov r7, r0                                        |     r7 = r0;
    0x00087d12 and r1, r1, 2                                     |     r1 &= 2;
                                                                 | label_22:
    0x00087d16 ldrb.w r2, [r6, 0x37]                             |     r2 = *((r6 + 0x37));
    0x00087d1a orr r2, r2, 0x20                                  |     r2 |= 0x20;
    0x00087d1e strb.w r2, [r6, 0x37]                             |     *((r6 + 0x37)) = r2;
                                                                 |     if (r1 == 0) {
    0x00087d22 cbnz r1, 0x87d2e                                  |         
    0x00087d24 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x00087d26 orr r2, r2, 8                                     |         r2 |= 8;
    0x00087d2a strb.w r2, [r6, 0x37]                             |         *((r6 + 0x37)) = r2;
                                                                 |     }
    0x00087d2e strh r0, [r6, 0x34]                               |     *((r6 + 0x34)) = r0;
                                                                 |     if (r4 != 0) {
    0x00087d30 cbz r4, 0x87d3a                                   |         
    0x00087d32 ldr r2, [r6, 0x2c]                                |         r2 = *((r6 + 0x2c));
    0x00087d34 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00087d36 bne.w 0x88618                                     |             goto label_67;
                                                                 |         }
                                                                 |     }
                                                                 | label_24:
    0x00087d3a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087d3c ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x00087d3e str r2, [r6, 0x2c]                                |     *((r6 + 0x2c)) = r2;
    0x00087d40 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00087d44 beq 0x87d8e                                       |         goto label_68;
                                                                 |     }
    0x00087d46 str r5, [sp, 0x3c]                                |     var_3ch = r5;
    0x00087d48 mov r5, sb                                        |     r5 = sb;
                                                                 | label_1:
    0x00087d4a ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x00087d4e and r3, r3, 3                                     |     r3 &= 3;
    0x00087d52 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00087d54 beq 0x87d86                                       |         goto label_20;
                                                                 |     }
    0x00087d56 ldrh.w sb, [r5, 0x32]                             |     sb = *((r5 + 0x32));
                                                                 |     if (r7 == 0) {
    0x00087d5a cbz r7, 0x87d82                                   |         goto label_69;
                                                                 |     }
    0x00087d5c mov.w r8, 0                                       |     r8 = 0;
    0x00087d60 mov r4, r8                                        |     r4 = r8;
                                                                 |     do {
    0x00087d62 mov r3, r4                                        |         r3 = r4;
    0x00087d64 mov r2, r6                                        |         r2 = r6;
    0x00087d66 mov r1, sb                                        |         r1 = sb;
    0x00087d68 mov r0, r5                                        |         r0 = r5;
    0x00087d6a bl 0x15848                                        |         r0 = fcn_00015848 (r0, r1, r2, r3, r4);
                                                                 |         if (r0 == 0) {
    0x00087d6e cbnz r0, 0x87d74                                  |             
    0x00087d70 add.w r8, r8, 1                                   |             r8++;
                                                                 |         }
    0x00087d74 adds r4, 1                                        |         r4++;
    0x00087d76 cmp r4, r7                                        |         
    0x00087d78 bne 0x87d62                                       |         
                                                                 |     } while (r4 != r7);
    0x00087d7a cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00087d7e bne.w 0x8845e                                     |         goto label_70;
                                                                 |     }
                                                                 | label_69:
    0x00087d82 strh.w sb, [r5, 0x34]                             |     *((r5 + 0x34)) = sb;
                                                                 | label_20:
    0x00087d86 ldr r5, [r5, 0x14]                                |     r5 = *((r5 + 0x14));
    0x00087d88 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00087d8a bne 0x87d4a                                       |         goto label_1;
                                                                 |     }
    0x00087d8c ldr r5, [sp, 0x3c]                                |     r5 = var_3ch;
                                                                 | label_68:
    0x00087d8e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087d90 ldrsh.w ip, [r3, 0x22]                            |     ip = *((r3 + 0x22));
    0x00087d94 cmp.w ip, 0                                       |     
    0x00087d98 it le                                             |     
                                                                 |     if (ip > 0) {
    0x00087d9a movle r2, r7                                      |         r2 = r7;
                                                                 |     }
                                                                 |     if (ip <= 0) {
    0x00087d9c ble 0x87dd8                                       |         goto label_71;
                                                                 |     }
    0x00087d9e ldr.w lr, [r6, 4]                                 |     
    0x00087da2 movs r0, 0                                        |     r0 = 0;
    0x00087da4 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00087da6 mov r8, r0                                        |     r8 = r0;
    0x00087da8 mov r2, r0                                        |     r2 = r0;
    0x00087daa add.w r1, lr, r7, lsl 1                           |     r1 = lr + (r7 << 1);
                                                                 | label_2:
    0x00087dae mov r3, lr                                        |     r3 = lr;
    0x00087db0 b 0x87dba                                         |     
                                                                 |     while (r3 != r1) {
    0x00087db2 ldrsh sb, [r3], 2                                 |         sb = *(r3);
                                                                 |         r3 += 2;
    0x00087db6 cmp sb, r2                                        |         
                                                                 |         if (sb == r2) {
    0x00087db8 beq 0x87dcc                                       |             goto label_72;
                                                                 |         }
    0x00087dba cmp r3, r1                                        |         
    0x00087dbc bne 0x87db2                                       |         
                                                                 |     }
    0x00087dbe ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00087dc0 add r3, r0                                        |     r3 += r0;
    0x00087dc2 ldrh r3, [r3, 0xa]                                |     r3 = *((r3 + 0xa));
    0x00087dc4 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
    0x00087dc6 it pl                                             |     
                                                                 |     if (r3 < r3) {
    0x00087dc8 addpl r8, r8, 1                                   |         r8++;
                                                                 |     }
                                                                 | label_72:
    0x00087dcc adds r2, 1                                        |     r2++;
    0x00087dce adds r0, 0xc                                      |     r0 += 0xc;
    0x00087dd0 cmp r2, ip                                        |     
                                                                 |     if (r2 != ip) {
    0x00087dd2 bne 0x87dae                                       |         goto label_2;
                                                                 |     }
    0x00087dd4 add.w r2, r8, r7                                  |     r2 = r8 + r7;
                                                                 | label_71:
    0x00087dd8 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00087dda mov r1, r6                                        |     r1 = r6;
    0x00087ddc bl 0x1f970                                        |     r0 = fcn_0001f970 (r0, r1, r2);
                                                                 |     if (r0 != 0) {
    0x00087de0 cbnz r0, 0x87e40                                  |         goto label_19;
                                                                 |     }
    0x00087de2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087de4 ldrsh.w r1, [r3, 0x22]                            |     r1 = *((r3 + 0x22));
    0x00087de8 cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x00087dea ble 0x87e3a                                       |         goto label_73;
                                                                 |     }
    0x00087dec ldr.w r3, [pc, 0x728]                             |     
    0x00087df0 ldr.w ip, [r6, 4]                                 |     ip = *((r6 + 4));
    0x00087df4 ldr.w lr, [sp, 0x24]                              |     lr = var_24h;
    0x00087df8 add r3, pc                                        |     r3 = 0x110314;
    0x00087dfa addw r8, r3, 0xeec                                |     __asm ("addw r8, r3, aav.0x000000ff");
    0x00087dfe mov r3, r8                                        |     r3 = r8;
    0x00087e00 mov r8, r1                                        |     r8 = r1;
    0x00087e02 mov r1, r3                                        |     r1 = r3;
                                                                 | label_3:
    0x00087e04 add.w r4, ip, r7, lsl 1                           |     r4 = ip + (r7 << 1);
    0x00087e08 mov r3, ip                                        |     r3 = ip;
    0x00087e0a b 0x87e14                                         |     
                                                                 |     while (r3 != r4) {
    0x00087e0c ldrsh r2, [r3], 2                                 |         r2 = *(r3);
                                                                 |         r3 += 2;
    0x00087e10 cmp r2, r0                                        |         
                                                                 |         if (r2 == r0) {
    0x00087e12 beq 0x87e32                                       |             goto label_74;
                                                                 |         }
    0x00087e14 cmp r3, r4                                        |         
    0x00087e16 bne 0x87e0c                                       |         
                                                                 |     }
    0x00087e18 ldr.w r2, [lr, 4]                                 |     r2 = *((lr + 4));
    0x00087e1c add r2, r5                                        |     r2 += r5;
    0x00087e1e ldrh r2, [r2, 0xa]                                |     r2 = *((r2 + 0xa));
    0x00087e20 lsls r2, r2, 0x1a                                 |     r2 <<= 0x1a;
                                                                 |     if (r2 >= r2) {
    0x00087e22 bmi 0x87e32                                       |         
    0x00087e24 strh r0, [r3]                                     |         *(r3) = r0;
    0x00087e26 ldr r3, [r6, 0x20]                                |         r3 = *((r6 + 0x20));
    0x00087e28 ldrsh.w r8, [lr, 0x22]                            |         r8 = *((lr + 0x22));
    0x00087e2c str.w r1, [r3, r7, lsl 2]                         |         __asm ("str.w r1, [r3, r7, lsl 2]");
    0x00087e30 adds r7, 1                                        |         r7++;
                                                                 |     }
                                                                 | label_74:
    0x00087e32 adds r0, 1                                        |     r0++;
    0x00087e34 adds r5, 0xc                                      |     r5 += 0xc;
    0x00087e36 cmp r0, r8                                        |     
                                                                 |     if (r0 < r8) {
    0x00087e38 blt 0x87e04                                       |         goto label_3;
                                                                 |     }
                                                                 | label_73:
    0x00087e3a mov r0, r6                                        |     r0 = r6;
    0x00087e3c bl 0xc2a4                                         |     fcn_0000c2a4 (r0);
                                                                 | label_19:
    0x00087e40 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087e42 ldr r1, [r3, 0x3c]                                |     r1 = *((r3 + 0x3c));
    0x00087e44 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00087e46 beq.w 0x886c6                                     |         goto label_75;
                                                                 |     }
    0x00087e4a ldr.w r3, [sl, 0x10]                              |     r3 = *((sl + 0x10));
    0x00087e4e movs r7, 0                                        |     r7 = 0;
    0x00087e50 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00087e52 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00087e54 beq 0x87e60                                       |         goto label_37;
                                                                 |     }
                                                                 |     do {
    0x00087e56 ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
    0x00087e58 adds r3, 0x10                                     |         r3 += 0x10;
    0x00087e5a adds r7, 1                                        |         r7++;
    0x00087e5c cmp r1, r2                                        |         
    0x00087e5e bne 0x87e56                                       |         
                                                                 |     } while (r1 != r2);
                                                                 | label_37:
    0x00087e60 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00087e62 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00087e64 mov r1, r5                                        |     r1 = r5;
                                                                 |     if (r3 != 0) {
    0x00087e66 cbz r3, 0x87e8a                                   |         
    0x00087e68 ldr r4, [sp, 0x28]                                |         r4 = x;
    0x00087e6a movs r2, 4                                        |         r2 = 4;
    0x00087e6c str r3, [sp]                                      |         *(sp) = r3;
    0x00087e6e movs r3, 0                                        |         r3 = 0;
    0x00087e70 mov r0, r4                                        |         r0 = r4;
    0x00087e72 bl 0x2d1e8                                        |         fcn_0002d1e8 (r0, r1, r2, r3, r4, r5);
    0x00087e76 ldr r3, [r4, 0x24]                                |         r3 = *((r4 + 0x24));
                                                                 |         if (r3 == 0) {
    0x00087e78 cbz r3, 0x87e8a                                   |             goto label_76;
                                                                 |         }
    0x00087e7a ldr r1, [r5, 0x10]                                |         r1 = *((r5 + 0x10));
                                                                 |         if (r1 != 0) {
    0x00087e7c cbz r1, 0x87e84                                   |             
    0x00087e7e mov r0, sl                                        |             r0 = sl;
    0x00087e80 bl 0x16c98                                        |             fcn_00016c98 (r0, r1);
                                                                 |         }
    0x00087e84 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00087e86 movs r3, 0                                        |         r3 = 0;
    0x00087e88 str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
                                                                 |     }
                                                                 | label_76:
    0x00087e8a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00087e8c ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x00087e8e ldrsh.w r1, [r2, 0x22]                            |     r1 = *((r2 + 0x22));
    0x00087e92 tst.w r3, 0x60                                    |     
                                                                 |     if ((r3 & 0x60) == 0) {
    0x00087e96 beq 0x87f18                                       |         goto label_77;
                                                                 |     }
    0x00087e98 cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x00087e9a ble.w 0x88440                                     |         goto label_78;
                                                                 |     }
    0x00087e9e movs r6, 0                                        |     r6 = 0;
    0x00087ea0 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00087ea2 mov sb, r6                                        |     sb = r6;
    0x00087ea4 mov r8, r6                                        |     r8 = r6;
    0x00087ea6 mov r5, r6                                        |     r5 = r6;
    0x00087ea8 b 0x87eba                                         |     
                                                                 |     while (r2 == 0) {
    0x00087eaa add.w r8, r8, 1                                   |         r8++;
    0x00087eae add.w sb, sb, 1                                   |         sb++;
    0x00087eb2 cmp r1, r8                                        |         
    0x00087eb4 add.w r6, r6, 0xc                                 |         r6 += 0xc;
                                                                 |         if (r1 <= r8) {
    0x00087eb8 ble 0x87f10                                       |             goto label_79;
                                                                 |         }
                                                                 | label_4:
    0x00087eba ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00087ebc add r3, r6                                        |         r3 += r6;
    0x00087ebe ldrh r2, [r3, 0xa]                                |         r2 = *((r3 + 0xa));
    0x00087ec0 and r2, r2, 0x60                                  |         r2 &= 0x60;
    0x00087ec4 cmp r2, 0                                         |         
    0x00087ec6 beq 0x87eaa                                       |         
                                                                 |     }
    0x00087ec8 ldrh r2, [r3, 8]                                  |     r2 = *((r3 + 8));
    0x00087eca cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00087ecc beq.w 0x88368                                     |         goto label_80;
                                                                 |     }
    0x00087ed0 ldrb.w r1, [r4, 0x2b]                             |     r1 = *((r4 + 0x2b));
    0x00087ed4 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00087ed6 bne.w 0x88368                                     |         goto label_80;
                                                                 |     }
    0x00087eda ldr r3, [r4, 0x34]                                |     r3 = *((r4 + 0x34));
                                                                 |     if (r3 != 0) {
    0x00087edc cbz r3, 0x87ef0                                   |         
    0x00087ede ldr r0, [r3]                                      |         r0 = *(r3);
    0x00087ee0 cmp r0, r2                                        |         
    0x00087ee2 it lt                                             |         
                                                                 |         if (r0 >= r2) {
    0x00087ee4 movlt r3, r1                                      |             r3 = r1;
                                                                 |         }
                                                                 |         if (r0 < r2) {
    0x00087ee6 blt 0x87ef0                                       |             goto label_13;
                                                                 |         }
    0x00087ee8 add.w r3, r3, r2, lsl 4                           |         r3 += (r2 << 4);
    0x00087eec ldr r3, [r3, -0x8]                                |         r3 = *((r3 - 0x8));
                                                                 |     }
                                                                 | label_13:
    0x00087ef0 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00087ef2 movs r2, 8                                        |     r2 = 8;
    0x00087ef4 mov r1, r4                                        |     r1 = r4;
    0x00087ef6 str r5, [sp]                                      |     *(sp) = r5;
    0x00087ef8 bl 0x2d1e8                                        |     r0 = fcn_0002d1e8 (r0, r1, r2, r3, r4, r5);
    0x00087efc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00087efe bne.w 0x8832c                                     |         goto label_81;
                                                                 |     }
                                                                 | label_12:
    0x00087f02 ldrsh.w r1, [r4, 0x22]                            |     r1 = *((r4 + 0x22));
    0x00087f06 add.w r8, r8, 1                                   |     r8++;
    0x00087f0a adds r6, 0xc                                      |     r6 += 0xc;
    0x00087f0c cmp r1, r8                                        |     
                                                                 |     if (r1 > r8) {
    0x00087f0e bgt 0x87eba                                       |         goto label_4;
                                                                 |     }
                                                                 | label_79:
    0x00087f10 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00087f14 beq.w 0x88440                                     |         goto label_78;
                                                                 |     }
                                                                 | label_77:
    0x00087f18 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00087f1a cmp r1, 0                                         |     
    0x00087f1c ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00087f1e ldrsh.w r0, [r2, 0x20]                            |     r0 = *((r2 + 0x20));
                                                                 |     if (r1 <= 0) {
    0x00087f22 ble.w 0x88430                                     |         goto label_82;
                                                                 |     }
    0x00087f26 add.w r1, r1, r1, lsl 1                           |     r1 += (r1 << 1);
    0x00087f2a movs r2, 0                                        |     r2 = 0;
    0x00087f2c add.w r1, r3, r1, lsl 2                           |     r1 = r3 + (r1 << 2);
                                                                 |     do {
    0x00087f30 ldrb r4, [r3, 6]                                  |         r4 = *((r3 + 6));
    0x00087f32 adds r3, 0xc                                      |         r3 += 0xc;
    0x00087f34 cmp r3, r1                                        |         
    0x00087f36 add r2, r4                                        |         r2 += r4;
    0x00087f38 bne 0x87f30                                       |         
                                                                 |     } while (r3 != r1);
    0x00087f3a cmp r0, 0                                         |     
    0x00087f3c mov.w r3, 0                                       |     r3 = 0;
    0x00087f40 it lt                                             |     
                                                                 |     if (r0 >= 0) {
    0x00087f42 addlt r2, 1                                       |         r2++;
                                                                 |     }
    0x00087f44 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00087f46 cmp r2, 7                                         |     
                                                                 |     if (r2 < 7) {
    0x00087f48 bls.w 0x883b2                                     |         goto label_83;
                                                                 |     }
    0x00087f4c clz r3, r2                                        |     r3 &= r2;
    0x00087f50 rsb.w r3, r3, 0x1c                                |     r3 = 0x1c - r3;
    0x00087f54 lsrs r2, r3                                       |     r2 >>= r3;
    0x00087f56 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00087f5a lsls r3, r3, 1                                    |     r3 <<= 1;
    0x00087f5c adds r3, 0x28                                     |     r3 += 0x28;
    0x00087f5e uxth r3, r3                                       |     r3 = (int16_t) r3;
                                                                 | label_16:
    0x00087f60 ldr.w r1, [pc, 0x5b8]                             |     r1 = *(0x0008851c);
    0x00087f64 and r2, r2, 7                                     |     r2 &= 7;
    0x00087f68 subs r3, 0xa                                      |     r3 -= 0xa;
    0x00087f6a add r1, pc                                        |     r1 += pc;
    0x00087f6c add.w r2, r1, r2, lsl 1                           |     r2 = r1 + (r2 << 1);
    0x00087f70 ldrh.w r2, [r2, 0xd58]                            |     r2 = *((r2 + 0xd58));
    0x00087f74 add r3, r2                                        |     r3 += r2;
    0x00087f76 sxth r3, r3                                       |     __asm ("sxth r3, r3");
                                                                 | label_15:
    0x00087f78 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00087f7a ldr r0, [r2, 8]                                   |     r0 = *((r2 + 8));
    0x00087f7c strh r3, [r2, 0x28]                               |     *((r2 + 0x28)) = r3;
                                                                 |     if (r0 == 0) {
    0x00087f7e cbz r0, 0x87f8a                                   |         goto label_84;
                                                                 |     }
                                                                 |     do {
    0x00087f80 bl 0x1669c                                        |         fcn_0001669c (r0);
    0x00087f84 ldr r0, [r0, 0x14]                                |         r0 = *((r0 + 0x14));
    0x00087f86 cmp r0, 0                                         |         
    0x00087f88 bne 0x87f80                                       |         
                                                                 |     } while (r0 != 0);
                                                                 | label_84:
    0x00087f8a ldrb.w r3, [sl, 0xb1]                             |     r3 = *((sl + 0xb1));
    0x00087f8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00087f90 bne.w 0x8836c                                     |         goto label_46;
                                                                 |     }
    0x00087f94 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00087f96 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x00087f98 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00087f9a beq.w 0x884be                                     |         goto label_85;
                                                                 |     }
                                                                 | label_21:
    0x00087f9e movs r3, 0                                        |     r3 = 0;
    0x00087fa0 movs r1, 0x7a                                     |     r1 = 0x7a;
    0x00087fa2 mov r2, r3                                        |     r2 = r3;
    0x00087fa4 str r3, [sp]                                      |     *(sp) = r3;
    0x00087fa6 mov r0, r6                                        |     r0 = r6;
    0x00087fa8 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00087fac ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00087fae ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x00087fb2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00087fb4 bne.w 0x883fc                                     |         goto label_86;
                                                                 |     }
    0x00087fb8 ldr.w r2, [pc, 0x564]                             |     
    0x00087fbc ldr.w r3, [pc, 0x564]                             |     r3 = *(0x00088524);
    0x00087fc0 add r2, pc                                        |     r2 = 0x1104e4;
    0x00087fc2 add r3, pc                                        |     r3 += pc;
    0x00087fc4 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 | label_17:
    0x00087fc6 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00087fca beq.w 0x879ba                                     |         goto label_5;
                                                                 |     }
    0x00087fce ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00087fd0 ldr r1, [sp, 0x28]                                |     r1 = x;
    0x00087fd2 ldrb.w r3, [r3, 0xd0]                             |     r3 = *((r3 + 0xd0));
    0x00087fd6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00087fd8 bne.w 0x885c6                                     |         goto label_87;
                                                                 |     }
    0x00087fdc ldr.w sb, [r1, 0x2c]                              |     sb = *((r1 + 0x2c));
    0x00087fe0 movs r2, 1                                        |     r2 = 1;
    0x00087fe2 ldr r3, [r1, 0x74]                                |     r3 = *((r1 + 0x74));
    0x00087fe4 mov r0, r6                                        |     r0 = r6;
    0x00087fe6 add.w r5, sb, 3                                   |     r5 = sb + 3;
    0x00087fe8 lsls r3, r0, 0x14                                 |     r3 = r0 << 0x14;
    0x00087fea add.w r4, sb, 1                                   |     r4 = sb + 1;
    0x00087fee cmp r3, 0                                         |     
    0x00087ff0 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00087ff2 moveq r3, r1                                      |         r3 = r1;
                                                                 |     }
    0x00087ff4 str r5, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r5;
    0x00087ff6 strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
    0x00087ff8 str r7, [sp]                                      |     *(sp) = r7;
    0x00087ffa ldr r3, [r1, 0x5c]                                |     r3 = *((r1 + 0x5c));
    0x00087ffc movs r1, 0x71                                     |     r1 = 0x71;
    0x00087ffe bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00088002 ldr.w r8, [r6, 0x6c]                              |     r8 = *((r6 + 0x6c));
    0x00088006 cmp.w r8, 0                                       |     
                                                                 |     if (r8 > 0) {
    0x0008800a ble 0x8801c                                       |         
    0x0008800c ldr r3, [r6, 0x68]                                |         r3 = *((r6 + 0x68));
    0x0008800e add.w r2, r8, r8, lsl 2                           |         r2 = r8 + (r8 << 2);
    0x00088012 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00088016 movs r2, 0x10                                     |         r2 = 0x10;
    0x00088018 strh r2, [r3, -0x12]                              |         *((r3 - 0x12)) = r2;
                                                                 |     }
    0x0008801c ldr r0, [sp, 0x28]                                |     r0 = x;
    0x0008801e movs r3, 2                                        |     r3 = 2;
    0x00088020 mov r2, r4                                        |     r2 = r4;
    0x00088022 movs r1, 0xa                                      |     r1 = 0xa;
    0x00088024 str r3, [r0, 0x28]                                |     *((r0 + 0x28)) = r3;
    0x00088026 add.w r3, r8, 1                                   |     r3 = r8 + 1;
    0x0008802a str r3, [sp]                                      |     *(sp) = r3;
    0x0008802c mov r0, r6                                        |     r0 = r6;
    0x0008802e movs r3, 0                                        |     r3 = 0;
    0x00088030 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00088034 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00088036 ldr r3, [r0, 0x24]                                |     r3 = *((r0 + 0x24));
    0x00088038 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0008803a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0008803c bne.w 0x87a88                                     |         goto label_6;
                                                                 |     }
    0x00088040 mov r1, fp                                        |     r1 = fp;
    0x00088042 movs r2, 0x41                                     |     r2 = 0x41;
    0x00088044 bl 0x54b94                                        |     r0 = fcn_00054b94 (r0, r1, r2);
    0x00088048 mov r1, r0                                        |     r1 = r0;
    0x0008804a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008804c beq.w 0x87a88                                     |         goto label_6;
                                                                 |     }
    0x00088050 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x00088052 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00088054 ldrsh.w r0, [r0, 0x22]                            |     r0 = *((r0 + 0x22));
    0x00088058 ldr.w ip, [sl, 0x210]                             |     ip = *((sl + 0x210));
    0x0008805c str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x0008805e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00088060 mov r2, r3                                        |     r2 = r3;
    0x00088062 bfi r2, r0, 0, 0x10                               |     value_6 = BIT_MASK (0, 0x10);
                                                                 |     value_7 = r0 & value_6;
                                                                 |     value_6 = ~value_6;
                                                                 |     r2 &= value_6;
                                                                 |     r2 |= value_7;
    0x00088066 bfi r2, r0, 0x10, 0x10                            |     value_8 = BIT_MASK (0x10, 0x10);
                                                                 |     value_9 = r0 & value_8;
                                                                 |     value_8 = ~value_8;
                                                                 |     r2 &= value_8;
                                                                 |     r2 |= value_9;
    0x0008806a ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x0008806c str.w r2, [r0, 0x22]                              |     __asm ("str.w r2, [r0, 0x22]");
    0x00088070 strh r3, [r1, 0x22]                               |     *((r1 + 0x22)) = r3;
    0x00088072 str r3, [r1, 4]                                   |     *((r1 + 4)) = r3;
    0x00088074 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x00088078 beq.w 0x8868a                                     |         goto label_88;
                                                                 |     }
                                                                 | label_30:
    0x0008807c mov r0, sl                                        |     r0 = sl;
    0x0008807e bl 0x170b8                                        |     fcn_000170b8 (r0, r1);
                                                                 | label_31:
    0x00088082 movs r3, 0                                        |     r3 = 0;
    0x00088084 add r2, sp, 0x58                                  |     r2 += var_58h;
    0x00088086 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00088088 mov r1, fp                                        |     r1 = fp;
    0x0008808a str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x0008808c strd r3, r3, [sp, 0x64]                           |     __asm ("strd r3, r3, [var_64h]");
    0x00088090 movs r3, 0xd                                      |     r3 = 0xd;
    0x00088092 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00088094 strb.w r3, [sp, 0x58]                             |     var_58h = r3;
    0x00088098 str r4, [sp, 0x5c]                                |     var_5ch = r4;
    0x0008809a str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0008809c bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2, r3, r4, r5, r6);
    0x000880a0 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x000880a2 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x000880a4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000880a6 bne.w 0x87a88                                     |         goto label_6;
                                                                 |     }
    0x000880aa mov r1, r4                                        |     r1 = r4;
    0x000880ac mov r0, r6                                        |     r0 = r6;
    0x000880ae bl 0x2a700                                        |     fcn_0002a700 (r0, r1, r2);
    0x000880b2 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000880b4 cmp.w r8, 0                                       |     
    0x000880b8 ldr r4, [r6, 0x6c]                                |     r4 = *((r6 + 0x6c));
    0x000880ba ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x000880be it lt                                             |     
                                                                 |     if (r8 >= 0) {
    0x000880c0 addlt r8, r4, -1                                  |         r8 = r4 + -1;
                                                                 |     }
    0x000880c4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000880c6 bne.w 0x8869e                                     |         goto label_89;
                                                                 |     }
    0x000880ca ldr r3, [r6, 0x68]                                |     r3 = *((r6 + 0x68));
    0x000880cc add.w r8, r8, r8, lsl 2                           |     r8 += (r8 << 2);
    0x000880d0 add.w r3, r3, r8, lsl 2                           |     r3 += (r8 << 2);
                                                                 | label_33:
    0x000880d4 str r4, [r3, 8]                                   |     *((r3 + 8)) = r4;
    0x000880d6 ldr r3, [r6, 0x70]                                |     r3 = *((r6 + 0x70));
    0x000880d8 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x000880da cmp r4, r3                                        |     
                                                                 |     if (r4 >= r3) {
    0x000880dc bge.w 0x886d6                                     |         goto label_90;
                                                                 |     }
    0x000880e0 add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x000880e4 ldr.w ip, [r6, 0x68]                              |     ip = *((r6 + 0x68));
    0x000880e8 adds r1, r4, 1                                    |     r1 = r4 + 1;
    0x000880ea lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000880ec str r1, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r1;
    0x000880ee movs r0, 0                                        |     r0 = 0;
    0x000880f0 add.w r1, ip, r3                                  |     r1 = ip + r3;
    0x000880f4 mov.w lr, 0xb                                     |     lr = 0xb;
    0x000880f8 strd r2, r0, [r1, 4]                              |     __asm ("strd r2, r0, [r1, 4]");
    0x000880fc strd r0, r0, [r1, 0xc]                            |     __asm ("strd r0, r0, [r1, 0xc]");
    0x00088100 str.w lr, [ip, r3]                                |     __asm ("str.w lr, [ip, r3]");
                                                                 | label_38:
    0x00088104 add.w sb, sb, 2                                   |     sb += 2;
    0x00088108 ldrd r2, r3, [sp, 0x64]                           |     __asm ("ldrd r2, r3, [var_64h]");
    0x0008810c movs r1, 0x61                                     |     r1 = 0x61;
    0x0008810e mov r0, r6                                        |     r0 = r6;
    0x00088110 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00088114 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00088118 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0008811a movs r2, 0                                        |     r2 = 0;
    0x0008811c mov r0, r6                                        |     r0 = r6;
    0x0008811e bl 0x329e8                                        |     fcn_000329e8 (r0, r1, r2);
    0x00088122 movs r3, 0                                        |     r3 = 0;
    0x00088124 movs r2, 1                                        |     r2 = 1;
    0x00088126 movs r1, 0x7f                                     |     r1 = 0x7f;
    0x00088128 str r3, [sp]                                      |     *(sp) = r3;
    0x0008812a mov r0, r6                                        |     r0 = r6;
    0x0008812c mov r3, r5                                        |     r3 = r5;
    0x0008812e bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00088132 mov r3, sb                                        |     r3 = sb;
    0x00088134 movs r2, 1                                        |     r2 = 1;
    0x00088136 movs r1, 0x80                                     |     r1 = 0x80;
    0x00088138 mov r0, r6                                        |     r0 = r6;
    0x0008813a str r5, [sp]                                      |     *(sp) = r5;
    0x0008813c bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00088140 mov r1, r4                                        |     r1 = r4;
    0x00088142 mov r0, r6                                        |     r0 = r6;
    0x00088144 bl 0x2a2e4                                        |     fcn_0002a2e4 (r0, r1, r2);
    0x00088148 ldr r3, [r6]                                      |     r3 = *(r6);
    0x0008814a cmp r4, 0                                         |     
    0x0008814c ldr r2, [r6, 0x6c]                                |     r2 = *((r6 + 0x6c));
    0x0008814e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00088152 it lt                                             |     
                                                                 |     if (r4 >= 0) {
    0x00088154 addlt r4, r2, -1                                  |         r4 = r2 + -1;
                                                                 |     }
    0x00088158 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0008815a bne.w 0x886b8                                     |         goto label_91;
                                                                 |     }
    0x0008815e ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x00088160 add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x00088164 add.w r3, r1, r3, lsl 2                           |     r3 = r1 + (r3 << 2);
                                                                 | label_35:
    0x00088168 mov.w r8, 0                                       |     r8 = 0;
    0x0008816c str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0008816e movs r1, 0x7a                                     |     r1 = 0x7a;
    0x00088170 mov r3, r8                                        |     r3 = r8;
    0x00088172 movs r2, 1                                        |     r2 = 1;
    0x00088174 mov r0, r6                                        |     r0 = r6;
    0x00088176 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0008817a bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0008817e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00088180 ldrsh.w r1, [r3, 0x22]                            |     r1 = *((r3 + 0x22));
    0x00088184 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00088186 cmp r1, r8                                        |     
                                                                 |     if (r1 <= r8) {
    0x00088188 ble.w 0x886f8                                     |         goto label_92;
                                                                 |     }
    0x0008818c add.w ip, r3, 0xc                                 |     
    0x00088190 movs r3, 0xc                                      |     r3 = 0xc;
    0x00088192 smlabb lr, r1, r3, ip                             |     __asm ("smlabb lr, r1, r3, ip");
                                                                 | label_7:
    0x00088196 ldr r0, [ip, -0xc]                                |     r0 = *((ip - 0xc));
    0x0008819a ldrb r3, [r0]                                     |     r3 = *(r0);
    0x0008819c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0008819e beq.w 0x88662                                     |         goto label_93;
                                                                 |     }
    0x000881a2 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x000881a4 cmp r3, 0x22                                      |         
    0x000881a6 ldrb r3, [r0, 1]!                                 |         r3 = *((r0 += 1));
    0x000881aa ite eq                                            |         
                                                                 |         if (r3 != 0x22) {
    0x000881ac addeq r2, r4, 1                                   |             r2 = r4 + 1;
                                                                 |         }
                                                                 |         if (r3 == 0x22) {
    0x000881ae movne r2, r4                                      |             r2 = r4;
                                                                 |         }
    0x000881b0 adds r4, r2, 1                                    |         r4 = r2 + 1;
    0x000881b2 cmp r3, 0                                         |         
    0x000881b4 bne 0x881a4                                       |         
                                                                 |     } while (r3 != 0);
    0x000881b6 adds r2, 8                                        |     r2 += 8;
                                                                 | label_28:
    0x000881b8 add.w ip, ip, 0xc                                 |     
    0x000881bc add r8, r2                                        |     r8 += r2;
    0x000881be cmp ip, lr                                        |     
                                                                 |     if (ip != lr) {
    0x000881c0 bne 0x88196                                       |         goto label_7;
                                                                 |     }
    0x000881c2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000881c4 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000881c6 ldrb r2, [r0]                                     |     r2 = *(r0);
    0x000881c8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000881ca beq.w 0x8871c                                     |         goto label_94;
                                                                 |     }
                                                                 | label_40:
    0x000881ce movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x000881d0 cmp r2, 0x22                                      |         
    0x000881d2 ldrb r2, [r0, 1]!                                 |         r2 = *((r0 += 1));
    0x000881d6 it eq                                             |         
                                                                 |         if (r2 != 0x22) {
    0x000881d8 addeq r3, 1                                       |             r3++;
                                                                 |         }
    0x000881da adds r3, 1                                        |         r3++;
    0x000881dc cmp r2, 0                                         |         
    0x000881de bne 0x881d0                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_41:
    0x000881e0 adds r3, 2                                        |     r3 += 2;
    0x000881e2 add.w r2, r3, r8                                  |     r2 = r3 + r8;
    0x000881e6 cmp r2, 0x31                                      |     
                                                                 |     if (r2 <= 0x31) {
    0x000881e8 ble.w 0x886a6                                     |         goto label_95;
                                                                 |     }
    0x000881ec ldr r3, [pc, 0x338]                               |     
    0x000881ee add r3, pc                                        |     r3 = 0x11071a;
    0x000881f0 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000881f2 ldr r3, [pc, 0x338]                               |     
    0x000881f4 add r3, pc                                        |     r3 = 0x110726;
    0x000881f6 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x000881f8 ldr r3, [pc, 0x334]                               |     
    0x000881fa add r3, pc                                        |     r3 = 0x11072e;
                                                                 | label_34:
    0x000881fc movs r0, 6                                        |     r0 = 6;
    0x000881fe str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00088200 mla r2, r1, r0, r2                                |     __asm ("mla r2, r1, r0, r2");
    0x00088204 add.w r3, r2, 0x23                                |     r3 = r2 + 0x23;
    0x00088208 asrs r1, r3, 0x1f                                 |     r1 = r3 >> 0x1f;
    0x0008820a mov r0, r3                                        |     r0 = r3;
    0x0008820c str r3, [sp, 0x40]                                |     var_40h = r3;
    0x0008820e bl 0x117c8                                        |     fcn_000117c8 (r0);
    0x00088212 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00088214 mov sb, r0                                        |     sb = r0;
    0x00088216 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00088218 beq.w 0x88720                                     |         goto label_96;
                                                                 |     }
    0x0008821c ldr r2, [pc, 0x314]                               |     
    0x0008821e mov r1, r0                                        |     r1 = r0;
    0x00088220 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x00088222 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00088224 add r2, pc                                        |     r2 = 0x11075c;
    0x00088226 blx 0x9724                                        |     fcn_00009724 ();
    0x0008822a mov r0, sb                                        |     r0 = sb;
    0x0008822c blx 0x9e8c                                        |     fcn_00009e8c ();
    0x00088230 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00088232 bic r0, r0, 0xc0000000                            |     r0 = BIT_MASK (r0, 0xc0000000);
    0x00088236 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00088238 str r0, [sp, 0x58]                                |     var_58h = r0;
    0x0008823a mov r0, sb                                        |     r0 = sb;
    0x0008823c ldr r2, [r4]                                      |     r2 = *(r4);
    0x0008823e bl 0x103f8                                        |     fcn_000103f8 (r0, r1, r2);
    0x00088242 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00088244 movs r1, 0x28                                     |     r1 = 0x28;
    0x00088246 mov r3, r4                                        |     r3 = r4;
    0x00088248 strb.w r1, [sb, r2]                               |     *((sb + r2)) = r1;
    0x0008824c add.w r8, r2, 1                                   |     r8 = r2 + 1;
    0x00088250 ldrsh.w r1, [r4, 0x22]                            |     r1 = *((r4 + 0x22));
    0x00088254 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00088256 str.w r8, [sp, 0x58]                              |     __asm ("str.w r8, [var_58h]");
    0x0008825a cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x0008825c ble.w 0x88672                                     |         goto label_97;
                                                                 |     }
    0x00088260 ldr r1, [pc, 0x2d4]                               |     
    0x00088262 add.w r5, r2, 0xc                                 |     r5 = r2 + 0xc;
    0x00088266 strd sl, r6, [sp, 0x48]                           |     __asm ("strd sl, r6, [var_48h]");
    0x0008826a mov r6, r3                                        |     r6 = r3;
    0x0008826c ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0008826e movs r4, 0                                        |     r4 = 0;
    0x00088270 add r1, pc                                        |     r1 = 0x1107ac;
    0x00088272 str r7, [sp, 0x50]                                |     var_50h = r7;
    0x00088274 str.w fp, [sp, 0x54]                              |     __asm ("str.w fp, [var_54h]");
    0x00088278 mov sl, r1                                        |     sl = r1;
    0x0008827a ldr r7, [sp, 0x40]                                |     r7 = var_40h;
    0x0008827c mov r2, r3                                        |     r2 = r3;
    0x0008827e mov fp, r8                                        |     
    0x00088280 b 0x882b0                                         |     
                                                                 |     while (fp != 0) {
    0x00088282 mov r0, fp                                        |         r0 = fp;
    0x00088284 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00088288 bic r2, r0, 0xc0000000                            |         r2 = BIT_MASK (r0, 0xc0000000);
    0x0008828c mov r3, r2                                        |         r3 = r2;
                                                                 | label_8:
    0x0008828e ldr r0, [sp, 0x58]                                |         r0 = var_58h;
    0x00088290 mov r1, fp                                        |         r1 = fp;
    0x00088292 adds r4, 1                                        |         r4++;
    0x00088294 adds r5, 0xc                                      |         r5 += 0xc;
    0x00088296 add.w fp, r0, r3                                  |         
    0x0008829a add r0, sb                                        |         r0 += sb;
    0x0008829c blx 0x9e2c                                        |         fcn_00009e2c ();
    0x000882a0 ldrsh.w r2, [r6, 0x22]                            |         r2 = *((r6 + 0x22));
    0x000882a4 str.w fp, [sp, 0x58]                              |         __asm ("str.w fp, [var_58h]");
    0x000882a8 cmp r4, r2                                        |         
                                                                 |         if (r4 >= r2) {
    0x000882aa bge.w 0x88666                                     |             goto label_98;
                                                                 |         }
    0x000882ae ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x000882b0 add.w r8, sb, fp                                  |         r8 = sb + fp;
    0x000882b4 sub.w r0, r7, fp                                  |         r0 = r7 - fp;
    0x000882b8 mov r1, r8                                        |         r1 = r8;
    0x000882ba blx 0x9724                                        |         fcn_00009724 ();
    0x000882be mov r0, r8                                        |         r0 = r8;
    0x000882c0 blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x000882c4 bic r2, r0, 0xc0000000                            |         r2 = BIT_MASK (r0, 0xc0000000);
    0x000882c8 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x000882ca add r2, fp                                        |         r2 += fp;
    0x000882cc mov r0, sb                                        |         r0 = sb;
    0x000882ce str r2, [sp, 0x58]                                |         var_58h = r2;
    0x000882d0 ldr r2, [r5, -0xc]                                |         r2 = *((r5 - 0xc));
    0x000882d4 bl 0x103f8                                        |         fcn_000103f8 (r0, r1, r2);
    0x000882d8 ldrb r3, [r5, -0x7]                               |         r3 = *((r5 - 0x7));
    0x000882dc add.w r3, sl, r3, lsl 2                           |         r3 = sl + (r3 << 2);
    0x000882e0 ldr.w fp, [r3, 0xd1c]                             |         fp = *((r3 + 0xd1c));
    0x000882e4 cmp.w fp, 0                                       |         
    0x000882e8 bne 0x88282                                       |         
                                                                 |     }
    0x000882ea mov r3, fp                                        |     r3 = fp;
    0x000882ec mov r2, fp                                        |     r2 = fp;
    0x000882ee b 0x8828e                                         |     goto label_8;
                                                                 | label_42:
    0x000882f0 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x000882f2 mov r0, sl                                        |     r0 = sl;
    0x000882f4 ldr r1, [r4]                                      |     r1 = *(r4);
    0x000882f6 bl 0x39034                                        |     r0 = fcn_00039034 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x000882fa cbz r0, 0x88304                                   |         
    0x000882fc ldr r3, [r4, 0x1c]                                |         r3 = *((r4 + 0x1c));
    0x000882fe orr r3, r3, 0x1000                                |         r3 |= 0x1000;
    0x00088302 str r3, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r3;
                                                                 |     }
    0x00088304 ldrb.w r3, [sl, 0xb1]                             |     r3 = *((sl + 0xb1));
    0x00088308 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0008830a beq.w 0x87ab8                                     |         goto label_9;
                                                                 |     }
    0x0008830e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00088310 ldrb.w r2, [r3, 0x2b]                             |     r2 = *((r3 + 0x2b));
    0x00088314 ldr.w r3, [sl, 0xac]                              |     r3 = *((sl + 0xac));
    0x00088318 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0008831a beq.w 0x87aa8                                     |         goto label_10;
                                                                 |     }
    0x0008831e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00088320 bne.w 0x8798e                                     |         goto label_11;
                                                                 |     }
    0x00088324 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00088326 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x00088328 b.w 0x87ab8                                       |     goto label_9;
                                                                 | label_81:
    0x0008832c ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0008832e mov r0, sl                                        |     r0 = sl;
    0x00088330 movs r2, 0x34                                     |     r2 = 0x34;
    0x00088332 add r3, r6                                        |     r3 += r6;
    0x00088334 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00088336 movs r3, 0                                        |     r3 = 0;
    0x00088338 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x0008833c mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r0 != 0) {
    0x0008833e cbz r0, 0x8835c                                   |         
    0x00088340 movs r2, 0x33                                     |         r2 = 0x33;
    0x00088342 movs r1, 0                                        |         r1 = 0;
    0x00088344 adds r0, 1                                        |         r0++;
    0x00088346 str r3, [sp, 0x3c]                                |         var_3ch = r3;
    0x00088348 blx 0x97d4                                        |         fcn_000097d4 ();
    0x0008834c ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x0008834e movs r2, 0x79                                     |         r2 = 0x79;
    0x00088350 strb r2, [r3]                                     |         *(r3) = r2;
    0x00088352 movw r2, 0xffff                                   |         r2 = 0xffff;
    0x00088356 strh r2, [r3, 0x22]                               |         *((r3 + 0x22)) = r2;
    0x00088358 movs r2, 1                                        |         r2 = 1;
    0x0008835a str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
                                                                 |     }
    0x0008835c ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0008835e mov r1, r4                                        |     r1 = r4;
    0x00088360 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00088362 bl 0x2c338                                        |     fcn_0002c338 (r0, r1, r2, r3);
    0x00088366 b 0x87f02                                         |     goto label_12;
                                                                 | label_80:
    0x00088368 movs r3, 0                                        |     r3 = 0;
    0x0008836a b 0x87ef0                                         |     goto label_13;
                                                                 | label_46:
    0x0008836c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0008836e ldr r0, [r3, 0x3c]                                |     r0 = *((r3 + 0x3c));
    0x00088370 mov r2, r3                                        |     r2 = r3;
    0x00088372 ldr r1, [r3]                                      |     r1 = *(r3);
    0x00088374 adds r0, 8                                        |     r0 += 8;
    0x00088376 bl 0x147a8                                        |     r0 = fcn_000147a8 (r0, r1, r2, r3, r4);
    0x0008837a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008837c bne.w 0x885d4                                     |         goto label_99;
                                                                 |     }
    0x00088380 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00088382 ldr r1, [pc, 0x1b8]                               |     
    0x00088384 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00088386 str.w r0, [r3, 0xec]                              |     __asm ("str.w r0, [r3, 0xec]");
    0x0008838a ldr.w r3, [sl, 0x18]                              |     r3 = *((sl + 0x18));
    0x0008838e add r1, pc                                        |     r1 = 0x1108d0;
    0x00088390 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00088392 orr r3, r3, 1                                     |     r3 |= 1;
    0x00088396 str.w r3, [sl, 0x18]                              |     __asm ("str.w r3, [sl, 0x18]");
    0x0008839a blx 0x9fb0                                        |     r0 = fcn_00009fb0 ();
    0x0008839e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000883a0 bne.w 0x87a80                                     |         goto label_14;
                                                                 |     }
    0x000883a4 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x000883a6 str r4, [r3, 0x48]                                |     *((r3 + 0x48)) = r4;
    0x000883a8 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x000883ac bne.w 0x87a88                                     |         goto label_6;
                                                                 |     }
    0x000883b0 b 0x88408                                         |     goto label_47;
                                                                 | label_83:
    0x000883b2 cmp r2, 2                                         |     
    0x000883b4 sbcs r1, r3, 0                                    |     __asm ("sbcs r1, r3, 0");
                                                                 |     if (r2 <= 2) {
    0x000883b8 blo.w 0x87f78                                     |         goto label_15;
                                                                 |     }
    0x000883bc adds r2, r2, r2                                   |     r2 += r2;
    0x000883be adc.w r1, r3, r3                                  |     __asm ("adc.w r1, r3, r3");
    0x000883c2 cmp r2, 8                                         |     
    0x000883c4 sbcs r1, r1, 0                                    |     __asm ("sbcs r1, r1, 0");
                                                                 |     if (r2 >= 8) {
    0x000883c8 bhs.w 0x886d2                                     |         goto label_100;
                                                                 |     }
    0x000883cc mov r2, r3                                        |     r2 = r3;
    0x000883ce movs r3, 0x14                                     |     r3 = 0x14;
    0x000883d0 b 0x87f60                                         |     goto label_16;
                                                                 | label_50:
    0x000883d2 ldr r2, [pc, 0x16c]                               |     
    0x000883d4 ldr r3, [pc, 0x11c]                               |     r3 = *(0x884f4);
    0x000883d6 add r2, pc                                        |     r2 = 0x11091c;
    0x000883d8 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x000883da ldr r2, [r3]                                      |     r2 = imp.atan;
    0x000883dc ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x000883de eors r2, r3                                       |     r2 ^= r3;
    0x000883e0 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000883e4 bne.w 0x88718                                     |         goto label_43;
                                                                 |     }
    0x000883e8 ldr r1, [pc, 0x158]                               |     
    0x000883ea mov r3, r6                                        |     r3 = r6;
    0x000883ec ldr r0, [sp, 0x28]                                |     r0 = x;
    0x000883ee mov r2, r7                                        |     r2 = r7;
    0x000883f0 add r1, pc                                        |     r1 = 0x110938;
    0x000883f2 add sp, 0x7c                                      |     
    0x000883f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x000883f8 b.w 0x1d554                                       |     void (*0x1d554)() ();
                                                                 | label_86:
    0x000883fc ldr r3, [pc, 0x148]                               |     
    0x000883fe ldr r2, [pc, 0x14c]                               |     
    0x00088400 add r3, pc                                        |     r3 = 0x11094c;
    0x00088402 add r2, pc                                        |     r2 = 0x110954;
    0x00088404 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00088406 b 0x87fc6                                         |     goto label_17;
                                                                 | label_47:
    0x00088408 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0008840a ldrb.w r3, [r3, 0x2b]                             |     r3 = *((r3 + 0x2b));
    0x0008840e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00088410 bne.w 0x87a88                                     |         goto label_6;
                                                                 |     }
    0x00088414 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00088416 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00088418 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0008841a beq.w 0x88698                                     |         goto label_101;
                                                                 |     }
                                                                 | label_32:
    0x0008841e ldr r2, [sp, 0x28]                                |     r2 = x;
    0x00088420 ldr.w r2, [r2, 0xbc]                              |     r2 = *((r2 + 0xbc));
    0x00088424 subs r3, r3, r2                                   |     r3 -= r2;
    0x00088426 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00088428 adds r3, 0xd                                      |     r3 += 0xd;
    0x0008842a str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0008842c b.w 0x87a88                                       |     goto label_6;
                                                                 | label_82:
    0x00088430 cmp r0, 0                                         |     
    0x00088432 it ge                                             |     
                                                                 |     if (r0 >= 0) {
    0x00088434 movge r3, 0                                       |         r3 = 0;
                                                                 |         goto label_102;
                                                                 |     }
                                                                 |     if (r0 >= 0) {
                                                                 | label_102:
    0x00088436 bge.w 0x87f78                                     |         goto label_15;
                                                                 |     }
    0x0008843a movs r3, 0x1e                                     |     r3 = 0x1e;
    0x0008843c movs r2, 8                                        |     r2 = 8;
    0x0008843e b 0x87f60                                         |     goto label_16;
                                                                 | label_78:
    0x00088440 ldr r2, [pc, 0x10c]                               |     
    0x00088442 ldr r3, [pc, 0xb0]                                |     r3 = *(0x884f6);
    0x00088444 add r2, pc                                        |     r2 = 0x110998;
    0x00088446 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00088448 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x0008844a ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0008844c eors r2, r3                                       |     r2 ^= r3;
    0x0008844e mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00088452 bne.w 0x88718                                     |         goto label_43;
                                                                 |     }
    0x00088456 ldr r1, [pc, 0xfc]                                |     
    0x00088458 add r1, pc                                        |     r1 = 0x1109b2;
    0x0008845a b.w 0x879ae                                       |     goto label_18;
                                                                 | label_70:
    0x0008845e add.w r2, sb, r8                                  |     r2 = sb + r8;
    0x00088462 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00088464 mov r1, r5                                        |     r1 = r5;
    0x00088466 bl 0x1f970                                        |     r0 = fcn_0001f970 (r0, r1, r2);
    0x0008846a mov r8, r0                                        |     r8 = r0;
    0x0008846c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0008846e bne.w 0x87e40                                     |         goto label_19;
                                                                 |     }
    0x00088472 ldrh r1, [r5, 0x32]                               |     r1 = *((r5 + 0x32));
    0x00088474 mov r4, r1                                        |     r4 = r1;
    0x00088476 b 0x8847a                                         |     
                                                                 |     while (r8 != r7) {
    0x00088478 ldrh r1, [r5, 0x32]                               |         r1 = *((r5 + 0x32));
    0x0008847a mov r3, r8                                        |         r3 = r8;
    0x0008847c mov r2, r6                                        |         r2 = r6;
    0x0008847e mov r0, r5                                        |         r0 = r5;
    0x00088480 bl 0x15848                                        |         r0 = fcn_00015848 (r0, r1, r2, r3, r4);
                                                                 |         if (r0 == 0) {
    0x00088484 cbnz r0, 0x884b4                                  |             
    0x00088486 ldr r3, [r6, 4]                                   |             r3 = *((r6 + 4));
    0x00088488 ldrsh.w r1, [r3, r8, lsl 1]                       |             offset_10 = r8 << 1;
                                                                 |             r1 = *((r3 + offset_10));
    0x0008848c ldr r3, [r6, 0x20]                                |             r3 = *((r6 + 0x20));
    0x0008848e ldr.w r2, [r3, r8, lsl 2]                         |             offset_11 = r8 << 2;
                                                                 |             r2 = *((r3 + offset_11));
    0x00088492 ldr r3, [r5, 4]                                   |             r3 = *((r5 + 4));
    0x00088494 strh.w r1, [r3, r4, lsl 1]                        |             offset_12 = r4 << 1;
                                                                 |             *((r3 + offset_12)) = r1;
    0x00088498 ldr r3, [r5, 0x20]                                |             r3 = *((r5 + 0x20));
    0x0008849a str.w r2, [r3, r4, lsl 2]                         |             __asm ("str.w r2, [r3, r4, lsl 2]");
    0x0008849e ldr r3, [r6, 0x1c]                                |             r3 = *((r6 + 0x1c));
    0x000884a0 ldrb.w r3, [r3, r8]                               |             r3 = *((r3 + r8));
                                                                 |             if (r3 != 0) {
    0x000884a4 cbz r3, 0x884b2                                   |                 
    0x000884a6 ldrb.w r3, [r5, 0x38]                             |                 r3 = *((r5 + 0x38));
    0x000884aa orr r3, r3, 2                                     |                 r3 |= 2;
    0x000884ae strb.w r3, [r5, 0x38]                             |                 *((r5 + 0x38)) = r3;
                                                                 |             }
    0x000884b2 adds r4, 1                                        |             r4++;
                                                                 |         }
    0x000884b4 add.w r8, r8, 1                                   |         r8++;
    0x000884b8 cmp r8, r7                                        |         
    0x000884ba bne 0x88478                                       |         
                                                                 |     }
    0x000884bc b 0x87d86                                         |     goto label_20;
                                                                 | label_85:
    0x000884be ldr r3, [r3, 0x74]                                |     r3 = *((r3 + 0x74));
    0x000884c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000884c2 beq.w 0x8863c                                     |         goto label_103;
                                                                 |     }
                                                                 | label_25:
    0x000884c6 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x000884c8 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x000884cc mov r6, r0                                        |     r6 = r0;
    0x000884ce cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000884d0 bne.w 0x87f9e                                     |         goto label_21;
                                                                 |     }
    0x000884d4 b.w 0x87a88                                       |     goto label_6;
                                                                 | label_61:
    0x000884d8 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000884da uxth r0, r7                                       |     r0 = (int16_t) r7;
    0x000884dc mov r7, r0                                        |     r7 = r0;
    0x000884de ldrb.w r1, [r3, 0xb2]                             |     r1 = *((r3 + 0xb2));
    0x000884e2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000884e4 and r1, r1, 2                                     |     r1 &= 2;
    0x000884e8 ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
                                                                 | label_36:
    0x000884ec strh r0, [r6, 0x32]                               |     *((r6 + 0x32)) = r0;
    0x000884ee b 0x87d16                                         |     goto label_22;
                                                                 | label_52:
    0x00088558 ldr r2, [pc, 0x1e8]                               |     
    0x0008855a ldr r3, [pc, 0x1ec]                               |     r3 = *(0x8874a);
    0x0008855c add r2, pc                                        |     r2 = 0x110ca4;
    0x0008855e ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00088560 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00088562 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00088564 eors r2, r3                                       |     r2 ^= r3;
    0x00088566 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0008856a bne.w 0x88718                                     |         goto label_43;
                                                                 |     }
    0x0008856e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00088570 ldr r1, [pc, 0x1d8]                               |     
    0x00088572 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00088574 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00088576 add r1, pc                                        |     r1 = 0x110cc6;
    0x00088578 add sp, 0x7c                                      |     
    0x0008857a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0008857e b.w 0x1d554                                       |     void (*0x1d554)() ();
                                                                 | label_51:
    0x00088582 ldr r2, [pc, 0x1cc]                               |     
    0x00088584 ldr r3, [pc, 0x1c0]                               |     r3 = *(0x88748);
    0x00088586 add r2, pc                                        |     r2 = 0x110cdc;
    0x00088588 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x0008858a ldr r2, [r3]                                      |     r2 = imp.atan;
    0x0008858c ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0008858e eors r2, r3                                       |     r2 ^= r3;
    0x00088590 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00088594 bne.w 0x88718                                     |         goto label_43;
                                                                 |     }
    0x00088598 ldr r1, [pc, 0x1b8]                               |     
    0x0008859a add r1, pc                                        |     r1 = 0x110cf2;
    0x0008859c b.w 0x879ae                                       |     goto label_18;
                                                                 | label_56:
    0x000885a0 ldr r2, [r4]                                      |     r2 = *(r4);
    0x000885a2 it lt                                             |     
                                                                 |     if (r2 >= r3) {
    0x000885a4 ldrlt r3, [r4, 0x6c]                              |         r3 = *((r4 + 0x6c));
                                                                 |     }
    0x000885a6 ldrb.w r2, [r2, 0x57]                             |     r2 = *((r2 + 0x57));
    0x000885aa it lt                                             |     
                                                                 |     if (r2 >= r3) {
    0x000885ac addlt r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
    0x000885b0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000885b2 bne 0x88652                                       |         goto label_104;
                                                                 |     }
    0x000885b4 ldr r2, [r4, 0x68]                                |     r2 = *((r4 + 0x68));
    0x000885b6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x000885ba add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
                                                                 | label_27:
    0x000885be movs r2, 2                                        |     r2 = 2;
    0x000885c0 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x000885c2 b.w 0x87bd4                                       |     goto label_23;
                                                                 | label_87:
    0x000885c6 ldr r3, [r1, 0x24]                                |     r3 = *((r1 + 0x24));
    0x000885c8 movs r2, 1                                        |     r2 = 1;
    0x000885ca str r2, [r1, 0xc]                                 |     *((r1 + 0xc)) = r2;
    0x000885cc add r3, r2                                        |     r3 += r2;
    0x000885ce str r3, [r1, 0x24]                                |     *((r1 + 0x24)) = r3;
    0x000885d0 b.w 0x87a88                                       |     goto label_6;
                                                                 | label_99:
    0x000885d4 ldrb.w r3, [sl, 0x57]                             |     r3 = *((sl + 0x57));
    0x000885d8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000885da bne.w 0x87a88                                     |         goto label_6;
                                                                 |     }
    0x000885de ldrb.w r3, [sl, 0x58]                             |     r3 = *((sl + 0x58));
    0x000885e2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000885e4 bne.w 0x87a88                                     |         goto label_6;
                                                                 |     }
    0x000885e8 ldr r2, [pc, 0x16c]                               |     
    0x000885ea ldr r3, [pc, 0x15c]                               |     r3 = *(0x8874a);
    0x000885ec add r2, pc                                        |     r2 = 0x110d48;
    0x000885ee ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x000885f0 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x000885f2 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x000885f4 eors r2, r3                                       |     r2 ^= r3;
    0x000885f6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000885fa bne.w 0x88718                                     |         goto label_43;
                                                                 |     }
    0x000885fe mov r0, sl                                        |     r0 = sl;
    0x00088600 add sp, 0x7c                                      |     
    0x00088602 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00088606 b.w 0x1d600                                       |     void (*0x1d600)() ();
                                                                 | label_62:
    0x0008860a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0008860c ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0008860e ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00088610 bic r3, r3, 0x80                                  |     r3 = BIT_MASK (r3, 0x80);
    0x00088614 str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
    0x00088616 b 0x87e40                                         |     goto label_19;
                                                                 | label_67:
    0x00088618 ldr r1, [r4]                                      |     r1 = *(r4);
    0x0008861a it lt                                             |     
                                                                 |     if (r2 >= r3) {
    0x0008861c ldrlt r2, [r4, 0x6c]                              |         r2 = *((r4 + 0x6c));
                                                                 |     }
    0x0008861e ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
    0x00088622 it lt                                             |     
                                                                 |     if (r2 >= r3) {
    0x00088624 addlt r2, r2, -1                                  |         r2 += -1;
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x00088628 cbnz r1, 0x8865a                                  |         goto label_105;
                                                                 |     }
    0x0008862a ldr r1, [r4, 0x68]                                |     r1 = *((r4 + 0x68));
    0x0008862c add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x00088630 add.w r2, r1, r2, lsl 2                           |     r2 = r1 + (r2 << 2);
                                                                 |     do {
    0x00088634 movs r1, 8                                        |         r1 = 8;
    0x00088636 strb r1, [r2]                                     |         *(r2) = r1;
    0x00088638 b.w 0x87d3a                                       |         goto label_24;
                                                                 | label_103:
    0x0008863c ldr r2, [sp, 0x28]                                |         r2 = x;
    0x0008863e ldr r3, [r2]                                      |         r3 = *(r2);
    0x00088640 ldr r3, [r3, 0x50]                                |         r3 = *((r3 + 0x50));
    0x00088642 lsls r0, r3, 0x1c                                 |         r0 = r3 << 0x1c;
    0x00088644 itt pl                                            |         
                                                                 |         if (r0 < r3) {
    0x00088646 movpl r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r0 < r3) {
    0x00088648 strbpl r3, [r2, 0x17]                             |             *((r2 + 0x17)) = r3;
                                                                 |         }
    0x0008864a b 0x884c6                                         |         goto label_25;
                                                                 | label_44:
    0x0008864c ldr r1, [sp, 0x34]                                |         r1 = var_34h;
    0x0008864e b.w 0x879c8                                       |         goto label_26;
                                                                 | label_104:
    0x00088652 ldr r3, [pc, 0x108]                               |         
    0x00088654 add r3, pc                                        |         r3 = 0x110db6;
    0x00088656 adds r3, 4                                        |         r3 += 4;
    0x00088658 b 0x885be                                         |         goto label_27;
                                                                 | label_105:
    0x0008865a ldr r2, [pc, 0x104]                               |         
    0x0008865c add r2, pc                                        |         r2 = 0x110dc2;
    0x0008865e adds r2, 4                                        |         r2 += 4;
    0x00088660 b 0x88634                                         |         
                                                                 |     } while (1);
                                                                 | label_93:
    0x00088662 movs r2, 7                                        |     r2 = 7;
    0x00088664 b 0x881b8                                         |     goto label_28;
                                                                 | label_98:
    0x00088666 mov r8, fp                                        |     r8 = fp;
    0x00088668 ldrd sl, r6, [sp, 0x48]                           |     __asm ("ldrd sl, r6, [var_48h]");
    0x0008866c ldr r7, [sp, 0x50]                                |     r7 = var_50h;
    0x0008866e ldr.w fp, [sp, 0x54]                              |     fp = var_54h;
                                                                 | label_97:
    0x00088672 ldrd r2, r3, [sp, 0x40]                           |     __asm ("ldrd r2, r3, [var_44h]");
    0x00088676 add.w r1, sb, r8                                  |     r1 = sb + r8;
    0x0008867a sub.w r0, r2, r8                                  |     r0 = r2 - r8;
    0x0008867e ldr r2, [pc, 0xe4]                                |     
    0x00088680 add r2, pc                                        |     r2 = 0x110dea;
    0x00088682 blx 0x9724                                        |     fcn_00009724 ();
    0x00088686 b.w 0x879f2                                       |     goto label_29;
                                                                 | label_88:
    0x0008868a ldr r3, [r1, 0x18]                                |     r3 = *((r1 + 0x18));
    0x0008868c subs r3, 1                                        |     r3--;
    0x0008868e str r3, [r1, 0x18]                                |     *((r1 + 0x18)) = r3;
    0x00088690 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00088692 beq.w 0x8807c                                     |         goto label_30;
                                                                 |     }
    0x00088696 b 0x88082                                         |     goto label_31;
                                                                 | label_101:
    0x00088698 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0008869a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0008869c b 0x8841e                                         |     goto label_32;
                                                                 | label_89:
    0x0008869e ldr r3, [pc, 0xc8]                                |     
    0x000886a0 add r3, pc                                        |     r3 = 0x110e0e;
    0x000886a2 adds r3, 4                                        |     r3 += 4;
    0x000886a4 b 0x880d4                                         |     goto label_33;
                                                                 | label_95:
    0x000886a6 ldr r3, [pc, 0xc4]                                |     
    0x000886a8 add r3, pc                                        |     r3 = 0x110e1a;
    0x000886aa str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000886ac ldr r3, [pc, 0xc0]                                |     
    0x000886ae add r3, pc                                        |     r3 = 0x110e22;
    0x000886b0 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x000886b2 ldr r3, [pc, 0xc0]                                |     
    0x000886b4 add r3, pc                                        |     r3 = 0x110e2e;
    0x000886b6 b 0x881fc                                         |     goto label_34;
                                                                 | label_91:
    0x000886b8 ldr r3, [pc, 0xbc]                                |     
    0x000886ba add r3, pc                                        |     r3 = 0x110e36;
    0x000886bc adds r3, 4                                        |     r3 += 4;
    0x000886be b 0x88168                                         |     goto label_35;
                                                                 | label_60:
    0x000886c0 movs r7, 1                                        |     r7 = 1;
    0x000886c2 mov r0, r7                                        |     r0 = r7;
    0x000886c4 b 0x884ec                                         |     goto label_36;
                                                                 | label_75:
    0x000886c6 mov.w r7, 0x8000                                  |     
    0x000886ca movt r7, 0xffff                                   |     r7 = 0x-8000;
    0x000886ce b.w 0x87e60                                       |     goto label_37;
                                                                 | label_100:
    0x000886d2 movs r3, 0x1e                                     |     r3 = 0x1e;
    0x000886d4 b 0x87f60                                         |     goto label_16;
                                                                 | label_90:
    0x000886d6 movs r3, 0                                        |     r3 = 0;
    0x000886d8 movs r1, 0xb                                      |     r1 = 0xb;
    0x000886da mov r0, r6                                        |     r0 = r6;
    0x000886dc str r3, [sp]                                      |     *(sp) = r3;
    0x000886de bl 0x29a7c                                        |     r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000886e2 mov r4, r0                                        |     r4 = r0;
    0x000886e4 b 0x88104                                         |     goto label_38;
                                                                 | label_45:
    0x000886e6 ldr r1, [pc, 0x94]                                |     
    0x000886e8 ldr.w r2, [r3, r8]                                |     r2 = *((r3 + r8));
    0x000886ec ldr r0, [sp, 0x28]                                |     r0 = x;
    0x000886ee add r1, pc                                        |     r1 = 0x110e70;
    0x000886f0 bl 0x85c90                                        |     fcn_00085c90 (r0, r1, r2);
    0x000886f4 b.w 0x87a5a                                       |     goto label_39;
                                                                 | label_92:
    0x000886f8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000886fa ldr r0, [r3]                                      |     r0 = *(r3);
    0x000886fc ldrb r2, [r0]                                     |     r2 = *(r0);
    0x000886fe cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00088700 bne.w 0x881ce                                     |         goto label_40;
                                                                 |     }
    0x00088704 ldr r3, [pc, 0x78]                                |     
    0x00088706 movs r2, 2                                        |     r2 = 2;
    0x00088708 add r3, pc                                        |     r3 = 0x110e8c;
    0x0008870a str r3, [sp, 0x44]                                |     var_44h = r3;
    0x0008870c ldr r3, [pc, 0x74]                                |     
    0x0008870e add r3, pc                                        |     r3 = 0x110e96;
    0x00088710 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00088712 ldr r3, [pc, 0x74]                                |     
    0x00088714 add r3, pc                                        |     r3 = 0x110ea2;
    0x00088716 b 0x881fc                                         |     goto label_34;
                                                                 | label_43:
    0x00088718 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_94:
    0x0008871c mov r3, r2                                        |     r3 = r2;
    0x0008871e b 0x881e0                                         |     goto label_41;
                                                                 | label_96:
    0x00088720 ldrb.w r3, [sl, 0x57]                             |     r3 = *((sl + 0x57));
    0x00088724 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00088726 bne.w 0x879f2                                     |         goto label_29;
                                                                 |     }
    0x0008872a ldrb.w r3, [sl, 0x58]                             |     r3 = *((sl + 0x58));
    0x0008872e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00088730 bne.w 0x879f2                                     |         goto label_29;
                                                                 |     }
    0x00088734 mov r0, sl                                        |     r0 = sl;
    0x00088736 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x0008873a b.w 0x879f2                                       |     goto label_29;
                                                                 | label_59:
    0x0008873e movs r3, 0                                        |     r3 = 0;
    0x00088740 ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x00088742 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x889d8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000889d8 ()                                      | void fcn_000889d8 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000889d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000889dc mov r6, r1                                        |     r6 = r1;
    0x000889de ldr r7, [r0]                                      |     r7 = *(r0);
    0x000889e0 sub sp, 0x14                                      |     
    0x000889e2 ldrb.w r3, [r7, 0x57]                             |     r3 = *((r7 + 0x57));
    0x000889e6 cbz r3, 0x889f6                                   |     
                                                                 |     while (r0 != 0) {
                                                                 | label_0:
    0x000889e8 mov r1, r6                                        |         r1 = r6;
    0x000889ea mov r0, r7                                        |         r0 = r7;
    0x000889ec add sp, 0x14                                      |         
    0x000889ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x000889f2 b.w 0x16a58                                       |         void (*0x16a58)() ();
    0x000889f6 mov r5, r0                                        |         r5 = r0;
    0x000889f8 mov sb, r2                                        |         sb = r2;
    0x000889fa bl 0x72b28                                        |         r0 = fcn_00072b28 (r0);
    0x000889fe mov r4, r0                                        |         r4 = r0;
    0x00088a00 cmp r0, 0                                         |         
    0x00088a02 bne 0x889e8                                       |         
                                                                 |     }
    0x00088a04 ldrd sl, r1, [r6, 0xc]                            |     __asm ("ldrd sl, r1, [r6, 0xc]");
    0x00088a08 mov r0, r7                                        |     r0 = r7;
    0x00088a0a mov r2, sl                                        |     r2 = sl;
    0x00088a0c bl 0x18a0c                                        |     r0 = fcn_00018a0c (r0, r1, r2, r3);
    0x00088a10 mov r8, r0                                        |     r8 = r0;
    0x00088a12 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00088a14 beq 0x88b0e                                       |         goto label_6;
                                                                 |     }
    0x00088a16 ldrb.w r3, [r0, 0x37]                             |     r3 = *((r0 + 0x37));
    0x00088a1a lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 != r3) {
    0x00088a1c bne.w 0x88b3a                                     |         goto label_7;
                                                                 |     }
    0x00088a20 ldr r1, [r0, 0x18]                                |     r1 = *((r0 + 0x18));
    0x00088a22 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x00088a24 ldr.w sb, [r0, 0xc]                               |     sb = *((r0 + 0xc));
    0x00088a28 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00088a2a beq.w 0x88b6e                                     |         goto label_8;
                                                                 |     }
    0x00088a2e ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00088a30 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00088a32 beq.w 0x88b58                                     |         goto label_9;
                                                                 |     }
    0x00088a36 adds r3, 0x10                                     |     r3 += 0x10;
                                                                 |     do {
    0x00088a38 mov r0, r3                                        |         r0 = r3;
    0x00088a3a adds r4, 1                                        |         r4++;
    0x00088a3c ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00088a3e adds r3, 0x10                                     |         r3 += 0x10;
    0x00088a40 cmp r1, r2                                        |         
    0x00088a42 bne 0x88a38                                       |         
                                                                 |     } while (r1 != r2);
    0x00088a44 cmp r4, 1                                         |     
    0x00088a46 ldr.w sl, [r0]                                    |     sl = *(r0);
    0x00088a4a lsl.w fp, r4, 4                                   |     
                                                                 |     if (r4 == 1) {
    0x00088a4e beq 0x88af4                                       |         goto label_10;
                                                                 |     }
                                                                 | label_4:
    0x00088a50 ldr r2, [pc, 0x150]                               |     
    0x00088a52 movs r1, 9                                        |     r1 = 9;
    0x00088a54 movs r3, 0                                        |     r3 = 0;
    0x00088a56 mov r0, r5                                        |     r0 = r5;
    0x00088a58 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00088a5c add r2, pc                                        |     r2 = 0x111604;
    0x00088a5e bl 0x200fc                                        |     fcn_000200fc (r0, r1);
    0x00088a62 movs r1, 0xa                                      |     r1 = 0xa;
    0x00088a64 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00088a66 bne 0x889e8                                       |         goto label_0;
                                                                 |     }
                                                                 | label_1:
    0x00088a68 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00088a6c mov r0, r5                                        |     r0 = r5;
    0x00088a6e ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x00088a72 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00088a76 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00088a7a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00088a7c bne 0x889e8                                       |         goto label_0;
                                                                 |     }
    0x00088a7e ldr.w sb, [r5, 8]                                 |     sb = *((r5 + 8));
    0x00088a82 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00088a86 beq 0x88b28                                       |         goto label_11;
                                                                 |     }
                                                                 | label_2:
    0x00088a88 mov r2, r4                                        |     r2 = r4;
    0x00088a8a mov r0, r5                                        |     r0 = r5;
    0x00088a8c movs r1, 1                                        |     r1 = 1;
    0x00088a8e bl 0x4a5bc                                        |     fcn_0004a5bc (r0, r1, r2);
    0x00088a92 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x00088a94 mov r0, r5                                        |     r0 = r5;
    0x00088a96 ldr r1, [pc, 0x110]                               |     
    0x00088a98 ldr.w r2, [r3, fp]                                |     r2 = *((r3 + fp));
    0x00088a9c add r1, pc                                        |     r1 = 0x11164a;
    0x00088a9e ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00088aa2 bl 0x85c90                                        |     fcn_00085c90 (r0, r1, r2);
    0x00088aa6 ldr r2, [pc, 0x104]                               |     
    0x00088aa8 mov r1, r4                                        |     r1 = r4;
    0x00088aaa ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00088aae mov r0, r5                                        |     r0 = r5;
    0x00088ab0 add r2, pc                                        |     r2 = 0x111662;
    0x00088ab2 bl 0x85d54                                        |     fcn_00085d54 (r0, r1, r2, r3, r4);
    0x00088ab6 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00088ab8 mov r2, r4                                        |     r2 = r4;
    0x00088aba movs r1, 0x64                                     |     r1 = 0x64;
    0x00088abc ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00088abe add r3, fp                                        |     r3 += fp;
    0x00088ac0 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00088ac2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00088ac4 adds r3, 1                                        |     r3++;
    0x00088ac6 str r3, [sp]                                      |     *(sp) = r3;
    0x00088ac8 movs r3, 1                                        |     r3 = 1;
    0x00088aca ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00088acc bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00088ad0 ldr.w r1, [r8, 0x2c]                              |     r1 = *((r8 + 0x2c));
    0x00088ad4 mov r2, r4                                        |     r2 = r4;
    0x00088ad6 mov r0, r5                                        |     r0 = r5;
    0x00088ad8 bl 0x860b0                                        |     fcn_000860b0 (r0, r1, r2);
    0x00088adc movs r3, 0                                        |     r3 = 0;
    0x00088ade mov r2, r4                                        |     r2 = r4;
    0x00088ae0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00088ae2 mov r0, sb                                        |     r0 = sb;
    0x00088ae4 ldr.w r1, [r8]                                    |     r1 = *(r8);
    0x00088ae8 strd r3, r1, [sp]                                 |     __asm ("strd r3, r1, [sp]");
    0x00088aec movs r1, 0x98                                     |     r1 = 0x98;
    0x00088aee bl 0x2a324                                        |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00088af2 b 0x889e8                                         |     goto label_0;
                                                                 | label_10:
    0x00088af4 ldr r2, [pc, 0xb8]                                |     
    0x00088af6 movs r1, 9                                        |     r1 = 9;
    0x00088af8 movs r3, 0                                        |     r3 = 0;
    0x00088afa mov r0, r5                                        |     r0 = r5;
    0x00088afc str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00088b00 add r2, pc                                        |     r2 = 0x1116b4;
    0x00088b02 bl 0x200fc                                        |     fcn_000200fc (r0, r1);
    0x00088b06 movs r1, 0xc                                      |     r1 = 0xc;
    0x00088b08 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00088b0a beq 0x88a68                                       |         goto label_1;
                                                                 |     }
    0x00088b0c b 0x889e8                                         |     goto label_0;
                                                                 | label_6:
    0x00088b0e cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00088b12 bne 0x88b48                                       |         goto label_12;
                                                                 |     }
    0x00088b14 ldr r1, [pc, 0x9c]                                |     
    0x00088b16 add.w r2, r6, 8                                   |     r2 = r6 + 8;
    0x00088b1a mov r0, r5                                        |     r0 = r5;
    0x00088b1c add r1, pc                                        |     r1 = 0x1116d4;
    0x00088b1e bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_3:
    0x00088b22 movs r3, 1                                        |     r3 = 1;
    0x00088b24 strb r3, [r5, 0x11]                               |     *((r5 + 0x11)) = r3;
    0x00088b26 b 0x889e8                                         |     goto label_0;
                                                                 | label_11:
    0x00088b28 ldr r3, [r5, 0x74]                                |     r3 = *((r5 + 0x74));
                                                                 |     if (r3 == 0) {
    0x00088b2a cbz r3, 0x88b60                                   |         goto label_13;
                                                                 |     }
                                                                 | label_5:
    0x00088b2c mov r0, r5                                        |     r0 = r5;
    0x00088b2e bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x00088b32 mov sb, r0                                        |     sb = r0;
    0x00088b34 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00088b36 bne 0x88a88                                       |         goto label_2;
                                                                 |     }
    0x00088b38 b 0x889e8                                         |     goto label_0;
                                                                 | label_7:
    0x00088b3a ldr r1, [pc, 0x7c]                                |     
    0x00088b3c mov r2, r4                                        |     r2 = r4;
    0x00088b3e mov r0, r5                                        |     r0 = r5;
    0x00088b40 add r1, pc                                        |     r1 = 0x1116fe;
    0x00088b42 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00088b46 b 0x889e8                                         |     goto label_0;
                                                                 | label_12:
    0x00088b48 mov r0, r5                                        |     r0 = r5;
    0x00088b4a mov r1, sl                                        |     r1 = sl;
    0x00088b4c bl 0x4a528                                        |     fcn_0004a528 (r0, r1);
    0x00088b50 mov r0, r5                                        |     r0 = r5;
    0x00088b52 bl 0x2b228                                        |     fcn_0002b228 (r0, r1);
    0x00088b56 b 0x88b22                                         |     goto label_3;
                                                                 | label_9:
    0x00088b58 ldr.w sl, [r3]                                    |     sl = *(r3);
    0x00088b5c mov fp, r4                                        |     
    0x00088b5e b 0x88a50                                         |     goto label_4;
                                                                 | label_13:
    0x00088b60 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00088b62 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00088b64 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x00088b66 itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x00088b68 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00088b6a strbpl r3, [r5, 0x17]                             |         *((r5 + 0x17)) = r3;
                                                                 |     }
    0x00088b6c b 0x88b2c                                         |     goto label_5;
                                                                 | label_8:
    0x00088b6e sub.w r2, r3, 0x80000                             |     r2 = r3 - 0x80000;
    0x00088b72 movs r1, 9                                        |     r1 = 9;
    0x00088b74 ldr.w sl, [r2]                                    |     sl = *(r2);
    0x00088b78 mov r3, r4                                        |     r3 = r4;
    0x00088b7a ldr r2, [pc, 0x40]                                |     
    0x00088b7c mov r0, r5                                        |     r0 = r5;
    0x00088b7e str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00088b82 add r2, pc                                        |     r2 = 0x111744;
    0x00088b84 bl 0x200fc                                        |     r0 = fcn_000200fc (r0, r1);
    0x00088b88 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00088b8a bne.w 0x889e8                                     |         goto label_0;
                                                                 |     }
    0x00088b8e mov.w fp, 0                                       |     
    0x00088b92 mov.w r4, 0x8000                                  |     r4 = 0x8000;
    0x00088b96 movt fp, 0xfff8                                   |     
    0x00088b9a movt r4, 0xffff                                   |     r4 = (r4 & 0xFFFF) | 0xffff0000;
    0x00088b9e movs r1, 0xa                                      |     r1 = 0xa;
    0x00088ba0 b 0x88a68                                         |     goto label_1;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x89004 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00089004 ()                                      | void fcn_00089004 (int16_t arg_10h, int16_t arg_50h, arithmetic x, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00089004 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00089008 mov r5, r1                                        |     r5 = r1;
    0x0008900a sub sp, 0x44                                      |     
    0x0008900c ldr r1, [pc, 0x1a0]                               |     
    0x0008900e mov r7, r0                                        |     r7 = r0;
    0x00089010 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00089012 ldr r0, [sp, 0x68]                                |     r0 = *(x);
    0x00089014 add r1, pc                                        |     r1 = 0x1121c8;
    0x00089016 ldr r3, [pc, 0x19c]                               |     r3 = *(0x891b6);
    0x00089018 ldr r4, [r7, 8]                                   |     r4 = *((r7 + 8));
    0x0008901a str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0008901c ldr r3, [r1, r3]                                  |     
    0x0008901e ldr.w fp, [r7]                                    |     fp = *(r7);
    0x00089022 ldr r3, [r3]                                      |     r3 = imp.atan;
    0x00089024 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00089026 mov.w r3, 0                                       |     r3 = 0;
    0x0008902a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0008902c beq.w 0x89174                                     |         goto label_5;
                                                                 |     }
                                                                 | label_2:
    0x00089030 ldr r1, [pc, 0x184]                               |     
    0x00089032 movs r6, 0                                        |     r6 = 0;
    0x00089034 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x00089038 mov sl, r6                                        |     sl = r6;
    0x0008903a mov r8, r7                                        |     r8 = r7;
    0x0008903c str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0008903e add r1, pc                                        |     r1 = 0x1121fa;
    0x00089040 addw r1, r1, 0xe34                                |     __asm ("addw r1, r1, aav.0x000000ff");
    0x00089044 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00089046 lsls r1, r5, 4                                    |     r1 = r5 << 4;
    0x00089048 add.w sb, r3, r1                                  |     sb = r3 + r1;
    0x0008904c ldr r3, [pc, 0x16c]                               |     
    0x0008904e str r1, [sp, 0x14]                                |     var_14h = r1;
    0x00089050 add r3, pc                                        |     r3 = 0x112210;
    0x00089052 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00089054 add r3, sp, 0x38                                  |     r3 += var_38h;
    0x00089056 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     do {
                                                                 | label_1:
    0x00089058 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0008905a mov r0, fp                                        |         r0 = fp;
    0x0008905c ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x00089060 strb.w sl, [r3, r6]                               |         *((r3 + r6)) = sl;
    0x00089064 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00089066 ldr.w r7, [r3, r6, lsl 3]                         |         offset_0 = r6 << 3;
                                                                 |         r7 = *((r3 + offset_0));
    0x0008906a mov r1, r7                                        |         r1 = r7;
    0x0008906c bl 0x38d4c                                        |         r0 = fcn_00038d4c (r0, r1, r2, r3);
    0x00089070 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00089072 beq 0x8914a                                       |             goto label_6;
                                                                 |         }
    0x00089074 ldr r2, [r0, 0x14]                                |         r2 = *((r0 + 0x14));
    0x00089076 cmp r5, 1                                         |         
    0x00089078 add r3, sp, 0x2c                                  |         r3 += var_2ch;
    0x0008907a str.w r2, [r3, r6, lsl 2]                         |         __asm ("str.w r2, [r3, r6, lsl 2]");
                                                                 |         if (r5 != 1) {
    0x0008907e beq 0x890a0                                       |             
    0x00089080 ldr.w r3, [r8]                                    |             r3 = *(r8);
    0x00089084 ldr r1, [sp, 0x14]                                |             r1 = var_14h;
    0x00089086 ldr r3, [r3, 0x10]                                |             r3 = *((r3 + 0x10));
    0x00089088 add r3, r1                                        |             r3 += r1;
    0x0008908a ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x0008908c ldrb r3, [r3, 9]                                  |             r3 = *((r3 + 9));
                                                                 |             if (r3 == 0) {
    0x0008908e cbz r3, 0x890a0                                   |                 goto label_7;
                                                                 |             }
    0x00089090 movs r3, 1                                        |             r3 = 1;
    0x00089092 mov r1, r5                                        |             r1 = r5;
    0x00089094 mov r0, r8                                        |             r0 = r8;
    0x00089096 str r7, [sp]                                      |             *(sp) = r7;
    0x00089098 str r2, [sp, 0x24]                                |             var_24h = r2;
    0x0008909a bl 0x2ba0c                                        |             fcn_0002ba0c (r0, r1, r2, r3, r4);
    0x0008909e ldr r2, [sp, 0x24]                                |             r2 = var_24h;
                                                                 |         }
                                                                 | label_7:
    0x000890a0 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x000890a2 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x000890a4 beq 0x8918c                                       |             goto label_8;
                                                                 |         }
    0x000890a6 ldr.w r2, [sb]                                    |         r2 = *(sb);
    0x000890aa mov r3, r7                                        |         r3 = r7;
    0x000890ac str r1, [sp, 4]                                   |         var_4h = r1;
    0x000890ae mov r0, r8                                        |         r0 = r8;
    0x000890b0 ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x000890b2 str r1, [sp]                                      |         *(sp) = r1;
    0x000890b4 ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x000890b6 bl 0x85c90                                        |         fcn_00085c90 (r0, r1, r2);
                                                                 | label_0:
    0x000890ba adds r6, 1                                        |         r6++;
    0x000890bc cmp r6, 3                                         |         
    0x000890be bne 0x89058                                       |         
                                                                 |     } while (r6 != 3);
    0x000890c0 ldrd r0, r3, [r4, 0x6c]                           |     __asm ("ldrd r0, r3, [r4, 0x6c]");
    0x000890c4 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000890c6 ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
    0x000890ca cmp r0, r3                                        |     
                                                                 |     if (r0 >= r3) {
    0x000890cc bge 0x8913a                                       |         goto label_9;
                                                                 |     }
    0x000890ce add.w r1, r0, r0, lsl 2                           |     r1 = r0 + (r0 << 2);
    0x000890d2 ldr r3, [r4, 0x68]                                |     r3 = *((r4 + 0x68));
    0x000890d4 adds r6, r0, 1                                    |     r6 = r0 + 1;
    0x000890d6 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x000890d8 mov.w lr, 0                                       |     lr = 0;
    0x000890dc mov.w ip, 0x71                                    |     
    0x000890e0 str r6, [r4, 0x6c]                                |     *((r4 + 0x6c)) = r6;
    0x000890e2 adds r7, r3, r1                                   |     r7 = r3 + r1;
    0x000890e4 strd r2, r8, [r7, 4]                              |     __asm ("strd r2, r8, [r7, 4]");
    0x000890e8 strd r5, lr, [r7, 0xc]                            |     __asm ("strd r5, lr, [r7, 0xc]");
    0x000890ec str.w ip, [r3, r1]                                |     __asm ("str.w ip, [r3, r1]");
                                                                 |     do {
    0x000890f0 ldr r3, [r4]                                      |         r3 = *(r4);
    0x000890f2 ldrb.w r3, [r3, 0x57]                             |         r3 = *((r3 + 0x57));
                                                                 |         if (r3 == 0) {
    0x000890f6 cbnz r3, 0x8910a                                  |             
    0x000890f8 ldr r3, [r4, 0x68]                                |             r3 = *((r4 + 0x68));
    0x000890fa add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x000890fe movs r1, 0xfd                                     |             r1 = 0xfd;
    0x00089100 movs r2, 3                                        |             r2 = 3;
    0x00089102 add.w r0, r3, r0, lsl 2                           |             r0 = r3 + (r0 << 2);
    0x00089106 strb r1, [r0, 1]                                  |             *((r0 + 1)) = r1;
    0x00089108 str r2, [r0, 0x10]                                |             *((r0 + 0x10)) = r2;
                                                                 |         }
    0x0008910a cmp r6, 0                                         |         
                                                                 |         if (r6 > 0) {
    0x0008910c ble 0x89120                                       |             
    0x0008910e ldr r3, [r4, 0x68]                                |             r3 = *((r4 + 0x68));
    0x00089110 add.w r6, r6, r6, lsl 2                           |             r6 += (r6 << 2);
    0x00089114 ldrb.w r2, [sp, 0x38]                             |             r2 = var_38h;
    0x00089118 add.w r3, r3, r6, lsl 2                           |             r3 += (r6 << 2);
    0x0008911c strh r2, [r3, -0x12]                              |             *((r3 - 0x12)) = r2;
                                                                 |         }
                                                                 | label_3:
    0x00089120 ldr r2, [pc, 0x9c]                                |         
    0x00089122 ldr r3, [pc, 0x90]                                |         r3 = *(0x891b6);
    0x00089124 add r2, pc                                        |         r2 = 0x1122e8;
    0x00089126 ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x00089128 ldr r2, [r3]                                      |         r2 = imp.atan;
    0x0008912a ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x0008912c eors r2, r3                                       |         r2 ^= r3;
    0x0008912e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00089132 bne 0x891aa                                       |             goto label_10;
                                                                 |         }
    0x00089134 add sp, 0x44                                      |         
    0x00089136 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_9:
    0x0008913a mov r3, r8                                        |         r3 = r8;
    0x0008913c movs r1, 0x71                                     |         r1 = 0x71;
    0x0008913e mov r0, r4                                        |         r0 = r4;
    0x00089140 str r5, [sp]                                      |         *(sp) = r5;
    0x00089142 bl 0x29a7c                                        |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00089146 ldr r6, [r4, 0x6c]                                |         r6 = *((r4 + 0x6c));
    0x00089148 b 0x890f0                                         |         
                                                                 |     } while (1);
                                                                 | label_6:
    0x0008914a cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0008914c bne 0x890ba                                       |         goto label_0;
                                                                 |     }
    0x0008914e ldr r1, [pc, 0x74]                                |     
    0x00089150 mov r3, r7                                        |     r3 = r7;
    0x00089152 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x00089156 mov r0, r8                                        |     r0 = r8;
    0x00089158 movs r6, 1                                        |     r6 = 1;
    0x0008915a add r1, pc                                        |     r1 = 0x112324;
    0x0008915c str r1, [sp]                                      |     *(sp) = r1;
    0x0008915e ldr r1, [pc, 0x68]                                |     
    0x00089160 add r1, pc                                        |     r1 = 0x11232e;
    0x00089162 bl 0x85c90                                        |     fcn_00085c90 (r0, r1, r2);
    0x00089166 ldr.w r3, [r8, 0x5c]                              |     r3 = *((r8 + 0x5c));
    0x0008916a str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0008916c movs r3, 0x10                                     |     r3 = 0x10;
    0x0008916e strb.w r3, [sp, 0x38]                             |     var_38h = r3;
    0x00089172 b 0x89058                                         |     goto label_1;
                                                                 | label_5:
    0x00089174 ldr r3, [r7, 0x74]                                |     r3 = *((r7 + 0x74));
                                                                 |     if (r3 == 0) {
    0x00089176 cbz r3, 0x8919c                                   |         goto label_11;
                                                                 |     }
                                                                 | label_4:
    0x00089178 mov r0, r7                                        |     r0 = r7;
    0x0008917a str r2, [sp, 8]                                   |     var_8h = r2;
    0x0008917c bl 0x29b0c                                        |     fcn_00029b0c (r0);
    0x00089180 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00089182 mov r4, r0                                        |     r4 = r0;
    0x00089184 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00089186 bne.w 0x89030                                     |         goto label_2;
                                                                 |     }
    0x0008918a b 0x89120                                         |     goto label_3;
                                                                 | label_8:
    0x0008918c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0008918e movs r1, 0x91                                     |     r1 = 0x91;
    0x00089190 mov r0, r4                                        |     r0 = r4;
    0x00089192 str r3, [sp]                                      |     *(sp) = r3;
    0x00089194 mov r3, r5                                        |     r3 = r5;
    0x00089196 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0008919a b 0x890ba                                         |     goto label_0;
                                                                 | label_11:
    0x0008919c ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x000891a0 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x000891a2 itt pl                                            |     
                                                                 |     if (r3 < r3) {
    0x000891a4 movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x000891a6 strbpl r3, [r7, 0x17]                             |         *((r7 + 0x17)) = r3;
                                                                 |     }
    0x000891a8 b 0x89178                                         |     goto label_4;
                                                                 | label_10:
    0x000891aa blx 0x9b44                                        |     fcn_00009b44 ();
    0x000891ae nop                                               |     
    0x000891b0 ldrb r4, [r5, 0xb]                                |     r4 = *((r5 + 0xb));
    0x000891b2 movs r1, r0                                       |     r1 = r0;
    0x000891b4 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x000891b6 movs r0, r0                                       |     
    0x000891b8 str r6, [r5, 0x70]                                |     *((r5 + 0x70)) = r6;
    0x000891ba movs r1, r0                                       |     r1 = r0;
    0x000891bc add sp, 0x60                                      |     
    0x000891be movs r0, r0                                       |     
    0x000891c0 ldrb r4, [r3, 7]                                  |     r4 = *((r3 + 7));
    0x000891c2 movs r1, r0                                       |     r1 = r0;
    0x000891c4 invalid                                           |     
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x891cc */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.000891cc ()                              | void fcn_000891cc (int16_t arg1, int16_t arg2) {
                                                         |     int16_t var_0h;
                                                         |     int32_t var_0h_2;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     if (? >= ?) {
    0x000891cc strmi r6, [sl], -r3, lsl 16               |         *(sl) = r6;
                                                         |         sl += 16;
                                                         |     }
    0x000891d0 push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x000891d4 mov r5, r0                                |     r5 = r0;
    0x000891d6 sub sp, 0xc                               |     
    0x000891d8 mov sb, r1                                |     sb = r1;
    0x000891da ldr r3, [r3, 0x10]                        |     r3 = *((r3 + 0x10));
    0x000891dc add.w r3, r3, r1, lsl 4                   |     r3 += (r1 << 4);
    0x000891e0 movs r1, 0                                |     r1 = 0;
    0x000891e2 ldr r4, [r3, 0xc]                         |     r4 = *((r3 + 0xc));
    0x000891e4 bl 0x4a5bc                                |     fcn_0004a5bc (r0, r1, r2);
    0x000891e8 ldr r7, [r5, 0x28]                        |     r7 = *((r5 + 0x28));
    0x000891ea mov r1, sb                                |     r1 = sb;
    0x000891ec mov r0, r5                                |     r0 = r5;
    0x000891ee adds r3, r7, 3                            |     r3 = r7 + 3;
    0x000891f0 mov r2, r7                                |     r2 = r7;
    0x000891f2 str r3, [r5, 0x28]                        |     *((r5 + 0x28)) = r3;
    0x000891f4 movs r3, 0                                |     r3 = 0;
    0x000891f6 str r3, [sp]                              |     *(sp) = r3;
    0x000891f8 bl 0x89004                                |     fcn_00089004 (r0, r1, r2, r3, r4, r5, r6);
    0x000891fc ldr r4, [r4, 0x10]                        |     r4 = *((r4 + 0x10));
    0x000891fe ldrd r8, r6, [r5, 0x28]                   |     __asm ("ldrd r8, r6, [r5, 0x28]");
                                                         |     if (r4 == 0) {
    0x00089202 cbz r4, 0x8921c                           |         goto label_1;
                                                         |     }
    0x00089204 adds r6, 1                                |     r6++;
                                                         |     do {
    0x00089206 ldr r1, [r4, 8]                           |         r1 = *((r4 + 8));
    0x00089208 mov r3, r7                                |         r3 = r7;
    0x0008920a movs r2, 0                                |         r2 = 0;
    0x0008920c mov r0, r5                                |         r0 = r5;
    0x0008920e strd r6, r8, [sp]                         |         __asm ("strd r6, r8, [sp]");
    0x00089212 bl 0x37b3c                                |         fcn_00037b3c (r0, r1, r2, r3, r4, r5, r6);
    0x00089216 ldr r4, [r4]                              |         r4 = *(r4);
    0x00089218 cmp r4, 0                                 |         
    0x0008921a bne 0x89206                               |         
                                                         |     } while (r4 != 0);
                                                         | label_1:
    0x0008921c ldr r0, [r5, 8]                           |     r0 = *((r5 + 8));
    0x0008921e cbz r0, 0x89232                           |     
                                                         |     while (r0 != 0) {
    0x00089220 movs r3, 0                                |         r3 = 0;
    0x00089222 mov r2, sb                                |         r2 = sb;
    0x00089224 movs r1, 0x96                             |         r1 = 0x96;
    0x00089226 str r3, [sp]                              |         *(sp) = r3;
    0x00089228 bl 0x29ac4                                |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0008922c add sp, 0xc                               |         
    0x0008922e pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
    0x00089232 ldr r3, [r5, 0x74]                        |         r3 = *((r5 + 0x74));
                                                         |         if (r3 == 0) {
    0x00089234 cbz r3, 0x89246                           |             goto label_2;
                                                         |         }
                                                         | label_0:
    0x00089236 mov r0, r5                                |         r0 = r5;
    0x00089238 bl 0x29b0c                                |         r0 = fcn_00029b0c (r0);
    0x0008923c cmp r0, 0                                 |         
    0x0008923e bne 0x89220                               |         
                                                         |     }
    0x00089240 add sp, 0xc                               |     
    0x00089242 pop.w {r4, r5, r6, r7, r8, sb, pc}        |     
                                                         | label_2:
    0x00089246 ldr r3, [r5]                              |     r3 = *(r5);
    0x00089248 ldr r3, [r3, 0x50]                        |     r3 = *((r3 + 0x50));
    0x0008924a lsls r3, r3, 0x1c                         |     r3 <<= 0x1c;
    0x0008924c itt pl                                    |     
                                                         |     if (r3 < r3) {
    0x0008924e movpl r3, 1                               |         r3 = 1;
                                                         |     }
                                                         |     if (r3 < r3) {
    0x00089250 strbpl r3, [r5, 0x17]                     |         *((r5 + 0x17)) = r3;
                                                         |     }
    0x00089252 b 0x89236                                 |     goto label_0;
                                                         | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x89254 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.00089254 ()                          | void fcn_00089254 (int16_t arg1, int16_t arg3, arithmetic x) {
                                                     |     int16_t var_0h;
                                                     |     int16_t var_4h;
                                                     |     r0 = arg1;
                                                     |     r2 = arg3;
                                                     |     r1 = x;
    0x00089254 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00089258 mov r6, r0                            |     r6 = r0;
    0x0008925a ldr r0, [r1, 0x3c]                    |     r0 = *((r1 + 0x3c));
    0x0008925c sub sp, 8                             |     
    0x0008925e mov r8, r1                            |     r8 = r1;
    0x00089260 mov r7, r2                            |     r7 = r2;
    0x00089262 ldr r3, [r6]                          |     r3 = *(r6);
    0x00089264 cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x00089266 beq 0x89304                           |         goto label_3;
                                                     |     }
    0x00089268 ldr r3, [r3, 0x10]                    |     r3 = *((r3 + 0x10));
    0x0008926a movs r4, 0                            |     r4 = 0;
    0x0008926c ldr r2, [r3, 0xc]                     |     r2 = *((r3 + 0xc));
    0x0008926e cmp r0, r2                            |     
                                                     |     if (r0 == r2) {
    0x00089270 beq 0x8927c                           |         goto label_2;
                                                     |     }
                                                     |     do {
    0x00089272 ldr r5, [r3, 0x1c]                    |         r5 = *((r3 + 0x1c));
    0x00089274 adds r4, 1                            |         r4++;
    0x00089276 adds r3, 0x10                         |         r3 += 0x10;
    0x00089278 cmp r0, r5                            |         
    0x0008927a bne 0x89272                           |         
                                                     |     } while (r0 != r5);
                                                     | label_2:
    0x0008927c mov r2, r4                            |     r2 = r4;
    0x0008927e movs r1, 0                            |     r1 = 0;
    0x00089280 mov r0, r6                            |     r0 = r6;
    0x00089282 bl 0x4a5bc                            |     fcn_0004a5bc (r0, r1, r2);
    0x00089286 ldr r5, [r6, 0x28]                    |     r5 = *((r6 + 0x28));
    0x00089288 adds r3, r5, 3                        |     r3 = r5 + 3;
    0x0008928a str r3, [r6, 0x28]                    |     *((r6 + 0x28)) = r3;
                                                     |     if (r7 == 0) {
    0x0008928c cbz r7, 0x892e0                       |         goto label_4;
                                                     |     }
    0x0008928e ldr r3, [pc, 0x80]                    |     
    0x00089290 mov r2, r5                            |     r2 = r5;
    0x00089292 mov r1, r4                            |     r1 = r4;
    0x00089294 mov r0, r6                            |     r0 = r6;
    0x00089296 add r3, pc                            |     r3 = 0x1125ac;
    0x00089298 str r3, [sp]                          |     *(sp) = r3;
    0x0008929a ldr r3, [r7]                          |     r3 = *(r7);
    0x0008929c bl 0x89004                            |     fcn_00089004 (r0, r1, r2, r3, r4, r5, r6);
                                                     | label_0:
    0x000892a0 ldr r0, [r6, 0x2c]                    |     r0 = *((r6 + 0x2c));
    0x000892a2 mov r3, r5                            |     r3 = r5;
    0x000892a4 mov r2, r7                            |     r2 = r7;
    0x000892a6 mov r1, r8                            |     r1 = r8;
    0x000892a8 adds r0, 1                            |     r0++;
    0x000892aa str r0, [sp]                          |     *(sp) = r0;
    0x000892ac ldr r0, [r6, 0x28]                    |     r0 = *((r6 + 0x28));
    0x000892ae str r0, [sp, 4]                       |     var_4h = r0;
    0x000892b0 mov r0, r6                            |     r0 = r6;
    0x000892b2 bl 0x37b3c                            |     fcn_00037b3c (r0, r1, r2, r3, r4, r5, r6);
    0x000892b6 ldr r0, [r6, 8]                       |     r0 = *((r6 + 8));
    0x000892b8 cbz r0, 0x892cc                       |     
                                                     |     while (r0 != 0) {
    0x000892ba movs r3, 0                            |         r3 = 0;
    0x000892bc mov r2, r4                            |         r2 = r4;
    0x000892be movs r1, 0x96                         |         r1 = 0x96;
    0x000892c0 str r3, [sp]                          |         *(sp) = r3;
    0x000892c2 bl 0x29ac4                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x000892c6 add sp, 8                             |         
    0x000892c8 pop.w {r4, r5, r6, r7, r8, pc}        |         
    0x000892cc ldr r3, [r6, 0x74]                    |         r3 = *((r6 + 0x74));
                                                     |         if (r3 == 0) {
    0x000892ce cbz r3, 0x892f6                       |             goto label_5;
                                                     |         }
                                                     | label_1:
    0x000892d0 mov r0, r6                            |         r0 = r6;
    0x000892d2 bl 0x29b0c                            |         r0 = fcn_00029b0c (r0);
    0x000892d6 cmp r0, 0                             |         
    0x000892d8 bne 0x892ba                           |         
                                                     |     }
    0x000892da add sp, 8                             |     
    0x000892dc pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_4:
    0x000892e0 ldr r3, [pc, 0x30]                    |     
    0x000892e2 mov r2, r5                            |     r2 = r5;
    0x000892e4 mov r1, r4                            |     r1 = r4;
    0x000892e6 mov r0, r6                            |     r0 = r6;
    0x000892e8 add r3, pc                            |     r3 = 0x112600;
    0x000892ea str r3, [sp]                          |     *(sp) = r3;
    0x000892ec ldr.w r3, [r8]                        |     r3 = *(r8);
    0x000892f0 bl 0x89004                            |     fcn_00089004 (r0, r1, r2, r3, r4, r5, r6);
    0x000892f4 b 0x892a0                             |     goto label_0;
                                                     | label_5:
    0x000892f6 ldr r3, [r6]                          |     r3 = *(r6);
    0x000892f8 ldr r3, [r3, 0x50]                    |     r3 = *((r3 + 0x50));
    0x000892fa lsls r3, r3, 0x1c                     |     r3 <<= 0x1c;
    0x000892fc itt pl                                |     
                                                     |     if (r3 < r3) {
    0x000892fe movpl r3, 1                           |         r3 = 1;
                                                     |     }
                                                     |     if (r3 < r3) {
    0x00089300 strbpl r3, [r6, 0x17]                 |         *((r6 + 0x17)) = r3;
                                                     |     }
    0x00089302 b 0x892d0                             |     goto label_1;
                                                     | label_3:
    0x00089304 mov.w r4, 0x8000                      |     
    0x00089308 movt r4, 0xffff                       |     r4 = 0x-8000;
    0x0008930c b 0x8927c                             |     goto label_2;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x89c7c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00089c7c ()                                      | void fcn_00089c7c (int16_t arg_0h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00089c7c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00089c80 sub sp, 0x1c                                      |     
    0x00089c82 invalid                                           |     
    0x00089c84 str r4, [r5, 0xc]                                 |     *((r5 + 0xc)) = r4;
    0x00089c86 ldr r7, [r0]                                      |     r7 = *(r0);
    0x00089c88 cmp r6, 0                                         |     
    0x00089c8a invalid                                           |     
    0x00089c8c strh r1, [r6, 4]                                  |     *((r6 + 4)) = r1;
    0x00089c8e ldr.w sb, [r0, 0xfc]                              |     sb = *(arg_0hxfc);
    0x00089c92 mov r4, r0                                        |     r4 = r0;
    0x00089c94 mov r5, r1                                        |     r5 = r1;
    0x00089c96 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00089c9a beq 0x89cce                                       |         
    0x00089c9c ldr.w r8, [r0, 0x100]                             |         r8 = *(arg_0hx100);
    0x00089ca0 mov r0, r7                                        |         r0 = r7;
    0x00089ca2 adds.w r2, r8, 1                                  |         r2 = r8 + 1;
    0x00089ca6 asr.w r3, r8, 0x1f                                |         r3 = r8 >> 0x1f;
    0x00089caa invalid                                           |         
    0x00089cac lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
    0x00089cae bl 0x1d740                                        |         r0 = fcn_0001d740 (r0, r1);
    0x00089cb2 mov sl, r0                                        |         sl = r0;
                                                                 |         if (r0 != 0) {
    0x00089cb4 cbz r0, 0x89cc4                                   |             
    0x00089cb6 mov r1, sb                                        |             r1 = sb;
    0x00089cb8 mov r2, r8                                        |             r2 = r8;
    0x00089cba invalid                                           |             
    0x00089cbc ldm.w r8!, {r8, sb, sp}                           |             r8 = *(r8!);
                                                                 |             sb = *((r8! + 4));
                                                                 |             sp = *((r8! + 8));
    0x00089cc0 strb.w r3, [sl, r8]                               |             *((sl + r8)) = r3;
                                                                 |         }
    0x00089cc4 mov r2, sl                                        |         r2 = sl;
    0x00089cc6 mov r1, r6                                        |         r1 = r6;
    0x00089cc8 mov r0, r4                                        |         r0 = r4;
    0x00089cca bl 0x28ef4                                        |         fcn_00028ef4 (r0, r1, r2);
                                                                 |     }
    0x00089cce ldr r3, [r6, 0x2c]                                |     r3 = *((r6 + 0x2c));
    0x00089cd0 movs r2, 0                                        |     r2 = 0;
    0x00089cd2 str.w r2, [r4, 0xfc]                              |     __asm ("str.w r2, [r4, 0xfc]");
    0x00089cd6 cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x00089cd8 ble.w 0x89df0                                     |         goto label_2;
                                                                 |     }
    0x00089cdc ldrb.w r3, [r7, 0xb1]                             |     r3 = *((r7 + 0xb1));
    0x00089ce0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00089ce2 bne.w 0x89df6                                     |         goto label_6;
                                                                 |     }
    0x00089ce6 ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x00089ce8 cmp r3, r2                                        |     
    0x00089cea it eq                                             |     
                                                                 |     if (r3 != r2) {
    0x00089cec moveq r3, r4                                      |         r3 = r4;
                                                                 |     }
    0x00089cee movs r2, 1                                        |     r2 = 1;
    0x00089cf0 strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
                                                                 |     if (r5 != 0) {
    0x00089cf2 cbz r5, 0x89d04                                   |         
    0x00089cf4 ldrd r3, r2, [r5]                                 |         __asm ("ldrd r3, r2, [r5]");
    0x00089cf8 ldr.w r1, [r4, 0xbc]                              |         r1 = *((r4 + 0xbc));
    0x00089cfc subs r3, r3, r1                                   |         r3 -= r1;
    0x00089cfe add r3, r2                                        |         r3 += r2;
    0x00089d00 str.w r3, [r4, 0xc0]                              |         __asm ("str.w r3, [r4, 0xc0]");
                                                                 |     }
    0x00089d04 ldr r1, [pc, 0x208]                               |     
    0x00089d06 add.w r2, r4, 0xbc                                |     r2 = r4 + 0xbc;
    0x00089d0a mov r0, r7                                        |     r0 = r7;
    0x00089d0c add r1, pc                                        |     r1 = 0x113c20;
    0x00089d0e bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00089d12 ldr r1, [r6, 0x3c]                                |     r1 = *((r6 + 0x3c));
    0x00089d14 mov r8, r0                                        |     r8 = r0;
    0x00089d16 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00089d18 beq.w 0x89ef8                                     |         goto label_7;
                                                                 |     }
    0x00089d1c ldr r2, [r7, 0x10]                                |     r2 = *((r7 + 0x10));
    0x00089d1e ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00089d20 cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x00089d22 beq.w 0x89ed0                                     |         goto label_8;
                                                                 |     }
    0x00089d26 adds r2, 0x10                                     |     r2 += 0x10;
    0x00089d28 movs r5, 0                                        |     r5 = 0;
                                                                 |     do {
    0x00089d2a ldr r3, [r2, 0xc]                                 |         r3 = *((r2 + 0xc));
    0x00089d2c mov ip, r2                                        |         
    0x00089d2e adds r5, 1                                        |         r5++;
    0x00089d30 adds r2, 0x10                                     |         r2 += 0x10;
    0x00089d32 cmp r1, r3                                        |         
    0x00089d34 bne 0x89d2a                                       |         
                                                                 |     } while (r1 != r3);
    0x00089d36 lsl.w sl, r5, 4                                   |     sl = r5 << 4;
    0x00089d3a mov r2, ip                                        |     r2 = ip;
                                                                 | label_4:
    0x00089d3c ldr r3, [r6]                                      |     r3 = *(r6);
    0x00089d3e mov r0, r4                                        |     r0 = r4;
    0x00089d40 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00089d42 strd r3, r8, [sp]                                 |     __asm ("strd r3, r8, [sp]");
    0x00089d46 ldr r1, [r4, 0x58]                                |     r1 = *((r4 + 0x58));
    0x00089d48 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00089d4a ldr r1, [pc, 0x1c8]                               |     
    0x00089d4c add r1, pc                                        |     r1 = 0x113c66;
    0x00089d4e bl 0x85c90                                        |     fcn_00085c90 (r0, r1, r2);
    0x00089d52 ldr.w sb, [r4, 8]                                 |     sb = *((r4 + 8));
    0x00089d56 mov r0, sb                                        |     r0 = sb;
    0x00089d58 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00089d5c beq.w 0x89e86                                     |         goto label_9;
                                                                 |     }
                                                                 | label_0:
    0x00089d60 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00089d62 mov r2, r5                                        |     r2 = r5;
    0x00089d64 movs r1, 0x64                                     |     r1 = 0x64;
    0x00089d66 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00089d68 add r3, sl                                        |     r3 += sl;
    0x00089d6a ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00089d6c ldr r3, [r3]                                      |     r3 = *(r3);
    0x00089d6e adds r3, 1                                        |     r3++;
    0x00089d70 str r3, [sp]                                      |     *(sp) = r3;
    0x00089d72 movs r3, 1                                        |     r3 = 1;
    0x00089d74 bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
    0x00089d78 ldrd r3, r2, [sb, 0x6c]                           |     __asm ("ldrd r3, r2, [sb, 0x6c]");
    0x00089d7c cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x00089d7e bge.w 0x89e96                                     |         goto label_10;
                                                                 |     }
    0x00089d82 add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x00089d86 adds r3, 1                                        |     r3++;
    0x00089d88 str.w r3, [sb, 0x6c]                              |     __asm ("str.w r3, [sb, 0x6c]");
    0x00089d8c movs r0, 0xa6                                     |     r0 = 0xa6;
    0x00089d8e ldr.w r3, [sb, 0x68]                              |     r3 = *((sb + 0x68));
    0x00089d92 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00089d94 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00089d98 movs r1, 0                                        |     r1 = 0;
    0x00089d9a str r0, [r3, r2]                                  |     *((r3 + r2)) = r0;
    0x00089d9c add r3, r2                                        |     r3 += r2;
    0x00089d9e adds r2, r3, 4                                    |     r2 = r3 + 4;
    0x00089da0 vst1.32 {d16}, [r2]                               |     __asm ("vst1.32 {d16}, [r2]");
    0x00089da4 strd r1, r1, [r3, 0xc]                            |     __asm ("strd r1, r1, [r3, 0xc]");
                                                                 | label_1:
    0x00089da8 ldr r1, [pc, 0x16c]                               |     
    0x00089daa mov r3, r8                                        |     r3 = r8;
    0x00089dac ldr r2, [r6]                                      |     r2 = *(r6);
    0x00089dae mov r0, r7                                        |     r0 = r7;
    0x00089db0 add r1, pc                                        |     r1 = 0x113ccc;
    0x00089db2 bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00089db6 movs r3, 0                                        |     r3 = 0;
    0x00089db8 mov r2, r0                                        |     r2 = r0;
    0x00089dba mov r1, r5                                        |     r1 = r5;
    0x00089dbc mov r0, sb                                        |     r0 = sb;
    0x00089dbe bl 0x2b06c                                        |     fcn_0002b06c (r0, r1, r2, r3);
    0x00089dc2 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00089dc6 beq 0x89dd0                                       |         
    0x00089dc8 mov r1, r8                                        |         r1 = r8;
    0x00089dca mov r0, r7                                        |         r0 = r7;
    0x00089dcc bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x00089dd0 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00089dd2 mov r0, sb                                        |     r0 = sb;
    0x00089dd4 ldr r2, [r6]                                      |     r2 = *(r6);
    0x00089dd6 adds r6, r3, 1                                    |     r6 = r3 + 1;
    0x00089dd8 mov r1, r6                                        |     r1 = r6;
    0x00089dda str r6, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r6;
    0x00089ddc movs r4, 0                                        |     r4 = 0;
    0x00089dde bl 0x2a930                                        |     fcn_0002a930 (r0, r1, r2);
    0x00089de2 mov r3, r6                                        |     r3 = r6;
    0x00089de4 mov r2, r5                                        |     r2 = r5;
    0x00089de6 movs r1, 0xab                                     |     r1 = 0xab;
    0x00089de8 mov r0, sb                                        |     r0 = sb;
    0x00089dea str r4, [sp]                                      |     *(sp) = r4;
    0x00089dec bl 0x29ac4                                        |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                 | label_2:
    0x00089df0 add sp, 0x1c                                      |     
    0x00089df2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_6:
    0x00089df6 ldr r3, [r6, 0x3c]                                |     r3 = *((r6 + 0x3c));
    0x00089df8 add.w r0, r7, 0x180                               |     r0 = r7 + 0x180;
    0x00089dfc ldr.w sl, [r6]                                    |     sl = *(r6);
    0x00089e00 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00089e02 ldr r3, [r6, 0x30]                                |     r3 = *((r6 + 0x30));
    0x00089e04 ldr r1, [r3]                                      |     r1 = *(r3);
    0x00089e06 bl 0x146e4                                        |     fcn_000146e4 (r0, r1, r2);
    0x00089e0a ldr.w fp, [r0, 8]                                 |     fp = *((r0 + 8));
    0x00089e0e cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00089e12 beq 0x89e6e                                       |         goto label_11;
                                                                 |     }
    0x00089e14 ldr.w r2, [fp]                                    |     r2 = *(fp);
                                                                 |     if (r2 == 0) {
    0x00089e18 cbz r2, 0x89e6e                                   |         goto label_11;
                                                                 |     }
    0x00089e1a ldr r1, [r2]                                      |     r1 = *(r2);
    0x00089e1c cmp r1, 2                                         |     
                                                                 |     if (r1 <= 2) {
    0x00089e1e ble 0x89e6e                                       |         goto label_11;
                                                                 |     }
    0x00089e20 ldr r2, [r2, 0x5c]                                |     r2 = *((r2 + 0x5c));
                                                                 |     if (r2 == 0) {
    0x00089e22 cbz r2, 0x89e6e                                   |         goto label_11;
                                                                 |     }
    0x00089e24 mov sb, sl                                        |     sb = sl;
    0x00089e26 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00089e2a beq 0x89e36                                       |         
    0x00089e2c mov r0, sl                                        |         r0 = sl;
    0x00089e2e blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00089e32 bic sb, r0, 0xc0000000                            |         sb = BIT_MASK (r0, 0xc0000000);
                                                                 |     }
    0x00089e36 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00089e38 ldr r5, [r3, 0x10]                                |     r5 = *((r3 + 0x10));
                                                                 |     if (r5 == 0) {
    0x00089e3a cbz r5, 0x89e6e                                   |         goto label_11;
                                                                 |     }
                                                                 |     do {
    0x00089e3c ldr.w r8, [r5, 8]                                 |         r8 = *((r5 + 8));
    0x00089e40 ldrb.w r2, [r8, 0x2b]                             |         r2 = *((r8 + 0x2b));
                                                                 |         if (r2 == 0) {
    0x00089e44 cbnz r2, 0x89e68                                  |             
    0x00089e46 ldr.w r1, [r8, 0x1c]                              |             r1 = *((r8 + 0x1c));
    0x00089e4a mov r2, sb                                        |             r2 = sb;
    0x00089e4c lsls r3, r1, 0x13                                 |             r3 = r1 << 0x13;
                                                                 |             if (r3 < r1) {
    0x00089e4e bmi 0x89e68                                       |                 goto label_5;
                                                                 |             }
    0x00089e50 ldr r1, [r6]                                      |             r1 = *(r6);
    0x00089e52 ldr.w r0, [r8]                                    |             r0 = *(r8);
    0x00089e56 blx 0x9890                                        |             r0 = fcn_00009890 ();
                                                                 |             if (r0 != 0) {
    0x00089e5a cbnz r0, 0x89e68                                  |                 goto label_5;
                                                                 |             }
    0x00089e5c ldr.w r2, [r8]                                    |             r2 = *(r8);
    0x00089e60 ldrb.w r1, [r2, sb]                               |             r1 = *((r2 + sb));
    0x00089e64 cmp r1, 0x5f                                      |             
                                                                 |             if (r1 == 0x5f) {
    0x00089e66 beq 0x89ed8                                       |                 goto label_12;
                                                                 |             }
                                                                 |         }
                                                                 | label_5:
    0x00089e68 ldr r5, [r5]                                      |         r5 = *(r5);
    0x00089e6a cmp r5, 0                                         |         
    0x00089e6c bne 0x89e3c                                       |         
                                                                 |     } while (r5 != 0);
                                                                 | label_11:
    0x00089e6e ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00089e70 mov r2, r6                                        |     r2 = r6;
    0x00089e72 mov r1, sl                                        |     r1 = sl;
    0x00089e74 adds r0, 8                                        |     r0 += 8;
    0x00089e76 bl 0x147a8                                        |     r0 = fcn_000147a8 (r0, r1, r2, r3, r4);
                                                                 |     if (r0 == 0) {
    0x00089e7a cbnz r0, 0x89ea6                                  |         
    0x00089e7c str.w r0, [r4, 0xec]                              |         __asm ("str.w r0, [r4, 0xec]");
    0x00089e80 add sp, 0x1c                                      |         
    0x00089e82 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_9:
    0x00089e86 ldr r3, [r4, 0x74]                                |         r3 = *((r4 + 0x74));
                                                                 |         if (r3 == 0) {
    0x00089e88 cbz r3, 0x89ec2                                   |             goto label_13;
                                                                 |         }
                                                                 | label_3:
    0x00089e8a mov r0, r4                                        |         r0 = r4;
    0x00089e8c bl 0x29b0c                                        |         r0 = fcn_00029b0c (r0);
    0x00089e90 mov sb, r0                                        |         sb = r0;
    0x00089e92 ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x00089e94 b 0x89d60                                         |         goto label_0;
                                                                 | label_10:
    0x00089e96 movs r3, 0                                        |         r3 = 0;
    0x00089e98 movs r1, 0xa6                                     |         r1 = 0xa6;
    0x00089e9a mov r2, r3                                        |         r2 = r3;
    0x00089e9c mov r0, sb                                        |         r0 = sb;
    0x00089e9e str r3, [sp]                                      |         *(sp) = r3;
    0x00089ea0 bl 0x29a7c                                        |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00089ea4 b 0x89da8                                         |         goto label_1;
                                                                 |     }
    0x00089ea6 ldrb.w r3, [r7, 0x57]                             |     r3 = *((r7 + 0x57));
    0x00089eaa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00089eac bne 0x89df0                                       |         goto label_2;
                                                                 |     }
    0x00089eae ldrb.w r3, [r7, 0x58]                             |     r3 = *((r7 + 0x58));
    0x00089eb2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00089eb4 bne 0x89df0                                       |         goto label_2;
                                                                 |     }
    0x00089eb6 mov r0, r7                                        |     r0 = r7;
    0x00089eb8 add sp, 0x1c                                      |     
    0x00089eba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00089ebe b.w 0x1d600                                       |     void (*0x1d600)() ();
                                                                 | label_13:
    0x00089ec2 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00089ec4 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00089ec6 lsls r2, r3, 0x1c                                 |     r2 = r3 << 0x1c;
    0x00089ec8 itt pl                                            |     
                                                                 |     if (r2 < r3) {
    0x00089eca movpl r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x00089ecc strbpl r3, [r4, 0x17]                             |         *((r4 + 0x17)) = r3;
                                                                 |     }
    0x00089ece b 0x89e8a                                         |     goto label_3;
                                                                 | label_8:
    0x00089ed0 mov.w sl, 0                                       |     sl = 0;
    0x00089ed4 mov r5, sl                                        |     r5 = sl;
    0x00089ed6 b 0x89d3c                                         |     goto label_4;
                                                                 | label_12:
    0x00089ed8 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x00089edc add.w r0, sb, 1                                   |     r0 = sb + 1;
    0x00089ee0 add r0, r2                                        |     r0 += r2;
    0x00089ee2 ldr r1, [r1, 0x5c]                                |     r1 = *((r1 + 0x5c));
    0x00089ee4 blx r1                                            |     r0 = uint32_t (*r1)(uint32_t, uint32_t) (r0, r1);
    0x00089ee6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00089ee8 beq 0x89e68                                       |         goto label_5;
                                                                 |     }
    0x00089eea ldr.w r2, [r8, 0x1c]                              |     r2 = *((r8 + 0x1c));
    0x00089eee orr r2, r2, 0x1000                                |     r2 |= 0x1000;
    0x00089ef2 str.w r2, [r8, 0x1c]                              |     __asm ("str.w r2, [r8, 0x1c]");
    0x00089ef6 b 0x89e68                                         |     goto label_5;
                                                                 | label_7:
    0x00089ef8 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x00089efa mov.w sl, 0                                       |     sl = 0;
    0x00089efe mov.w r5, 0x8000                                  |     r5 = 0x8000;
    0x00089f02 movt sl, 0xfff8                                   |     sl = (sl & 0xFFFF) | 0xfff80000;
    0x00089f06 movt r5, 0xffff                                   |     r5 = (r5 & 0xFFFF) | 0xffff0000;
    0x00089f0a sub.w r2, r3, 0x80000                             |     r2 = r3 - 0x80000;
    0x00089f0e b 0x89d3c                                         |     goto label_4;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8a204 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0008a204 ()                                          | void fcn_0008a204 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     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;
    0x0008a204 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0008a208 mov r5, r1                                            |     r5 = r1;
    0x0008a20a ldr r6, [r0]                                          |     r6 = *(r0);
    0x0008a20c sub sp, 0x3c                                          |     
    0x0008a20e ldrb.w r1, [r6, 0x57]                                 |     r1 = *((r6 + 0x57));
    0x0008a212 cbz r1, 0x8a222                                       |     
                                                                     |     while (r0 == 0) {
                                                                     | label_0:
    0x0008a214 mov r1, r5                                            |         r1 = r5;
    0x0008a216 mov r0, r6                                            |         r0 = r6;
    0x0008a218 add sp, 0x3c                                          |         
    0x0008a21a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0008a21e b.w 0x16a58                                           |         void (*0x16a58)() ();
    0x0008a222 mov sb, r2                                            |         sb = r2;
    0x0008a224 add.w r2, r5, 8                                       |         r2 = r5 + 8;
    0x0008a228 mov r4, r0                                            |         r4 = r0;
    0x0008a22a bl 0x73364                                            |         r0 = fcn_00073364 (r0, r1, r2);
    0x0008a22e mov r7, r0                                            |         r7 = r0;
    0x0008a230 str r0, [sp, 0x14]                                    |         var_14h = r0;
    0x0008a232 cmp r0, 0                                             |         
    0x0008a234 beq 0x8a214                                           |         
                                                                     |     }
    0x0008a236 mov r1, r0                                            |     r1 = r0;
    0x0008a238 mov r0, r4                                            |     r0 = r4;
    0x0008a23a bl 0x20728                                            |     r0 = fcn_00020728 (r0, r1);
    0x0008a23e mov r8, r0                                            |     r8 = r0;
    0x0008a240 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0008a242 bne 0x8a214                                           |         goto label_0;
                                                                     |     }
    0x0008a244 ldrb.w r3, [r7, 0x2b]                                 |     r3 = *((r7 + 0x2b));
    0x0008a248 ldr r2, [r7]                                          |     r2 = *(r7);
    0x0008a24a cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0008a24c beq.w 0x8a52a                                         |         goto label_16;
                                                                     |     }
    0x0008a250 cmp r3, 1                                             |     
                                                                     |     if (r3 == 1) {
    0x0008a252 beq.w 0x8a562                                         |         goto label_17;
                                                                     |     }
    0x0008a256 mov r1, sb                                            |     r1 = sb;
    0x0008a258 mov r0, r6                                            |     r0 = r6;
    0x0008a25a bl 0x1e9ec                                            |     r0 = fcn_0001e9ec (r0, r1);
    0x0008a25e mov fp, r0                                            |     
    0x0008a260 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0008a262 beq 0x8a214                                           |         goto label_0;
                                                                     |     }
    0x0008a264 mov r1, r0                                            |     r1 = r0;
    0x0008a266 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0008a268 bl 0x1572c                                            |     r0 = fcn_0001572c (r0, r1);
    0x0008a26c subs.w sl, r0, 0                                      |     sl = r0 - 0;
                                                                     |     if (sl < r0) {
    0x0008a270 blt.w 0x8a54c                                         |         goto label_18;
                                                                     |     }
    0x0008a274 add.w sb, sl, sl, lsl 1                               |     sb = sl + (sl << 1);
    0x0008a278 lsl.w r3, sb, 2                                       |     r3 = sb << 2;
    0x0008a27c mov r2, r3                                            |     r2 = r3;
    0x0008a27e str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0008a280 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a282 ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x0008a284 add r3, r2                                            |     r3 += r2;
    0x0008a286 ldrh r3, [r3, 0xa]                                    |     r3 = *((r3 + 0xa));
    0x0008a288 tst.w r3, 9                                           |     
                                                                     |     if ((r3 & 9) != 0) {
    0x0008a28c bne.w 0x8a568                                         |         goto label_19;
                                                                     |     }
    0x0008a290 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a292 ldrsh.w r3, [r3, 0x22]                                |     r3 = *((r3 + 0x22));
    0x0008a296 cmp r3, 1                                             |     
                                                                     |     if (r3 <= 1) {
    0x0008a298 ble.w 0x8a584                                         |         goto label_20;
                                                                     |     }
    0x0008a29c ldr r7, [sp, 0x14]                                    |     r7 = var_14h;
    0x0008a29e ldr r3, [r6, 0x10]                                    |     r3 = *((r6 + 0x10));
    0x0008a2a0 ldr r1, [r7, 0x3c]                                    |     r1 = *((r7 + 0x3c));
    0x0008a2a2 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0008a2a4 beq.w 0x8a592                                         |         goto label_21;
                                                                     |     }
    0x0008a2a8 ldr r2, [r3, 0xc]                                     |     r2 = *((r3 + 0xc));
    0x0008a2aa cmp r1, r2                                            |     
                                                                     |     if (r1 == r2) {
    0x0008a2ac beq.w 0x8a59e                                         |         goto label_22;
                                                                     |     }
    0x0008a2b0 adds r3, 0x10                                         |     r3 += 0x10;
                                                                     |     do {
    0x0008a2b2 mov r0, r3                                            |         r0 = r3;
    0x0008a2b4 add.w r8, r8, 1                                       |         r8++;
    0x0008a2b8 ldr r2, [r3, 0xc]                                     |         r2 = *((r3 + 0xc));
    0x0008a2ba adds r3, 0x10                                         |         r3 += 0x10;
    0x0008a2bc cmp r1, r2                                            |         
    0x0008a2be bne 0x8a2b2                                           |         
                                                                     |     } while (r1 != r2);
    0x0008a2c0 ldr.w sb, [r0]                                        |     sb = *(r0);
    0x0008a2c4 movs r1, 0x1a                                         |     r1 = 0x1a;
    0x0008a2c6 ldr r3, [r7]                                          |     r3 = *(r7);
    0x0008a2c8 mov r0, r4                                            |     r0 = r4;
    0x0008a2ca str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0008a2ce mov r2, sb                                            |     r2 = sb;
    0x0008a2d0 str r7, [sp, 0x14]                                    |     var_14h = r7;
    0x0008a2d2 bl 0x200fc                                            |     r0 = fcn_000200fc (r0, r1);
    0x0008a2d6 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0008a2d8 bne.w 0x8a558                                         |         goto label_4;
                                                                     |     }
    0x0008a2dc ldr.w r3, [pc, 0x50c]                                 |     r3 = *(0x0008a7ec);
    0x0008a2e0 mov r2, sb                                            |     r2 = sb;
    0x0008a2e2 ldr.w r1, [pc, 0x50c]                                 |     r1 = *(0x0008a7f0);
    0x0008a2e6 str r0, [sp, 8]                                       |     var_8h = r0;
    0x0008a2e8 mov r0, r4                                            |     r0 = r4;
    0x0008a2ea add r3, pc                                            |     r3 += pc;
    0x0008a2ec str r3, [sp, 4]                                       |     var_4h = r3;
    0x0008a2ee sub.w r3, r8, 1                                       |     r3 = r8 - 1;
    0x0008a2f2 clz r3, r3                                            |     r3 &= r3;
    0x0008a2f6 add r1, pc                                            |     r1 += pc;
    0x0008a2f8 lsrs r3, r3, 5                                        |     r3 >>= 5;
    0x0008a2fa str r1, [sp, 0x20]                                    |     var_20h = r1;
    0x0008a2fc str r3, [sp]                                          |     *(sp) = r3;
    0x0008a2fe mov r7, r3                                            |     r7 = r3;
    0x0008a300 movs r3, 1                                            |     r3 = 1;
    0x0008a302 str r7, [sp, 0x1c]                                    |     var_1ch = r7;
    0x0008a304 strb r3, [r4, 0x10]                                   |     *((r4 + 0x10)) = r3;
    0x0008a306 mov r3, sb                                            |     r3 = sb;
    0x0008a308 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a30c cmp.w r8, 1                                           |     
                                                                     |     if (r8 != 1) {
    0x0008a310 bne.w 0x8a5d8                                         |         goto label_23;
                                                                     |     }
    0x0008a314 ldr.w r1, [pc, 0x4dc]                                 |     r1 = *(0x0008a7f4);
    0x0008a318 mov r3, sb                                            |     r3 = sb;
    0x0008a31a mov r2, sb                                            |     r2 = sb;
    0x0008a31c mov r0, r4                                            |     r0 = r4;
    0x0008a31e add r1, pc                                            |     r1 += pc;
    0x0008a320 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a324 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a326 mov r2, sb                                            |     r2 = sb;
    0x0008a328 ldr.w r1, [pc, 0x4cc]                                 |     
    0x0008a32c mov r0, r4                                            |     r0 = r4;
    0x0008a32e ldr r3, [r3]                                          |     r3 = *(r3);
    0x0008a330 add r1, pc                                            |     r1 = 0x114b2c;
    0x0008a332 strd sl, r3, [sp]                                     |     __asm ("strd sl, r3, [sp]");
    0x0008a336 mov r3, r8                                            |     r3 = r8;
    0x0008a338 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a33c mov r1, r8                                            |     r1 = r8;
    0x0008a33e mov r0, r4                                            |     r0 = r4;
    0x0008a340 movs r2, 2                                            |     r2 = 2;
    0x0008a342 bl 0x2b120                                            |     fcn_0002b120 (r0, r1, r2);
    0x0008a346 ldr.w r3, [pc, 0x4b4]                                 |     
    0x0008a34a mov r2, sb                                            |     r2 = sb;
    0x0008a34c str r7, [sp]                                          |     *(sp) = r7;
    0x0008a34e mov r0, r4                                            |     r0 = r4;
    0x0008a350 strb.w r8, [r4, 0x10]                                 |     *((r4 + 0x10)) = r8;
    0x0008a354 add r3, pc                                            |     r3 = 0x114b56;
    0x0008a356 ldr r1, [sp, 0x20]                                    |     r1 = var_20h;
    0x0008a358 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0008a35a mov r3, sb                                            |     r3 = sb;
    0x0008a35c str.w r8, [sp, 8]                                     |     __asm ("str.w r8, [var_8h]");
    0x0008a360 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
                                                                     | label_5:
    0x0008a364 ldr r3, [r4, 0x24]                                    |     r3 = *((r4 + 0x24));
    0x0008a366 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0008a368 bne.w 0x8a558                                         |         goto label_4;
                                                                     |     }
    0x0008a36c ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a36e ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0008a370 ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x0008a372 add r3, r2                                            |     r3 += r2;
    0x0008a374 ldrh r3, [r3, 0xa]                                    |     r3 = *((r3 + 0xa));
    0x0008a376 lsls r2, r3, 0x1a                                     |     r2 = r3 << 0x1a;
                                                                     |     if (r2 < r3) {
    0x0008a378 bmi.w 0x8a558                                         |         goto label_4;
                                                                     |     }
    0x0008a37c ldr r3, [r4, 8]                                       |     r3 = *((r4 + 8));
    0x0008a37e str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0008a380 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008a382 beq.w 0x8a712                                         |         goto label_24;
                                                                     |     }
                                                                     | label_9:
    0x0008a386 ldr r0, [r4, 0x28]                                    |     r0 = *((r4 + 0x28));
    0x0008a388 movs r3, 0x71                                         |     r3 = 0x71;
    0x0008a38a str r3, [sp]                                          |     *(sp) = r3;
    0x0008a38c mov r2, r8                                            |     r2 = r8;
    0x0008a38e ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a390 adds r1, r0, 1                                        |     r1 = r0 + 1;
    0x0008a392 str r0, [sp, 0x1c]                                    |     var_1ch = r0;
    0x0008a394 str r1, [r4, 0x28]                                    |     *((r4 + 0x28)) = r1;
    0x0008a396 mov r1, r0                                            |     r1 = r0;
    0x0008a398 mov r0, r4                                            |     r0 = r4;
    0x0008a39a bl 0x2bad8                                            |     fcn_0002bad8 (r0, r1, r2, r3, r4);
    0x0008a39e ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0008a3a0 ldr r2, [r3, 0x6c]                                    |     r2 = *((r3 + 0x6c));
    0x0008a3a2 ldr r3, [r3, 0x70]                                    |     r3 = *((r3 + 0x70));
    0x0008a3a4 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0008a3a6 cmp r2, r3                                            |     
                                                                     |     if (r2 >= r3) {
    0x0008a3a8 bge.w 0x8a78a                                         |         goto label_25;
                                                                     |     }
    0x0008a3ac ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0008a3ae movs r1, 0                                            |     r1 = 0;
    0x0008a3b0 ldr r7, [sp, 0x18]                                    |     r7 = var_18h;
    0x0008a3b2 mov.w ip, 0x23                                        |     
    0x0008a3b6 add.w r3, r2, r2, lsl 2                               |     r3 = r2 + (r2 << 2);
    0x0008a3ba ldr r0, [r7, 0x68]                                    |     r0 = *((r7 + 0x68));
    0x0008a3bc adds r2, 1                                            |     r2++;
    0x0008a3be str r2, [r7, 0x6c]                                    |     *((r7 + 0x6c)) = r2;
    0x0008a3c0 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0008a3c2 ldr r7, [sp, 0x1c]                                    |     r7 = var_1ch;
    0x0008a3c4 adds r2, r0, r3                                       |     r2 = r0 + r3;
    0x0008a3c6 strd r1, r1, [r2, 0xc]                                |     __asm ("strd r1, r1, [r2, 0xc]");
    0x0008a3ca strd r7, r1, [r2, 4]                                  |     __asm ("strd r7, r1, [r2, 4]");
    0x0008a3ce str.w ip, [r0, r3]                                    |     __asm ("str.w ip, [r0, r3]");
                                                                     | label_13:
    0x0008a3d2 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a3d4 ldr.w r8, [r4, 0x2c]                                  |     r8 = *((r4 + 0x2c));
    0x0008a3d8 ldr r3, [r3, 0x1c]                                    |     r3 = *((r3 + 0x1c));
    0x0008a3da add.w r2, r8, 1                                       |     r2 = r8 + 1;
    0x0008a3de str r2, [sp, 0x2c]                                    |     var_2ch = r2;
    0x0008a3e0 ands sb, r3, 0x80                                     |     sb = r3 & 0x80;
    0x0008a3e4 str r2, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r2;
                                                                     |     if (sb == r3) {
    0x0008a3e6 beq.w 0x8a722                                         |         goto label_26;
                                                                     |     }
    0x0008a3ea ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a3ec ldr r7, [sp, 0x14]                                    |     r7 = var_14h;
    0x0008a3ee ldr.w sb, [r3, 8]                                     |     sb = *((r3 + 8));
    0x0008a3f2 mov r2, sb                                            |     r2 = sb;
    0x0008a3f4 cmp.w sb, 0                                           |     
                                                                     |     if (sb != 0) {
    0x0008a3f8 bne 0x8a404                                           |         goto label_27;
                                                                     |     }
    0x0008a3fa b 0x8a7e6                                             |     goto label_28;
                                                                     |     do {
    0x0008a3fc ldr r2, [r2, 0x14]                                    |         r2 = *((r2 + 0x14));
    0x0008a3fe cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0008a400 beq.w 0x8a7e6                                         |             goto label_28;
                                                                     |         }
                                                                     | label_27:
    0x0008a404 ldrb.w r3, [r2, 0x37]                                 |         r3 = *((r2 + 0x37));
    0x0008a408 and r3, r3, 3                                         |         r3 &= 3;
    0x0008a40c cmp r3, 2                                             |         
    0x0008a40e bne 0x8a3fc                                           |         
                                                                     |     } while (r3 != 2);
    0x0008a410 ldrh r3, [r2, 0x34]                                   |     r3 = *((r2 + 0x34));
    0x0008a412 mov sb, r2                                            |     sb = r2;
    0x0008a414 ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0008a416 str r7, [sp, 0x14]                                    |     var_14h = r7;
    0x0008a418 add r3, r2                                            |     r3 += r2;
    0x0008a41a ldrh.w r2, [sb, 0x32]                                 |     r2 = *((sb + 0x32));
    0x0008a41e str r3, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r3;
    0x0008a420 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0008a422 beq.w 0x8a7c0                                         |         goto label_29;
                                                                     |     }
    0x0008a426 str r6, [sp, 0x28]                                    |     var_28h = r6;
    0x0008a428 add.w r3, r8, 2                                       |     r3 = r8 + 2;
    0x0008a42c ldr r6, [sp, 0x1c]                                    |     r6 = var_1ch;
    0x0008a42e mov.w r8, 0                                           |     r8 = 0;
    0x0008a432 ldr r7, [sp, 0x18]                                    |     r7 = var_18h;
    0x0008a434 str.w fp, [sp, 0x30]                                  |     __asm ("str.w fp, [var_30h]");
    0x0008a438 mov fp, r3                                            |     
    0x0008a43a str r3, [sp, 0x20]                                    |     var_20h = r3;
                                                                     |     do {
    0x0008a43c add.w r3, fp, r8                                      |         r3 = fp + r8;
    0x0008a440 mov r2, r6                                            |         r2 = r6;
    0x0008a442 str r3, [sp]                                          |         *(sp) = r3;
    0x0008a444 movs r1, 0x5e                                         |         r1 = 0x5e;
    0x0008a446 mov r3, r8                                            |         r3 = r8;
    0x0008a448 mov r0, r7                                            |         r0 = r7;
    0x0008a44a bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a44e ldrh.w r3, [sb, 0x32]                                 |         r3 = *((sb + 0x32));
    0x0008a452 add.w r8, r8, 1                                       |         r8++;
    0x0008a456 cmp r3, r8                                            |         
    0x0008a458 bgt 0x8a43c                                           |         
                                                                     |     } while (r3 > r8);
    0x0008a45a ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0008a45c mov r7, r3                                            |     r7 = r3;
    0x0008a45e ldr r3, [r4, 0x2c]                                    |     r3 = *((r4 + 0x2c));
    0x0008a460 ldr r6, [sp, 0x28]                                    |     r6 = var_28h;
    0x0008a462 ldrsh.w ip, [r2, 0x22]                                |     ip = *((r2 + 0x22));
    0x0008a466 adds r3, 1                                            |     r3++;
    0x0008a468 ldr.w fp, [sp, 0x30]                                  |     fp = var_30h;
    0x0008a46c str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0008a46e cmp.w ip, 0                                           |     
    0x0008a472 str r3, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r3;
                                                                     |     if (ip <= 0) {
    0x0008a474 ble.w 0x8a7aa                                         |         goto label_30;
                                                                     |     }
                                                                     | label_10:
    0x0008a478 sxth.w r3, sl                                         |     __asm ("sxth.w r3, sl");
    0x0008a47c mov r2, r5                                            |     r2 = r5;
    0x0008a47e str r6, [sp, 0x30]                                    |     var_30h = r6;
    0x0008a480 mov r5, sb                                            |     r5 = sb;
    0x0008a482 mov r6, r7                                            |     r6 = r7;
    0x0008a484 str r4, [sp, 0x34]                                    |     var_34h = r4;
    0x0008a486 ldr r7, [sp, 0x14]                                    |     r7 = var_14h;
    0x0008a488 mov.w r8, 0                                           |     r8 = 0;
    0x0008a48c mov r4, r3                                            |     r4 = r3;
    0x0008a48e mov sb, r2                                            |     sb = r2;
    0x0008a490 str.w fp, [sp, 0x14]                                  |     __asm ("str.w fp, [var_14h]");
    0x0008a494 b 0x8a4c2                                             |     goto label_31;
                                                                     | label_2:
    0x0008a496 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0008a498 add r3, r6                                            |     r3 += r6;
                                                                     | label_3:
    0x0008a49a ldrsh.w r2, [r7, 0x20]                                |     r2 = *((r7 + 0x20));
    0x0008a49e cmp r2, r8                                            |     
                                                                     |     if (r2 == r8) {
    0x0008a4a0 beq.w 0x8a6f0                                         |         goto label_32;
                                                                     |     }
    0x0008a4a4 str r3, [sp]                                          |     *(sp) = r3;
    0x0008a4a6 mov r1, r7                                            |     r1 = r7;
    0x0008a4a8 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0008a4aa mov r3, r8                                            |     r3 = r8;
    0x0008a4ac ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0008a4ae bl 0x5b0d4                                            |     fcn_0005b0d4 (r0, r1, r2, r3, r4);
                                                                     | label_6:
    0x0008a4b2 ldrsh.w ip, [r7, 0x22]                                |     ip = *((r7 + 0x22));
    0x0008a4b6 adds r6, 1                                            |     r6++;
                                                                     |     do {
                                                                     | label_1:
    0x0008a4b8 add.w r8, r8, 1                                       |         r8++;
    0x0008a4bc cmp ip, r8                                            |         
                                                                     |         if (ip <= r8) {
    0x0008a4be ble.w 0x8a65a                                         |             goto label_33;
                                                                     |         }
                                                                     | label_31:
    0x0008a4c2 cmp sl, r8                                            |         
    0x0008a4c4 beq 0x8a4b8                                           |         
                                                                     |     } while (sl == r8);
    0x0008a4c6 ldr r3, [r7, 4]                                       |     r3 = *((r7 + 4));
    0x0008a4c8 add.w r2, r8, r8, lsl 1                               |     r2 = r8 + (r8 << 1);
    0x0008a4cc add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0008a4d0 ldrh r3, [r3, 0xa]                                    |     r3 = *((r3 + 0xa));
    0x0008a4d2 ands r3, r3, 0x20                                     |     r3 &= 0x20;
                                                                     |     if (r3 != r3) {
    0x0008a4d6 bne 0x8a4b8                                           |         goto label_1;
                                                                     |     }
    0x0008a4d8 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0008a4da beq 0x8a496                                           |         goto label_2;
                                                                     |     }
    0x0008a4dc ldrh r1, [r5, 0x34]                                   |     r1 = *((r5 + 0x34));
    0x0008a4de cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0008a4e0 beq 0x8a4b8                                           |         goto label_1;
                                                                     |     }
    0x0008a4e2 ldr r2, [r5, 4]                                       |     r2 = *((r5 + 4));
    0x0008a4e4 sxth.w fp, r8                                         |     __asm ("sxth.w fp, r8");
    0x0008a4e8 subs r2, 2                                            |     r2 -= 2;
    0x0008a4ea mov r0, r2                                            |     r0 = r2;
    0x0008a4ec b 0x8a4f6                                             |     
                                                                     |     while (lr != fp) {
    0x0008a4ee adds r3, 1                                            |         r3++;
    0x0008a4f0 cmp r3, r1                                            |         
                                                                     |         if (r3 == r1) {
    0x0008a4f2 beq.w 0x8a6fe                                         |             goto label_34;
                                                                     |         }
    0x0008a4f6 ldrsh lr, [r0, 2]!                                    |         
    0x0008a4fa cmp lr, fp                                            |         
    0x0008a4fc bne 0x8a4ee                                           |         
                                                                     |     }
    0x0008a4fe sxth.w lr, r3                                         |     __asm ("sxth.w lr, r3");
                                                                     | label_7:
    0x0008a502 movs r0, 0                                            |     r0 = 0;
    0x0008a504 b 0x8a50e                                             |     
                                                                     |     while (r3 != r4) {
    0x0008a506 adds r0, 1                                            |         r0++;
    0x0008a508 cmp r0, r1                                            |         
                                                                     |         if (r0 == r1) {
    0x0008a50a beq.w 0x8a704                                         |             goto label_35;
                                                                     |         }
    0x0008a50e ldrsh r3, [r2, 2]!                                    |         r3 = *((r2 += 2));
    0x0008a512 cmp r3, r4                                            |         
    0x0008a514 bne 0x8a506                                           |         
                                                                     |     }
    0x0008a516 sxth r0, r0                                           |     __asm ("sxth r0, r0");
                                                                     | label_8:
    0x0008a518 ldrh r3, [r5, 0x32]                                   |     r3 = *((r5 + 0x32));
    0x0008a51a cmp r3, lr                                            |     
                                                                     |     if (r3 > lr) {
    0x0008a51c bgt 0x8a4b8                                           |         goto label_1;
                                                                     |     }
    0x0008a51e ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0008a520 add r3, lr                                            |     r3 += lr;
    0x0008a522 cmp lr, r0                                            |     
    0x0008a524 it gt                                                 |     
                                                                     |     if (lr <= r0) {
    0x0008a526 subgt r3, 1                                           |         r3--;
                                                                     |     }
    0x0008a528 b 0x8a49a                                             |     goto label_3;
                                                                     | label_16:
    0x0008a52a ldr r3, [pc, 0x2d4]                                   |     
    0x0008a52c add r3, pc                                            |     r3 = 0x114d32;
                                                                     |     do {
    0x0008a52e str r2, [sp]                                          |         *(sp) = r2;
    0x0008a530 mov r0, r4                                            |         r0 = r4;
    0x0008a532 ldr r2, [pc, 0x2d0]                                   |         
    0x0008a534 ldr r1, [pc, 0x2d0]                                   |         
    0x0008a536 add r2, pc                                            |         r2 = 0x114d40;
    0x0008a538 add r1, pc                                            |         r1 = 0x114d44;
    0x0008a53a bl 0x1d554                                            |         fcn_0001d554 (r0, r1);
    0x0008a53e mov r1, r5                                            |         r1 = r5;
    0x0008a540 mov r0, r6                                            |         r0 = r6;
    0x0008a542 add sp, 0x3c                                          |         
    0x0008a544 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0008a548 b.w 0x16a58                                           |         void (*0x16a58)() ();
                                                                     | label_18:
    0x0008a54c ldr r1, [pc, 0x2bc]                                   |         
    0x0008a54e mov r2, sb                                            |         r2 = sb;
    0x0008a550 mov r0, r4                                            |         r0 = r4;
    0x0008a552 add r1, pc                                            |         r1 = 0x114d62;
    0x0008a554 bl 0x1d554                                            |         fcn_0001d554 (r0, r1);
                                                                     | label_4:
    0x0008a558 mov r1, fp                                            |         r1 = fp;
    0x0008a55a mov r0, r6                                            |         r0 = r6;
    0x0008a55c bl 0x137d0                                            |         fcn_000137d0 (r0, r1);
    0x0008a560 b 0x8a214                                             |         goto label_0;
                                                                     | label_17:
    0x0008a562 ldr r3, [pc, 0x2ac]                                   |         
    0x0008a564 add r3, pc                                            |         r3 = 0x114d7a;
    0x0008a566 b 0x8a52e                                             |         
                                                                     |     } while (1);
                                                                     | label_19:
    0x0008a568 lsls r1, r3, 0x1f                                     |     r1 = r3 << 0x1f;
                                                                     |     if (r1 >= r3) {
    0x0008a56a bpl 0x8a57e                                           |         goto label_36;
                                                                     |     }
    0x0008a56c ldr r2, [pc, 0x2a4]                                   |     
    0x0008a56e add r2, pc                                            |     r2 = 0x114d86;
                                                                     |     do {
    0x0008a570 ldr r1, [pc, 0x2a4]                                   |         
    0x0008a572 mov r0, r4                                            |         r0 = r4;
    0x0008a574 mov r3, fp                                            |         r3 = fp;
    0x0008a576 add r1, pc                                            |         r1 = 0x114d92;
    0x0008a578 bl 0x1d554                                            |         fcn_0001d554 (r0, r1);
    0x0008a57c b 0x8a558                                             |         goto label_4;
                                                                     | label_36:
    0x0008a57e ldr r2, [pc, 0x29c]                                   |         
    0x0008a580 add r2, pc                                            |         r2 = 0x114da2;
    0x0008a582 b 0x8a570                                             |         
                                                                     |     } while (1);
                                                                     | label_20:
    0x0008a584 ldr r1, [pc, 0x298]                                   |     
    0x0008a586 mov r2, fp                                            |     r2 = fp;
    0x0008a588 mov r0, r4                                            |     r0 = r4;
    0x0008a58a add r1, pc                                            |     r1 = 0x114dae;
    0x0008a58c bl 0x1d554                                            |     fcn_0001d554 (r0, r1);
    0x0008a590 b 0x8a558                                             |     goto label_4;
                                                                     | label_21:
    0x0008a592 mov.w r8, 0x8000                                      |     r8 = 0x8000;
    0x0008a596 sub.w r3, r3, 0x80000                                 |     r3 -= 0x80000;
    0x0008a59a movt r8, 0xffff                                       |     r8 = (r8 & 0xFFFF) | 0xffff0000;
                                                                     | label_22:
    0x0008a59e ldr.w sb, [r3]                                        |     sb = *(r3);
    0x0008a5a2 movs r1, 0x1a                                         |     r1 = 0x1a;
    0x0008a5a4 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a5a6 mov r0, r4                                            |     r0 = r4;
    0x0008a5a8 mov r2, sb                                            |     r2 = sb;
    0x0008a5aa ldr r3, [r3]                                          |     r3 = *(r3);
    0x0008a5ac str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0008a5b0 bl 0x200fc                                            |     fcn_000200fc (r0, r1);
    0x0008a5b4 str r0, [sp, 0x1c]                                    |     var_1ch = r0;
    0x0008a5b6 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0008a5b8 bne 0x8a558                                           |         goto label_4;
                                                                     |     }
    0x0008a5ba ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0008a5bc mov r2, sb                                            |     r2 = sb;
    0x0008a5be ldr r1, [pc, 0x264]                                   |     
    0x0008a5c0 mov r0, r4                                            |     r0 = r4;
    0x0008a5c2 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0008a5c4 str r3, [sp]                                          |     *(sp) = r3;
    0x0008a5c6 add r1, pc                                            |     r1 = 0x114df0;
    0x0008a5c8 ldr r3, [pc, 0x25c]                                   |     
    0x0008a5ca add r3, pc                                            |     r3 = 0x114df6;
    0x0008a5cc str r3, [sp, 4]                                       |     var_4h = r3;
    0x0008a5ce movs r3, 1                                            |     r3 = 1;
    0x0008a5d0 strb r3, [r4, 0x10]                                   |     *((r4 + 0x10)) = r3;
    0x0008a5d2 mov r3, sb                                            |     r3 = sb;
    0x0008a5d4 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
                                                                     | label_23:
    0x0008a5d8 movs r3, 0                                            |     r3 = 0;
    0x0008a5da ldr r1, [pc, 0x250]                                   |     
    0x0008a5dc str r3, [sp]                                          |     *(sp) = r3;
    0x0008a5de mov r0, r4                                            |     r0 = r4;
    0x0008a5e0 ldr r3, [pc, 0x24c]                                   |     
    0x0008a5e2 mov r2, sb                                            |     r2 = sb;
    0x0008a5e4 add r1, pc                                            |     r1 = 0x114e16;
    0x0008a5e6 ldr r7, [pc, 0x24c]                                   |     
    0x0008a5e8 str r1, [sp, 0x20]                                    |     var_20h = r1;
    0x0008a5ea add r3, pc                                            |     r3 = 0x114e1e;
    0x0008a5ec bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a5f0 ldr r1, [pc, 0x244]                                   |     
    0x0008a5f2 mov r3, sb                                            |     r3 = sb;
    0x0008a5f4 mov r2, sb                                            |     r2 = sb;
    0x0008a5f6 mov r0, r4                                            |     r0 = r4;
    0x0008a5f8 add r7, pc                                            |     r7 = 0x114e32;
    0x0008a5fa add r1, pc                                            |     r1 = 0x114e36;
    0x0008a5fc bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a600 ldr r1, [pc, 0x238]                                   |     
    0x0008a602 mov r0, r4                                            |     r0 = r4;
    0x0008a604 add r1, pc                                            |     r1 = 0x114e44;
    0x0008a606 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a60a ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a60c mov r2, sb                                            |     r2 = sb;
    0x0008a60e ldr r1, [pc, 0x230]                                   |     
    0x0008a610 mov r0, r4                                            |     r0 = r4;
    0x0008a612 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0008a614 add r1, pc                                            |     r1 = 0x114e5a;
    0x0008a616 strd sl, r3, [sp]                                     |     __asm ("strd sl, r3, [sp]");
    0x0008a61a mov r3, r8                                            |     r3 = r8;
    0x0008a61c bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a620 mov r1, r8                                            |     r1 = r8;
    0x0008a622 mov r0, r4                                            |     r0 = r4;
    0x0008a624 movs r2, 2                                            |     r2 = 2;
    0x0008a626 bl 0x2b120                                            |     fcn_0002b120 (r0, r1, r2);
    0x0008a62a ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0008a62c mov r2, sb                                            |     r2 = sb;
    0x0008a62e ldr r1, [pc, 0x214]                                   |     
    0x0008a630 mov r0, r4                                            |     r0 = r4;
    0x0008a632 str r3, [sp]                                          |     *(sp) = r3;
    0x0008a634 mov.w r3, 1                                           |     r3 = 1;
    0x0008a638 strb r3, [r4, 0x10]                                   |     *((r4 + 0x10)) = r3;
    0x0008a63a movs r3, 1                                            |     r3 = 1;
    0x0008a63c str r3, [sp, 8]                                       |     var_8h = r3;
    0x0008a63e add r1, pc                                            |     r1 = 0x114e88;
    0x0008a640 mov r3, sb                                            |     r3 = sb;
    0x0008a642 str r7, [sp, 4]                                       |     var_4h = r7;
    0x0008a644 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a648 movs r3, 1                                            |     r3 = 1;
    0x0008a64a ldr r1, [sp, 0x20]                                    |     r1 = var_20h;
    0x0008a64c str r3, [sp]                                          |     *(sp) = r3;
    0x0008a64e mov r2, sb                                            |     r2 = sb;
    0x0008a650 mov r3, r7                                            |     r3 = r7;
    0x0008a652 mov r0, r4                                            |     r0 = r4;
    0x0008a654 bl 0x85c90                                            |     fcn_00085c90 (r0, r1, r2);
    0x0008a658 b 0x8a364                                             |     goto label_5;
                                                                     | label_33:
    0x0008a65a mov r3, r6                                            |     r3 = r6;
    0x0008a65c mov r2, sb                                            |     r2 = sb;
    0x0008a65e mov r7, r6                                            |     r7 = r6;
    0x0008a660 mov sb, r5                                            |     sb = r5;
    0x0008a662 ldr r6, [sp, 0x30]                                    |     r6 = var_30h;
    0x0008a664 mov r5, r2                                            |     r5 = r2;
    0x0008a666 ldr.w fp, [sp, 0x14]                                  |     fp = var_14h;
    0x0008a66a ldr r4, [sp, 0x34]                                    |     r4 = var_34h;
    0x0008a66c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0008a66e beq 0x8a75e                                           |         goto label_37;
                                                                     |     }
                                                                     | label_11:
    0x0008a670 ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0008a672 mov r3, r7                                            |     r3 = r7;
    0x0008a674 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0008a676 movs r1, 0x61                                         |     r1 = 0x61;
    0x0008a678 str r2, [sp]                                          |     *(sp) = r2;
    0x0008a67a ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0008a67c bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a680 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0008a684 beq 0x8a778                                           |         goto label_38;
                                                                     |     }
                                                                     | label_15:
    0x0008a686 ldrh.w r3, [sb, 0x32]                                 |     r3 = *((sb + 0x32));
    0x0008a68a movs r1, 0x8a                                         |     r1 = 0x8a;
    0x0008a68c ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0008a68e ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0008a690 strd r2, r3, [sp]                                     |     __asm ("strd r2, r3, [sp]");
    0x0008a694 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0008a696 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0008a698 bl 0x2a744                                            |     fcn_0002a744 (r0, r1, r2, r3, r4, r5);
                                                                     | label_12:
    0x0008a69c ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0008a69e ldr r3, [r2, 0x6c]                                    |     r3 = *((r2 + 0x6c));
    0x0008a6a0 cmp r3, 0                                             |     
                                                                     |     if (r3 > 0) {
    0x0008a6a2 ble 0x8a6b4                                           |         
    0x0008a6a4 ldr r2, [r2, 0x68]                                    |         r2 = *((r2 + 0x68));
    0x0008a6a6 add.w r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
    0x0008a6aa add.w r2, r2, r3, lsl 2                               |         r2 += (r3 << 2);
    0x0008a6ae movs r3, 2                                            |         r3 = 2;
    0x0008a6b0 strh r3, [r2, -0x12]                                  |         *((r2 - 0x12)) = r3;
                                                                     |     }
    0x0008a6b4 ldr r7, [sp, 0x18]                                    |     r7 = var_18h;
    0x0008a6b6 movs r3, 0                                            |     r3 = 0;
    0x0008a6b8 ldr r4, [sp, 0x24]                                    |     r4 = var_24h;
    0x0008a6ba movs r1, 0x26                                         |     r1 = 0x26;
    0x0008a6bc ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0008a6be str r3, [sp]                                          |     *(sp) = r3;
    0x0008a6c0 mov r0, r7                                            |     r0 = r7;
    0x0008a6c2 adds r3, r4, 1                                        |     r3 = r4 + 1;
    0x0008a6c4 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a6c8 ldr r2, [r7, 0x6c]                                    |     r2 = *((r7 + 0x6c));
    0x0008a6ca cmp r4, 0                                             |     
    0x0008a6cc ldr r1, [sp, 0x18]                                    |     r1 = var_18h;
    0x0008a6ce mov r3, r7                                            |     r3 = r7;
    0x0008a6d0 itt lt                                                |     
                                                                     |     if (r4 >= 0) {
    0x0008a6d2 addlt r3, r2, -1                                      |         r3 = r2 + -1;
                                                                     |     }
                                                                     |     if (r4 < 0) {
    0x0008a6d6 str r3, [sp, 0x24]                                    |         var_24h = r3;
                                                                     |     }
    0x0008a6d8 ldr r3, [r1]                                          |     r3 = *(r1);
    0x0008a6da ldrb.w r3, [r3, 0x57]                                 |     r3 = *((r3 + 0x57));
                                                                     |     if (r3 != 0) {
    0x0008a6de cbnz r3, 0x8a70a                                      |         goto label_39;
                                                                     |     }
    0x0008a6e0 ldr r3, [r1, 0x68]                                    |     r3 = *((r1 + 0x68));
    0x0008a6e2 ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0008a6e4 add.w r1, r1, r1, lsl 2                               |     r1 += (r1 << 2);
    0x0008a6e8 add.w r3, r3, r1, lsl 2                               |     r3 += (r1 << 2);
                                                                     |     do {
    0x0008a6ec str r2, [r3, 8]                                       |         *((r3 + 8)) = r2;
    0x0008a6ee b 0x8a558                                             |         goto label_4;
                                                                     | label_32:
    0x0008a6f0 movs r2, 0                                            |         r2 = 0;
    0x0008a6f2 ldr r0, [sp, 0x18]                                    |         r0 = var_18h;
    0x0008a6f4 movs r1, 0x4b                                         |         r1 = 0x4b;
    0x0008a6f6 str r2, [sp]                                          |         *(sp) = r2;
    0x0008a6f8 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a6fc b 0x8a4b2                                             |         goto label_6;
                                                                     | label_34:
    0x0008a6fe mov.w lr, -1                                          |         lr = -1;
    0x0008a702 b 0x8a502                                             |         goto label_7;
                                                                     | label_35:
    0x0008a704 mov.w r0, -1                                          |         r0 = -1;
    0x0008a708 b 0x8a518                                             |         goto label_8;
                                                                     | label_39:
    0x0008a70a ldr r3, [pc, 0x13c]                                   |         
    0x0008a70c add r3, pc                                            |         r3 = 0x114f5a;
    0x0008a70e adds r3, 4                                            |         r3 += 4;
    0x0008a710 b 0x8a6ec                                             |         
                                                                     |     } while (1);
                                                                     | label_24:
    0x0008a712 ldr r3, [r4, 0x74]                                    |     r3 = *((r4 + 0x74));
    0x0008a714 cmp r3, 0                                             |     
    0x0008a716 beq 0x8a79c                                           |     
                                                                     |     while (1) {
    0x0008a718 mov r0, r4                                            |         r0 = r4;
    0x0008a71a bl 0x29b0c                                            |         fcn_00029b0c (r0);
    0x0008a71e str r0, [sp, 0x18]                                    |         var_18h = r0;
    0x0008a720 b 0x8a386                                             |         goto label_9;
                                                                     | label_26:
    0x0008a722 mov r3, r2                                            |         r3 = r2;
    0x0008a724 ldr r0, [sp, 0x18]                                    |         r0 = var_18h;
    0x0008a726 ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0008a728 movs r1, 0x87                                         |         r1 = 0x87;
    0x0008a72a str.w sb, [sp]                                        |         __asm ("str.w sb, [sp]");
    0x0008a72e bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a732 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0008a734 ldr r3, [r4, 0x2c]                                    |         r3 = *((r4 + 0x2c));
    0x0008a736 ldrsh.w ip, [r2, 0x22]                                |         ip = *((r2 + 0x22));
    0x0008a73a cmp.w ip, 0                                           |         
    0x0008a73e add r3, ip                                            |         r3 += ip;
    0x0008a740 add.w r3, r3, 1                                       |         r3++;
    0x0008a744 it le                                                 |         
                                                                     |         if (ip > 0) {
    0x0008a746 addle r2, r8, 2                                       |             r2 = r8 + 2;
                                                                     |         }
    0x0008a74a str r3, [sp, 0x28]                                    |         var_28h = r3;
    0x0008a74c str r3, [r4, 0x2c]                                    |         *((r4 + 0x2c)) = r3;
    0x0008a74e it le                                                 |         
                                                                     |         if (ip > 0) {
    0x0008a750 strle r2, [sp, 0x20]                                  |             var_20h = r2;
                                                                     |         }
                                                                     |         if (ip > 0) {
    0x0008a752 ble 0x8a760                                           |             
    0x0008a754 add.w r3, r8, 2                                       |             r3 = r8 + 2;
    0x0008a758 mov r7, sb                                            |             r7 = sb;
    0x0008a75a str r3, [sp, 0x20]                                    |             var_20h = r3;
    0x0008a75c b 0x8a478                                             |             goto label_10;
                                                                     | label_37:
    0x0008a75e ldr r3, [r4, 0x2c]                                    |             r3 = *((r4 + 0x2c));
                                                                     |         }
                                                                     | label_14:
    0x0008a760 adds r3, 1                                            |         r3++;
    0x0008a762 movs r2, 0                                            |         r2 = 0;
    0x0008a764 str r3, [r4, 0x2c]                                    |         *((r4 + 0x2c)) = r3;
    0x0008a766 movs r3, 1                                            |         r3 = 1;
    0x0008a768 mov r7, r3                                            |         r7 = r3;
    0x0008a76a ldr r0, [sp, 0x18]                                    |         r0 = var_18h;
    0x0008a76c ldr r3, [sp, 0x20]                                    |         r3 = var_20h;
    0x0008a76e movs r1, 0x4b                                         |         r1 = 0x4b;
    0x0008a770 str r2, [sp]                                          |         *(sp) = r2;
    0x0008a772 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a776 b 0x8a670                                             |         goto label_11;
                                                                     | label_38:
    0x0008a778 ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0008a77a movs r1, 0x80                                         |         r1 = 0x80;
    0x0008a77c ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0008a77e ldr r0, [sp, 0x18]                                    |         r0 = var_18h;
    0x0008a780 str r3, [sp]                                          |         *(sp) = r3;
    0x0008a782 ldr r3, [sp, 0x28]                                    |         r3 = var_28h;
    0x0008a784 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a788 b 0x8a69c                                             |         goto label_12;
                                                                     | label_25:
    0x0008a78a movs r3, 0                                            |         r3 = 0;
    0x0008a78c ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0008a78e ldr r0, [sp, 0x18]                                    |         r0 = var_18h;
    0x0008a790 movs r1, 0x23                                         |         r1 = 0x23;
    0x0008a792 str r3, [sp]                                          |         *(sp) = r3;
    0x0008a794 bl 0x29a7c                                            |         fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0008a798 str r0, [sp, 0x24]                                    |         var_24h = r0;
    0x0008a79a b 0x8a3d2                                             |         goto label_13;
    0x0008a79c ldr r3, [r4]                                          |         r3 = *(r4);
    0x0008a79e ldr r3, [r3, 0x50]                                    |         r3 = *((r3 + 0x50));
    0x0008a7a0 lsls r3, r3, 0x1c                                     |         r3 <<= 0x1c;
    0x0008a7a2 itt pl                                                |         
                                                                     |         if (r3 < r3) {
    0x0008a7a4 movpl r3, 1                                           |             r3 = 1;
                                                                     |         }
                                                                     |         if (r3 < r3) {
    0x0008a7a6 strbpl r3, [r4, 0x17]                                 |             *((r4 + 0x17)) = r3;
                                                                     |         }
    0x0008a7a8 b 0x8a718                                             |         
                                                                     |     }
                                                                     | label_30:
    0x0008a7aa cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0008a7ac beq 0x8a760                                           |         goto label_14;
                                                                     |     }
    0x0008a7ae ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0008a7b0 mov r3, r7                                            |     r3 = r7;
    0x0008a7b2 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0008a7b4 movs r1, 0x61                                         |     r1 = 0x61;
    0x0008a7b6 str r2, [sp]                                          |     *(sp) = r2;
    0x0008a7b8 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0008a7ba bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
    0x0008a7be b 0x8a686                                             |     goto label_15;
                                                                     | label_29:
    0x0008a7c0 adds r3, 1                                            |     r3++;
    0x0008a7c2 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0008a7c4 str r3, [r4, 0x2c]                                    |     *((r4 + 0x2c)) = r3;
    0x0008a7c6 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0008a7c8 ldrsh.w ip, [r3, 0x22]                                |     ip = *((r3 + 0x22));
    0x0008a7cc cmp.w ip, 0                                           |     
                                                                     |     if (ip > 0) {
    0x0008a7d0 ble 0x8a7dc                                           |         
    0x0008a7d2 add.w r3, r8, 2                                       |         r3 = r8 + 2;
    0x0008a7d6 mov r7, r2                                            |         r7 = r2;
    0x0008a7d8 str r3, [sp, 0x20]                                    |         var_20h = r3;
    0x0008a7da b 0x8a478                                             |         goto label_10;
                                                                     |     }
    0x0008a7dc add.w r3, r8, 2                                       |     r3 = r8 + 2;
    0x0008a7e0 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0008a7e2 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0008a7e4 b 0x8a760                                             |     goto label_14;
                                                                     | label_28:
    0x0008a7e6 movs r3, 0                                            |     r3 = 0;
    0x0008a7e8 ldrh r3, [r3, 0x34]                                   |     r3 = *((r3 + 0x34));
    0x0008a7ea udf 0xff                                              |     __asm ("udf 0xff");
                                                                     | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8c20e */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0008c20e ()                      | uint32_t fcn_0008c20e (int16_t arg1, uint32_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x0008c20e eor.w ip, r0, r1                  |     
    0x0008c212 it mi                             |     
                                                 |     if (? < ?) {
    0x0008c214 rsbmi r1, r1, 0                   |         __asm ("rsbmi r1, r1, 0");
                                                 |     }
    0x0008c216 subs r2, r1, 1                    |     r2 = r1 - 1;
                                                 |     if (r2 != r1) {
    0x0008c218 beq.w 0x8c45a                     |         
    0x0008c21c movs r3, r0                       |         r3 = r0;
    0x0008c21e it mi                             |         
                                                 |         if (r3 < r0) {
    0x0008c220 rsbmi r3, r0, 0                   |             __asm ("rsbmi r3, r0, 0");
                                                 |         }
    0x0008c222 cmp r3, r1                        |         
                                                 |         if (r3 < r1) {
    0x0008c224 bls.w 0x8c464                     |             goto label_0;
                                                 |         }
    0x0008c228 tst r1, r2                        |         
                                                 |         if ((r1 & r2) == 0) {
    0x0008c22a beq.w 0x8c474                     |             goto label_1;
                                                 |         }
    0x0008c22e clz r2, r3                        |         r2 &= r3;
    0x0008c232 clz r0, r1                        |         r0 &= r1;
    0x0008c236 sub.w r2, r0, r2                  |         r2 = r0 - r2;
    0x0008c23a rsb.w r2, r2, 0x1f                |         r2 = 0x1f - r2;
    0x0008c23e adr r0, 0x10                      |         r0 = 0x10;
    0x0008c240 add.w r2, r0, r2, lsl 4           |         r2 = r0 + (r2 << 4);
    0x0008c244 mov.w r0, 0                       |         r0 = 0;
    0x0008c248 mov pc, r2                        |         pc = r2;
    0x0008c24a nop                               |         
    0x0008c24c nop.w                             |         
    0x0008c250 cmp.w r3, r1, lsl 31              |         
    0x0008c254 nop                               |         
    0x0008c256 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c25a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c25c subhs r3, r3, r1, lsl 31          |             r3 -= (r1 << 31);
                                                 |         }
    0x0008c260 cmp.w r3, r1, lsl 30              |         
    0x0008c264 nop                               |         
    0x0008c266 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c26a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c26c subhs r3, r3, r1, lsl 30          |             r3 -= (r1 << 30);
                                                 |         }
    0x0008c270 cmp.w r3, r1, lsl 29              |         
    0x0008c274 nop                               |         
    0x0008c276 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c27a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c27c subhs r3, r3, r1, lsl 29          |             r3 -= (r1 << 29);
                                                 |         }
    0x0008c280 cmp.w r3, r1, lsl 28              |         
    0x0008c284 nop                               |         
    0x0008c286 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c28a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c28c subhs r3, r3, r1, lsl 28          |             r3 -= (r1 << 28);
                                                 |         }
    0x0008c290 cmp.w r3, r1, lsl 27              |         
    0x0008c294 nop                               |         
    0x0008c296 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c29a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c29c subhs r3, r3, r1, lsl 27          |             r3 -= (r1 << 27);
                                                 |         }
    0x0008c2a0 cmp.w r3, r1, lsl 26              |         
    0x0008c2a4 nop                               |         
    0x0008c2a6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c2aa it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c2ac subhs r3, r3, r1, lsl 26          |             r3 -= (r1 << 26);
                                                 |         }
    0x0008c2b0 cmp.w r3, r1, lsl 25              |         
    0x0008c2b4 nop                               |         
    0x0008c2b6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c2ba it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c2bc subhs r3, r3, r1, lsl 25          |             r3 -= (r1 << 25);
                                                 |         }
    0x0008c2c0 cmp.w r3, r1, lsl 24              |         
    0x0008c2c4 nop                               |         
    0x0008c2c6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c2ca it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c2cc subhs r3, r3, r1, lsl 24          |             r3 -= (r1 << 24);
                                                 |         }
    0x0008c2d0 cmp.w r3, r1, lsl 23              |         
    0x0008c2d4 nop                               |         
    0x0008c2d6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c2da it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c2dc subhs r3, r3, r1, lsl 23          |             r3 -= (r1 << 23);
                                                 |         }
    0x0008c2e0 cmp.w r3, r1, lsl 22              |         
    0x0008c2e4 nop                               |         
    0x0008c2e6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c2ea it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c2ec subhs r3, r3, r1, lsl 22          |             r3 -= (r1 << 22);
                                                 |         }
    0x0008c2f0 cmp.w r3, r1, lsl 21              |         
    0x0008c2f4 nop                               |         
    0x0008c2f6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c2fa it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c2fc subhs r3, r3, r1, lsl 21          |             r3 -= (r1 << 21);
                                                 |         }
    0x0008c300 cmp.w r3, r1, lsl 20              |         
    0x0008c304 nop                               |         
    0x0008c306 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c30a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c30c subhs r3, r3, r1, lsl 20          |             r3 -= (r1 << 20);
                                                 |         }
    0x0008c310 cmp.w r3, r1, lsl 19              |         
    0x0008c314 nop                               |         
    0x0008c316 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c31a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c31c subhs r3, r3, r1, lsl 19          |             r3 -= (r1 << 19);
                                                 |         }
    0x0008c320 cmp.w r3, r1, lsl 18              |         
    0x0008c324 nop                               |         
    0x0008c326 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c32a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c32c subhs r3, r3, r1, lsl 18          |             r3 -= (r1 << 18);
                                                 |         }
    0x0008c330 cmp.w r3, r1, lsl 17              |         
    0x0008c334 nop                               |         
    0x0008c336 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c33a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c33c subhs r3, r3, r1, lsl 17          |             r3 -= (r1 << 17);
                                                 |         }
    0x0008c340 cmp.w r3, r1, lsl 16              |         
    0x0008c344 nop                               |         
    0x0008c346 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c348 movs r0, r0                       |         
    0x0008c34a it hs                             |         
                                                 |         if (r0 < r0) {
    0x0008c34c subhs r3, r3, r1, lsl 16          |             r3 -= (r1 << 16);
                                                 |         }
    0x0008c350 cmp.w r3, r1, lsl 15              |         
    0x0008c354 nop                               |         
    0x0008c356 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c35a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c35c subhs r3, r3, r1, lsl 15          |             r3 -= (r1 << 15);
                                                 |         }
    0x0008c360 cmp.w r3, r1, lsl 14              |         
    0x0008c364 nop                               |         
    0x0008c366 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c36a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c36c subhs r3, r3, r1, lsl 14          |             r3 -= (r1 << 14);
                                                 |         }
    0x0008c370 cmp.w r3, r1, lsl 13              |         
    0x0008c374 nop                               |         
    0x0008c376 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c37a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c37c subhs r3, r3, r1, lsl 13          |             r3 -= (r1 << 13);
                                                 |         }
    0x0008c380 cmp.w r3, r1, lsl 12              |         
    0x0008c384 nop                               |         
    0x0008c386 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c38a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c38c subhs r3, r3, r1, lsl 12          |             r3 -= (r1 << 12);
                                                 |         }
    0x0008c390 cmp.w r3, r1, lsl 11              |         
    0x0008c394 nop                               |         
    0x0008c396 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c39a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c39c subhs r3, r3, r1, lsl 11          |             r3 -= (r1 << 11);
                                                 |         }
    0x0008c3a0 cmp.w r3, r1, lsl 10              |         
    0x0008c3a4 nop                               |         
    0x0008c3a6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c3aa it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c3ac subhs r3, r3, r1, lsl 10          |             r3 -= (r1 << 10);
                                                 |         }
    0x0008c3b0 cmp.w r3, r1, lsl 9               |         
    0x0008c3b4 nop                               |         
    0x0008c3b6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c3ba it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c3bc subhs r3, r3, r1, lsl 9           |             r3 -= (r1 << 9);
                                                 |         }
    0x0008c3c0 cmp.w r3, r1, lsl 8               |         
    0x0008c3c4 nop                               |         
    0x0008c3c6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c3ca it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c3cc subhs r3, r3, r1, lsl 8           |             r3 -= (r1 << 8);
                                                 |         }
    0x0008c3d0 cmp.w r3, r1, lsl 7               |         
    0x0008c3d4 nop                               |         
    0x0008c3d6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c3da it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c3dc subhs r3, r3, r1, lsl 7           |             r3 -= (r1 << 7);
                                                 |         }
    0x0008c3e0 cmp.w r3, r1, lsl 6               |         
    0x0008c3e4 nop                               |         
    0x0008c3e6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c3ea it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c3ec subhs r3, r3, r1, lsl 6           |             r3 -= (r1 << 6);
                                                 |         }
    0x0008c3f0 cmp.w r3, r1, lsl 5               |         
    0x0008c3f4 nop                               |         
    0x0008c3f6 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c3fa it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c3fc subhs r3, r3, r1, lsl 5           |             r3 -= (r1 << 5);
                                                 |         }
    0x0008c400 cmp.w r3, r1, lsl 4               |         
    0x0008c404 nop                               |         
    0x0008c406 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c40a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c40c subhs r3, r3, r1, lsl 4           |             r3 -= (r1 << 4);
                                                 |         }
    0x0008c410 cmp.w r3, r1, lsl 3               |         
    0x0008c414 nop                               |         
    0x0008c416 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c41a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c41c subhs r3, r3, r1, lsl 3           |             r3 -= (r1 << 3);
                                                 |         }
    0x0008c420 cmp.w r3, r1, lsl 2               |         
    0x0008c424 nop                               |         
    0x0008c426 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c42a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c42c subhs r3, r3, r1, lsl 2           |             r3 -= (r1 << 2);
                                                 |         }
    0x0008c430 cmp.w r3, r1, lsl 1               |         
    0x0008c434 nop                               |         
    0x0008c436 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c43a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c43c subhs r3, r3, r1, lsl 1           |             r3 -= (r1 << 1);
                                                 |         }
    0x0008c440 cmp.w r3, r1                      |         
    0x0008c444 nop                               |         
    0x0008c446 adc.w r0, r0, r0                  |         __asm ("adc.w r0, r0, r0");
    0x0008c44a it hs                             |         
                                                 |         if (r3 < r1) {
    0x0008c44c subhs r3, r3, r1                  |             r3 -= r1;
                                                 |         }
    0x0008c450 cmp.w ip, 0                       |         
    0x0008c454 it mi                             |         
                                                 |         if (ip < 0) {
    0x0008c456 rsbmi r0, r0, 0                   |             __asm ("rsbmi r0, r0, 0");
                                                 |         }
    0x0008c458 bx lr                             |         return r0;
                                                 |     }
    0x0008c45a teq.w ip, r0                      |     __asm ("teq.w ip, r0");
    0x0008c45e it mi                             |     
                                                 |     if (ip < 0) {
    0x0008c460 rsbmi r0, r0, 0                   |         __asm ("rsbmi r0, r0, 0");
                                                 |     }
    0x0008c462 bx lr                             |     return r0;
                                                 | label_0:
    0x0008c464 it lo                             |     
                                                 |     if (ip >= 0) {
    0x0008c466 movlo r0, 0                       |         r0 = 0;
                                                 |     }
    0x0008c468 itt eq                            |     
                                                 |     if (ip == 0) {
    0x0008c46a asreq r0, ip, 0x1f                |         __asm ("asreq r0, ip, 0x1f");
                                                 |     }
                                                 |     if (ip == 0) {
    0x0008c46e orr r0, r0, 1                     |         r0 |= 1;
                                                 |     }
    0x0008c472 bx lr                             |     return r0;
                                                 | label_1:
    0x0008c474 clz r2, r1                        |     r2 &= r1;
    0x0008c478 rsb.w r2, r2, 0x1f                |     r2 = 0x1f - r2;
    0x0008c47c cmp.w ip, 0                       |     
    0x0008c480 lsr.w r0, r3, r2                  |     r0 = r3 >> r2;
    0x0008c484 it mi                             |     
                                                 |     if (ip < 0) {
    0x0008c486 rsbmi r0, r0, 0                   |         __asm ("rsbmi r0, r0, 0");
                                                 |     }
    0x0008c488 bx lr                             |     return r0;
                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8cb98 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0008cb98 ()                                  | void fcn_0008cb98 (int16_t arg_1ch, uint32_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x0008cb98 push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0008cb9c cmp r0, r2                                    |     
    0x0008cb9e mov r5, r1                                    |     r5 = r1;
    0x0008cba0 mov r4, r0                                    |     r4 = r0;
    0x0008cba2 sbcs.w r1, r5, r3                             |     __asm ("sbcs.w r1, r5, r3");
    0x0008cba6 it lo                                         |     
                                                             |     if (r0 >= r2) {
    0x0008cba8 movlo r0, 0                                   |         r0 = 0;
                                                             |     }
    0x0008cbaa ldr r7, [sp, 0x1c]                            |     r7 = *(arg_1ch);
    0x0008cbac it lo                                         |     
                                                             |     if (r0 >= r2) {
    0x0008cbae movlo r1, r0                                  |         r1 = r0;
                                                             |     }
                                                             |     if (r0 <= r2) {
    0x0008cbb0 blo 0x8cc78                                   |         goto label_3;
                                                             |     }
    0x0008cbb2 clz r6, r3                                    |     r6 &= r3;
    0x0008cbb6 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x0008cbb8 beq 0x8cc8a                                   |         goto label_4;
                                                             |     }
    0x0008cbba clz r1, r5                                    |     r1 &= r5;
    0x0008cbbe cmp r5, 0                                     |     
                                                             |     if (r5 == 0) {
    0x0008cbc0 beq 0x8cc82                                   |         goto label_2;
                                                             |     }
                                                             | label_1:
    0x0008cbc2 subs r6, r6, r1                               |     r6 -= r1;
    0x0008cbc4 sub.w ip, r6, 0x20                            |     
    0x0008cbc8 lsls r3, r6                                   |     r3 <<= r6;
    0x0008cbca lsl.w r1, r2, ip                              |     r1 = r2 << ip;
    0x0008cbce rsb.w lr, r6, 0x20                            |     lr = 0x20 - r6;
    0x0008cbd2 orrs r3, r1                                   |     r3 |= r1;
    0x0008cbd4 lsr.w r1, r2, lr                              |     r1 = r2 >> lr;
    0x0008cbd8 lsls r2, r6                                   |     r2 <<= r6;
    0x0008cbda orrs r3, r1                                   |     r3 |= r1;
    0x0008cbdc cmp r4, r2                                    |     
    0x0008cbde sbcs.w r1, r5, r3                             |     __asm ("sbcs.w r1, r5, r3");
    0x0008cbe2 itt lo                                        |     
                                                             |     if (r4 >= r2) {
    0x0008cbe4 movlo r0, 0                                   |         r0 = 0;
                                                             |     }
                                                             |     if (r4 >= r2) {
    0x0008cbe6 movlo r1, r0                                  |         r1 = r0;
                                                             |     }
                                                             |     if (r4 > r2) {
    0x0008cbe8 blo 0x8cc02                                   |         
    0x0008cbea movs r0, 1                                    |         r0 = 1;
    0x0008cbec subs r4, r4, r2                               |         r4 -= r2;
    0x0008cbee lsl.w r1, r0, ip                              |         r1 = r0 << ip;
    0x0008cbf2 lsr.w r8, r0, lr                              |         r8 = r0 >> lr;
    0x0008cbf6 lsl.w r0, r0, r6                              |         r0 <<= r6;
    0x0008cbfa sbc.w r5, r5, r3                              |         __asm ("sbc.w r5, r5, r3");
    0x0008cbfe orr.w r1, r1, r8                              |         r1 |= r8;
                                                             |     }
                                                             |     if (r6 == 0) {
    0x0008cc02 cbz r6, 0x8cc78                               |         goto label_3;
                                                             |     }
    0x0008cc04 lsrs r2, r2, 1                                |     r2 >>= 1;
    0x0008cc06 mov r8, r6                                    |     r8 = r6;
    0x0008cc08 orr.w r2, r2, r3, lsl 31                      |     r2 |= (r3 << 31);
    0x0008cc0c lsrs r3, r3, 1                                |     r3 >>= 1;
    0x0008cc0e b 0x8cc26                                     |     
                                                             |     while (r4 >= r2) {
    0x0008cc10 subs r4, r4, r2                               |         r4 -= r2;
    0x0008cc12 sbc.w r5, r5, r3                              |         __asm ("sbc.w r5, r5, r3");
    0x0008cc16 adds r4, r4, r4                               |         r4 += r4;
    0x0008cc18 adcs r5, r5                                   |         __asm ("adcs r5, r5");
    0x0008cc1a adds r4, 1                                    |         r4++;
    0x0008cc1c adc r5, r5, 0                                 |         __asm ("adc r5, r5, 0");
    0x0008cc20 subs.w r8, r8, 1                              |         r8--;
                                                             |         if (r8 == r8) {
    0x0008cc24 beq 0x8cc38                                   |             goto label_5;
                                                             |         }
                                                             | label_0:
    0x0008cc26 cmp r4, r2                                    |         
    0x0008cc28 sbcs.w sb, r5, r3                             |         __asm ("sbcs.w sb, r5, r3");
    0x0008cc2c bhs 0x8cc10                                   |         
                                                             |     }
    0x0008cc2e adds r4, r4, r4                               |     r4 += r4;
    0x0008cc30 adcs r5, r5                                   |     __asm ("adcs r5, r5");
    0x0008cc32 subs.w r8, r8, 1                              |     r8--;
                                                             |     if (r8 != r8) {
    0x0008cc36 bne 0x8cc26                                   |         goto label_0;
                                                             |     }
                                                             | label_5:
    0x0008cc38 adds r0, r0, r4                               |     r0 += r4;
    0x0008cc3a lsl.w lr, r5, lr                              |     lr = r5 << lr;
    0x0008cc3e lsr.w r4, r4, r6                              |     r4 >>= r6;
    0x0008cc42 lsr.w ip, r5, ip                              |     
    0x0008cc46 adc.w r1, r1, r5                              |     __asm ("adc.w r1, r1, r5");
    0x0008cc4a orr.w r4, r4, lr                              |     r4 |= lr;
    0x0008cc4e lsrs r5, r6                                   |     r5 >>= r6;
    0x0008cc50 orr.w r4, r4, ip                              |     r4 |= ip;
    0x0008cc54 sub.w ip, r6, 0x20                            |     
    0x0008cc58 lsl.w ip, r4, ip                              |     
    0x0008cc5c lsl.w r2, r5, r6                              |     r2 = r5 << r6;
    0x0008cc60 rsb.w r3, r6, 0x20                            |     r3 = 0x20 - r6;
    0x0008cc64 orr.w r2, r2, ip                              |     r2 |= ip;
    0x0008cc68 lsr.w r3, r4, r3                              |     r3 = r4 >> r3;
    0x0008cc6c orrs r2, r3                                   |     r2 |= r3;
    0x0008cc6e lsl.w r3, r4, r6                              |     r3 = r4 << r6;
    0x0008cc72 subs r0, r0, r3                               |     r0 -= r3;
    0x0008cc74 sbc.w r1, r1, r2                              |     __asm ("sbc.w r1, r1, r2");
                                                             |     if (r7 != 0) {
                                                             | label_3:
    0x0008cc78 cbz r7, 0x8cc7e                               |         
    0x0008cc7a strd r4, r5, [r7]                             |         __asm ("strd r4, r5, [r7]");
                                                             |     }
    0x0008cc7e pop.w {r4, r5, r6, r7, r8, sb, pc}            |     
                                                             | label_2:
    0x0008cc82 clz r1, r4                                    |     r1 &= r4;
    0x0008cc86 adds r1, 0x20                                 |     r1 += 0x20;
    0x0008cc88 b 0x8cbc2                                     |     goto label_1;
                                                             | label_4:
    0x0008cc8a clz r6, r2                                    |     r6 &= r2;
    0x0008cc8e clz r1, r5                                    |     r1 &= r5;
    0x0008cc92 adds r6, 0x20                                 |     r6 += 0x20;
    0x0008cc94 cmp r5, 0                                     |     
                                                             |     if (r5 != 0) {
    0x0008cc96 bne 0x8cbc2                                   |         goto label_1;
                                                             |     }
    0x0008cc98 b 0x8cc82                                     |     goto label_2;
                                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x39250 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.sqlcipherPagerSetCodec ()            | void sqlcipherPagerSetCodec (int16_t arg_18h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x00039250 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00039254 mov r7, r3                            |     r7 = r3;
    0x00039256 ldr.w r3, [r0, 0xe8]                  |     r3 = *(arg_18hxe8);
    0x0003925a mov r4, r0                            |     r4 = r0;
    0x0003925c mov r5, r1                            |     r5 = r1;
    0x0003925e mov r6, r2                            |     r6 = r2;
    0x00039260 ldr.w r8, [sp, 0x18]                  |     r8 = *(arg_18h);
                                                     |     if (r3 == 0) {
    0x00039264 cbz r3, 0x392ca                       |         goto label_2;
                                                     |     }
    0x00039266 ldr.w r0, [r0, 0xec]                  |     r0 = *((r0 + 0xec));
    0x0003926a blx r3                                |     uint32_t (*r3)(uint32_t) (r0);
                                                     | label_1:
    0x0003926c ldrb r2, [r4, 0xf]                    |     r2 = *((r4 + 0xf));
    0x0003926e ldr r3, [r4, 0x2c]                    |     r3 = *((r4 + 0x2c));
    0x00039270 str.w r7, [r4, 0xe8]                  |     __asm ("str.w r7, [r4, 0xe8]");
    0x00039274 cmp r2, 0                             |     
    0x00039276 str.w r6, [r4, 0xe4]                  |     __asm ("str.w r6, [r4, 0xe4]");
    0x0003927a it ne                                 |     
                                                     |     if (r2 == 0) {
    0x0003927c movne r5, 0                           |         r5 = 0;
                                                     |     }
    0x0003927e str.w r8, [r4, 0xec]                  |     __asm ("str.w r8, [r4, 0xec]");
    0x00039282 str.w r5, [r4, 0xe0]                  |     __asm ("str.w r5, [r4, 0xe0]");
                                                     |     if (r3 != 0) {
    0x00039286 cbnz r3, 0x392a6                      |         goto label_3;
                                                     |     }
    0x00039288 ldrb r3, [r4, 0x17]                   |     r3 = *((r4 + 0x17));
    0x0003928a subs r3, 0                            |     
    0x0003928c it ne                                 |     
                                                     |     if (r3 == 0) {
    0x0003928e movne r3, 1                           |         r3 = 1;
                                                     |     }
    0x00039290 cmp r5, 0                             |     
    0x00039292 it ne                                 |     
                                                     |     if (r5 == 0) {
    0x00039294 movne r3, 0                           |         r3 = 0;
                                                     |     }
                                                     |     if (r3 != 0) {
    0x00039296 cbnz r3, 0x392c4                      |         goto label_4;
                                                     |     }
    0x00039298 ldr r3, [pc, 0x50]                    |     
    0x0003929a add r3, pc                            |     r3 = 0x7258a;
    0x0003929c str.w r3, [r4, 0xdc]                  |     __asm ("str.w r3, [r4, 0xdc]");
                                                     |     if (r6 != 0) {
    0x000392a0 cbnz r6, 0x392b2                      |         goto label_5;
                                                     |     }
                                                     |     do {
    0x000392a2 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_3:
    0x000392a6 ldr r3, [pc, 0x48]                    |         
    0x000392a8 add r3, pc                            |         r3 = 0x7259e;
                                                     | label_0:
    0x000392aa str.w r3, [r4, 0xdc]                  |         __asm ("str.w r3, [r4, 0xdc]");
    0x000392ae cmp r6, 0                             |         
    0x000392b0 beq 0x392a2                           |         
                                                     |     } while (r6 == 0);
                                                     | label_5:
    0x000392b2 ldrsh.w r2, [r4, 0x96]                |     r2 = *((r4 + 0x96));
    0x000392b6 mov r0, r8                            |     r0 = r8;
    0x000392b8 ldr.w r1, [r4, 0xa8]                  |     r1 = *((r4 + 0xa8));
    0x000392bc mov r3, r6                            |     r3 = r6;
    0x000392be pop.w {r4, r5, r6, r7, r8, lr}        |     
    0x000392c2 bx r3                                 |     return uint32_t (*r3)() ();
                                                     | label_4:
    0x000392c4 ldr r3, [pc, 0x2c]                    |     
    0x000392c6 add r3, pc                            |     r3 = 0x725be;
    0x000392c8 b 0x392aa                             |     goto label_0;
                                                     | label_2:
    0x000392ca ldr r3, [r0, 0x6c]                    |     r3 = *((r0 + 0x6c));
    0x000392cc ldr r1, [r0, 0x60]                    |     r1 = *((r0 + 0x60));
    0x000392ce adds r3, 1                            |     r3++;
    0x000392d0 str r3, [r0, 0x6c]                    |     *((r0 + 0x6c)) = r3;
                                                     |     if (r1 == 0) {
    0x000392d2 cbz r1, 0x392de                       |         goto label_6;
                                                     |     }
    0x000392d4 movs r3, 1                            |     r3 = 1;
                                                     |     do {
    0x000392d6 str r3, [r1, 0x10]                    |         *((r1 + 0x10)) = r3;
    0x000392d8 ldr r1, [r1, 0x2c]                    |         r1 = *((r1 + 0x2c));
    0x000392da cmp r1, 0                             |         
    0x000392dc bne 0x392d6                           |         
                                                     |     } while (r1 != 0);
                                                     | label_6:
    0x000392de ldr.w r0, [r4, 0xf4]                  |     r0 = *((r4 + 0xf4));
    0x000392e2 movs r1, 0                            |     r1 = 0;
    0x000392e4 bl 0x136cc                            |     fcn_000136cc (r0);
    0x000392e8 b 0x3926c                             |     goto label_1;
                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x429f0 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) sym.sqlcipher_codec_ctx_integrity_check ()               | void sqlcipher_codec_ctx_integrity_check (int16_t arg1, int16_t arg3, arithmetic x) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     arithmetic var_10h;
                                                                     |     arithmetic var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int32_t var_20h_2;
                                                                     |     int16_t var_2ch;
                                                                     |     r0 = arg1;
                                                                     |     r2 = arg3;
                                                                     |     r1 = x;
    0x000429f0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x000429f4 mov r4, r0                                            |     r4 = r0;
    0x000429f6 ldr r3, [r4, 0x50]                                    |     r3 = *((r4 + 0x50));
    0x000429f8 mov r0, r1                                            |     r0 = r1;
    0x000429fa ldr r5, [pc, 0x33c]                                   |     
    0x000429fc ldr r7, [r1, 8]                                       |     r7 = *((r1 + 8));
    0x000429fe ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x00042a00 ldr r1, [pc, 0x338]                                   |     r1 = *(0x42d3c);
    0x00042a02 add r5, pc                                            |     r5 = 0x85740;
    0x00042a04 vpush {d8}                                            |     __asm ("vpush {d8}");
    0x00042a08 sub sp, 0x34                                          |     
    0x00042a0a ldr r3, [r3]                                          |     r3 = *(r3);
    0x00042a0c ldr r1, [r5, r1]                                      |     
    0x00042a0e mov r5, r2                                            |     r5 = r2;
    0x00042a10 ldr.w sl, [r3, 0x40]                                  |     sl = *((r3 + 0x40));
    0x00042a14 ldr r1, [r1]                                          |     r1 = *(0x85740);
    0x00042a16 str r1, [sp, 0x2c]                                    |     var_2ch = r1;
    0x00042a18 mov.w r1, 0                                           |     r1 = 0;
    0x00042a1c cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x00042a1e beq.w 0x42c78                                         |         goto label_9;
                                                                     |     }
                                                                     | label_4:
    0x00042a22 movs r1, 1                                            |     r1 = 1;
    0x00042a24 mov r0, r7                                            |     r0 = r7;
    0x00042a26 bl 0x1d86c                                            |     fcn_0001d86c (r0, r1);
    0x00042a2a ldr r3, [r7]                                          |     r3 = *(r7);
    0x00042a2c ldrb.w r3, [r3, 0x57]                                 |     r3 = *((r3 + 0x57));
                                                                     |     if (r3 == 0) {
    0x00042a30 cbnz r3, 0x42a48                                      |         
    0x00042a32 ldr r0, [r7, 0x74]                                    |         r0 = *((r7 + 0x74));
    0x00042a34 mov r1, r5                                            |         r1 = r5;
    0x00042a36 str r3, [sp, 4]                                       |         var_4h = r3;
    0x00042a38 movs r3, 1                                            |         r3 = 1;
    0x00042a3a str r3, [sp]                                          |         *(sp) = r3;
    0x00042a3c mov.w r2, -1                                          |         r2 = -1;
    0x00042a40 mov.w r3, -1                                          |         r3 = -1;
    0x00042a44 bl 0x252e0                                            |         fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
                                                                     |     }
    0x00042a48 cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x00042a4c beq.w 0x42caa                                         |         goto label_10;
                                                                     |     }
    0x00042a50 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x00042a54 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x00042a56 beq.w 0x42caa                                         |         goto label_10;
                                                                     |     }
    0x00042a5a ldr r5, [r4, 0x40]                                    |     r5 = *((r4 + 0x40));
    0x00042a5c ands r5, r5, 1                                        |     r5 &= 1;
                                                                     |     if (r5 == r5) {
    0x00042a60 beq.w 0x42bdc                                         |         goto label_11;
                                                                     |     }
    0x00042a64 mov r0, r4                                            |     r0 = r4;
    0x00042a66 blx 0x9c14                                            |     r0 = fcn_00009c14 ();
    0x00042a6a cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x00042a6c bne.w 0x42d24                                         |         goto label_12;
                                                                     |     }
    0x00042a70 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x00042a74 add r1, sp, 0x20                                      |     r1 += var_20h;
    0x00042a76 mov r0, sl                                            |     r0 = sl;
    0x00042a78 ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x00042a7a blx r3                                                |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00042a7c ldr r0, [r4, 0x28]                                    |     r0 = *((r4 + 0x28));
    0x00042a7e asrs r1, r0, 0x1f                                     |     r1 = r0 >> 0x1f;
    0x00042a80 blx 0x9b50                                            |     fcn_00009b50 ();
    0x00042a84 ldr.w fp, [r4, 0x1c]                                  |     fp = *((r4 + 0x1c));
    0x00042a88 ldrd r8, sb, [sp, 0x20]                               |     __asm ("ldrd r8, sb, [var_20h]");
    0x00042a8c str r0, [sp, 0x10]                                    |     var_10h = r0;
    0x00042a8e mov r2, fp                                            |     r2 = fp;
    0x00042a90 asr.w r6, fp, 0x1f                                    |     r6 = fp >> 0x1f;
    0x00042a94 mov r0, r8                                            |     r0 = r8;
    0x00042a96 mov r1, sb                                            |     r1 = sb;
    0x00042a98 mov r3, r6                                            |     r3 = r6;
    0x00042a9a bl 0x8ca4c                                            |     r0 = fcn_0008ca4c (r0, r1, r2, r3);
    0x00042a9e cmp r0, 1                                             |     
    0x00042aa0 sbcs r1, r1, 0                                        |     __asm ("sbcs r1, r1, 0");
                                                                     |     if (r0 < 1) {
    0x00042aa4 blt.w 0x42c88                                         |         goto label_13;
                                                                     |     }
    0x00042aa8 ldr r3, [pc, 0x294]                                   |     
    0x00042aaa vldr d8, [pc, 0x284]                                  |     __asm ("vldr d8, aav.0x000000ff");
    0x00042aae add r3, pc                                            |     r3 = 0x857f2;
    0x00042ab0 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x00042ab2 ldr r3, [pc, 0x290]                                   |     
    0x00042ab4 add r3, pc                                            |     r3 = 0x857fe;
    0x00042ab6 strd sl, r3, [sp, 0x14]                               |     __asm ("strd sl, r3, [var_14h]");
    0x00042aba mov sl, r7                                            |     sl = r7;
    0x00042abc mov r7, fp                                            |     r7 = fp;
    0x00042abe b 0x42b3a                                             |     goto label_14;
                                                                     | label_0:
    0x00042ac0 mov r1, r7                                            |     r1 = r7;
    0x00042ac2 strd fp, r6, [sp]                                     |     __asm ("strd fp, r6, [sp]");
    0x00042ac6 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x00042ac8 mov r2, r5                                            |     r2 = r5;
    0x00042aca blx 0x97f0                                            |     fcn_000097f0 ();
    0x00042ace ldrd r1, r3, [sl, 0x6c]                               |     __asm ("ldrd r1, r3, [sl, 0x6c]");
    0x00042ad2 mov r6, r0                                            |     r6 = r0;
    0x00042ad4 cmp r1, r3                                            |     
                                                                     |     if (r1 >= r3) {
    0x00042ad6 bge.w 0x42cd2                                         |         goto label_15;
                                                                     |     }
    0x00042ada ldr.w r3, [sl, 0x68]                                  |     r3 = *((sl + 0x68));
    0x00042ade add.w r2, r1, r1, lsl 2                               |     r2 = r1 + (r1 << 2);
    0x00042ae2 adds r7, r1, 1                                        |     r7 = r1 + 1;
    0x00042ae4 str.w r7, [sl, 0x6c]                                  |     __asm ("str.w r7, [sl, 0x6c]");
    0x00042ae8 movs r7, 0x75                                         |     r7 = 0x75;
    0x00042aea str.w r7, [r3, r2, lsl 2]                             |     __asm ("str.w r7, [r3, r2, lsl 2]");
    0x00042aee movs r0, 0                                            |     r0 = 0;
    0x00042af0 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x00042af4 adds r2, r3, 4                                        |     r2 = r3 + 4;
    0x00042af6 vst1.32 {d8}, [r2]                                    |     __asm ("vst1.32 {d8}, [r2]");
    0x00042afa strd r0, r0, [r3, 0xc]                                |     __asm ("strd r0, r0, [r3, 0xc]");
                                                                     | label_6:
    0x00042afe mov r2, r6                                            |     r2 = r6;
    0x00042b00 mov r0, sl                                            |     r0 = sl;
    0x00042b02 mvn r3, 5                                             |     r3 = ~5;
    0x00042b06 bl 0x1ec70                                            |     fcn_0001ec70 (r0, r1, r2);
    0x00042b0a movs r3, 0                                            |     r3 = 0;
    0x00042b0c movs r1, 0x54                                         |     r1 = 0x54;
    0x00042b0e str r3, [sp]                                          |     *(sp) = r3;
    0x00042b10 movs r3, 1                                            |     r3 = 1;
    0x00042b12 mov r2, r3                                            |     r2 = r3;
    0x00042b14 mov r0, sl                                            |     r0 = sl;
    0x00042b16 bl 0x29ac4                                            |     fcn_00029ac4 (r0, r1, r2, r3);
                                                                     |     do {
                                                                     | label_1:
    0x00042b1a ldr r7, [r4, 0x1c]                                    |         r7 = *((r4 + 0x1c));
    0x00042b1c adds r5, 1                                            |         r5++;
    0x00042b1e ldrd r8, sb, [sp, 0x20]                               |         __asm ("ldrd r8, sb, [var_20h]");
    0x00042b22 mov r2, r7                                            |         r2 = r7;
    0x00042b24 asrs r6, r7, 0x1f                                     |         r6 = r7 >> 0x1f;
    0x00042b26 mov r0, r8                                            |         r0 = r8;
    0x00042b28 mov r1, sb                                            |         r1 = sb;
    0x00042b2a mov r3, r6                                            |         r3 = r6;
    0x00042b2c bl 0x8ca4c                                            |         r0 = fcn_0008ca4c (r0, r1, r2, r3);
    0x00042b30 cmp r0, r5                                            |         
    0x00042b32 sbcs r1, r1, 0                                        |         __asm ("sbcs r1, r1, 0");
                                                                     |         if (r0 < r5) {
    0x00042b36 blt.w 0x42c84                                         |             goto label_16;
                                                                     |         }
                                                                     | label_14:
    0x00042b3a ldr r3, [r4, 0x50]                                    |         r3 = *((r4 + 0x50));
    0x00042b3c mov r1, r5                                            |         r1 = r5;
    0x00042b3e ldr.w r8, [r4, 0x24]                                  |         r8 = *((r4 + 0x24));
    0x00042b42 ldr.w sb, [r4, 0x14]                                  |         sb = *((r4 + 0x14));
    0x00042b46 ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x00042b48 ldr r0, [r3]                                          |         r0 = *(r3);
    0x00042b4a blx 0x94a8                                            |         r0 = fcn_000094a8 ();
    0x00042b4e mov r6, r0                                            |         r6 = r0;
    0x00042b50 cmp r0, 0                                             |         
    0x00042b52 bne 0x42b1a                                           |         
                                                                     |     } while (r0 != 0);
    0x00042b54 subs r3, r5, 1                                        |     r3 = r5 - 1;
    0x00042b56 cmp r5, 1                                             |     
    0x00042b58 mul r3, r7, r3                                        |     r3 = r7 * r3;
    0x00042b5c sub.w r8, r7, r8                                      |     r8 = r7 - r8;
    0x00042b60 add r8, sb                                            |     r8 += sb;
    0x00042b62 mov fp, r3                                            |     
                                                                     |     if (r5 == 1) {
    0x00042b64 beq 0x42c22                                           |         goto label_17;
                                                                     |     }
                                                                     | label_2:
    0x00042b66 ldr r2, [r4, 0x1c]                                    |     r2 = *((r4 + 0x1c));
    0x00042b68 movs r1, 0                                            |     r1 = 0;
    0x00042b6a ldr r0, [r4, 0x4c]                                    |     r0 = *((r4 + 0x4c));
    0x00042b6c asrs r3, r2, 0x1f                                     |     r3 = r2 >> 0x1f;
    0x00042b6e blx 0x9988                                            |     fcn_00009988 ();
    0x00042b72 ldr r2, [r4, 0x28]                                    |     r2 = *((r4 + 0x28));
    0x00042b74 movs r1, 0                                            |     r1 = 0;
    0x00042b76 ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x00042b78 asrs r3, r2, 0x1f                                     |     r3 = r2 >> 0x1f;
    0x00042b7a blx 0x9988                                            |     fcn_00009988 ();
    0x00042b7e ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x00042b80 mov r2, r7                                            |     r2 = r7;
    0x00042b82 ldr r3, [r0]                                          |     r3 = *(r0);
    0x00042b84 strd fp, r6, [sp]                                     |     __asm ("strd fp, r6, [sp]");
    0x00042b88 ldr r1, [r4, 0x4c]                                    |     r1 = *((r4 + 0x4c));
    0x00042b8a ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x00042b8c blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00042b8e mov sb, r0                                            |     sb = r0;
    0x00042b90 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x00042b92 bne 0x42ac0                                           |         goto label_0;
                                                                     |     }
    0x00042b94 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x00042b96 mov r2, r5                                            |     r2 = r5;
    0x00042b98 mov r0, r4                                            |     r0 = r4;
    0x00042b9a strd r8, r3, [sp]                                     |     __asm ("strd r8, r3, [sp]");
    0x00042b9e ldr r3, [r4, 0x4c]                                    |     r3 = *((r4 + 0x4c));
    0x00042ba0 ldr r1, [r4, 0x54]                                    |     r1 = *((r4 + 0x54));
    0x00042ba2 bl 0x18f30                                            |     r0 = fcn_00018f30 (r0, r1, r2, r3, r4, r5);
    0x00042ba6 mov r6, r0                                            |     r6 = r0;
    0x00042ba8 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x00042baa beq 0x42c42                                           |         
    0x00042bac mov r1, r5                                            |         r1 = r5;
    0x00042bae ldr r0, [sp, 0x1c]                                    |         r0 = var_1ch;
    0x00042bb0 blx 0x97f0                                            |         fcn_000097f0 ();
    0x00042bb4 mvn r3, 5                                             |         r3 = ~5;
    0x00042bb8 strd sb, r0, [sp]                                     |         __asm ("strd sb, r0, [sp]");
    0x00042bbc str r3, [sp, 8]                                       |         var_8h = r3;
    0x00042bbe mov r2, sb                                            |         r2 = sb;
    0x00042bc0 movs r3, 1                                            |         r3 = 1;
    0x00042bc2 movs r1, 0x75                                         |         r1 = 0x75;
    0x00042bc4 mov r0, sl                                            |         r0 = sl;
    0x00042bc6 bl 0x2a324                                            |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00042bca str.w sb, [sp]                                        |         __asm ("str.w sb, [sp]");
                                                                     | label_3:
    0x00042bce movs r3, 1                                            |         r3 = 1;
    0x00042bd0 movs r1, 0x54                                         |         r1 = 0x54;
    0x00042bd2 mov r2, r3                                            |         r2 = r3;
    0x00042bd4 mov r0, sl                                            |         r0 = sl;
    0x00042bd6 bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00042bda b 0x42b1a                                             |         goto label_1;
                                                                     | label_11:
    0x00042bdc ldr r1, [pc, 0x168]                                   |         
    0x00042bde mov r2, r5                                            |         r2 = r5;
    0x00042be0 movs r3, 1                                            |         r3 = 1;
    0x00042be2 mov r0, r7                                            |         r0 = r7;
    0x00042be4 str r5, [sp, 8]                                       |         var_8h = r5;
    0x00042be6 add r1, pc                                            |         r1 = 0x85932;
    0x00042be8 strd r5, r1, [sp]                                     |         __asm ("strd r5, r1, [sp]");
    0x00042bec movs r1, 0x75                                         |         r1 = 0x75;
    0x00042bee bl 0x2a324                                            |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00042bf2 movs r3, 1                                            |         r3 = 1;
    0x00042bf4 movs r1, 0x54                                         |         r1 = 0x54;
    0x00042bf6 mov r2, r3                                            |         r2 = r3;
    0x00042bf8 mov r0, r7                                            |         r0 = r7;
    0x00042bfa str r5, [sp]                                          |         *(sp) = r5;
    0x00042bfc bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
                                                                     | label_5:
    0x00042c00 ldr r2, [pc, 0x148]                                   |         
    0x00042c02 ldr r3, [pc, 0x138]                                   |         r3 = *(0x42d3e);
    0x00042c04 add r2, pc                                            |         r2 = 0x85954;
    0x00042c06 ldr r3, [r2, r3]                                      |         r3 = *(0x85954);
    0x00042c08 ldr r2, [r3]                                          |         r2 = *(0x85954);
    0x00042c0a ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x00042c0c eors r2, r3                                           |         r2 ^= r3;
    0x00042c0e mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x00042c12 bne.w 0x42d2a                                         |             goto label_18;
                                                                     |         }
    0x00042c16 movs r0, 0                                            |         r0 = 0;
    0x00042c18 add sp, 0x34                                          |         
    0x00042c1a vpop {d8}                                             |         __asm ("vpop {d8}");
    0x00042c1e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_17:
    0x00042c22 ldr r2, [r4, 0x2c]                                    |         r2 = *((r4 + 0x2c));
    0x00042c24 mov r1, r2                                            |         r1 = r2;
    0x00042c26 asrs r6, r2, 0x1f                                     |         r6 = r2 >> 0x1f;
                                                                     |         if (r2 == 0) {
    0x00042c28 cbnz r2, 0x42c30                                      |             
    0x00042c2a movs r1, 0x10                                         |             r1 = 0x10;
    0x00042c2c mov r6, r2                                            |             r6 = r2;
    0x00042c2e mov r2, r1                                            |             r2 = r1;
                                                                     |         }
    0x00042c30 adds r3, r3, r1                                       |         r3 += r1;
    0x00042c32 sub.w r7, r7, r2                                      |         r7 -= r2;
    0x00042c36 sub.w r8, r8, r2                                      |         r8 -= r2;
    0x00042c3a mov fp, r3                                            |         
    0x00042c3c adc r6, r6, 0                                         |         __asm ("adc r6, r6, 0");
    0x00042c40 b 0x42b66                                             |         goto label_2;
                                                                     |     }
    0x00042c42 ldr r0, [r4, 0x4c]                                    |     r0 = *((r4 + 0x4c));
    0x00042c44 ldr r2, [r4, 0x28]                                    |     r2 = *((r4 + 0x28));
    0x00042c46 ldr r1, [sp, 0x10]                                    |     r1 = var_10h;
    0x00042c48 add r0, r8                                            |     r0 += r8;
    0x00042c4a blx 0x9760                                            |     r0 = fcn_00009760 ();
    0x00042c4e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x00042c50 beq.w 0x42b1a                                         |         goto label_1;
                                                                     |     }
    0x00042c54 ldr r0, [pc, 0xf8]                                    |     
    0x00042c56 mov r1, r5                                            |     r1 = r5;
    0x00042c58 add r0, pc                                            |     r0 = 0x859ac;
    0x00042c5a blx 0x97f0                                            |     fcn_000097f0 ();
    0x00042c5e mvn r3, 5                                             |     r3 = ~5;
    0x00042c62 strd r6, r0, [sp]                                     |     __asm ("strd r6, r0, [sp]");
    0x00042c66 str r3, [sp, 8]                                       |     var_8h = r3;
    0x00042c68 mov r2, r6                                            |     r2 = r6;
    0x00042c6a movs r3, 1                                            |     r3 = 1;
    0x00042c6c movs r1, 0x75                                         |     r1 = 0x75;
    0x00042c6e mov r0, sl                                            |     r0 = sl;
    0x00042c70 bl 0x2a324                                            |     fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00042c74 str r6, [sp]                                          |     *(sp) = r6;
    0x00042c76 b 0x42bce                                             |     goto label_3;
                                                                     | label_9:
    0x00042c78 ldr r3, [r0, 0x74]                                    |     r3 = *((r0 + 0x74));
                                                                     |     if (r3 == 0) {
    0x00042c7a cbz r3, 0x42ce4                                       |         goto label_19;
                                                                     |     }
                                                                     | label_7:
    0x00042c7c bl 0x29b0c                                            |     r0 = fcn_00029b0c (r0);
    0x00042c80 mov r7, r0                                            |     r7 = r0;
    0x00042c82 b 0x42a22                                             |     goto label_4;
                                                                     | label_16:
    0x00042c84 mov fp, r7                                            |     
    0x00042c86 mov r7, sl                                            |     r7 = sl;
                                                                     | label_13:
    0x00042c88 mov r2, fp                                            |     r2 = fp;
    0x00042c8a mov r3, r6                                            |     r3 = r6;
    0x00042c8c mov r0, r8                                            |     r0 = r8;
    0x00042c8e mov r1, sb                                            |     r1 = sb;
    0x00042c90 bl 0x8ca4c                                            |     fcn_0008ca4c (r0, r1, r2, r3);
    0x00042c94 orrs.w r1, r3, r2                                     |     r1 = r3 | r2;
                                                                     |     if (r1 != r3) {
    0x00042c98 bne 0x42cf2                                           |         goto label_20;
                                                                     |     }
                                                                     | label_8:
    0x00042c9a ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x00042c9c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x00042c9e beq 0x42c00                                           |         goto label_5;
                                                                     |     }
    0x00042ca0 ldr r2, [r4, 0x28]                                    |     r2 = *((r4 + 0x28));
    0x00042ca2 asrs r3, r2, 0x1f                                     |     r3 = r2 >> 0x1f;
    0x00042ca4 blx 0x9a28                                            |     fcn_00009a28 ();
    0x00042ca8 b 0x42c00                                             |     goto label_5;
                                                                     | label_10:
    0x00042caa ldr r1, [pc, 0xa8]                                    |     
    0x00042cac add r1, pc                                            |     r1 = 0x85a06;
                                                                     |     do {
    0x00042cae movs r4, 0                                            |         r4 = 0;
    0x00042cb0 movs r3, 1                                            |         r3 = 1;
    0x00042cb2 mov r2, r4                                            |         r2 = r4;
    0x00042cb4 strd r4, r1, [sp]                                     |         __asm ("strd r4, r1, [sp]");
    0x00042cb8 mov r0, r7                                            |         r0 = r7;
    0x00042cba movs r1, 0x75                                         |         r1 = 0x75;
    0x00042cbc str r4, [sp, 8]                                       |         var_8h = r4;
    0x00042cbe bl 0x2a324                                            |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00042cc2 movs r3, 1                                            |         r3 = 1;
    0x00042cc4 movs r1, 0x54                                         |         r1 = 0x54;
    0x00042cc6 mov r2, r3                                            |         r2 = r3;
    0x00042cc8 mov r0, r7                                            |         r0 = r7;
    0x00042cca str r4, [sp]                                          |         *(sp) = r4;
    0x00042ccc bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00042cd0 b 0x42c00                                             |         goto label_5;
                                                                     | label_15:
    0x00042cd2 movs r2, 0                                            |         r2 = 0;
    0x00042cd4 movs r1, 0x75                                         |         r1 = 0x75;
    0x00042cd6 movs r3, 1                                            |         r3 = 1;
    0x00042cd8 mov r0, sl                                            |         r0 = sl;
    0x00042cda str r2, [sp]                                          |         *(sp) = r2;
    0x00042cdc bl 0x29a7c                                            |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x00042ce0 mov r1, r0                                            |         r1 = r0;
    0x00042ce2 b 0x42afe                                             |         goto label_6;
                                                                     | label_19:
    0x00042ce4 ldr r3, [r0]                                          |         r3 = *(r0);
    0x00042ce6 ldr r3, [r3, 0x50]                                    |         r3 = *((r3 + 0x50));
    0x00042ce8 lsls r3, r3, 0x1c                                     |         r3 <<= 0x1c;
    0x00042cea itt pl                                                |         
                                                                     |         if (r3 < r3) {
    0x00042cec movpl r3, 1                                           |             r3 = 1;
                                                                     |         }
                                                                     |         if (r3 < r3) {
    0x00042cee strbpl r3, [r0, 0x17]                                 |             *((r0 + 0x17)) = r3;
                                                                     |         }
    0x00042cf0 b 0x42c7c                                             |         goto label_7;
                                                                     | label_20:
    0x00042cf2 ldr r0, [pc, 0x64]                                    |         
    0x00042cf4 mov r1, r5                                            |         r1 = r5;
    0x00042cf6 movs r5, 0                                            |         r5 = 0;
    0x00042cf8 add r0, pc                                            |         r0 = 0x85a56;
    0x00042cfa blx 0x97f0                                            |         fcn_000097f0 ();
    0x00042cfe mvn r3, 5                                             |         r3 = ~5;
    0x00042d02 mov r2, r5                                            |         r2 = r5;
    0x00042d04 str r0, [sp, 4]                                       |         var_4h = r0;
    0x00042d06 movs r1, 0x75                                         |         r1 = 0x75;
    0x00042d08 str r3, [sp, 8]                                       |         var_8h = r3;
    0x00042d0a mov r0, r7                                            |         r0 = r7;
    0x00042d0c movs r3, 1                                            |         r3 = 1;
    0x00042d0e str r5, [sp]                                          |         *(sp) = r5;
    0x00042d10 bl 0x2a324                                            |         fcn_0002a324 (r0, r1, r2, r3, r4, r5);
    0x00042d14 movs r3, 1                                            |         r3 = 1;
    0x00042d16 mov r0, r7                                            |         r0 = r7;
    0x00042d18 mov r2, r3                                            |         r2 = r3;
    0x00042d1a movs r1, 0x54                                         |         r1 = 0x54;
    0x00042d1c str r5, [sp]                                          |         *(sp) = r5;
    0x00042d1e bl 0x29ac4                                            |         fcn_00029ac4 (r0, r1, r2, r3);
    0x00042d22 b 0x42c9a                                             |         goto label_8;
                                                                     | label_12:
    0x00042d24 ldr r1, [pc, 0x34]                                    |         
    0x00042d26 add r1, pc                                            |         r1 = 0x85a86;
    0x00042d28 b 0x42cae                                             |         
                                                                     |     } while (1);
                                                                     | label_18:
    0x00042d2a blx 0x9b44                                            |     fcn_00009b44 ();
    0x00042d2e nop                                                   |     
    0x00042d30 movs r0, r0                                           |     
    0x00042d32 movs r0, r0                                           |     
    0x00042d34 movs r1, r0                                           |     r1 = r0;
    0x00042d36 movs r0, r0                                           |     
    0x00042d38 b 0x42f38                                             |     return void (*0x42f38)() ();
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x84884 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.sqlcipher_exportFunc ()                          | void sqlcipher_exportFunc (int16_t arg_1a8h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 | label_2:
    0x00009ea4 bx pc                                             |     return void (*pc)() ();
    0x00084884 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00084888 mov r6, r2                                        |     r6 = r2;
    0x0008488a ldr r2, [pc, 0x34c]                               |     
    0x0008488c mov r5, r1                                        |     r5 = r1;
    0x0008488e mov r7, r0                                        |     r7 = r0;
    0x00084890 mov.w fp, 0                                       |     
    0x00084894 ldr r3, [pc, 0x344]                               |     r3 = *(0x84bdc);
    0x00084896 add r2, pc                                        |     r2 = 0x109474;
    0x00084898 vpush {d8, d9, d10}                               |     __asm ("vpush {d8, d9, d10}");
    0x0008489c sub sp, 0x14                                      |     
    0x0008489e ldr r3, [r2, r3]                                  |     
    0x000848a0 ldr r3, [r3]                                      |     r3 = imp.atan;
    0x000848a2 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000848a4 mov.w r3, 0                                       |     r3 = 0;
    0x000848a8 blx 0x9c48                                        |     fcn_00009c48 ();
    0x000848ac vldr d16, [r0, 0x68]                              |     __asm ("vldr d16, [r0, 0x68]");
    0x000848b0 subs r3, r5, 1                                    |     r3 = r5 - 1;
    0x000848b2 vldr d17, [r0, 0x70]                              |     __asm ("vldr d17, [r0, 0x70]");
    0x000848b6 cmp r3, 1                                         |     
    0x000848b8 ldrb.w sb, [r0, 0x5e]                             |     sb = *((r0 + 0x5e));
    0x000848bc mov r4, r0                                        |     r4 = r0;
    0x000848be vldr d10, [r0, 0x20]                              |     __asm ("vldr d10, [r0, 0x20]");
    0x000848c2 ldr.w sl, [r0, 0x18]                              |     sl = *((r0 + 0x18));
    0x000848c6 vmovn.i64 d16, q8                                 |     __asm ("vmovn.i64 d16, q8");
    0x000848ca str.w fp, [sp, 8]                                 |     __asm ("str.w fp, [var_8h]");
    0x000848ce vmovl.s32 q4, d16                                 |     __asm ("vmovl.s32 q4, d16");
                                                                 |     if (r3 > 1) {
    0x000848d2 bhi 0x849d2                                       |         goto label_9;
                                                                 |     }
    0x000848d4 ldr r0, [r6]                                      |     r0 = *(r6);
    0x000848d6 blx 0x9bd8                                        |     r0 = fcn_00009bd8 ();
    0x000848da cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x000848dc beq.w 0x84b2a                                     |         goto label_10;
                                                                 |     }
    0x000848e0 ldr r0, [r6]                                      |     r0 = *(r6);
    0x000848e2 blx 0x9688                                        |     fcn_00009688 ();
    0x000848e6 cmp r5, 2                                         |     
    0x000848e8 mov r8, r0                                        |     r8 = r0;
                                                                 |     if (r5 == 2) {
    0x000848ea beq.w 0x84b6e                                     |         goto label_11;
                                                                 |     }
    0x000848ee ldr r5, [pc, 0x2f0]                               |     
    0x000848f0 add r5, pc                                        |     r5 = 0x1094d6;
                                                                 | label_4:
    0x000848f2 mov r1, r8                                        |     r1 = r8;
    0x000848f4 mov r0, r4                                        |     r0 = r4;
    0x000848f6 blx 0x9598                                        |     r0 = fcn_00009598 ();
    0x000848fa clz r3, r0                                        |     r3 &= r0;
    0x000848fe cmp.w r8, 0                                       |     
    0x00084902 lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x00084906 it eq                                             |     
                                                                 |     if (r8 != 0) {
    0x00084908 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0008490a mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x0008490c cbz r3, 0x8491e                                   |         
    0x0008490e ldr r0, [pc, 0x2d4]                               |         
    0x00084910 mov r1, r8                                        |         r1 = r8;
    0x00084912 add r0, pc                                        |         r0 = 0x1094fc;
    0x00084914 blx 0x9754                                        |         r0 = fcn_00009754 ();
    0x00084918 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0008491a bne.w 0x84b8c                                     |             goto label_12;
                                                                 |         }
                                                                 |     }
    0x0008491e ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00084920 mov r1, r5                                        |     r1 = r5;
    0x00084922 ldr r0, [pc, 0x2c4]                               |     
    0x00084924 strb.w r6, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r6;
    0x00084928 bic r3, r3, 0x10000000                            |     r3 = BIT_MASK (r3, 0x10000000);
    0x0008492c bic r3, r3, 0x5000                                |     r3 = BIT_MASK (r3, 0x5000);
    0x00084930 add r0, pc                                        |     r0 = 0x10951e;
    0x00084932 orr r3, r3, 0x200                                 |     r3 |= 0x200;
    0x00084936 orr r3, r3, 1                                     |     r3 |= 1;
    0x0008493a str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x0008493c ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x0008493e bic r3, r3, 1                                     |     r3 = BIT_MASK (r3, 1);
    0x00084942 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x00084944 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00084946 orr r3, r3, 6                                     |     r3 |= 6;
    0x0008494a str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x0008494c movs r3, 0                                        |     r3 = 0;
    0x0008494e strb.w r3, [r4, 0x5e]                             |     *((r4 + 0x5e)) = r3;
    0x00084952 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x00084956 mov r6, r0                                        |     r6 = r0;
    0x00084958 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008495a beq.w 0x84b6a                                     |         goto label_13;
                                                                 |     }
    0x0008495e add.w fp, sp, 8                                   |     
    0x00084962 mov r2, r0                                        |     r2 = r0;
    0x00084964 mov r1, fp                                        |     r1 = fp;
    0x00084966 mov r0, r4                                        |     r0 = r4;
    0x00084968 bl 0x84784                                        |     r0 = fcn_00084784 (r0, r1, r2);
    0x0008496c mov r3, r0                                        |     r3 = r0;
    0x0008496e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084970 beq 0x84a18                                       |         goto label_14;
                                                                 |     }
                                                                 | label_0:
    0x00084972 movs r2, 0                                        |     r2 = 0;
    0x00084974 mov r0, r6                                        |     r0 = r6;
    0x00084976 vstr d10, [r4, 0x20]                              |     __asm ("vstr d10, [r4, 0x20]");
    0x0008497a str.w sl, [r4, 0x18]                              |     __asm ("str.w sl, [r4, 0x18]");
    0x0008497e vstr d8, [r4, 0x68]                               |     __asm ("vstr d8, [r4, 0x68]");
    0x00084982 vstr d9, [r4, 0x70]                               |     __asm ("vstr d9, [r4, 0x70]");
    0x00084986 strb.w sb, [r4, 0x5e]                             |     *((r4 + 0x5e)) = sb;
    0x0008498a strb.w r2, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r2;
    0x0008498e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00084990 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00084994 ldrd r3, r5, [sp, 4]                              |     __asm ("ldrd r3, r5, [var_4h]");
    0x00084998 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0008499a beq.w 0x84b34                                     |         goto label_15;
                                                                 |     }
                                                                 |     do {
                                                                 | label_5:
    0x0008499e mov.w r2, -1                                      |         r2 = -1;
    0x000849a2 mov r1, r5                                        |         r1 = r5;
    0x000849a4 mov r0, r7                                        |         r0 = r7;
    0x000849a6 blx 0x9ea8                                        |         fcn_00009ea8 ();
    0x000849aa ldr r2, [pc, 0x240]                               |         
    0x000849ac ldr r3, [pc, 0x22c]                               |         r3 = *(0x84bdc);
    0x000849ae add r2, pc                                        |         r2 = 0x1095a0;
    0x000849b0 ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x000849b2 ldr r2, [r3]                                      |         r2 = imp.atan;
    0x000849b4 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x000849b6 eors r2, r3                                       |         r2 ^= r3;
    0x000849b8 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000849bc bne.w 0x84bd4                                     |             goto label_16;
                                                                 |         }
    0x000849c0 mov r1, r5                                        |         r1 = r5;
    0x000849c2 mov r0, r4                                        |         r0 = r4;
    0x000849c4 add sp, 0x14                                      |         
    0x000849c6 vpop {d8, d9, d10}                                |         __asm ("vpop {d8, d9, d10}");
    0x000849ca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x000849ce b.w 0x137d0                                       |         void (*0x137d0)() ();
                                                                 | label_9:
    0x000849d2 ldr r0, [pc, 0x21c]                               |         
    0x000849d4 mov r1, r5                                        |         r1 = r5;
    0x000849d6 add r0, pc                                        |         r0 = 0x1095cc;
    0x000849d8 blx 0x97f0                                        |         fcn_000097f0 ();
                                                                 | label_1:
    0x000849dc movs r3, 1                                        |         r3 = 1;
    0x000849de str r0, [sp, 8]                                   |         var_8h = r0;
                                                                 | label_3:
    0x000849e0 ldr r5, [sp, 8]                                   |         r5 = var_8h;
    0x000849e2 movs r2, 0                                        |         r2 = 0;
    0x000849e4 vstr d10, [r4, 0x20]                              |         __asm ("vstr d10, [r4, 0x20]");
    0x000849e8 str.w sl, [r4, 0x18]                              |         __asm ("str.w sl, [r4, 0x18]");
    0x000849ec vstr d8, [r4, 0x68]                               |         __asm ("vstr d8, [r4, 0x68]");
    0x000849f0 vstr d9, [r4, 0x70]                               |         __asm ("vstr d9, [r4, 0x70]");
    0x000849f4 strb.w sb, [r4, 0x5e]                             |         *((r4 + 0x5e)) = sb;
    0x000849f8 strb.w r2, [r4, 0xb0]                             |         *((r4 + 0xb0)) = r2;
    0x000849fc cmp r5, 0                                         |         
    0x000849fe bne 0x8499e                                       |         
                                                                 |     } while (r5 != 0);
                                                                 | label_6:
    0x00084a00 ldr r2, [pc, 0x1f0]                               |     
    0x00084a02 add r2, pc                                        |     r2 = 0x1095fa;
    0x00084a04 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x00084a08 ldr.w r1, [r3, 0x220]                             |     r1 = *((r3 + 0x220));
    0x00084a0c cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00084a0e bne.w 0x84b42                                     |         goto label_8;
                                                                 |     }
                                                                 | label_7:
    0x00084a12 ldr r1, [pc, 0x1e4]                               |     
    0x00084a14 add r1, pc                                        |     r1 = 0x109612;
    0x00084a16 b 0x84b42                                         |     goto label_8;
                                                                 | label_14:
    0x00084a18 mov r0, r6                                        |     r0 = r6;
    0x00084a1a blx 0x9c24                                        |     fcn_00009c24 ();
    0x00084a1e ldr r0, [pc, 0x1dc]                               |     
    0x00084a20 mov r1, r5                                        |     r1 = r5;
    0x00084a22 add r0, pc                                        |     r0 = 0x109624;
    0x00084a24 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x00084a28 mov r6, r0                                        |     r6 = r0;
    0x00084a2a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084a2c beq.w 0x84b6a                                     |         goto label_13;
                                                                 |     }
    0x00084a30 mov r2, r0                                        |     r2 = r0;
    0x00084a32 mov r1, fp                                        |     r1 = fp;
    0x00084a34 mov r0, r4                                        |     r0 = r4;
    0x00084a36 bl 0x84784                                        |     r0 = fcn_00084784 (r0, r1, r2);
    0x00084a3a mov r3, r0                                        |     r3 = r0;
    0x00084a3c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084a3e bne 0x84972                                       |         goto label_0;
                                                                 |     }
    0x00084a40 mov r0, r6                                        |     r0 = r6;
    0x00084a42 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00084a46 ldr r0, [pc, 0x1b8]                               |     
    0x00084a48 mov r1, r5                                        |     r1 = r5;
    0x00084a4a add r0, pc                                        |     r0 = 0x109650;
    0x00084a4c blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x00084a50 mov r6, r0                                        |     r6 = r0;
    0x00084a52 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084a54 beq.w 0x84b6a                                     |         goto label_13;
                                                                 |     }
    0x00084a58 mov r2, r0                                        |     r2 = r0;
    0x00084a5a mov r1, fp                                        |     r1 = fp;
    0x00084a5c mov r0, r4                                        |     r0 = r4;
    0x00084a5e bl 0x84784                                        |     r0 = fcn_00084784 (r0, r1, r2);
    0x00084a62 mov r3, r0                                        |     r3 = r0;
    0x00084a64 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084a66 bne 0x84972                                       |         goto label_0;
                                                                 |     }
    0x00084a68 mov r0, r6                                        |     r0 = r6;
    0x00084a6a blx 0x9c24                                        |     fcn_00009c24 ();
    0x00084a6e ldr r0, [pc, 0x194]                               |     
    0x00084a70 mov r3, r5                                        |     r3 = r5;
    0x00084a72 mov r2, r5                                        |     r2 = r5;
    0x00084a74 mov r1, r8                                        |     r1 = r8;
    0x00084a76 add r0, pc                                        |     r0 = 0x109680;
    0x00084a78 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x00084a7c mov r6, r0                                        |     r6 = r0;
    0x00084a7e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084a80 beq 0x84b6a                                       |         goto label_13;
                                                                 |     }
    0x00084a82 mov r2, r0                                        |     r2 = r0;
    0x00084a84 mov r1, fp                                        |     r1 = fp;
    0x00084a86 mov r0, r4                                        |     r0 = r4;
    0x00084a88 bl 0x84784                                        |     r0 = fcn_00084784 (r0, r1, r2);
    0x00084a8c mov r3, r0                                        |     r3 = r0;
    0x00084a8e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084a90 bne.w 0x84972                                     |         goto label_0;
                                                                 |     }
    0x00084a94 mov r0, r6                                        |     r0 = r6;
    0x00084a96 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00084a9a ldr r0, [pc, 0x16c]                               |     
    0x00084a9c mov r3, r8                                        |     r3 = r8;
    0x00084a9e mov r2, r5                                        |     r2 = r5;
    0x00084aa0 mov r1, r8                                        |     r1 = r8;
    0x00084aa2 add r0, pc                                        |     r0 = 0x1096b0;
    0x00084aa4 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x00084aa8 mov r6, r0                                        |     r6 = r0;
    0x00084aaa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084aac beq 0x84b6a                                       |         goto label_13;
                                                                 |     }
    0x00084aae mov r2, r0                                        |     r2 = r0;
    0x00084ab0 mov r1, fp                                        |     r1 = fp;
    0x00084ab2 mov r0, r4                                        |     r0 = r4;
    0x00084ab4 bl 0x84784                                        |     r0 = fcn_00084784 (r0, r1, r2);
    0x00084ab8 mov r3, r0                                        |     r3 = r0;
    0x00084aba cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084abc bne.w 0x84972                                     |         goto label_0;
                                                                 |     }
    0x00084ac0 mov r0, r6                                        |     r0 = r6;
    0x00084ac2 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00084ac6 ldr r0, [pc, 0x144]                               |     
    0x00084ac8 mov r2, r5                                        |     r2 = r5;
    0x00084aca mov r1, r8                                        |     r1 = r8;
    0x00084acc add r0, pc                                        |     r0 = 0x1096de;
    0x00084ace blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x00084ad2 mov r6, r0                                        |     r6 = r0;
    0x00084ad4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084ad6 beq 0x84b6a                                       |         goto label_13;
                                                                 |     }
    0x00084ad8 mov r2, r0                                        |     r2 = r0;
    0x00084ada mov r1, fp                                        |     r1 = fp;
    0x00084adc mov r0, r4                                        |     r0 = r4;
    0x00084ade bl 0x846c0                                        |     r0 = fcn_000846c0 (r0, r1, r2);
    0x00084ae2 mov r3, r0                                        |     r3 = r0;
    0x00084ae4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084ae6 bne.w 0x84972                                     |         goto label_0;
                                                                 |     }
    0x00084aea str r0, [sp, 4]                                   |     var_4h = r0;
    0x00084aec mov r0, r6                                        |     r0 = r6;
    0x00084aee blx 0x9c24                                        |     fcn_00009c24 ();
    0x00084af2 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00084af4 ldr r2, [pc, 0x118]                               |     
    0x00084af6 vstr d10, [r4, 0x20]                              |     __asm ("vstr d10, [r4, 0x20]");
    0x00084afa strb.w r3, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r3;
    0x00084afe ldr r3, [pc, 0xdc]                                |     r3 = *(0x84bde);
    0x00084b00 add r2, pc                                        |     r2 = 0x109714;
    0x00084b02 str.w sl, [r4, 0x18]                              |     __asm ("str.w sl, [r4, 0x18]");
    0x00084b06 vstr d8, [r4, 0x68]                               |     __asm ("vstr d8, [r4, 0x68]");
    0x00084b0a vstr d9, [r4, 0x70]                               |     __asm ("vstr d9, [r4, 0x70]");
    0x00084b0e strb.w sb, [r4, 0x5e]                             |     *((r4 + 0x5e)) = sb;
    0x00084b12 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00084b14 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00084b16 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00084b18 eors r2, r3                                       |     r2 ^= r3;
    0x00084b1a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00084b1e bne 0x84bd4                                       |         goto label_16;
                                                                 |     }
    0x00084b20 add sp, 0x14                                      |     
    0x00084b22 vpop {d8, d9, d10}                                |     __asm ("vpop {d8, d9, d10}");
    0x00084b26 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_10:
    0x00084b2a ldr r0, [pc, 0xe8]                                |     
    0x00084b2c add r0, pc                                        |     r0 = 0x109746;
    0x00084b2e blx 0x97f0                                        |     fcn_000097f0 ();
    0x00084b32 b 0x849dc                                         |     goto label_1;
                                                                 | label_15:
    0x00084b34 cmp r3, 0x65                                      |     
                                                                 |     if (r3 == 0x65) {
    0x00084b36 beq 0x84bce                                       |         goto label_17;
                                                                 |     }
    0x00084b38 cmp.w r3, 0x204                                   |     
                                                                 |     if (r3 != 0x204) {
    0x00084b3c bne 0x84b82                                       |         goto label_18;
                                                                 |     }
    0x00084b3e ldr r1, [pc, 0xd8]                                |     
    0x00084b40 add r1, pc                                        |     r1 = 0x10975e;
                                                                 |     do {
                                                                 | label_8:
    0x00084b42 ldr r2, [pc, 0xd8]                                |         
    0x00084b44 ldr r3, [pc, 0x94]                                |         r3 = *(0x84bdc);
    0x00084b46 add r2, pc                                        |         r2 = 0x109768;
    0x00084b48 ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x00084b4a ldr r2, [r3]                                      |         r2 = imp.atan;
    0x00084b4c ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00084b4e eors r2, r3                                       |         r2 ^= r3;
    0x00084b50 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00084b54 bne 0x84bd4                                       |             goto label_16;
                                                                 |         }
    0x00084b56 mov.w r2, -1                                      |         r2 = -1;
    0x00084b5a mov r0, r7                                        |         r0 = r7;
    0x00084b5c add sp, 0x14                                      |         
    0x00084b5e vpop {d8, d9, d10}                                |         __asm ("vpop {d8, d9, d10}");
    0x00084b62 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00084b66 b.w 0x9ea4                                        |         goto label_2;
                                                                 | label_13:
    0x00084b6a movs r3, 7                                        |         r3 = 7;
    0x00084b6c b 0x849e0                                         |         goto label_3;
                                                                 | label_11:
    0x00084b6e ldr r0, [r6, 4]                                   |         r0 = *((r6 + 4));
    0x00084b70 blx 0x9bd8                                        |         r0 = fcn_00009bd8 ();
    0x00084b74 cmp r0, 5                                         |         
                                                                 |         if (r0 == 5) {
    0x00084b76 beq 0x84b98                                       |             goto label_19;
                                                                 |         }
    0x00084b78 ldr r0, [r6, 4]                                   |         r0 = *((r6 + 4));
    0x00084b7a blx 0x9688                                        |         r0 = fcn_00009688 ();
    0x00084b7e mov r5, r0                                        |         r5 = r0;
    0x00084b80 b 0x848f2                                         |         goto label_4;
                                                                 | label_18:
    0x00084b82 cmp r3, 0x64                                      |         
                                                                 |         if (r3 != 0x64) {
    0x00084b84 bne 0x84bc4                                       |             goto label_20;
                                                                 |         }
    0x00084b86 ldr r1, [pc, 0x98]                                |         
    0x00084b88 add r1, pc                                        |         r1 = 0x1097ae;
    0x00084b8a b 0x84b42                                         |         
                                                                 |     } while (1);
                                                                 | label_12:
    0x00084b8c ldr r0, [pc, 0x94]                                |     
    0x00084b8e mov r1, r8                                        |     r1 = r8;
    0x00084b90 add r0, pc                                        |     r0 = 0x1097b8;
    0x00084b92 blx 0x97f0                                        |     fcn_000097f0 ();
    0x00084b96 b 0x849dc                                         |     goto label_1;
                                                                 | label_19:
    0x00084b98 ldr r0, [pc, 0x8c]                                |     
    0x00084b9a add r0, pc                                        |     r0 = 0x1097c6;
    0x00084b9c blx 0x97f0                                        |     fcn_000097f0 ();
    0x00084ba0 movs r3, 1                                        |     r3 = 1;
    0x00084ba2 mov r5, r0                                        |     r5 = r0;
    0x00084ba4 vstr d10, [r4, 0x20]                              |     __asm ("vstr d10, [r4, 0x20]");
    0x00084ba8 strb.w fp, [r4, 0xb0]                             |     *((r4 + 0xb0)) = fp;
    0x00084bac str.w sl, [r4, 0x18]                              |     __asm ("str.w sl, [r4, 0x18]");
    0x00084bb0 str r0, [sp, 8]                                   |     var_8h = r0;
    0x00084bb2 vstr d8, [r4, 0x68]                               |     __asm ("vstr d8, [r4, 0x68]");
    0x00084bb4 ldrh r2, [r3, 0x18]                               |     r2 = *((r3 + 0x18));
    0x00084bb6 vstr d9, [r4, 0x70]                               |     __asm ("vstr d9, [r4, 0x70]");
    0x00084bba strb.w sb, [r4, 0x5e]                             |     *((r4 + 0x5e)) = sb;
    0x00084bbe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084bc0 bne.w 0x8499e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_20:
    0x00084bc4 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00084bc6 cmp r3, 0x1c                                      |     
                                                                 |     if (r3 <= 0x1c) {
    0x00084bc8 ble.w 0x84a00                                     |         goto label_6;
                                                                 |     }
    0x00084bcc b 0x84a12                                         |     goto label_7;
                                                                 | label_17:
    0x00084bce ldr r1, [pc, 0x5c]                                |     
    0x00084bd0 add r1, pc                                        |     r1 = 0x109802;
    0x00084bd2 b 0x84b42                                         |     goto label_8;
                                                                 | label_16:
    0x00084bd4 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00084bd8 stm r2!, {r1, r3, r5, r6}                         |     *(r2!) = r1;
                                                                 |     *((r2! + 4)) = r3;
                                                                 |     *((r2! + 8)) = r5;
                                                                 |     *((r2! + 12)) = r6;
    0x00084bda movs r1, r0                                       |     r1 = r0;
    0x00084bdc lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00084bde movs r0, r0                                       |     
    0x00084be0 strh r4, [r4, 0x2c]                               |     *((r4 + 0x2c)) = r4;
    0x00084be2 movs r0, r0                                       |     
    0x00084be4 strh r2, [r0, 0x2c]                               |     *((r0 + 0x2c)) = r2;
    0x00084be6 movs r0, r0                                       |     
    0x00084be8 ssat r0, 1, ip                                    |     __asm ("ssat r0, 1, ip");
    0x00084bec stm r1!, {r1, r4, r6}                             |     *(r1!) = r1;
                                                                 |     *((r1! + 4)) = r4;
                                                                 |     *((r1! + 8)) = r6;
    0x00084bee movs r1, r0                                       |     r1 = r0;
    0x00084bf0 addw r0, sl, 0                                    |     __asm ("addw r0, sl, 0");
    0x00084bf4 add r5, sp, 0x1a8                                 |     r5 += arg_1a8h;
    0x00084bf6 movs r1, r0                                       |     r1 = r0;
    0x00084bf8 strh r4, [r3, 0x22]                               |     *((r3 + 0x22)) = r4;
    0x00084bfa movs r0, r0                                       |     
    0x00084bfc invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5070c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.sqlite3_backup_step ()                           | void sqlite3_backup_step (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_5h;
                                                                 |     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;
                                                                 |     arithmetic x;
                                                                 |     int32_t var_30h_2;
                                                                 |     int16_t var_3ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0005070c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00050710 mov r7, r1                                        |     r7 = r1;
    0x00050712 ldr.w r1, [pc, 0x698]                             |     
    0x00050716 sub sp, 0x44                                      |     
    0x00050718 mov r5, r0                                        |     r5 = r0;
    0x0005071a ldr.w r2, [pc, 0x694]                             |     r2 = *(0x50db2);
    0x0005071e ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x00050720 add r1, pc                                        |     r1 = 0xa14d2;
    0x00050722 ldr r2, [r1, r2]                                  |     
    0x00050724 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00050726 ldr r2, [r2]                                      |     r2 = imp.atan;
    0x00050728 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x0005072a mov.w r2, 0                                       |     r2 = 0;
    0x0005072e blx 0xa12c                                        |     fcn_0000a12c ();
    0x00050732 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050734 ldrb r3, [r0, 9]                                  |     r3 = *((r0 + 9));
                                                                 |     if (r3 != 0) {
    0x00050736 cbz r3, 0x50746                                   |         
    0x00050738 ldr r3, [r0, 0xc]                                 |         r3 = *((r0 + 0xc));
    0x0005073a ldrb r2, [r0, 0xa]                                |         r2 = *((r0 + 0xa));
    0x0005073c adds r3, 1                                        |         r3++;
    0x0005073e str r3, [r0, 0xc]                                 |         *((r0 + 0xc)) = r3;
    0x00050740 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00050742 beq.w 0x508d4                                     |             goto label_29;
                                                                 |         }
                                                                 |     }
    0x00050746 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00050748 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005074a beq.w 0x508e0                                     |         goto label_30;
                                                                 |     }
                                                                 | label_2:
    0x0005074e ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00050750 blx 0xa12c                                        |     fcn_0000a12c ();
    0x00050754 ldr.w fp, [r5, 0x1c]                              |     fp = *((r5 + 0x1c));
    0x00050758 sub.w r2, fp, 5                                   |     r2 = fp - 5;
    0x0005075c cmp.w fp, 0                                       |     
    0x00050760 it ne                                             |     
                                                                 |     if (fp != 0) {
    0x00050762 cmpne r2, 1                                       |         __asm ("cmpne r2, 1");
                                                                 |     }
    0x00050764 ite hi                                            |     
                                                                 |     if (fp <= 0) {
    0x00050766 movhi r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (fp > 0) {
    0x00050768 movls r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (fp > 0) {
    0x0005076a bhi.w 0x50890                                     |         goto label_31;
                                                                 |     }
    0x0005076e ldrd r3, r0, [r5]                                 |     __asm ("ldrd r3, r0, [r5]");
    0x00050772 ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x00050774 ldr r6, [r0, 4]                                   |     r6 = *((r0 + 4));
    0x00050776 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00050778 ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x0005077a ldr r3, [r6]                                      |     r3 = *(r6);
    0x0005077c ldr.w r8, [r4]                                    |     r8 = *(r4);
    0x00050780 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00050782 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
                                                                 |     if (r3 != 0) {
    0x00050784 cbz r3, 0x5078e                                   |         
    0x00050786 ldrb r3, [r4, 0x14]                               |         r3 = *((r4 + 0x14));
    0x00050788 cmp r3, 2                                         |         
                                                                 |         if (r3 == 2) {
    0x0005078a beq.w 0x50a64                                     |             goto label_32;
                                                                 |         }
                                                                 |     }
    0x0005078e ldrb r2, [r1, 8]                                  |     r2 = *((r1 + 8));
    0x00050790 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00050792 beq.w 0x5090a                                     |         goto label_33;
                                                                 |     }
                                                                 | label_4:
    0x00050796 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00050798 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0005079a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005079c beq.w 0x50928                                     |         goto label_34;
                                                                 |     }
    0x000507a0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000507a2 movs r2, 0                                        |     r2 = 0;
    0x000507a4 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_13:
    0x000507a6 ldrb r3, [r3, 5]                                  |     r3 = *((r3 + 5));
    0x000507a8 ldr r2, [r6, 0x24]                                |     r2 = *((r6 + 0x24));
    0x000507aa ldr r0, [r4, 0x24]                                |     r0 = *((r4 + 0x24));
    0x000507ac cmp r3, 5                                         |     
    0x000507ae str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x000507b0 str r0, [sp, 0x20]                                |     var_20h = r0;
                                                                 |     if (r3 != 5) {
    0x000507b2 bne.w 0x50d78                                     |         goto label_35;
                                                                 |     }
    0x000507b6 subs r3, r2, r0                                   |     r3 = r2 - r0;
    0x000507b8 it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x000507ba movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000507bc lsl.w fp, r3, 3                                   |     
    0x000507c0 movs r3, 1                                        |     r3 = 1;
    0x000507c2 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_5:
    0x000507c4 ldr.w sl, [r4, 0x30]                              |     sl = *((r4 + 0x30));
    0x000507c8 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000507ca beq 0x5084c                                       |         goto label_36;
                                                                 |     }
                                                                 | label_27:
    0x000507cc ldr r4, [r5, 0x10]                                |     r4 = *((r5 + 0x10));
    0x000507ce cmp sl, r4                                        |     
    0x000507d0 it hs                                             |     
                                                                 |     if (sl >= r4) {
    0x000507d2 cmphs fp, 0                                       |         __asm ("cmphs fp, 0");
                                                                 |     }
                                                                 |     if (sl != r4) {
    0x000507d6 bne 0x5084c                                       |         goto label_36;
                                                                 |     }
    0x000507d8 ldr.w sb, [pc, 0x5d8]                             |     
    0x000507dc add r3, sp, 0x30                                  |     r3 += x;
    0x000507de movs r6, 0                                        |     r6 = 0;
    0x000507e0 mov fp, r3                                        |     
    0x000507e2 str r7, [sp, 0xc]                                 |     var_ch = r7;
    0x000507e4 add sb, pc                                        |     sb = 0xa159c;
    0x000507e6 b 0x50800                                         |     goto label_37;
                                                                 | label_0:
    0x000507e8 ldr r4, [r5, 0x10]                                |     r4 = *((r5 + 0x10));
                                                                 |     do {
                                                                 | label_1:
    0x000507ea ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x000507ec adds r6, 1                                        |         r6++;
    0x000507ee adds r4, 1                                        |         r4++;
    0x000507f0 str r4, [r5, 0x10]                                |         *((r5 + 0x10)) = r4;
    0x000507f2 cmp r2, r6                                        |         
                                                                 |         if (r2 == r6) {
    0x000507f4 beq 0x5084a                                       |             goto label_38;
                                                                 |         }
    0x000507f6 cmp r4, sl                                        |         
    0x000507f8 it ls                                             |         
                                                                 |         if (r4 <= sl) {
    0x000507fa cmpls r3, 0                                       |             __asm ("cmpls r3, 0");
                                                                 |         }
                                                                 |         if (r4 != sl) {
    0x000507fc bne 0x5084a                                       |             goto label_38;
                                                                 |         }
    0x000507fe ldr r1, [r5, 0x18]                                |         r1 = *((r5 + 0x18));
                                                                 | label_37:
    0x00050800 ldr r3, [r1, 4]                                   |         r3 = *((r1 + 4));
    0x00050802 ldr.w r0, [sb, 0x118]                             |         r0 = *((sb + 0x118));
    0x00050806 ldr r1, [r3, 0x24]                                |         r1 = *((r3 + 0x24));
    0x00050808 bl 0x8bf90                                        |         fcn_0008bf90 (r0, r1, r2);
    0x0005080c adds r0, 1                                        |         r0++;
    0x0005080e cmp r0, r4                                        |         
    0x00050810 it eq                                             |         
                                                                 |         if (r0 != r4) {
    0x00050812 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00050814 beq 0x507ea                                       |         
                                                                 |     } while (r0 == r4);
    0x00050816 movs r3, 2                                        |     r3 = 2;
    0x00050818 ldr.w r7, [r8, 0xdc]                              |     r7 = *((r8 + 0xdc));
    0x0005081c mov r2, fp                                        |     r2 = fp;
    0x0005081e mov r1, r4                                        |     r1 = r4;
    0x00050820 mov r0, r8                                        |     r0 = r8;
    0x00050822 blx r7                                            |     r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00050824 mov r3, r0                                        |     r3 = r0;
    0x00050826 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050828 bne 0x507e8                                       |         goto label_0;
                                                                 |     }
    0x0005082a ldr r2, [sp, 0x30]                                |     r2 = x;
    0x0005082c mov r1, r4                                        |     r1 = r4;
    0x0005082e mov r0, r5                                        |     r0 = r5;
    0x00050830 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00050832 bl 0x481c8                                        |     r0 = fcn_000481c8 (r0, r1, r2, r3);
    0x00050836 mov r3, r0                                        |     r3 = r0;
    0x00050838 ldr r0, [sp, 0x30]                                |     r0 = x;
    0x0005083a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005083c beq 0x507e8                                       |         goto label_0;
                                                                 |     }
    0x0005083e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00050840 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x00050844 ldr r4, [r5, 0x10]                                |     r4 = *((r5 + 0x10));
    0x00050846 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00050848 b 0x507ea                                         |     goto label_1;
                                                                 | label_38:
    0x0005084a mov fp, r3                                        |     
                                                                 | label_36:
    0x0005084c cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00050850 bne.w 0x5097e                                     |         goto label_39;
                                                                 |     }
                                                                 | label_28:
    0x00050854 ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x00050856 str.w sl, [r5, 0x24]                              |     __asm ("str.w sl, [r5, 0x24]");
    0x0005085a rsb.w r3, r1, 1                                   |     r3 = 1 - r1;
    0x0005085e cmp r1, sl                                        |     
    0x00050860 add r3, sl                                        |     r3 += sl;
    0x00050862 str r3, [r5, 0x20]                                |     *((r5 + 0x20)) = r3;
                                                                 |     if (r1 > sl) {
    0x00050864 bhi.w 0x50984                                     |         goto label_40;
                                                                 |     }
    0x00050868 ldr r4, [r5, 0x28]                                |     r4 = *((r5 + 0x28));
    0x0005086a cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0005086c bne.w 0x50ac0                                     |         goto label_41;
                                                                 |     }
    0x00050870 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050872 movs r2, 1                                        |     r2 = 1;
    0x00050874 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x00050876 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00050878 ldr r1, [r3, 0x60]                                |     r1 = *((r3 + 0x60));
    0x0005087a str r1, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r1;
    0x0005087c str r5, [r3, 0x60]                                |     *((r3 + 0x60)) = r5;
    0x0005087e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00050880 str r2, [r5, 0x28]                                |     *((r5 + 0x28)) = r2;
    0x00050882 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050884 bne.w 0x50b56                                     |         goto label_42;
                                                                 |     }
                                                                 | label_11:
    0x00050888 mov.w fp, 0                                       |     
                                                                 | label_7:
    0x0005088c str.w fp, [r5, 0x1c]                              |     __asm ("str.w fp, [r5, 0x1c]");
                                                                 | label_31:
    0x00050890 ldr r2, [r5]                                      |     r2 = *(r5);
                                                                 |     if (r2 != 0) {
    0x00050892 cbz r2, 0x5089a                                   |         
    0x00050894 ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x00050896 blx 0x9d10                                        |         fcn_00009d10 ();
                                                                 |     }
                                                                 | label_3:
    0x0005089a ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x0005089c ldrb r2, [r0, 9]                                  |     r2 = *((r0 + 9));
                                                                 |     if (r2 != 0) {
    0x0005089e cbz r2, 0x508aa                                   |         
    0x000508a0 ldr r2, [r0, 0xc]                                 |         r2 = *((r0 + 0xc));
    0x000508a2 subs r2, 1                                        |         r2--;
    0x000508a4 str r2, [r0, 0xc]                                 |         *((r0 + 0xc)) = r2;
    0x000508a6 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000508a8 beq 0x50978                                       |             goto label_43;
                                                                 |         }
                                                                 |     }
                                                                 | label_6:
    0x000508aa ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x000508ac ldr r0, [r2, 0xc]                                 |     r0 = *((r2 + 0xc));
    0x000508ae blx 0x9d10                                        |     fcn_00009d10 ();
    0x000508b2 ldr.w r1, [pc, 0x504]                             |     r1 = *(0x00050db8);
    0x000508b6 ldr.w r2, [pc, 0x4f8]                             |     r2 = *(0x50db2);
    0x000508ba add r1, pc                                        |     r1 += pc;
    0x000508bc ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x000508be ldr r1, [r2]                                      |     r1 = *(0x50db2);
    0x000508c0 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x000508c2 eors r1, r2                                       |     r1 ^= r2;
    0x000508c4 mov.w r2, 0                                       |     r2 = 0;
                                                                 |     if (r1 != r2) {
    0x000508c8 bne.w 0x50d5e                                     |         goto label_44;
                                                                 |     }
    0x000508cc mov r0, fp                                        |     r0 = fp;
    0x000508ce add sp, 0x44                                      |     
    0x000508d0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_29:
    0x000508d4 bl 0x11258                                        |     fcn_00011258 (r0);
    0x000508d8 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000508da cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000508dc bne.w 0x5074e                                     |         goto label_2;
                                                                 |     }
                                                                 | label_30:
    0x000508e0 ldr.w fp, [r5, 0x1c]                              |     fp = *((r5 + 0x1c));
    0x000508e4 sub.w r2, fp, 5                                   |     r2 = fp - 5;
    0x000508e8 cmp.w fp, 0                                       |     
    0x000508ec it ne                                             |     
                                                                 |     if (fp == 0) {
    0x000508ee cmpne r2, 1                                       |         __asm ("cmpne r2, 1");
                                                                 |         goto label_45;
                                                                 |     }
                                                                 |     if (fp > 0) {
                                                                 | label_45:
    0x000508f0 bhi 0x5089a                                       |         goto label_3;
                                                                 |     }
    0x000508f2 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x000508f4 ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x000508f6 ldr r6, [r0, 4]                                   |     r6 = *((r0 + 4));
    0x000508f8 ldrb r2, [r1, 8]                                  |     r2 = *((r1 + 8));
    0x000508fa ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x000508fc ldr r3, [r6]                                      |     r3 = *(r6);
    0x000508fe ldr.w r8, [r4]                                    |     r8 = *(r4);
    0x00050902 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00050904 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00050906 bne.w 0x50796                                     |         goto label_4;
                                                                 |     }
                                                                 | label_33:
    0x0005090a mov r0, r1                                        |     r0 = r1;
    0x0005090c mov r1, r2                                        |     r1 = r2;
    0x0005090e bl 0x4b890                                        |     fcn_0004b890 (r0, r1, r2, r3);
    0x00050912 ldr r2, [r5, 0xc]                                 |     r2 = *((r5 + 0xc));
    0x00050914 mov fp, r0                                        |     
    0x00050916 orrs.w r1, r2, r0                                 |     r1 = r2 | r0;
                                                                 |     if (r1 != r2) {
    0x0005091a bne.w 0x50aac                                     |         goto label_46;
                                                                 |     }
    0x0005091e ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00050920 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x00050922 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x00050924 movs r3, 1                                        |     r3 = 1;
    0x00050926 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_34:
    0x00050928 movs r3, 0                                        |     r3 = 0;
    0x0005092a ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x0005092c mov r2, r3                                        |     r2 = r3;
    0x0005092e bl 0x19d84                                        |     r0 = fcn_00019d84 (r0, r1, r2, r3);
    0x00050932 cmp r0, 7                                         |     
    0x00050934 mov fp, r0                                        |     
                                                                 |     if (r0 != 7) {
    0x00050936 beq 0x50956                                       |         
    0x00050938 ldr r2, [r5, 0xc]                                 |         r2 = *((r5 + 0xc));
    0x0005093a ldr r6, [r5, 4]                                   |         r6 = *((r5 + 4));
                                                                 | label_19:
    0x0005093c cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0005093e bne.w 0x50b6c                                     |             goto label_47;
                                                                 |         }
    0x00050942 mov r0, r6                                        |         r0 = r6;
    0x00050944 add.w r2, r5, 8                                   |         r2 = r5 + 8;
    0x00050948 movs r1, 2                                        |         r1 = 2;
    0x0005094a bl 0x4b890                                        |         r0 = fcn_0004b890 (r0, r1, r2, r3);
    0x0005094e mov fp, r0                                        |         
    0x00050950 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00050952 beq.w 0x50af2                                     |             goto label_48;
                                                                 |         }
                                                                 |     }
    0x00050956 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00050958 ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x0005095a ldr r6, [r2, 4]                                   |     r6 = *((r2 + 4));
    0x0005095c ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x0005095e ldr r2, [r6]                                      |     r2 = *(r6);
                                                                 | label_8:
    0x00050960 ldr r3, [r6, 0x24]                                |     r3 = *((r6 + 0x24));
    0x00050962 ldrb r2, [r2, 5]                                  |     r2 = *((r2 + 5));
    0x00050964 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00050966 sub.w r3, r2, 5                                   |     r3 = r2 - 5;
    0x0005096a clz r3, r3                                        |     r3 &= r3;
    0x0005096e lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00050970 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00050972 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00050974 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00050976 b 0x507c4                                         |     goto label_5;
                                                                 | label_43:
    0x00050978 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0005097c b 0x508aa                                         |     goto label_6;
                                                                 | label_39:
    0x0005097e cmp.w fp, 0x65                                    |     
                                                                 |     if (fp == 0x65) {
    0x00050982 bne 0x50a42                                       |         
                                                                 | label_40:
    0x00050984 ldr r6, [r5, 4]                                   |         r6 = *((r5 + 4));
    0x00050986 cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x0005098a beq 0x50a6e                                       |             goto label_49;
                                                                 |         }
                                                                 | label_10:
    0x0005098c ldr r2, [r5, 8]                                   |         r2 = *((r5 + 8));
    0x0005098e mov r0, r6                                        |         r0 = r6;
    0x00050990 movs r1, 1                                        |         r1 = 1;
    0x00050992 adds r2, 1                                        |         r2++;
    0x00050994 bl 0x4bfa0                                        |         r0 = fcn_0004bfa0 (r0, r1, r2);
    0x00050998 mov fp, r0                                        |         
    0x0005099a cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0005099c bne 0x50a42                                       |             goto label_9;
                                                                 |         }
    0x0005099e ldr r0, [r5]                                      |         r0 = *(r5);
                                                                 |         if (r0 != 0) {
    0x000509a0 cbz r0, 0x509a6                                   |             
    0x000509a2 bl 0x1741c                                        |             fcn_0001741c (r0);
                                                                 |         }
    0x000509a6 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x000509a8 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000509aa bne.w 0x50b3e                                     |             goto label_50;
                                                                 |         }
                                                                 | label_18:
    0x000509ae ldrd r2, r3, [sp, 0x1c]                           |         __asm ("ldrd r2, r3, [var_1ch]");
    0x000509b2 cmp r3, r2                                        |         
                                                                 |         if (r3 >= r2) {
    0x000509b4 bge.w 0x50b76                                     |             goto label_51;
                                                                 |         }
    0x000509b8 ldr r4, [sp, 0x20]                                |         r4 = var_20h;
    0x000509ba ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x000509bc mov r1, r4                                        |         r1 = r4;
    0x000509be bl 0x8c208                                        |         fcn_0008c208 (r0, r1);
    0x000509c2 asrs r3, r4, 0x1f                                 |         r3 = r4 >> 0x1f;
    0x000509c4 mov r1, r0                                        |         r1 = r0;
    0x000509c6 add r0, sl                                        |         r0 += sl;
    0x000509c8 subs r0, 1                                        |         r0--;
    0x000509ca str r3, [sp, 0x14]                                |         var_14h = r3;
    0x000509cc bl 0x8c208                                        |         fcn_0008c208 (r0, r1);
    0x000509d0 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x000509d2 mov r6, r0                                        |         r6 = r0;
    0x000509d4 smull r0, r2, r4, sl                              |         r0:r2 = r4 * sl;
    0x000509d8 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x000509da ldr r1, [r3, 0x24]                                |         r1 = *((r3 + 0x24));
    0x000509dc ldr r3, [pc, 0x3dc]                               |         
    0x000509de str r0, [sp, 0x24]                                |         var_24h = r0;
    0x000509e0 str r2, [sp, 0x28]                                |         var_28h = r2;
    0x000509e2 add r3, pc                                        |         
    0x000509e4 str r1, [sp, 0x2c]                                |         var_2ch = r1;
    0x000509e6 ldr.w r3, [r3, 0x118]                             |         r3 = imp.atan;
    0x000509ea mov r0, r3                                        |         r0 = r3;
    0x000509ec str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x000509ee bl 0x8bf90                                        |         fcn_0008bf90 (r0, r1, r2);
    0x000509f2 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000509f4 adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x000509f6 cmp r2, r6                                        |         
    0x000509f8 ite ne                                            |         
                                                                 |         if (r2 == r6) {
    0x000509fa movne sb, r6                                      |             sb = r6;
                                                                 |         }
                                                                 |         if (r2 != r6) {
    0x000509fc moveq sb, r0                                      |             sb = r0;
                                                                 |         }
    0x000509fe ldr.w sl, [r3, 0x1c]                              |         sl = *(0xa18d6);
    0x00050a02 ldr r4, [r3, 0x40]                                |         r4 = *(0xa18fa);
    0x00050a04 cmp sb, sl                                        |         
                                                                 |         if (sb > sl) {
    0x00050a06 bhi.w 0x50bea                                     |             goto label_52;
                                                                 |         }
    0x00050a0a ldr r6, [pc, 0x3b4]                               |         
    0x00050a0c mov fp, r4                                        |         
    0x00050a0e mov r4, r3                                        |         r4 = r3;
    0x00050a10 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00050a12 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x00050a14 add r7, sp, 0x30                                  |         r7 += x;
    0x00050a16 add r6, pc                                        |         r6 = 0xa17dc;
    0x00050a18 str r7, [sp, 0xc]                                 |         var_ch = r7;
    0x00050a1a mov r0, r3                                        |         r0 = r3;
                                                                 | label_16:
    0x00050a1c bl 0x8bf90                                        |         fcn_0008bf90 (r0, r1, r2);
    0x00050a20 adds r0, 1                                        |         r0++;
    0x00050a22 cmp r0, sb                                        |         
    0x00050a24 it eq                                             |         
                                                                 |         if (r0 != sb) {
    0x00050a26 addeq sb, sb, 1                                   |             sb++;
                                                                 |         }
                                                                 |         if (r0 == sb) {
    0x00050a2a beq 0x50b26                                       |             goto label_53;
                                                                 |         }
    0x00050a2c movs r3, 0                                        |         r3 = 0;
    0x00050a2e ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x00050a30 ldr.w r7, [r4, 0xdc]                              |         r7 = *((r4 + 0xdc));
    0x00050a34 mov r1, sb                                        |         r1 = sb;
    0x00050a36 mov r0, r4                                        |         r0 = r4;
    0x00050a38 blx r7                                            |         r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00050a3a mov r3, r0                                        |         r3 = r0;
    0x00050a3c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00050a3e beq 0x50b0a                                       |             goto label_54;
                                                                 |         }
                                                                 | label_15:
    0x00050a40 mov fp, r3                                        |         
                                                                 |     }
                                                                 | label_9:
    0x00050a42 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00050a44 cbnz r3, 0x50a54                                  |     
                                                                 |     while (1) {
    0x00050a46 movw r2, 0xc0a                                    |         r2 = 0xc0a;
    0x00050a4a cmp fp, r2                                        |         
    0x00050a4c it eq                                             |         
                                                                 |         if (fp != r2) {
    0x00050a4e moveq fp, 7                                       |             
                                                                 |         }
    0x00050a52 b 0x5088c                                         |         goto label_7;
    0x00050a54 ldr r0, [r5, 0x18]                                |         r0 = *((r5 + 0x18));
    0x00050a56 ldrb r2, [r0, 8]                                  |         r2 = *((r0 + 8));
    0x00050a58 cmp r2, 2                                         |         
                                                                 |         if (r2 == 2) {
    0x00050a5a beq 0x50ae8                                       |             goto label_55;
                                                                 |         }
                                                                 | label_12:
    0x00050a5c movs r1, 0                                        |         r1 = 0;
    0x00050a5e bl 0x4a6d0                                        |         fcn_0004a6d0 (r0, r1);
    0x00050a62 b 0x50a46                                         |         
                                                                 |     }
                                                                 | label_32:
    0x00050a64 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00050a66 mov.w fp, 5                                       |     
    0x00050a6a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00050a6c b 0x50960                                         |     goto label_8;
                                                                 | label_49:
    0x00050a6e ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
                                                                 |     if (r3 != 0) {
    0x00050a70 cbz r3, 0x50a7e                                   |         
    0x00050a72 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x00050a74 adds r3, 1                                        |         r3++;
    0x00050a76 str r3, [r6, 0xc]                                 |         *((r6 + 0xc)) = r3;
    0x00050a78 ldrb r3, [r6, 0xa]                                |         r3 = *((r6 + 0xa));
    0x00050a7a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00050a7c beq 0x50b02                                       |             goto label_56;
                                                                 |         }
                                                                 |     }
                                                                 | label_14:
    0x00050a7e ldr r0, [r6, 4]                                   |     r0 = *((r6 + 4));
    0x00050a80 movs r3, 0                                        |     r3 = 0;
    0x00050a82 str r3, [r0, 0x30]                                |     *((r0 + 0x30)) = r3;
    0x00050a84 bl 0x4b7fc                                        |     fcn_0004b7fc (r0);
    0x00050a88 ldrb r2, [r6, 9]                                  |     r2 = *((r6 + 9));
    0x00050a8a mov fp, r0                                        |     
                                                                 |     if (r2 != 0) {
    0x00050a8c cbz r2, 0x50a98                                   |         
    0x00050a8e ldr r2, [r6, 0xc]                                 |         r2 = *((r6 + 0xc));
    0x00050a90 subs r2, 1                                        |         r2--;
    0x00050a92 str r2, [r6, 0xc]                                 |         *((r6 + 0xc)) = r2;
    0x00050a94 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00050a96 beq 0x50b36                                       |             goto label_57;
                                                                 |         }
                                                                 |     }
                                                                 | label_17:
    0x00050a98 cmp.w fp, 0x65                                    |     
    0x00050a9c it ne                                             |     
                                                                 |     if (fp == 0x65) {
    0x00050a9e cmpne fp, 0                                       |         __asm ("cmpne fp, 0");
                                                                 |         goto label_58;
                                                                 |     }
                                                                 |     if (fp != 0x65) {
                                                                 | label_58:
    0x00050aa2 bne 0x50a42                                       |         goto label_9;
                                                                 |     }
    0x00050aa4 ldr r6, [r5, 4]                                   |     r6 = *((r5 + 4));
    0x00050aa6 mov.w sl, 1                                       |     sl = 1;
    0x00050aaa b 0x5098c                                         |     goto label_10;
                                                                 | label_46:
    0x00050aac ldr r6, [r5, 4]                                   |     r6 = *((r5 + 4));
    0x00050aae cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050ab0 beq 0x50b50                                       |         goto label_59;
                                                                 |     }
    0x00050ab2 ldr r6, [r6, 4]                                   |     r6 = *((r6 + 4));
    0x00050ab4 movs r3, 1                                        |     r3 = 1;
    0x00050ab6 ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x00050ab8 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00050aba ldr r2, [r6]                                      |     r2 = *(r6);
    0x00050abc ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x00050abe b 0x50960                                         |     goto label_8;
                                                                 | label_41:
    0x00050ac0 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00050ac2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050ac4 beq.w 0x50888                                     |         goto label_11;
                                                                 |     }
    0x00050ac8 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050aca movs r1, 0                                        |     r1 = 0;
    0x00050acc ldrb r3, [r0, 8]                                  |     r3 = *((r0 + 8));
    0x00050ace cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00050ad0 beq.w 0x50bda                                     |         goto label_60;
                                                                 |     }
                                                                 | label_20:
    0x00050ad4 bl 0x4a6d0                                        |     fcn_0004a6d0 (r0, r1);
    0x00050ad8 b 0x50888                                         |     goto label_11;
                                                                 | label_24:
    0x00050ada ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050adc ldrb r2, [r0, 8]                                  |     r2 = *((r0 + 8));
    0x00050ade cmp r2, 2                                         |     
                                                                 |     if (r2 != 2) {
    0x00050ae0 bne.w 0x50d70                                     |         goto label_61;
                                                                 |     }
    0x00050ae4 mov.w fp, 0xa                                     |     
                                                                 | label_55:
    0x00050ae8 movs r1, 0                                        |     r1 = 0;
    0x00050aea bl 0x503fc                                        |     fcn_000503fc (r0, r1, r2);
    0x00050aee ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050af0 b 0x50a5c                                         |     goto label_12;
                                                                 | label_48:
    0x00050af2 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00050af4 ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x00050af6 ldr r6, [r3, 4]                                   |     r6 = *((r3 + 4));
    0x00050af8 movs r3, 1                                        |     r3 = 1;
    0x00050afa str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x00050afc ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x00050afe ldr r3, [r6]                                      |     r3 = *(r6);
    0x00050b00 b 0x507a6                                         |     goto label_13;
                                                                 | label_56:
    0x00050b02 mov r0, r6                                        |     r0 = r6;
    0x00050b04 bl 0x11258                                        |     fcn_00011258 (r0);
    0x00050b08 b 0x50a7e                                         |     goto label_14;
                                                                 | label_54:
    0x00050b0a ldr r0, [sp, 0x30]                                |     r0 = x;
    0x00050b0c bl 0x4816c                                        |     r0 = fcn_0004816c (r0);
    0x00050b10 mov r3, r0                                        |     r3 = r0;
    0x00050b12 ldr r0, [sp, 0x30]                                |     r0 = x;
                                                                 |     if (r0 != 0) {
    0x00050b14 cbz r0, 0x50b1e                                   |         
    0x00050b16 str r3, [sp, 0x2c]                                |         var_2ch = r3;
    0x00050b18 bl 0x10f18                                        |         fcn_00010f18 (r0);
    0x00050b1c ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
                                                                 |     }
    0x00050b1e add.w sb, sb, 1                                   |     sb++;
    0x00050b22 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050b24 bne 0x50a40                                       |         goto label_15;
                                                                 |     }
                                                                 | label_53:
    0x00050b26 cmp sb, sl                                        |     
                                                                 |     if (sb > sl) {
    0x00050b28 bhi 0x50be8                                       |         goto label_62;
                                                                 |     }
    0x00050b2a ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00050b2c ldr.w r0, [r6, 0x118]                             |     r0 = *((r6 + 0x118));
    0x00050b30 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00050b32 ldr r1, [r3, 0x24]                                |     r1 = *((r3 + 0x24));
    0x00050b34 b 0x50a1c                                         |     goto label_16;
                                                                 | label_57:
    0x00050b36 mov r0, r6                                        |     r0 = r6;
    0x00050b38 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00050b3c b 0x50a98                                         |     goto label_17;
                                                                 | label_50:
    0x00050b3e ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x00050b40 movs r1, 2                                        |     r1 = 2;
    0x00050b42 bl 0x4c008                                        |     r0 = fcn_0004c008 (r0, r1);
    0x00050b46 mov fp, r0                                        |     
    0x00050b48 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050b4a bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050b4e b 0x509ae                                         |     goto label_18;
                                                                 | label_59:
    0x00050b50 movs r3, 1                                        |     r3 = 1;
    0x00050b52 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00050b54 b 0x5093c                                         |     goto label_19;
                                                                 | label_42:
    0x00050b56 ldrb r3, [r0, 8]                                  |     r3 = *((r0 + 8));
    0x00050b58 mov r1, r4                                        |     r1 = r4;
    0x00050b5a cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x00050b5c bne 0x50ad4                                       |         goto label_20;
                                                                 |     }
    0x00050b5e bl 0x503fc                                        |     fcn_000503fc (r0, r1, r2);
    0x00050b62 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050b64 mov r1, r4                                        |     r1 = r4;
    0x00050b66 bl 0x4a6d0                                        |     fcn_0004a6d0 (r0, r1);
    0x00050b6a b 0x50888                                         |     goto label_11;
                                                                 | label_47:
    0x00050b6c ldr r6, [r6, 4]                                   |     r6 = *((r6 + 4));
    0x00050b6e ldr r1, [r5, 0x18]                                |     r1 = *((r5 + 0x18));
    0x00050b70 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00050b72 ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x00050b74 b 0x507a6                                         |     goto label_13;
                                                                 | label_51:
    0x00050b76 ldrd r1, r0, [sp, 0x1c]                           |     __asm ("ldrd r1, r0, [var_1ch]");
    0x00050b7a bl 0x8c208                                        |     fcn_0008c208 (r0, r1);
    0x00050b7e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00050b80 mul r0, sl, r0                                    |     r0 = sl * r0;
    0x00050b84 ldr.w fp, [r3, 0x2c]                              |     fp = *((r3 + 0x2c));
    0x00050b88 str r0, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r0;
    0x00050b8a cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00050b8e bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050b92 ldr r2, [pc, 0x230]                               |     
    0x00050b94 add r2, pc                                        |     
    0x00050b96 ldr.w r2, [r2, 0x100]                             |     r2 = *(0xa1a5e);
                                                                 |     if (r2 != 0) {
    0x00050b9a cbz r2, 0x50ba8                                   |         
    0x00050b9c mov.w r0, 0x190                                   |         r0 = 0x190;
    0x00050ba0 blx r2                                            |         r0 = uint32_t (*r2)(uint32_t) (r0);
    0x00050ba2 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00050ba4 bne.w 0x50d62                                     |             goto label_63;
                                                                 |         }
                                                                 |     }
    0x00050ba8 movs r2, 0                                        |     r2 = 0;
    0x00050baa ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00050bac mov r1, r2                                        |     r1 = r2;
    0x00050bae bl 0x4f504                                        |     r0 = fcn_0004f504 (r0, r1, r2, r3);
    0x00050bb2 mov fp, r0                                        |     
                                                                 | label_21:
    0x00050bb4 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00050bb8 bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050bbc mov r1, fp                                        |     r1 = fp;
    0x00050bbe ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x00050bc0 bl 0x4a6d0                                        |     r0 = fcn_0004a6d0 (r0, r1);
    0x00050bc4 mov fp, r0                                        |     
    0x00050bc6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050bc8 bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050bcc ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00050bce cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050bd0 bne.w 0x50d4e                                     |         goto label_64;
                                                                 |     }
                                                                 | label_25:
    0x00050bd4 mov.w fp, 0x65                                    |     
    0x00050bd8 b 0x5088c                                         |     goto label_7;
                                                                 | label_60:
    0x00050bda bl 0x503fc                                        |     fcn_000503fc (r0, r1, r2);
    0x00050bde ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050be0 movs r1, 0                                        |     r1 = 0;
    0x00050be2 bl 0x4a6d0                                        |     fcn_0004a6d0 (r0, r1);
    0x00050be6 b 0x50888                                         |     goto label_11;
                                                                 | label_62:
    0x00050be8 mov r4, fp                                        |     r4 = fp;
                                                                 | label_52:
    0x00050bea ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00050bec ldr.w fp, [r3, 0x2c]                              |     fp = *((r3 + 0x2c));
    0x00050bf0 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00050bf4 bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050bf8 ldr r2, [pc, 0x1cc]                               |     
    0x00050bfa add r2, pc                                        |     
    0x00050bfc ldr.w r2, [r2, 0x100]                             |     r2 = *(0xa1ac6);
                                                                 |     if (r2 != 0) {
    0x00050c00 cbz r2, 0x50c0e                                   |         
    0x00050c02 mov.w r0, 0x190                                   |         r0 = 0x190;
    0x00050c06 blx r2                                            |         r0 = uint32_t (*r2)(uint32_t) (r0);
    0x00050c08 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00050c0a bne.w 0x50d40                                     |             goto label_65;
                                                                 |         }
                                                                 |     }
    0x00050c0e movs r2, 1                                        |     r2 = 1;
    0x00050c10 movs r1, 0                                        |     r1 = 0;
    0x00050c12 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00050c14 bl 0x4f504                                        |     fcn_0004f504 (r0, r1, r2, r3);
    0x00050c18 ldr r2, [pc, 0x1b0]                               |     
    0x00050c1a mov fp, r0                                        |     
    0x00050c1c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00050c1e ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x00050c20 add r2, pc                                        |     r2 = 0xa19f0;
    0x00050c22 ldr.w r1, [r2, 0x118]                             |     r1 = *(0xa1b08);
    0x00050c26 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00050c28 add r2, r1                                        |     r2 += r1;
    0x00050c2a asr.w ip, r2, 0x1f                                |     
    0x00050c2e cmp r3, r2                                        |     
    0x00050c30 sbcs.w r0, r6, ip                                 |     __asm ("sbcs.w r0, r6, ip");
    0x00050c34 it lt                                             |     
                                                                 |     if (r3 >= r2) {
    0x00050c36 movlt r2, r3                                      |         r2 = r3;
                                                                 |     }
    0x00050c38 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00050c3a it lt                                             |     
                                                                 |     if (r3 >= r2) {
    0x00050c3c movlt ip, r6                                      |         
                                                                 |     }
    0x00050c3e add.w sb, r1, r3                                  |     sb = r1 + r3;
    0x00050c42 asr.w sl, sb, 0x1f                                |     sl = sb >> 0x1f;
    0x00050c46 cmp sb, r2                                        |     
    0x00050c48 sbcs.w r1, sl, ip                                 |     __asm ("sbcs.w r1, sl, ip");
    0x00050c4c ite lt                                            |     
                                                                 |     if (sb >= r2) {
    0x00050c4e movlt r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (sb < r2) {
    0x00050c50 movge r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x00050c52 cmp.w fp, 0                                       |     
    0x00050c56 ite ne                                            |     
                                                                 |     if (fp == 0) {
    0x00050c58 movne r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (fp != 0) {
    0x00050c5a andeq r1, r1, 1                                   |         r1 &= 1;
                                                                 |     }
    0x00050c5e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00050c60 beq 0x50cda                                       |         goto label_22;
                                                                 |     }
    0x00050c62 add r7, sp, 0x30                                  |     r7 += x;
    0x00050c64 str r5, [sp, 0xc]                                 |     var_ch = r5;
    0x00050c66 mov fp, r7                                        |     
    0x00050c68 mov r7, sb                                        |     r7 = sb;
    0x00050c6a mov sb, r3                                        |     sb = r3;
    0x00050c6c ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x00050c6e str.w ip, [sp, 0x1c]                              |     __asm ("str.w ip, [var_1ch]");
    0x00050c72 str r2, [sp, 0x14]                                |     var_14h = r2;
                                                                 |     do {
    0x00050c74 movs r3, 0                                        |         r3 = 0;
    0x00050c76 mov r2, sb                                        |         r2 = sb;
    0x00050c78 str r3, [sp, 0x30]                                |         x = r3;
    0x00050c7a mov r0, r7                                        |         r0 = r7;
    0x00050c7c mov r3, r5                                        |         r3 = r5;
    0x00050c7e mov r1, sl                                        |         r1 = sl;
    0x00050c80 bl 0x8ca4c                                        |         fcn_0008ca4c (r0, r1, r2, r3);
    0x00050c84 ldr.w r6, [r8, 0xdc]                              |         r6 = *((r8 + 0xdc));
    0x00050c88 adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x00050c8a movs r3, 0                                        |         r3 = 0;
    0x00050c8c mov r2, fp                                        |         r2 = fp;
    0x00050c8e mov r0, r8                                        |         r0 = r8;
    0x00050c90 blx r6                                            |         r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00050c92 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00050c94 bne 0x50d24                                       |             goto label_66;
                                                                 |         }
    0x00050c96 ldr r3, [sp, 0x30]                                |         r3 = x;
    0x00050c98 mov r2, sb                                        |         r2 = sb;
    0x00050c9a mov r0, r4                                        |         r0 = r4;
    0x00050c9c ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x00050c9e ldr r3, [r4]                                      |         r3 = *(r4);
    0x00050ca0 strd r7, sl, [sp]                                 |         __asm ("strd r7, sl, [sp]");
    0x00050ca4 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x00050ca6 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00050ca8 mov r3, r0                                        |         r3 = r0;
    0x00050caa ldr r0, [sp, 0x30]                                |         r0 = x;
    0x00050cac cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00050cae bne 0x50d36                                       |             goto label_67;
                                                                 |         }
                                                                 | label_23:
    0x00050cb0 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00050cb2 adds.w r7, sb, r7                                 |         r7 = sb + r7;
    0x00050cb6 adc.w sl, r5, sl                                  |         __asm ("adc.w sl, r5, sl");
    0x00050cba cmp r7, r2                                        |         
    0x00050cbc ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00050cbe sbcs.w r2, sl, r2                                 |         __asm ("sbcs.w r2, sl, r2");
    0x00050cc2 ite lt                                            |         
                                                                 |         if (r7 >= r2) {
    0x00050cc4 movlt r2, 1                                       |             r2 = 1;
                                                                 |         }
                                                                 |         if (r7 < r2) {
    0x00050cc6 movge r2, 0                                       |             r2 = 0;
                                                                 |         }
    0x00050cc8 cmp r3, 0                                         |         
    0x00050cca ite ne                                            |         
                                                                 |         if (r3 == 0) {
    0x00050ccc movne r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x00050cce andeq r2, r2, 1                                   |             r2 &= 1;
                                                                 |         }
    0x00050cd2 cmp r2, 0                                         |         
    0x00050cd4 bne 0x50c74                                       |         
                                                                 |     } while (r2 != 0);
    0x00050cd6 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x00050cd8 mov fp, r3                                        |     
                                                                 | label_22:
    0x00050cda cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00050cde bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050ce2 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00050ce4 add r1, sp, 0x30                                  |     r1 += x;
    0x00050ce6 mov r0, r4                                        |     r0 = r4;
    0x00050ce8 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00050cea blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00050cec mov fp, r0                                        |     
    0x00050cee cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050cf0 bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050cf4 ldrd r2, r3, [sp, 0x30]                           |     __asm ("ldrd r2, r3, [x]");
    0x00050cf8 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00050cfa ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00050cfc cmp r1, r2                                        |     
    0x00050cfe sbcs.w r3, r0, r3                                 |     __asm ("sbcs.w r3, r0, r3");
                                                                 |     if (r1 >= r2) {
    0x00050d02 bge 0x50d18                                       |         goto label_68;
                                                                 |     }
    0x00050d04 mov r2, r1                                        |     r2 = r1;
    0x00050d06 ldr r1, [r4]                                      |     r1 = *(r4);
    0x00050d08 mov r3, r0                                        |     r3 = r0;
    0x00050d0a mov r0, r4                                        |     r0 = r4;
    0x00050d0c ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x00050d0e blx r1                                            |     r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00050d10 mov fp, r0                                        |     
    0x00050d12 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050d14 bne.w 0x50a42                                     |         goto label_9;
                                                                 |     }
                                                                 | label_68:
    0x00050d18 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00050d1a movs r1, 0                                        |     r1 = 0;
    0x00050d1c bl 0x13324                                        |     r0 = fcn_00013324 (r0, r1);
    0x00050d20 mov fp, r0                                        |     
    0x00050d22 b 0x50bb4                                         |     goto label_21;
                                                                 | label_66:
    0x00050d24 mov fp, r0                                        |     
    0x00050d26 ldr r0, [sp, 0x30]                                |     r0 = x;
    0x00050d28 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x00050d2a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050d2c beq.w 0x50a42                                     |         goto label_9;
                                                                 |     }
    0x00050d30 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x00050d34 b 0x50cda                                         |     goto label_22;
                                                                 | label_67:
    0x00050d36 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00050d38 bl 0x10f18                                        |     fcn_00010f18 (r0);
    0x00050d3c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00050d3e b 0x50cb0                                         |     goto label_23;
                                                                 | label_65:
    0x00050d40 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00050d42 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050d44 bne.w 0x50ada                                     |         goto label_24;
                                                                 |     }
                                                                 |     do {
                                                                 | label_26:
    0x00050d48 mov.w fp, 0xa                                     |         
    0x00050d4c b 0x5088c                                         |         goto label_7;
                                                                 | label_64:
    0x00050d4e ldr r0, [r5, 0x18]                                |         r0 = *((r5 + 0x18));
    0x00050d50 mov r1, fp                                        |         r1 = fp;
    0x00050d52 ldrb r2, [r0, 8]                                  |         r2 = *((r0 + 8));
    0x00050d54 cmp r2, 2                                         |         
                                                                 |         if (r2 == 2) {
    0x00050d56 beq 0x50d8c                                       |             goto label_69;
                                                                 |         }
    0x00050d58 bl 0x4a6d0                                        |         fcn_0004a6d0 (r0, r1);
    0x00050d5c b 0x50bd4                                         |         goto label_25;
                                                                 | label_44:
    0x00050d5e blx 0x9b44                                        |         fcn_00009b44 ();
                                                                 | label_63:
    0x00050d62 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00050d64 cmp r3, 0                                         |         
    0x00050d66 beq 0x50d48                                       |         
                                                                 |     } while (r3 == 0);
    0x00050d68 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050d6a ldrb r2, [r0, 8]                                  |     r2 = *((r0 + 8));
    0x00050d6c cmp r2, 2                                         |     
                                                                 |     if (r2 != 2) {
    0x00050d6e beq 0x50d9a                                       |         
                                                                 | label_61:
    0x00050d70 mov r1, fp                                        |         r1 = fp;
    0x00050d72 bl 0x4a6d0                                        |         fcn_0004a6d0 (r0, r1);
    0x00050d76 b 0x50d48                                         |         goto label_26;
                                                                 | label_35:
    0x00050d78 ldr.w sl, [r4, 0x30]                              |         sl = *((r4 + 0x30));
                                                                 |         if (r7 != 0) {
    0x00050d7c cbz r7, 0x50d88                                   |             
    0x00050d7e mov.w fp, 0                                       |             
    0x00050d82 str.w fp, [sp, 0x24]                              |             __asm ("str.w fp, [var_24h]");
    0x00050d86 b 0x507cc                                         |             goto label_27;
                                                                 |         }
    0x00050d88 str r7, [sp, 0x24]                                |         var_24h = r7;
    0x00050d8a b 0x50854                                         |         goto label_28;
                                                                 | label_69:
    0x00050d8c bl 0x503fc                                        |         fcn_000503fc (r0, r1, r2);
    0x00050d90 ldr r0, [r5, 0x18]                                |         r0 = *((r5 + 0x18));
    0x00050d92 mov r1, fp                                        |         r1 = fp;
    0x00050d94 bl 0x4a6d0                                        |         fcn_0004a6d0 (r0, r1);
    0x00050d98 b 0x50bd4                                         |         goto label_25;
                                                                 |     }
    0x00050d9a mov r1, fp                                        |     r1 = fp;
    0x00050d9c bl 0x503fc                                        |     fcn_000503fc (r0, r1, r2);
    0x00050da0 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00050da2 mov r1, fp                                        |     r1 = fp;
    0x00050da4 bl 0x4a6d0                                        |     fcn_0004a6d0 (r0, r1);
    0x00050da8 b 0x50d48                                         |     goto label_26;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x22a50 */
                                                         | #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;
    0x00022a50 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x00022a54 mov r5, r0                                |     r5 = r0;
    0x00022a56 mov r7, r2                                |     r7 = r2;
    0x00022a58 mov r6, r3                                |     r6 = r3;
    0x00022a5a mov r4, r1                                |     r4 = r1;
    0x00022a5c bl 0x228bc                                |     r0 = fcn_000228bc (r0, r1);
    0x00022a60 mov r8, r0                                |     r8 = r0;
                                                         |     if (r0 != 0) {
    0x00022a62 cbz r0, 0x22a6a                           |         
    0x00022a64 mov r0, r8                                |         r0 = r8;
    0x00022a66 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         |     }
    0x00022a6a add.w r1, r4, r4, lsl 2                   |     r1 = r4 + (r4 << 2);
    0x00022a6e ldr r0, [r5, 0x64]                        |     r0 = *((r5 + 0x64));
    0x00022a70 lsls r1, r1, 3                            |     r1 <<= 3;
    0x00022a72 subs r1, 0x28                             |     r1 -= 0x28;
    0x00022a74 add r0, r1                                |     r0 += r1;
    0x00022a76 ldrh r3, [r0, 0x10]                       |     r3 = *((r0 + 0x10));
    0x00022a78 tst.w r3, 0x9000                          |     
                                                         |     if ((r3 & 0x9000) != 0) {
    0x00022a7c bne 0x22a94                               |         goto label_0;
                                                         |     }
    0x00022a7e movs r3, 4                                |     r3 = 4;
    0x00022a80 str r7, [r0]                              |     *(r0) = r7;
    0x00022a82 str r6, [r0, 4]                           |     *((r0 + 4)) = r6;
    0x00022a84 strh r3, [r0, 0x10]                       |     *((r0 + 0x10)) = r3;
                                                         |     do {
    0x00022a86 ldr r3, [r5]                              |         r3 = *(r5);
    0x00022a88 ldr r0, [r3, 0xc]                         |         r0 = *((r3 + 0xc));
    0x00022a8a blx 0x9d10                                |         fcn_00009d10 ();
    0x00022a8e mov r0, r8                                |         r0 = r8;
    0x00022a90 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_0:
    0x00022a94 mov r2, r7                                |         r2 = r7;
    0x00022a96 mov r3, r6                                |         r3 = r6;
    0x00022a98 bl 0x13964                                |         fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00022a9c b 0x22a86                                 |         
                                                         |     } while (1);
                                                         | }
    ; assembly                                                           | /* r2dec pseudo code output */
                                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x22ac4 */
                                                                         | #include <stdint.h>
                                                                         |  
    ; (fcn) sym.sqlite3_bind_pointer ()                                  | void sqlite3_bind_pointer (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
                                                                         |     r2 = arg3;
                                                                         |     r3 = arg4;
    0x00022ac4 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x00022ac8 mov r7, r0                                                |     r7 = r0;
    0x00022aca ldr.w r8, [sp, 0x28]                                      |     r8 = *(arg_28h);
    0x00022ace mov r5, r2                                                |     r5 = r2;
    0x00022ad0 mov r6, r3                                                |     r6 = r3;
    0x00022ad2 mov r4, r1                                                |     r4 = r1;
    0x00022ad4 bl 0x228bc                                                |     r0 = fcn_000228bc (r0, r1);
    0x00022ad8 mov sb, r0                                                |     sb = r0;
                                                                         |     if (r0 != 0) {
    0x00022ada cbz r0, 0x22aec                                           |         
    0x00022adc cmp.w r8, 0                                               |         
                                                                         |         if (r8 != 0) {
    0x00022ae0 beq 0x22ae6                                               |             
    0x00022ae2 mov r0, r5                                                |             r0 = r5;
    0x00022ae4 blx r8                                                    |             uint32_t (*r8)(uint32_t) (r0);
                                                                         |         }
    0x00022ae6 mov r0, sb                                                |         r0 = sb;
    0x00022ae8 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                         |     }
    0x00022aec add.w r4, r4, r4, lsl 2                                   |     r4 += (r4 << 2);
    0x00022af0 ldr.w fp, [r7, 0x64]                                      |     fp = *((r7 + 0x64));
    0x00022af4 lsls r4, r4, 3                                            |     r4 <<= 3;
    0x00022af6 subs r4, 0x28                                             |     r4 -= 0x28;
    0x00022af8 add.w sl, fp, r4                                          |     sl = fp + r4;
    0x00022afc mov r0, sl                                                |     r0 = sl;
    0x00022afe bl 0x13c18                                                |     fcn_00013c18 (r0);
    0x00022b02 cbz r6, 0x22b32                                           |     
                                                                         |     while (1) {
    0x00022b04 movw r3, 0x1a01                                           |         r3 = 0x1a01;
    0x00022b08 str.w r6, [fp, r4]                                        |         __asm ("str.w r6, [fp, r4]");
    0x00022b0c strh.w r3, [sl, 0x10]                                     |         *((sl + 0x10)) = r3;
    0x00022b10 movs r3, 0x70                                             |         r3 = 0x70;
    0x00022b12 str.w r5, [sl, 8]                                         |         __asm ("str.w r5, [sl, 8]");
    0x00022b16 strb.w r3, [sl, 0x13]                                     |         *((sl + 0x13)) = r3;
    0x00022b1a cmp.w r8, 0                                               |         
                                                                         |         if (r8 == 0) {
    0x00022b1e beq 0x22b38                                               |             goto label_1;
                                                                         |         }
                                                                         | label_0:
    0x00022b20 ldr r3, [r7]                                              |         r3 = *(r7);
    0x00022b22 str.w r8, [sl, 0x24]                                      |         __asm ("str.w r8, [sl, 0x24]");
    0x00022b26 ldr r0, [r3, 0xc]                                         |         r0 = *((r3 + 0xc));
    0x00022b28 blx 0x9d10                                                |         fcn_00009d10 ();
    0x00022b2c mov r0, sb                                                |         r0 = sb;
    0x00022b2e pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
    0x00022b32 ldr r6, [pc, 0xc]                                         |         
    0x00022b34 add r6, pc                                                |         r6 = 0x4567a;
    0x00022b36 b 0x22b04                                                 |         
                                                                         |     }
                                                                         | label_1:
    0x00022b38 ldr.w r8, [pc, 8]                                         |     r8 = *(0x00022b44);
    0x00022b3c add r8, pc                                                |     r8 += pc;
    0x00022b3e b 0x22b20                                                 |     goto label_0;
                                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x22b48 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.sqlite3_bind_zeroblob ()                         | void sqlite3_bind_zeroblob (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00022b48 push.w {r3, r4, r5, r6, r7, r8, sb, lr}           |     
    0x00022b4c mov r7, r0                                        |     r7 = r0;
    0x00022b4e mov r4, r1                                        |     r4 = r1;
    0x00022b50 mov r6, r2                                        |     r6 = r2;
    0x00022b52 bl 0x228bc                                        |     r0 = fcn_000228bc (r0, r1);
    0x00022b56 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 != 0) {
    0x00022b58 cbz r0, 0x22b60                                   |         
    0x00022b5a mov r0, r5                                        |         r0 = r5;
    0x00022b5c pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |         
                                                                 |     }
    0x00022b60 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00022b64 ldr.w sb, [r7, 0x64]                              |     sb = *((r7 + 0x64));
    0x00022b68 lsls r4, r4, 3                                    |     r4 <<= 3;
    0x00022b6a subs r4, 0x28                                     |     r4 -= 0x28;
    0x00022b6c add.w r8, sb, r4                                  |     r8 = sb + r4;
    0x00022b70 ldrh.w r3, [r8, 0x10]                             |     r3 = *((r8 + 0x10));
    0x00022b74 tst.w r3, 0x9000                                  |     
                                                                 |     if ((r3 & 0x9000) == 0) {
    0x00022b78 bne 0x22b80                                       |         
    0x00022b7a ldr.w r3, [r8, 0x18]                              |         r3 = *((r8 + 0x18));
                                                                 |         if (r3 == 0) {
    0x00022b7e cbz r3, 0x22b86                                   |             goto label_0;
                                                                 |         }
                                                                 |     }
    0x00022b80 mov r0, r8                                        |     r0 = r8;
    0x00022b82 bl 0x13c18                                        |     fcn_00013c18 (r0);
                                                                 | label_0:
    0x00022b86 bic.w r6, r6, r6, asr 31                          |     r6 = BIT_MASK (r6, r6);
    0x00022b8a mov.w r2, 0x410                                   |     r2 = 0x410;
    0x00022b8e strh.w r2, [r8, 0x10]                             |     *((r8 + 0x10)) = r2;
    0x00022b92 movs r3, 0                                        |     r3 = 0;
    0x00022b94 movs r2, 1                                        |     r2 = 1;
    0x00022b96 str.w r3, [r8, 0xc]                               |     __asm ("str.w r3, [r8, 0xc]");
    0x00022b9a str.w r6, [sb, r4]                                |     __asm ("str.w r6, [sb, r4]");
    0x00022b9e strb.w r2, [r8, 0x12]                             |     *((r8 + 0x12)) = r2;
    0x00022ba2 str.w r3, [r8, 8]                                 |     __asm ("str.w r3, [r8, 8]");
    0x00022ba6 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00022ba8 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00022baa blx 0x9d10                                        |     fcn_00009d10 ();
    0x00022bae mov r0, r5                                        |     r0 = r5;
    0x00022bb0 pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |     
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x22bb4 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.sqlite3_bind_zeroblob64 ()           | void sqlite3_bind_zeroblob64 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x00022bb4 mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x00022bb8 mov r4, r0                            |     r4 = r0;
    0x00022bba ldr r0, [r0]                          |     r0 = *(r0);
    0x00022bbc mov r7, r3                            |     r7 = r3;
    0x00022bbe mov r6, r2                            |     r6 = r2;
    0x00022bc0 mov r8, r1                            |     r8 = r1;
    0x00022bc2 ldr r0, [r0, 0xc]                     |     r0 = *((r0 + 0xc));
    0x00022bc4 blx 0xa12c                            |     fcn_0000a12c ();
    0x00022bc8 ldr r5, [r4]                          |     r5 = *(r4);
    0x00022bca ldr r2, [r5, 0x78]                    |     r2 = *((r5 + 0x78));
    0x00022bcc cmp r2, r6                            |     
    0x00022bce asr.w r3, r2, 0x1f                    |     r3 = r2 >> 0x1f;
    0x00022bd2 sbcs r3, r7                           |     __asm ("sbcs r3, r7");
    0x00022bd4 it lo                                 |     
                                                     |     if (r2 >= r6) {
    0x00022bd6 movlo r1, 0x12                        |         r1 = 0x12;
                                                     |     }
    0x00022bd8 bhs 0x22bf0                           |     
                                                     |     while (r0 != 0) {
    0x00022bda mov r0, r5                            |         r0 = r5;
    0x00022bdc bl 0x14ab4                            |         fcn_00014ab4 (r0, r1);
    0x00022be0 ldr r5, [r4]                          |         r5 = *(r4);
    0x00022be2 mov r4, r0                            |         r4 = r0;
    0x00022be4 ldr r0, [r5, 0xc]                     |         r0 = *((r5 + 0xc));
    0x00022be6 blx 0x9d10                            |         fcn_00009d10 ();
    0x00022bea mov r0, r4                            |         r0 = r4;
    0x00022bec pop.w {r4, r5, r6, r7, r8, pc}        |         
    0x00022bf0 mov r1, r8                            |         r1 = r8;
    0x00022bf2 mov r0, r4                            |         r0 = r4;
    0x00022bf4 mov r2, r6                            |         r2 = r6;
    0x00022bf6 blx 0xa16c                            |         fcn_0000a16c ();
    0x00022bfa ldr r5, [r4]                          |         r5 = *(r4);
    0x00022bfc mov r1, r0                            |         r1 = r0;
    0x00022bfe ldrb.w r3, [r5, 0x57]                 |         r3 = *((r5 + 0x57));
    0x00022c02 cmp r0, 0                             |         
    0x00022c04 it eq                                 |         
                                                     |         if (r0 == 0) {
    0x00022c06 cmpeq r3, 0                           |             __asm ("cmpeq r3, 0");
                                                     |         }
    0x00022c08 itet eq                               |         
                                                     |         if (r0 != 0) {
    0x00022c0a moveq r3, 0                           |             r3 = 0;
                                                     |         }
                                                     |         if (r0 == 0) {
    0x00022c0c movne r3, 1                           |             r3 = 1;
                                                     |         }
                                                     |         if (r0 != 0) {
    0x00022c0e moveq r4, r3                          |             r4 = r3;
                                                     |         }
    0x00022c10 bne 0x22bda                           |         
                                                     |     }
    0x00022c12 ldr r0, [r5, 0xc]                     |     r0 = *((r5 + 0xc));
    0x00022c14 blx 0x9d10                            |     fcn_00009d10 ();
    0x00022c18 mov r0, r4                            |     r0 = r4;
    0x00022c1a pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x85628 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.sqlite3_blob_open ()                             | void sqlite3_blob_open (int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_180h, int16_t arg_188h, int16_t arg_18ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_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_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_154h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00085628 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0008562c mov r8, r0                                        |     r8 = r0;
    0x0008562e ldr.w r4, [pc, 0x54c]                             |     r4 = *(0x00085b7c);
    0x00085632 sub sp, 0x15c                                     |     
    0x00085634 movs r6, 0                                        |     r6 = 0;
    0x00085636 ldr.w r0, [pc, 0x548]                             |     
    0x0008563a add r4, pc                                        |     r4 += pc;
    0x0008563c ldr r0, [r4, r0]                                  |     r0 = *((r4 + r0));
    0x0008563e ldr r4, [sp, 0x18c]                               |     r4 = *(arg_18ch);
    0x00085640 ldr r0, [r0]                                      |     r0 = *(0x85b82);
    0x00085642 str r0, [sp, 0x154]                               |     var_154h = r0;
    0x00085644 mov.w r0, 0                                       |     r0 = 0;
    0x00085648 ldr.w r0, [r8, 0xc]                               |     r0 = *((r8 + 0xc));
    0x0008564c str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0008564e add r3, sp, 0x3c                                  |     r3 += var_3ch;
    0x00085650 str r6, [r4]                                      |     *(r4) = r6;
    0x00085652 str r1, [sp, 0x24]                                |     var_24h = r1;
    0x00085654 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00085656 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00085658 str r6, [sp, 0x3c]                                |     var_3ch = r6;
    0x0008565a blx 0xa12c                                        |     fcn_0000a12c ();
    0x0008565c stcl p6, c4, [r8, -0x100]!                        |     __asm ("stcl p6, c4, aav.0x000000ff!");
    0x00085660 movs r2, 0x20                                     |     r2 = 0x20;
    0x00085662 movs r3, 0                                        |     r3 = 0;
    0x00085664 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00085668 mov fp, r0                                        |     
    0x0008566a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008566c beq.w 0x85a46                                     |         goto label_22;
                                                                 |     }
    0x00085670 mov r1, r6                                        |     r1 = r6;
    0x00085672 movs r2, 0x20                                     |     r2 = 0x20;
    0x00085674 blx 0x97d4                                        |     fcn_000097d4 ();
    0x00085678 ldr.w sl, [pc, 0x508]                             |     
    0x0008567c mov r5, r6                                        |     r5 = r6;
    0x0008567e ldr r3, [sp, 0x188]                               |     r3 = *(arg_188h);
    0x00085680 add r0, sp, 0x40                                  |     r0 += var_40h;
    0x00085682 ldr.w sb, [pc, 0x504]                             |     
    0x00085686 mov r1, r8                                        |     r1 = r8;
    0x00085688 add sl, pc                                        |     sl = 0x10b210;
    0x0008568a str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0008568c subs r3, r3, r6                                   |     r3 -= r6;
    0x0008568e str r6, [sp, 0x10]                                |     var_10h = r6;
    0x00085690 add sb, pc                                        |     sb = 0x10b21e;
    0x00085692 it ne                                             |     
                                                                 |     if (r3 == r3) {
    0x00085694 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00085696 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00085698 str r6, [sp, 0x18]                                |     var_18h = r6;
    0x0008569a bl 0x200b8                                        |     fcn_000200b8 (r0, r1);
    0x0008569e str r4, [sp, 0x34]                                |     var_34h = r4;
                                                                 |     if (r5 != 0) {
                                                                 | label_3:
    0x000856a0 cbz r5, 0x856aa                                   |         
    0x000856a2 mov r1, r5                                        |         r1 = r5;
    0x000856a4 mov r0, r8                                        |         r0 = r8;
    0x000856a6 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x000856aa ldrb.w r3, [r8, 0x5f]                             |     r3 = *((r8 + 0x5f));
    0x000856ae movs r2, 0                                        |     r2 = 0;
    0x000856b0 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000856b2 str r2, [r1]                                      |     *(r1) = r2;
    0x000856b4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000856b6 beq.w 0x85930                                     |         goto label_23;
                                                                 |     }
                                                                 | label_6:
    0x000856ba ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000856bc movs r1, 0                                        |     r1 = 0;
    0x000856be ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000856c0 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x000856c2 bl 0x730f4                                        |     fcn_000730f4 (r0, r1, r2, r3, r4, r5);
    0x000856c6 str r0, [sp, 8]                                   |     var_8h = r0;
    0x000856c8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000856ca beq.w 0x85aba                                     |         goto label_18;
                                                                 |     }
    0x000856ce ldrb.w r3, [r0, 0x2b]                             |     r3 = *((r0 + 0x2b));
    0x000856d2 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x000856d4 beq.w 0x85aae                                     |         goto label_24;
                                                                 |     }
    0x000856d8 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x000856da ldr r0, [r2, 0x1c]                                |     r0 = *((r2 + 0x1c));
    0x000856dc ands r0, r0, 0x80                                 |     r0 &= 0x80;
                                                                 |     if (r0 != r0) {
    0x000856e0 bne.w 0x85b2a                                     |         goto label_25;
                                                                 |     }
    0x000856e4 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x000856e6 beq.w 0x85b38                                     |         goto label_26;
                                                                 |     }
    0x000856ea ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000856ec ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x000856f0 ldr r4, [r3, 0x3c]                                |     r4 = *((r3 + 0x3c));
    0x000856f2 str.w r3, [fp, 0x1c]                              |     __asm ("str.w r3, [arg_1ch]");
    0x000856f6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000856f8 beq.w 0x85b46                                     |         goto label_27;
                                                                 |     }
    0x000856fc ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000856fe cmp r4, r3                                        |     
                                                                 |     if (r4 == r3) {
    0x00085700 beq 0x85712                                       |         goto label_19;
                                                                 |     }
    0x00085702 add.w r3, r2, 0x10                                |     r3 = r2 + 0x10;
                                                                 |     do {
    0x00085706 mov r2, r3                                        |         r2 = r3;
    0x00085708 adds r3, 0x10                                     |         r3 += 0x10;
    0x0008570a ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0008570e cmp r4, r1                                        |         
    0x00085710 bne 0x85706                                       |         
                                                                 |     } while (r4 != r1);
                                                                 | label_19:
    0x00085712 ldr r3, [r2]                                      |     r3 = *(r2);
    0x00085714 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00085718 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0008571a ldrsh.w r5, [r3, 0x22]                            |     r5 = *((r3 + 0x22));
    0x0008571e cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00085720 ble.w 0x85afa                                     |         goto label_28;
                                                                 |     }
    0x00085724 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00085726 movs r4, 0                                        |     r4 = 0;
    0x00085728 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0008572a subs r6, r2, 1                                    |     r6 = r2 - 1;
                                                                 | label_0:
    0x0008572c ldr.w r2, [r3, r0, lsl 2]                         |     offset_0 = r0 << 2;
                                                                 |     r2 = *((r3 + offset_0));
    0x00085730 mov r7, r6                                        |     r7 = r6;
    0x00085732 add.w ip, r2, -1                                  |     
                                                                 |     do {
                                                                 | label_1:
    0x00085736 ldrb r2, [ip, 1]!                                 |         r2 = *((ip += 1));
    0x0008573a ldrb r1, [r7, 1]!                                 |         r1 = *((r7 += 1));
    0x0008573e cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x00085740 beq 0x8577e                                       |             goto label_29;
                                                                 |         }
    0x00085742 add r2, sl                                        |         r2 += sl;
    0x00085744 add r1, sl                                        |         r1 += sl;
    0x00085746 ldrb.w lr, [r2, 0x140]                            |         
    0x0008574a ldrb.w r2, [r1, 0x140]                            |         r2 = *((r1 + 0x140));
    0x0008574e cmp lr, r2                                        |         
    0x00085750 beq 0x85736                                       |         
                                                                 |     } while (lr == r2);
    0x00085752 adds r4, 1                                        |     r4++;
    0x00085754 adds r0, 3                                        |     r0 += 3;
    0x00085756 cmp r4, r5                                        |     
                                                                 |     if (r4 != r5) {
    0x00085758 bne 0x8572c                                       |         goto label_0;
                                                                 |     }
                                                                 | label_2:
    0x0008575a ldr.w r1, [pc, 0x430]                             |     r1 = *(0x00085b8c);
    0x0008575e mov r0, r8                                        |     r0 = r8;
    0x00085760 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00085762 add r1, pc                                        |     r1 += pc;
    0x00085764 bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00085768 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0008576a mov r5, r0                                        |     r5 = r0;
    0x0008576c str r0, [r3]                                      |     *(r3) = r0;
    0x0008576e ldrb.w r3, [r8, 0x5f]                             |     r3 = *((r8 + 0x5f));
    0x00085772 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00085774 beq.w 0x85b4c                                     |         goto label_30;
                                                                 |     }
    0x00085778 movs r4, 1                                        |     r4 = 1;
    0x0008577a str r4, [sp, 0x10]                                |     var_10h = r4;
    0x0008577c b 0x85ad6                                         |     goto label_16;
                                                                 | label_29:
    0x0008577e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00085780 bne 0x85736                                       |         goto label_1;
                                                                 |     }
                                                                 | label_14:
    0x00085782 cmp r5, r4                                        |     
                                                                 |     if (r5 == r4) {
    0x00085784 beq 0x8575a                                       |         goto label_2;
                                                                 |     }
    0x00085786 ldr r3, [sp, 0x188]                               |     r3 = *(arg_188h);
    0x00085788 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0008578a bne.w 0x858cc                                     |         goto label_31;
                                                                 |     }
                                                                 | label_4:
    0x0008578e ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00085790 bl 0x29b0c                                        |     r0 = fcn_00029b0c (r0);
    0x00085794 mov r6, r0                                        |     r6 = r0;
    0x00085796 str.w r0, [fp, 0x10]                              |     __asm ("str.w r0, [arg_10h]");
    0x0008579a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008579c beq 0x8586e                                       |         goto label_8;
                                                                 |     }
    0x0008579e ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000857a0 ldr r1, [r3, 0x3c]                                |     r1 = *((r3 + 0x3c));
    0x000857a2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000857a4 beq.w 0x85b5c                                     |         goto label_32;
                                                                 |     }
    0x000857a8 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x000857ac ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x000857ae cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x000857b0 beq.w 0x85af2                                     |         goto label_33;
                                                                 |     }
    0x000857b4 movs r5, 0                                        |     r5 = 0;
                                                                 |     do {
    0x000857b6 ldr r2, [r3, 0x1c]                                |         r2 = *((r3 + 0x1c));
    0x000857b8 adds r3, 0x10                                     |         r3 += 0x10;
    0x000857ba adds r5, 1                                        |         r5++;
    0x000857bc cmp r1, r2                                        |         
    0x000857be bne 0x857b6                                       |         
                                                                 |     } while (r1 != r2);
                                                                 | label_21:
    0x000857c0 movs r3, 1                                        |     r3 = 1;
    0x000857c2 lsls r3, r5                                       |     r3 <<= r5;
    0x000857c4 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 | label_13:
    0x000857c6 ldrd r3, r2, [r6, 0x6c]                           |     __asm ("ldrd r3, r2, [r6, 0x6c]");
    0x000857ca ldrd lr, r1, [r1]                                 |     __asm ("ldrd lr, r1, [r1]");
    0x000857ce cmp r3, r2                                        |     
    0x000857d0 str r1, [sp, 0x2c]                                |     var_2ch = r1;
                                                                 |     if (r3 >= r2) {
    0x000857d2 bge.w 0x859e4                                     |         goto label_34;
                                                                 |     }
    0x000857d6 ldr.w ip, [r6, 0x68]                              |     ip = *((r6 + 0x68));
    0x000857da add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x000857de movs r7, 0                                        |     r7 = 0;
    0x000857e0 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000857e2 str r2, [r6, 0x6c]                                |     *((r6 + 0x6c)) = r2;
    0x000857e4 add.w r0, ip, r1, lsl 2                           |     r0 = ip + (r1 << 2);
    0x000857e8 str r7, [r0, 0x10]                                |     *((r0 + 0x10)) = r7;
    0x000857ea ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x000857ec str.w lr, [r0, 0xc]                               |     __asm ("str.w lr, [r0, 0xc]");
    0x000857f0 str r5, [r0, 4]                                   |     *((r0 + 4)) = r5;
    0x000857f2 str r7, [r0, 8]                                   |     *((r0 + 8)) = r7;
    0x000857f4 movs r0, 2                                        |     r0 = 2;
    0x000857f6 str.w r0, [ip, r1, lsl 2]                         |     __asm ("str.w r0, [ip, r1, lsl 2]");
                                                                 | label_9:
    0x000857fa ldr r1, [r6]                                      |     r1 = *(r6);
    0x000857fc ldrb.w r1, [r1, 0x57]                             |     r1 = *((r1 + 0x57));
                                                                 |     if (r1 == 0) {
    0x00085800 cbnz r1, 0x85814                                  |         
    0x00085802 ldr r1, [r6, 0x68]                                |         r1 = *((r6 + 0x68));
    0x00085804 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00085808 add.w r3, r1, r3, lsl 2                           |         r3 = r1 + (r3 << 2);
    0x0008580c ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0008580e str r1, [r3, 0x10]                                |         *((r3 + 0x10)) = r1;
    0x00085810 movs r1, 0xfd                                     |         r1 = 0xfd;
    0x00085812 strb r1, [r3, 1]                                  |         *((r3 + 1)) = r1;
                                                                 |     }
    0x00085814 cmp r2, 0                                         |     
                                                                 |     if (r2 > 0) {
    0x00085816 ble 0x85828                                       |         
    0x00085818 ldr r3, [r6, 0x68]                                |         r3 = *((r6 + 0x68));
    0x0008581a add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x0008581e add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00085822 movs r2, 1                                        |         r2 = 1;
    0x00085824 strh r2, [r3, -0x12]                              |         *((r3 - 0x12)) = r2;
                                                                 |     }
    0x00085828 ldr r2, [pc, 0x364]                               |     
    0x0008582a movs r1, 6                                        |     r1 = 6;
    0x0008582c mov r0, r6                                        |     r0 = r6;
    0x0008582e add r2, pc                                        |     
    0x00085830 add.w r2, r2, 0x258                               |     r2 = 0x10b61a;
    0x00085834 bl 0x299cc                                        |     fcn_000299cc (r0, r1, r2);
    0x00085838 ldr.w r3, [r6, 0x98]                              |     r3 = *((r6 + 0x98));
    0x0008583c cmp r5, 1                                         |     
    0x0008583e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00085840 mov r7, r0                                        |     r7 = r0;
    0x00085842 orr.w r3, r3, r2                                  |     r3 |= r2;
    0x00085846 str.w r3, [r6, 0x98]                              |     __asm ("str.w r3, [r6, 0x98]");
                                                                 |     if (r5 != 1) {
    0x0008584a beq 0x85864                                       |         
    0x0008584c ldr r3, [r6]                                      |         r3 = *(r6);
    0x0008584e ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00085850 add.w r3, r3, r5, lsl 4                           |         r3 += (r5 << 4);
    0x00085854 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00085856 ldrb r3, [r3, 9]                                  |         r3 = *((r3 + 9));
                                                                 |         if (r3 == 0) {
    0x00085858 cbz r3, 0x85864                                   |             goto label_35;
                                                                 |         }
    0x0008585a ldr.w r3, [r6, 0x9c]                              |         r3 = *((r6 + 0x9c));
    0x0008585e orrs r3, r2                                       |         r3 |= r2;
    0x00085860 str.w r3, [r6, 0x9c]                              |         __asm ("str.w r3, [r6, 0x9c]");
                                                                 |     }
                                                                 | label_35:
    0x00085864 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00085868 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0008586a beq.w 0x85980                                     |         goto label_36;
                                                                 |     }
                                                                 | label_8:
    0x0008586e strh.w r4, [fp, 8]                                |     *(arg_188h) = r4;
    0x00085872 str.w r8, [fp, 0x14]                              |     __asm ("str.w r8, [arg_14h]");
    0x00085876 ldrb.w r3, [r8, 0x5f]                             |     r3 = *((r8 + 0x5f));
    0x0008587a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0008587c beq 0x85938                                       |         goto label_37;
                                                                 |     }
    0x0008587e ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00085882 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00085884 bne 0x85946                                       |         goto label_38;
                                                                 |     }
                                                                 | label_7:
    0x00085886 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00085888 mov r0, fp                                        |     r0 = fp;
    0x0008588a ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x0008588c str r3, [sp]                                      |     *(sp) = r3;
    0x0008588e adds r4, 1                                        |     r4++;
    0x00085890 ldrd r2, r3, [sp, 0x180]                          |     __asm ("ldrd r2, r3, [arg_180h]");
    0x00085894 str r4, [sp, 0x18]                                |     var_18h = r4;
    0x00085896 bl 0x854ec                                        |     r0 = fcn_000854ec (r0, r1, r2, r3);
    0x0008589a subs.w r3, r0, 0x11                               |     r3 = r0 - 0x11;
    0x0008589e str r0, [sp, 0x10]                                |     var_10h = r0;
    0x000858a0 it ne                                             |     
                                                                 |     if (r3 == r0) {
    0x000858a2 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000858a4 cmp r4, 0x32                                      |     
    0x000858a6 it eq                                             |     
                                                                 |     if (r4 != 0x32) {
    0x000858a8 orreq r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x000858ac cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000858ae bne.w 0x85b06                                     |         goto label_39;
                                                                 |     }
    0x000858b2 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x000858b4 mov r0, r4                                        |     r0 = r4;
    0x000858b6 bl 0x16d8c                                        |     fcn_00016d8c (r0);
    0x000858ba ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000858bc mov r1, r8                                        |     r1 = r8;
    0x000858be mov r0, r4                                        |     r0 = r4;
    0x000858c0 ldr r5, [r3]                                      |     r5 = *(r3);
    0x000858c2 bl 0x200b8                                        |     fcn_000200b8 (r0, r1);
    0x000858c6 movs r3, 0x11                                     |     r3 = 0x11;
    0x000858c8 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000858ca b 0x856a0                                         |     goto label_3;
                                                                 | label_31:
    0x000858cc ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x000858d0 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000858d2 and r2, r2, 0x4000                                |     r2 &= 0x4000;
    0x000858d6 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x000858d8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000858da bne.w 0x859fa                                     |         goto label_40;
                                                                 |     }
    0x000858de cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000858e0 beq.w 0x8578e                                     |         goto label_4;
                                                                 |     }
                                                                 | label_5:
    0x000858e4 ldrh r5, [r1, 0x32]                               |     r5 = *((r1 + 0x32));
                                                                 |     if (r5 == 0) {
    0x000858e6 cbz r5, 0x85902                                   |         goto label_41;
                                                                 |     }
    0x000858e8 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x000858ea add.w r5, r3, r5, lsl 1                           |     r5 = r3 + (r5 << 1);
                                                                 |     do {
    0x000858ee ldrsh r0, [r3], 2                                 |         r0 = *(r3);
                                                                 |         r3 += 2;
    0x000858f2 cmn.w r0, 2                                       |         
    0x000858f6 it ne                                             |         
                                                                 |         if (r0 != 2) {
    0x000858f8 cmpne r0, r4                                      |             __asm ("cmpne r0, r4");
                                                                 |         }
    0x000858fa it eq                                             |         
                                                                 |         if (r0 != 2) {
    0x000858fc moveq r2, sb                                      |             r2 = sb;
                                                                 |         }
    0x000858fe cmp r3, r5                                        |         
    0x00085900 bne 0x858ee                                       |         
                                                                 |     } while (r3 != r5);
                                                                 | label_41:
    0x00085902 ldr r1, [r1, 0x14]                                |     r1 = *((r1 + 0x14));
    0x00085904 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00085906 bne 0x858e4                                       |         goto label_5;
                                                                 |     }
    0x00085908 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0008590a beq.w 0x8578e                                     |         goto label_4;
                                                                 |     }
                                                                 | label_11:
    0x0008590e ldr r1, [pc, 0x284]                               |     
    0x00085910 mov r0, r8                                        |     r0 = r8;
    0x00085912 add r1, pc                                        |     r1 = 0x10b4ac;
    0x00085914 bl 0x20e84                                        |     fcn_00020e84 (r0);
    0x00085918 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0008591a mov r5, r0                                        |     r5 = r0;
    0x0008591c str r0, [r3]                                      |     *(r3) = r0;
    0x0008591e ldrb.w r3, [r8, 0x5f]                             |     r3 = *((r8 + 0x5f));
    0x00085922 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00085924 beq.w 0x85b6e                                     |         goto label_42;
                                                                 |     }
    0x00085928 movs r3, 1                                        |     r3 = 1;
    0x0008592a mov r4, r3                                        |     r4 = r3;
    0x0008592c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0008592e b 0x85ad6                                         |     goto label_16;
                                                                 | label_23:
    0x00085930 mov r0, r8                                        |     r0 = r8;
    0x00085932 bl 0x14528                                        |     fcn_00014528 (r0);
    0x00085936 b 0x856ba                                         |     goto label_6;
                                                                 | label_37:
    0x00085938 mov r0, r8                                        |     r0 = r8;
    0x0008593a bl 0x133b8                                        |     fcn_000133b8 (r0);
    0x0008593e ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00085942 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00085944 beq 0x85886                                       |         goto label_7;
                                                                 |     }
                                                                 | label_38:
    0x00085946 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00085948 movs r5, 0                                        |     r5 = 0;
    0x0008594a ldr r4, [sp, 0x34]                                |     r4 = var_34h;
    0x0008594c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0008594e bne.w 0x85b14                                     |         goto label_43;
                                                                 |     }
                                                                 | label_15:
    0x00085952 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00085956 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00085958 bne.w 0x85b6a                                     |         goto label_44;
                                                                 |     }
                                                                 | label_20:
    0x0008595c str.w fp, [r4]                                    |     __asm ("str.w fp, [r4]");
    0x00085960 movs r4, 0                                        |     r4 = 0;
    0x00085962 str r4, [sp, 0x10]                                |     var_10h = r4;
                                                                 | label_12:
    0x00085964 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00085966 beq 0x85a60                                       |         goto label_45;
                                                                 |     }
    0x00085968 ldr r2, [pc, 0x22c]                               |     
    0x0008596a mov r0, r8                                        |     r0 = r8;
    0x0008596c ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0008596e mov r3, r5                                        |     r3 = r5;
    0x00085970 add r2, pc                                        |     r2 = 0x10b50c;
    0x00085972 bl 0x27670                                        |     fcn_00027670 (r0, r1, r2);
    0x00085976 mov r1, r5                                        |     r1 = r5;
    0x00085978 mov r0, r8                                        |     r0 = r8;
    0x0008597a bl 0x137d0                                        |     fcn_000137d0 (r0, r1);
    0x0008597e b 0x85a6c                                         |     goto label_46;
                                                                 | label_36:
    0x00085980 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00085982 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00085984 str r5, [r7, 4]                                   |     *((r7 + 4)) = r5;
    0x00085986 ldr r1, [r2, 0x14]                                |     r1 = *((r2 + 0x14));
    0x00085988 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0008598a strd r1, r3, [r7, 8]                              |     __asm ("strd r1, r3, [r7, 8]");
    0x0008598e ldr r3, [r6]                                      |     r3 = *(r6);
    0x00085990 ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
                                                                 |     if (r3 != 0) {
    0x00085994 cbnz r3, 0x859ae                                  |         goto label_47;
                                                                 |     }
    0x00085996 ldr r1, [r6, 0x68]                                |     r1 = *((r6 + 0x68));
    0x00085998 mov r0, r6                                        |     r0 = r6;
    0x0008599a adds r1, 0x28                                     |     r1 += 0x28;
    0x0008599c bl 0x1ebdc                                        |     fcn_0001ebdc (r0, r1, r2, r3);
    0x000859a0 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x000859a4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000859a6 bne.w 0x8586e                                     |         goto label_8;
                                                                 |     }
    0x000859aa ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x000859ac ldr r1, [r2, 0x14]                                |     r1 = *((r2 + 0x14));
                                                                 | label_47:
    0x000859ae ldr r3, [sp, 0x188]                               |     r3 = *(arg_188h);
                                                                 |     if (r3 != 0) {
    0x000859b0 cbz r3, 0x859b6                                   |         
    0x000859b2 movs r3, 0x71                                     |         r3 = 0x71;
    0x000859b4 strb r3, [r7, 0x14]                               |         *((r7 + 0x14)) = r3;
                                                                 |     }
    0x000859b6 movs r3, 0xfd                                     |     r3 = 0xfd;
    0x000859b8 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000859ba strb r3, [r7, 0x15]                               |     *((r7 + 0x15)) = r3;
    0x000859bc mov r0, r6                                        |     r0 = r6;
    0x000859be ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000859c0 vmov.i32 d16, 1                                   |     __asm ("vmov.i32 d16, 1");
    0x000859c4 strd r1, r5, [r7, 0x1c]                           |     __asm ("strd r1, r5, [r7, 0x1c]");
    0x000859c8 mov r1, r2                                        |     r1 = r2;
    0x000859ca ldrsh.w r3, [r3, 0x22]                            |     r3 = *((r3 + 0x22));
    0x000859ce str r3, [r7, 0x44]                                |     *((r7 + 0x44)) = r3;
    0x000859d0 adds r3, 1                                        |     r3++;
    0x000859d2 str r3, [r7, 0x24]                                |     *((r7 + 0x24)) = r3;
    0x000859d4 movs r3, 0                                        |     r3 = 0;
    0x000859d6 vstr d16, [sp, 0x68]                              |     __asm ("vstr d16, [sp, 0x68]");
    0x000859da strh.w r3, [r2, 0xcc]                             |     *((r2 + 0xcc)) = r3;
    0x000859de bl 0x283b4                                        |     fcn_000283b4 (r0, r1, r2);
    0x000859e2 b 0x8586e                                         |     goto label_8;
                                                                 | label_34:
    0x000859e4 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000859e6 mov r2, r5                                        |     r2 = r5;
    0x000859e8 movs r1, 2                                        |     r1 = 2;
    0x000859ea mov r0, r6                                        |     r0 = r6;
    0x000859ec str.w lr, [sp]                                    |     __asm ("str.w lr, [sp]");
    0x000859f0 bl 0x29a7c                                        |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x000859f4 ldr r2, [r6, 0x6c]                                |     r2 = *((r6 + 0x6c));
    0x000859f6 mov r3, r0                                        |     r3 = r0;
    0x000859f8 b 0x857fa                                         |     goto label_9;
                                                                 | label_40:
    0x000859fa ldr.w ip, [r3, 0x30]                              |     ip = *((r3 + 0x30));
    0x000859fe cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x00085a02 beq.w 0x85b20                                     |         goto label_48;
                                                                 |     }
    0x00085a06 ldr r6, [pc, 0x194]                               |     
    0x00085a08 mov r3, r1                                        |     r3 = r1;
    0x00085a0a movs r2, 0                                        |     r2 = 0;
    0x00085a0c mov r1, ip                                        |     r1 = ip;
    0x00085a0e mov ip, r3                                        |     
    0x00085a10 add r6, pc                                        |     r6 = 0x10b5b2;
                                                                 | label_10:
    0x00085a12 ldr r5, [r1, 0x14]                                |     r5 = *((r1 + 0x14));
    0x00085a14 cmp r5, 0                                         |     
    0x00085a16 itt gt                                            |     
                                                                 |     if (r5 <= 0) {
    0x00085a18 movgt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r5 <= 0) {
    0x00085a1a addgt r7, r1, 0x24                                |         r7 = r1 + 0x24;
                                                                 |     }
                                                                 |     if (r5 <= 0) {
    0x00085a1e ble 0x85a30                                       |         goto label_49;
                                                                 |     }
                                                                 |     do {
    0x00085a20 ldr.w r0, [r7, r3, lsl 3]                         |         offset_1 = r3 << 3;
                                                                 |         r0 = *((r7 + offset_1));
    0x00085a24 adds r3, 1                                        |         r3++;
    0x00085a26 cmp r0, r4                                        |         
    0x00085a28 it eq                                             |         
                                                                 |         if (r0 != r4) {
    0x00085a2a moveq r2, r6                                      |             r2 = r6;
                                                                 |         }
    0x00085a2c cmp r5, r3                                        |         
    0x00085a2e bne 0x85a20                                       |         
                                                                 |     } while (r5 != r3);
                                                                 | label_49:
    0x00085a30 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x00085a32 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00085a34 bne 0x85a12                                       |         goto label_10;
                                                                 |     }
    0x00085a36 mov r1, ip                                        |     r1 = ip;
    0x00085a38 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00085a3a bne.w 0x858e4                                     |         goto label_5;
                                                                 |     }
    0x00085a3e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00085a40 beq.w 0x8578e                                     |         goto label_4;
                                                                 |     }
    0x00085a44 b 0x8590e                                         |     goto label_11;
                                                                 | label_22:
    0x00085a46 add r3, sp, 0x40                                  |     r3 += var_40h;
    0x00085a48 mov r1, r8                                        |     r1 = r8;
    0x00085a4a mov r0, r3                                        |     r0 = r3;
    0x00085a4c str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00085a4e bl 0x200b8                                        |     fcn_000200b8 (r0, r1);
    0x00085a52 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00085a56 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00085a58 beq 0x85b58                                       |         goto label_50;
                                                                 |     }
    0x00085a5a mov r4, fp                                        |     r4 = fp;
    0x00085a5c str.w fp, [sp, 0x10]                              |     __asm ("str.w fp, [var_10h]");
                                                                 | label_45:
    0x00085a60 movs r3, 0                                        |     r3 = 0;
    0x00085a62 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00085a64 mov r2, r3                                        |     r2 = r3;
    0x00085a66 mov r0, r8                                        |     r0 = r8;
    0x00085a68 bl 0x27670                                        |     fcn_00027670 (r0, r1, r2);
                                                                 | label_46:
    0x00085a6c ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00085a6e bl 0x16d8c                                        |     fcn_00016d8c (r0);
    0x00085a72 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00085a76 cmp r3, 0                                         |     
    0x00085a78 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00085a7a orrne r4, r4, 1                                   |         r4 |= 1;
                                                                 |     }
                                                                 |     if (r4 != 0) {
    0x00085a7e cbz r4, 0x85a8a                                   |         
    0x00085a80 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x00085a82 mov r0, r8                                        |         r0 = r8;
    0x00085a84 bl 0x14ab4                                        |         r0 = fcn_00014ab4 (r0, r1);
    0x00085a88 mov r4, r0                                        |         r4 = r0;
                                                                 |     }
    0x00085a8a ldr.w r0, [r8, 0xc]                               |     r0 = *((r8 + 0xc));
    0x00085a8e blx 0x9d10                                        |     fcn_00009d10 ();
    0x00085a92 ldr r2, [pc, 0x10c]                               |     
    0x00085a94 ldr r3, [pc, 0xe8]                                |     r3 = *(0x85b80);
    0x00085a96 add r2, pc                                        |     r2 = 0x10b63c;
    0x00085a98 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00085a9a ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00085a9c ldr r3, [sp, 0x154]                               |     r3 = var_154h;
    0x00085a9e eors r2, r3                                       |     r2 ^= r3;
    0x00085aa0 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00085aa4 bne 0x85b66                                       |         goto label_51;
                                                                 |     }
    0x00085aa6 mov r0, r4                                        |     r0 = r4;
    0x00085aa8 add sp, 0x15c                                     |     
    0x00085aaa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_24:
    0x00085aae ldr r1, [pc, 0xf4]                                |     
    0x00085ab0 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00085ab2 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00085ab4 add r1, pc                                        |     r1 = 0x10b65e;
    0x00085ab6 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
                                                                 | label_18:
    0x00085aba ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00085abc ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
                                                                 |     if (r3 != 0) {
    0x00085abe cbz r3, 0x85ac8                                   |         
    0x00085ac0 ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x00085ac2 str r3, [r1]                                      |         *(r1) = r3;
    0x00085ac4 movs r3, 0                                        |         r3 = 0;
    0x00085ac6 str r3, [r2, 4]                                   |         *((r2 + 4)) = r3;
                                                                 |     }
    0x00085ac8 ldrb.w r3, [r8, 0x5f]                             |     r3 = *((r8 + 0x5f));
    0x00085acc cbz r3, 0x85afe                                   |     
                                                                 |     while (1) {
    0x00085ace ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00085ad0 movs r4, 1                                        |         r4 = 1;
    0x00085ad2 str r4, [sp, 0x10]                                |         var_10h = r4;
    0x00085ad4 ldr r5, [r3]                                      |         r5 = *(r3);
                                                                 | label_16:
    0x00085ad6 ldr.w r6, [fp, 0x10]                              |         r6 = *(arg_10h);
                                                                 |         if (r6 != 0) {
    0x00085ada cbz r6, 0x85ae8                                   |             
    0x00085adc ldrb.w r3, [r6, 0x95]                             |             r3 = *((r6 + 0x95));
                                                                 |             if (r3 != 0) {
    0x00085ae0 cbnz r3, 0x85b18                                  |                 goto label_52;
                                                                 |             }
                                                                 | label_17:
    0x00085ae2 mov r0, r6                                        |             r0 = r6;
    0x00085ae4 bl 0x18864                                        |             fcn_00018864 (r0);
                                                                 |         }
    0x00085ae8 mov r1, fp                                        |         r1 = fp;
    0x00085aea mov r0, r8                                        |         r0 = r8;
    0x00085aec bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
    0x00085af0 b 0x85964                                         |         goto label_12;
                                                                 | label_33:
    0x00085af2 movs r3, 1                                        |         r3 = 1;
    0x00085af4 movs r5, 0                                        |         r5 = 0;
    0x00085af6 str r3, [sp, 0x20]                                |         var_20h = r3;
    0x00085af8 b 0x857c6                                         |         goto label_13;
                                                                 | label_28:
    0x00085afa movs r4, 0                                        |         r4 = 0;
    0x00085afc b 0x85782                                         |         goto label_14;
    0x00085afe mov r0, r8                                        |         r0 = r8;
    0x00085b00 bl 0x133b8                                        |         fcn_000133b8 (r0);
    0x00085b04 b 0x85ace                                         |         
                                                                 |     }
                                                                 | label_39:
    0x00085b06 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00085b08 ldr r4, [sp, 0x34]                                |     r4 = var_34h;
    0x00085b0a ldr r5, [r3]                                      |     r5 = *(r3);
    0x00085b0c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00085b0e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00085b10 beq.w 0x85952                                     |         goto label_15;
                                                                 |     }
                                                                 | label_43:
    0x00085b14 movs r4, 1                                        |     r4 = 1;
    0x00085b16 b 0x85ad6                                         |     goto label_16;
                                                                 | label_52:
    0x00085b18 mov r0, r6                                        |     r0 = r6;
    0x00085b1a bl 0x520bc                                        |     fcn_000520bc (r0);
    0x00085b1e b 0x85ae2                                         |     goto label_17;
                                                                 | label_48:
    0x00085b20 mov r2, ip                                        |     r2 = ip;
    0x00085b22 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00085b24 bne.w 0x858e4                                     |         goto label_5;
                                                                 |     }
    0x00085b28 b 0x8578e                                         |     goto label_4;
                                                                 | label_25:
    0x00085b2a ldr r1, [pc, 0x7c]                                |     
    0x00085b2c ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00085b2e ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00085b30 add r1, pc                                        |     r1 = 0x10b6de;
    0x00085b32 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00085b36 b 0x85aba                                         |     goto label_18;
                                                                 | label_26:
    0x00085b38 ldr r1, [pc, 0x70]                                |     
    0x00085b3a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00085b3c ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x00085b3e add r1, pc                                        |     r1 = 0x10b6ee;
    0x00085b40 bl 0x1d554                                        |     fcn_0001d554 (r0, r1);
    0x00085b44 b 0x85aba                                         |     goto label_18;
                                                                 | label_27:
    0x00085b46 sub.w r2, r2, 0x80000                             |     r2 -= 0x80000;
    0x00085b4a b 0x85712                                         |     goto label_19;
                                                                 | label_30:
    0x00085b4c mov r0, r8                                        |     r0 = r8;
    0x00085b4e movs r4, 1                                        |     r4 = 1;
    0x00085b50 bl 0x133b8                                        |     fcn_000133b8 (r0);
    0x00085b54 str r4, [sp, 0x10]                                |     var_10h = r4;
    0x00085b56 b 0x85ad6                                         |     goto label_16;
                                                                 | label_50:
    0x00085b58 mov r5, fp                                        |     r5 = fp;
    0x00085b5a b 0x8595c                                         |     goto label_20;
                                                                 | label_32:
    0x00085b5c mov.w r5, 0x8000                                  |     
    0x00085b60 movt r5, 0xffff                                   |     r5 = 0x-8000;
    0x00085b64 b 0x857c0                                         |     goto label_21;
                                                                 | label_51:
    0x00085b66 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_44:
    0x00085b6a ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00085b6c b 0x85ad6                                         |     goto label_16;
                                                                 | label_42:
    0x00085b6e mov r0, r8                                        |     r0 = r8;
    0x00085b70 bl 0x133b8                                        |     fcn_000133b8 (r0);
    0x00085b74 movs r3, 1                                        |     r3 = 1;
    0x00085b76 mov r4, r3                                        |     r4 = r3;
    0x00085b78 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00085b7a b 0x85ad6                                         |     goto label_16;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x13c5c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.sqlite3_clear_bindings ()                        | void sqlite3_clear_bindings (int16_t arg1) {
                                                                 |     r0 = arg1;
    0x00013c5c push.w {r3, r4, r5, r6, r7, r8, sb, lr}           |     
    0x00013c60 mov r8, r0                                        |     r8 = r0;
    0x00013c62 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00013c64 ldr r7, [r3, 0xc]                                 |     r7 = *((r3 + 0xc));
    0x00013c66 mov r0, r7                                        |     r0 = r7;
    0x00013c68 blx 0xa12c                                        |     fcn_0000a12c ();
    0x00013c6c ldrsh.w ip, [r8, 0x10]                            |     ip = *((r8 + 0x10));
    0x00013c70 cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x00013c74 ble 0x13cb2                                       |         goto label_0;
                                                                 |     }
    0x00013c76 ldr.w r2, [r8, 0x64]                              |     r2 = *((r8 + 0x64));
    0x00013c7a mov.w sb, 0x9000                                  |     sb = 0x9000;
    0x00013c7e movs r4, 0                                        |     r4 = 0;
    0x00013c80 movt sb, 0xffff                                   |     sb = (sb & 0xFFFF) | 0xffff0000;
    0x00013c84 movs r6, 1                                        |     r6 = 1;
                                                                 |     do {
    0x00013c86 add.w r5, r4, r4, lsl 2                           |         r5 = r4 + (r4 << 2);
    0x00013c8a adds r4, 1                                        |         r4++;
    0x00013c8c lsls r5, r5, 3                                    |         r5 <<= 3;
    0x00013c8e adds r3, r2, r5                                   |         r3 = r2 + r5;
    0x00013c90 ldrh r1, [r3, 0x10]                               |         r1 = *((r3 + 0x10));
    0x00013c92 mov r0, r3                                        |         r0 = r3;
    0x00013c94 tst.w sb, r1                                      |         
                                                                 |         if ((sb & r1) == 0) {
    0x00013c98 bne 0x13c9e                                       |             
    0x00013c9a ldr r1, [r3, 0x18]                                |             r1 = *((r3 + 0x18));
                                                                 |             if (r1 == 0) {
    0x00013c9c cbz r1, 0x13cac                                   |                 goto label_1;
                                                                 |             }
                                                                 |         }
    0x00013c9e bl 0x13c18                                        |         fcn_00013c18 (r0);
    0x00013ca2 ldr.w r2, [r8, 0x64]                              |         r2 = *((r8 + 0x64));
    0x00013ca6 ldrsh.w ip, [r8, 0x10]                            |         ip = *((r8 + 0x10));
    0x00013caa adds r3, r2, r5                                   |         r3 = r2 + r5;
                                                                 | label_1:
    0x00013cac cmp ip, r4                                        |         
    0x00013cae strh r6, [r3, 0x10]                               |         *((r3 + 0x10)) = r6;
    0x00013cb0 bgt 0x13c86                                       |         
                                                                 |     } while (ip > r4);
                                                                 | label_0:
    0x00013cb2 ldr.w r3, [r8, 0xd8]                              |     r3 = *((r8 + 0xd8));
                                                                 |     if (r3 != 0) {
    0x00013cb6 cbz r3, 0x13cc6                                   |         
    0x00013cb8 ldrb.w r3, [r8, 0x96]                             |         r3 = *((r8 + 0x96));
    0x00013cbc movs r2, 1                                        |         r2 = 1;
    0x00013cbe bfi r3, r2, 0, 2                                  |         value_0 = BIT_MASK (0, 2);
                                                                 |         value_1 = r2 & value_0;
                                                                 |         value_0 = ~value_0;
                                                                 |         r3 &= value_0;
                                                                 |         r3 |= value_1;
    0x00013cc2 strb.w r3, [r8, 0x96]                             |         *((r8 + 0x96)) = r3;
                                                                 |     }
    0x00013cc6 mov r0, r7                                        |     r0 = r7;
    0x00013cc8 blx 0x9d10                                        |     fcn_00009d10 ();
    0x00013ccc movs r0, 0                                        |     r0 = 0;
    0x00013cce pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |     
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3b850 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) sym.sqlite3_config ()                    | void sqlite3_config (int16_t arg1) {
                                                     |     int16_t var_0h;
                                                     |     int16_t var_8h;
                                                     |     int16_t var_ch;
                                                     |     int16_t var_20h;
                                                     |     int16_t var_24h;
                                                     |     r0 = arg1;
    0x0003b850 blmi 0xfeaa8894                       |     __asm ("blmi aav.0x000000ff");
    0x0003b854 ldr r1, [pc, 0x2a4]                   |     
    0x0003b856 ldr r2, [pc, 0x2a8]                   |     r2 = *(0x3bb02);
    0x0003b858 add r3, pc                            |     r3 += pc;
    0x0003b85a push {r4, r5, r6, lr}                 |     
    0x0003b85c sub sp, 0x10                          |     
    0x0003b85e add r1, pc                            |     r1 = 0x7735e;
    0x0003b860 ldr.w r4, [r3, 0xd0]                  |     r4 = *((r3 + 0xd0));
    0x0003b864 ldr r2, [r1, r2]                      |     
    0x0003b866 ldr r2, [r2]                          |     r2 = *(0x7735e);
    0x0003b868 str r2, [sp, 0xc]                     |     var_ch = r2;
    0x0003b86a mov.w r2, 0                           |     r2 = 0;
                                                     |     if (r4 == 0) {
    0x0003b86e cbnz r4, 0x3b8ba                      |         
    0x0003b870 ldr r3, [sp, 0x20]                    |         r3 = var_20h;
    0x0003b872 add r2, sp, 0x24                      |         r2 += var_24h;
    0x0003b874 str r2, [sp, 8]                       |         var_8h = r2;
    0x0003b876 subs r3, 1                            |         r3--;
    0x0003b878 cmp r3, 0x1c                          |         
                                                     |         if (r3 > 0x1c) {
    0x0003b87a bhi 0x3b8fe                           |             goto label_2;
                                                     |         }
                                                     |         /* switch table (30 cases) at 0x3b880 */
    0x0003b87c tbh [pc, r3, lsl 1]                   |         __asm ("tbh [pc, r3, lsl 1]");
                                                     |     }
    0x0003b8ba blx 0xa230                            |     fcn_0000a230 ();
    0x0003b8be ldr r2, [pc, 0x244]                   |     
    0x0003b8c0 add.w r4, r0, 0x14                    |     r4 = r0 + 0x14;
    0x0003b8c4 ldr r1, [pc, 0x240]                   |     
    0x0003b8c6 movw r3, 0xb16b                       |     
    0x0003b8ca str r4, [sp]                          |     *(sp) = r4;
    0x0003b8cc movs r4, 0x15                         |     r4 = 0x15;
    0x0003b8ce add r2, pc                            |     r2 = 0x773d8;
    0x0003b8d0 movt r3, 2                            |     r3 = 0x2b16b;
    0x0003b8d4 add r1, pc                            |     r1 = 0x773e0;
    0x0003b8d6 movs r0, 0x15                         |     r0 = 0x15;
    0x0003b8d8 blx 0x9f00                            |     fcn_00009f00 ();
                                                     |     do {
                                                     | label_0:
    0x0003b8dc ldr r2, [pc, 0x22c]                   |         
    0x0003b8de ldr r3, [pc, 0x220]                   |         r3 = *(0x3bb02);
    0x0003b8e0 add r2, pc                            |         r2 = 0x773f0;
    0x0003b8e2 ldr r3, [r2, r3]                      |         r3 = *(0x773f0);
    0x0003b8e4 ldr r2, [r3]                          |         r2 = *(0x773f0);
    0x0003b8e6 ldr r3, [sp, 0xc]                     |         r3 = var_ch;
    0x0003b8e8 eors r2, r3                           |         r2 ^= r3;
    0x0003b8ea mov.w r3, 0                           |         r3 = 0;
                                                     |         if (r2 != r3) {
    0x0003b8ee bne.w 0x3baf4                         |             goto label_3;
                                                     |         }
    0x0003b8f2 mov r0, r4                            |         r0 = r4;
    0x0003b8f4 add sp, 0x10                          |         
    0x0003b8f6 pop.w {r4, r5, r6, lr}                |         
    0x0003b8fa add sp, 0x10                          |         
    0x0003b8fc bx lr                                 |         return;
                                                     | label_2:
    0x0003b8fe movs r4, 1                            |         r4 = 1;
    0x0003b900 b 0x3b8dc                             |         
                                                     |     } while (1);
    0x0003b902 ldr r3, [pc, 0x20c]                   |     
    0x0003b904 movs r2, 0                            |     r2 = 0;
    0x0003b906 add r3, pc                            |     r3 = 0x7741c;
    0x0003b908 strh r2, [r3, 4]                      |     *((r3 + 4)) = r2;
    0x0003b90a b 0x3b8dc                             |     goto label_0;
    0x0003b90c ldr r3, [sp, 8]                       |     r3 = var_8h;
    0x0003b90e ldr r2, [pc, 0x204]                   |     
    0x0003b910 adds r3, 7                            |     r3 += 7;
    0x0003b912 bic r3, r3, 7                         |     r3 = BIT_MASK (r3, 7);
    0x0003b916 add r2, pc                            |     r2 = 0x77430;
    0x0003b918 ldrd r0, r1, [r3]                     |     __asm ("ldrd r0, r1, [r3]");
    0x0003b91c strd r0, r1, [r2, 0xf8]               |     __asm ("strd r0, r1, [r2, 0xf8]");
    0x0003b920 b 0x3b8dc                             |     goto label_0;
    0x0003b922 ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003b924 ldr r3, [pc, 0x1f0]                   |     
    0x0003b926 ldr r2, [r2]                          |     r2 = *(r2);
    0x0003b928 add r3, pc                            |     r3 = 0x77444;
    0x0003b92a strb r2, [r3, 8]                      |     *((r3 + 8)) = r2;
    0x0003b92c b 0x3b8dc                             |     goto label_0;
    0x0003b92e ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003b930 ldr r3, [pc, 0x1e8]                   |     
    0x0003b932 ldr r2, [r2]                          |     r2 = *(r2);
    0x0003b934 add r3, pc                            |     r3 = 0x77454;
    0x0003b936 str r2, [r3, 0x1c]                    |     *((r3 + 0x1c)) = r2;
    0x0003b938 b 0x3b8dc                             |     goto label_0;
    0x0003b93a ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003b93c ldr r3, [pc, 0x1e0]                   |     
    0x0003b93e ldr r2, [r2]                          |     r2 = *(r2);
    0x0003b940 add r3, pc                            |     r3 = 0x77464;
    0x0003b942 str.w r2, [r3, 0xcc]                  |     __asm ("str.w r2, [r3, 0xcc]");
    0x0003b946 b 0x3b8dc                             |     goto label_0;
    0x0003b948 ldr r3, [sp, 8]                       |     r3 = var_8h;
    0x0003b94a movs r2, 0xa0                         |     r2 = 0xa0;
    0x0003b94c ldr r3, [r3]                          |     r3 = *(r3);
    0x0003b94e str r2, [r3]                          |     *(r3) = r2;
    0x0003b950 b 0x3b8dc                             |     goto label_0;
    0x0003b952 ldr r3, [sp, 8]                       |     r3 = var_8h;
    0x0003b954 movs r1, 0                            |     
    0x0003b956 movt r1, 0x7fff                       |     r1 = 0x7fff0000;
    0x0003b95a movs r6, 0                            |     r6 = 0;
    0x0003b95c adds r3, 7                            |     r3 += 7;
    0x0003b95e bic r3, r3, 7                         |     r3 = BIT_MASK (r3, 7);
    0x0003b962 ldrd r5, r0, [r3, 8]                  |     __asm ("ldrd r5, r0, [r3, 8]");
    0x0003b966 ldrd r2, r3, [r3]                     |     __asm ("ldrd r2, r3, [r3]");
    0x0003b96a cmp r1, r5                            |     
    0x0003b96c sbcs.w ip, r6, r0                     |     __asm ("sbcs.w ip, r6, r0");
    0x0003b970 itt lo                                |     
                                                     |     if (r1 >= r5) {
    0x0003b972 movlo r5, r1                          |         r5 = r1;
                                                     |     }
                                                     |     if (r1 >= r5) {
    0x0003b974 movlo r0, r6                          |         r0 = r6;
                                                     |     }
    0x0003b976 cmp r3, 0                             |     
    0x0003b978 ldr r1, [pc, 0x1a8]                   |     
    0x0003b97a itt lt                                |     
                                                     |     if (r3 >= 0) {
    0x0003b97c movlt r2, 0                           |         r2 = 0;
                                                     |     }
                                                     |     if (r3 >= 0) {
    0x0003b97e movlt r3, 0                           |         r3 = 0;
                                                     |     }
    0x0003b980 cmp r5, r2                            |     
    0x0003b982 sbcs.w r6, r0, r3                     |     __asm ("sbcs.w r6, r0, r3");
    0x0003b986 add r1, pc                            |     r1 = 0x774ae;
    0x0003b988 itt lt                                |     
                                                     |     if (r5 >= r2) {
    0x0003b98a movlt r2, r5                          |         r2 = r5;
                                                     |     }
                                                     |     if (r5 >= r2) {
    0x0003b98c movlt r3, r0                          |         r3 = r0;
                                                     |     }
    0x0003b98e strd r5, r0, [r1, 0xb0]               |     __asm ("strd r5, r0, [r1, 0xb0]");
    0x0003b992 strd r2, r3, [r1, 0xa8]               |     __asm ("strd r2, r3, [r1, 0xa8]");
    0x0003b996 b 0x3b8dc                             |     goto label_0;
    0x0003b998 ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003b99a ldr r3, [pc, 0x18c]                   |     
    0x0003b99c ldr r2, [r2]                          |     r2 = *(r2);
    0x0003b99e add r3, pc                            |     r3 = 0x774cc;
    0x0003b9a0 strb r2, [r3, 7]                      |     *((r3 + 7)) = r2;
    0x0003b9a2 b 0x3b8dc                             |     goto label_0;
    0x0003b9a4 ldr r3, [pc, 0x184]                   |     
    0x0003b9a6 add r3, pc                            |     
    0x0003b9a8 ldr r3, [r3, 0x6c]                    |     r3 = *(0x77542);
    0x0003b9aa cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x0003b9ac beq.w 0x3bae4                         |         goto label_4;
                                                     |     }
                                                     | label_1:
    0x0003b9b0 ldr.w ip, [pc, 0x17c]                 |     ip = *(0x0003bb30);
    0x0003b9b4 ldr r3, [sp, 8]                       |     r3 = var_8h;
    0x0003b9b6 add ip, pc                            |     
    0x0003b9b8 add.w ip, ip, 0x64                    |     
    0x0003b9bc ldr r5, [r3]                          |     r5 = *(r3);
    0x0003b9be ldm.w ip!, {r0, r1, r2, r3}           |     r0 = *(ip!);
                                                     |     r1 = *((ip! + 4));
                                                     |     r2 = *((ip! + 8));
                                                     |     r3 = *((ip! + 12));
    0x0003b9c2 stm r5!, {r0, r1, r2, r3}             |     *(r5!) = r0;
                                                     |     *((r5! + 4)) = r1;
                                                     |     *((r5! + 8)) = r2;
                                                     |     *((r5! + 12)) = r3;
    0x0003b9c4 ldm.w ip!, {r0, r1, r2, r3}           |     r0 = *(ip!);
                                                     |     r1 = *((ip! + 4));
                                                     |     r2 = *((ip! + 8));
                                                     |     r3 = *((ip! + 12));
    0x0003b9c8 stm r5!, {r0, r1, r2, r3}             |     *(r5!) = r0;
                                                     |     *((r5! + 4)) = r1;
                                                     |     *((r5! + 8)) = r2;
                                                     |     *((r5! + 12)) = r3;
    0x0003b9ca ldm.w ip!, {r0, r1, r2, r3}           |     r0 = *(ip!);
                                                     |     r1 = *((ip! + 4));
                                                     |     r2 = *((ip! + 8));
                                                     |     r3 = *((ip! + 12));
    0x0003b9ce stm r5!, {r0, r1, r2, r3}             |     *(r5!) = r0;
                                                     |     *((r5! + 4)) = r1;
                                                     |     *((r5! + 8)) = r2;
                                                     |     *((r5! + 12)) = r3;
    0x0003b9d0 ldr.w r3, [ip]                        |     r3 = *(ip);
    0x0003b9d4 str r3, [r5]                          |     *(r5) = r3;
    0x0003b9d6 b 0x3b8dc                             |     goto label_0;
    0x0003b9d8 ldr r3, [sp, 8]                       |     r3 = var_8h;
    0x0003b9da ldr.w ip, [pc, 0x158]                 |     
    0x0003b9de ldr r5, [r3]                          |     r5 = *(r3);
    0x0003b9e0 add ip, pc                            |     
    0x0003b9e2 add.w ip, ip, 0x64                    |     ip = 0x7757e;
    0x0003b9e6 ldm r5!, {r0, r1, r2, r3}             |     r0 = *(r5!);
                                                     |     r1 = *((r5! + 4));
                                                     |     r2 = *((r5! + 8));
                                                     |     r3 = *((r5! + 12));
    0x0003b9e8 stm.w ip!, {r0, r1, r2, r3}           |     *(ip!) = r0;
                                                     |     *((ip! + 4)) = r1;
                                                     |     *((ip! + 8)) = r2;
                                                     |     *((ip! + 12)) = r3;
    0x0003b9ec ldm r5!, {r0, r1, r2, r3}             |     r0 = *(r5!);
                                                     |     r1 = *((r5! + 4));
                                                     |     r2 = *((r5! + 8));
                                                     |     r3 = *((r5! + 12));
    0x0003b9ee stm.w ip!, {r0, r1, r2, r3}           |     *(ip!) = r0;
                                                     |     *((ip! + 4)) = r1;
                                                     |     *((ip! + 8)) = r2;
                                                     |     *((ip! + 12)) = r3;
    0x0003b9f2 ldm r5!, {r0, r1, r2, r3}             |     r0 = *(r5!);
                                                     |     r1 = *((r5! + 4));
                                                     |     r2 = *((r5! + 8));
                                                     |     r3 = *((r5! + 12));
    0x0003b9f4 stm.w ip!, {r0, r1, r2, r3}           |     *(ip!) = r0;
                                                     |     *((ip! + 4)) = r1;
                                                     |     *((ip! + 8)) = r2;
                                                     |     *((ip! + 12)) = r3;
    0x0003b9f8 ldr r3, [r5]                          |     r3 = *(r5);
    0x0003b9fa str.w r3, [ip]                        |     __asm ("str.w r3, [ip]");
    0x0003b9fe b 0x3b8dc                             |     goto label_0;
    0x0003ba00 ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003ba02 ldr r3, [pc, 0x134]                   |     
    0x0003ba04 ldr r1, [r2]                          |     r1 = *(r2);
    0x0003ba06 add r3, pc                            |     r3 = 0x77544;
    0x0003ba08 str.w r1, [r3, 0xec]                  |     __asm ("str.w r1, [r3, 0xec]");
    0x0003ba0c ldr r2, [r2, 4]                       |     r2 = *((r2 + 4));
    0x0003ba0e str.w r2, [r3, 0xf0]                  |     __asm ("str.w r2, [r3, 0xf0]");
    0x0003ba12 b 0x3b8dc                             |     goto label_0;
    0x0003ba14 ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003ba16 ldr r3, [pc, 0x124]                   |     
    0x0003ba18 ldr r1, [r2]                          |     r1 = *(r2);
    0x0003ba1a add r3, pc                            |     r3 = 0x7755c;
    0x0003ba1c str r1, [r3, 0x14]                    |     *((r3 + 0x14)) = r1;
    0x0003ba1e ldr r2, [r2, 4]                       |     r2 = *((r2 + 4));
    0x0003ba20 str r2, [r3, 0x18]                    |     *((r3 + 0x18)) = r2;
    0x0003ba22 b 0x3b8dc                             |     goto label_0;
    0x0003ba24 ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003ba26 ldr r3, [pc, 0x118]                   |     
    0x0003ba28 ldr r2, [r2]                          |     r2 = *(r2);
    0x0003ba2a add r3, pc                            |     r3 = 0x77570;
    0x0003ba2c strb r2, [r3, 6]                      |     *((r3 + 6)) = r2;
    0x0003ba2e b 0x3b8dc                             |     goto label_0;
    0x0003ba30 ldr r5, [pc, 0x110]                   |     
    0x0003ba32 ldr r3, [sp, 8]                       |     r3 = var_8h;
    0x0003ba34 add r5, pc                            |     r5 = 0x7757c;
    0x0003ba36 adds r5, 0x40                         |     r5 += 0x40;
    0x0003ba38 ldr r6, [r3]                          |     r6 = *(r3);
    0x0003ba3a ldm r5!, {r0, r1, r2, r3}             |     r0 = *(r5!);
                                                     |     r1 = *((r5! + 4));
                                                     |     r2 = *((r5! + 8));
                                                     |     r3 = *((r5! + 12));
    0x0003ba3c stm r6!, {r0, r1, r2, r3}             |     *(r6!) = r0;
                                                     |     *((r6! + 4)) = r1;
                                                     |     *((r6! + 8)) = r2;
                                                     |     *((r6! + 12)) = r3;
    0x0003ba3e ldm r5!, {r0, r1, r2, r3}             |     r0 = *(r5!);
                                                     |     r1 = *((r5! + 4));
                                                     |     r2 = *((r5! + 8));
                                                     |     r3 = *((r5! + 12));
    0x0003ba40 stm r6!, {r0, r1, r2, r3}             |     *(r6!) = r0;
                                                     |     *((r6! + 4)) = r1;
                                                     |     *((r6! + 8)) = r2;
                                                     |     *((r6! + 12)) = r3;
    0x0003ba42 ldr r3, [r5]                          |     r3 = *(0x7757c);
    0x0003ba44 str r3, [r6]                          |     *(r6) = r3;
    0x0003ba46 b 0x3b8dc                             |     goto label_0;
    0x0003ba48 ldr r3, [sp, 8]                       |     r3 = var_8h;
    0x0003ba4a ldr r5, [pc, 0xfc]                    |     
    0x0003ba4c ldr r6, [r3]                          |     r6 = *(r3);
    0x0003ba4e add r5, pc                            |     r5 = 0x7759c;
    0x0003ba50 adds r5, 0x40                         |     r5 += 0x40;
    0x0003ba52 ldm r6!, {r0, r1, r2, r3}             |     r0 = *(r6!);
                                                     |     r1 = *((r6! + 4));
                                                     |     r2 = *((r6! + 8));
                                                     |     r3 = *((r6! + 12));
    0x0003ba54 stm r5!, {r0, r1, r2, r3}             |     *(r5!) = r0;
                                                     |     *((r5! + 4)) = r1;
                                                     |     *((r5! + 8)) = r2;
                                                     |     *((r5! + 12)) = r3;
    0x0003ba56 ldm r6!, {r0, r1, r2, r3}             |     r0 = *(r6!);
                                                     |     r1 = *((r6! + 4));
                                                     |     r2 = *((r6! + 8));
                                                     |     r3 = *((r6! + 12));
    0x0003ba58 stm r5!, {r0, r1, r2, r3}             |     *(r5!) = r0;
                                                     |     *((r5! + 4)) = r1;
                                                     |     *((r5! + 8)) = r2;
                                                     |     *((r5! + 12)) = r3;
    0x0003ba5a ldr r3, [r6]                          |     r3 = *(r6);
    0x0003ba5c str r3, [r5]                          |     *(r5) = r3;
    0x0003ba5e b 0x3b8dc                             |     goto label_0;
    0x0003ba60 ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003ba62 ldr r3, [pc, 0xe8]                    |     
    0x0003ba64 ldr r2, [r2]                          |     r2 = *(r2);
    0x0003ba66 add r3, pc                            |     r3 = 0x775b8;
    0x0003ba68 str r2, [r3]                          |     *(r3) = r2;
    0x0003ba6a b 0x3b8dc                             |     goto label_0;
    0x0003ba6c ldr r2, [sp, 8]                       |     r2 = var_8h;
    0x0003ba6e ldr r3, [pc, 0xe0]                    |     
    0x0003ba70 ldrd r1, r0, [r2]                     |     __asm ("ldrd r1, r0, [r2]");
    0x0003ba74 add r3, pc                            |     r3 = 0x775ca;
    0x0003ba76 str.w r0, [r3, 0xbc]                  |     __asm ("str.w r0, [r3, 0xbc]");
    0x0003ba7a ldr r2, [r2, 8]                       |     r2 = *((r2 + 8));
    0x0003ba7c str.w r1, [r3, 0xb8]                  |     __asm ("str.w r1, [r3, 0xb8]");
    0x0003ba80 str.w r2, [r3, 0xc0]                  |     __asm ("str.w r2, [r3, 0xc0]");
    0x0003ba84 b 0x3b8dc                             |     goto label_0;
    0x0003ba86 ldr r3, [pc, 0xcc]                    |     
    0x0003ba88 add r3, pc                            |     
    0x0003ba8a ldr r3, [r3, 0x20]                    |     r3 = *(0x77602);
    0x0003ba8c cbz r3, 0x3bad4                       |     
                                                     |     while (1) {
    0x0003ba8e ldr r5, [pc, 0xc8]                    |         
    0x0003ba90 ldr r3, [sp, 8]                       |         r3 = var_8h;
    0x0003ba92 add r5, pc                            |         r5 = 0x775f0;
    0x0003ba94 adds r5, 0x20                         |         r5 += 0x20;
    0x0003ba96 ldr r6, [r3]                          |         r6 = *(r3);
    0x0003ba98 ldm r5!, {r0, r1, r2, r3}             |         r0 = *(r5!);
                                                     |         r1 = *((r5! + 4));
                                                     |         r2 = *((r5! + 8));
                                                     |         r3 = *((r5! + 12));
    0x0003ba9a stm r6!, {r0, r1, r2, r3}             |         *(r6!) = r0;
                                                     |         *((r6! + 4)) = r1;
                                                     |         *((r6! + 8)) = r2;
                                                     |         *((r6! + 12)) = r3;
    0x0003ba9c ldm.w r5, {r0, r1, r2, r3}            |         r0 = *(r5);
                                                     |         r1 = *((r5 + 4));
                                                     |         r2 = *((r5 + 8));
                                                     |         r3 = *((r5 + 12));
    0x0003baa0 stm.w r6, {r0, r1, r2, r3}            |         *(r6) = r0;
                                                     |         *((r6 + 4)) = r1;
                                                     |         *((r6 + 8)) = r2;
                                                     |         *((r6 + 12)) = r3;
    0x0003baa4 b 0x3b8dc                             |         goto label_0;
    0x0003baa6 ldr r3, [sp, 8]                       |         r3 = var_8h;
    0x0003baa8 ldr r5, [pc, 0xb0]                    |         
    0x0003baaa ldr r6, [r3]                          |         r6 = *(r3);
    0x0003baac add r5, pc                            |         r5 = 0x7760c;
    0x0003baae adds r5, 0x20                         |         r5 += 0x20;
    0x0003bab0 ldm r6!, {r0, r1, r2, r3}             |         r0 = *(r6!);
                                                     |         r1 = *((r6! + 4));
                                                     |         r2 = *((r6! + 8));
                                                     |         r3 = *((r6! + 12));
    0x0003bab2 stm r5!, {r0, r1, r2, r3}             |         *(r5!) = r0;
                                                     |         *((r5! + 4)) = r1;
                                                     |         *((r5! + 8)) = r2;
                                                     |         *((r5! + 12)) = r3;
    0x0003bab4 ldm.w r6, {r0, r1, r2, r3}            |         r0 = *(r6);
                                                     |         r1 = *((r6 + 4));
                                                     |         r2 = *((r6 + 8));
                                                     |         r3 = *((r6 + 12));
    0x0003bab8 stm.w r5, {r0, r1, r2, r3}            |         *(r5) = r0;
                                                     |         *((r5 + 4)) = r1;
                                                     |         *((r5 + 8)) = r2;
                                                     |         *((r5 + 12)) = r3;
    0x0003babc b 0x3b8dc                             |         goto label_0;
    0x0003babe ldr r3, [pc, 0xa0]                    |         
    0x0003bac0 movw r2, 0x101                        |         r2 = 0x101;
    0x0003bac4 add r3, pc                            |         r3 = 0x7762a;
    0x0003bac6 strh r2, [r3, 4]                      |         *((r3 + 4)) = r2;
    0x0003bac8 b 0x3b8dc                             |         goto label_0;
    0x0003baca ldr r3, [pc, 0x98]                    |         
    0x0003bacc movs r2, 1                            |         r2 = 1;
    0x0003bace add r3, pc                            |         r3 = 0x77638;
    0x0003bad0 strh r2, [r3, 4]                      |         *((r3 + 4)) = r2;
    0x0003bad2 b 0x3b8dc                             |         goto label_0;
    0x0003bad4 ldr r1, [pc, 0x90]                    |         
    0x0003bad6 movs r0, 4                            |         r0 = 4;
    0x0003bad8 add r1, pc                            |         r1 = 0x77644;
    0x0003bada addw r1, r1, 0x948                    |         __asm ("addw r1, r1, aav.0x000000ff");
    0x0003bade blx 0xa078                            |         fcn_0000a078 ();
    0x0003bae2 b 0x3ba8e                             |         
                                                     |     }
                                                     | label_4:
    0x0003bae4 ldr r1, [pc, 0x84]                    |     
    0x0003bae6 movs r0, 0x12                         |     r0 = 0x12;
    0x0003bae8 add r1, pc                            |     r1 = 0x77658;
    0x0003baea addw r1, r1, 0x968                    |     __asm ("addw r1, r1, aav.0x000000ff");
    0x0003baee blx 0xa078                            |     fcn_0000a078 ();
    0x0003baf2 b 0x3b9b0                             |     goto label_1;
                                                     | label_3:
    0x0003baf4 blx 0x9b44                            |     fcn_00009b44 ();
    0x0003baf8 ldrsb r4, [r5, r6]                    |     r4 = *((r5 + r6));
    0x0003bafa movs r6, r0                           |     r6 = r0;
    0x0003bafc strh r2, [r4, r2]                     |     *((r4 + r2)) = r2;
    0x0003bafe movs r6, r0                           |     r6 = r0;
    0x0003bb00 lsls r0, r1, 0x13                     |     r0 = r1 << 0x13;
    0x0003bb02 movs r0, r0                           |     
    0x0003bb04 subs r6, r7, r6                       |     r6 = r7 - r6;
    0x0003bb06 movs r5, r0                           |     r5 = r0;
    0x0003bb08 adds r4, r2, r7                       |     r4 = r2 + r7;
    0x0003bb0a movs r5, r0                           |     r5 = r0;
    0x0003bb0c strh r0, [r4, r0]                     |     *((r4 + r0)) = r0;
    0x0003bb0e movs r6, r0                           |     r6 = r0;
    0x0003bb10 ldrsb r6, [r7, r3]                    |     r6 = *((r7 + r3));
    0x0003bb12 movs r6, r0                           |     r6 = r0;
    0x0003bb14 ldrsb r6, [r5, r3]                    |     r6 = *((r5 + r3));
    0x0003bb16 movs r6, r0                           |     r6 = r0;
    0x0003bb18 ldrsb r4, [r3, r3]                    |     r4 = *((r3 + r3));
    0x0003bb1a movs r6, r0                           |     r6 = r0;
    0x0003bb1c ldrsb r0, [r2, r3]                    |     r0 = *((r2 + r3));
    0x0003bb1e movs r6, r0                           |     r6 = r0;
    0x0003bb20 ldrsb r4, [r0, r3]                    |     r4 = *((r0 + r3));
    0x0003bb22 movs r6, r0                           |     r6 = r0;
    0x0003bb24 ldrsb r6, [r7, r1]                    |     r6 = *((r7 + r1));
    0x0003bb26 movs r6, r0                           |     r6 = r0;
    0x0003bb28 ldrsb r6, [r4, r1]                    |     r6 = *((r4 + r1));
    0x0003bb2a movs r6, r0                           |     r6 = r0;
    0x0003bb2c ldrsb r6, [r3, r1]                    |     r6 = *((r3 + r1));
    0x0003bb2e movs r6, r0                           |     r6 = r0;
    0x0003bb30 ldrsb r6, [r1, r1]                    |     r6 = *((r1 + r1));
    0x0003bb32 movs r6, r0                           |     r6 = r0;
    0x0003bb34 ldrsb r4, [r4, r0]                    |     r4 = *((r4 + r0));
    0x0003bb36 movs r6, r0                           |     r6 = r0;
    0x0003bb38 strb r6, [r7, r7]                     |     *((r7 + r7)) = r6;
    0x0003bb3a movs r6, r0                           |     r6 = r0;
    0x0003bb3c strb r2, [r5, r7]                     |     *((r5 + r7)) = r2;
    0x0003bb3e movs r6, r0                           |     r6 = r0;
    0x0003bb40 strb r2, [r3, r7]                     |     *((r3 + r7)) = r2;
    0x0003bb42 movs r6, r0                           |     r6 = r0;
    0x0003bb44 strb r0, [r2, r7]                     |     *((r2 + r7)) = r0;
    0x0003bb46 movs r6, r0                           |     r6 = r0;
    0x0003bb48 strb r6, [r6, r6]                     |     *((r6 + r6)) = r6;
    0x0003bb4a movs r6, r0                           |     r6 = r0;
    0x0003bb4c strb r6, [r3, r6]                     |     *((r3 + r6)) = r6;
    0x0003bb4e movs r6, r0                           |     r6 = r0;
    0x0003bb50 strb r0, [r2, r6]                     |     *((r2 + r6)) = r0;
    0x0003bb52 movs r6, r0                           |     r6 = r0;
    0x0003bb54 strb r4, [r7, r5]                     |     *((r7 + r5)) = r4;
    0x0003bb56 movs r6, r0                           |     r6 = r0;
    0x0003bb58 strb r2, [r6, r5]                     |     *((r6 + r5)) = r2;
    0x0003bb5a movs r6, r0                           |     r6 = r0;
    0x0003bb5c strb r0, [r3, r5]                     |     *((r3 + r5)) = r0;
    0x0003bb5e movs r6, r0                           |     r6 = r0;
    0x0003bb60 strb r0, [r0, r5]                     |     *((r0 + r5)) = r0;
    0x0003bb62 movs r6, r0                           |     r6 = r0;
    0x0003bb64 strb r6, [r6, r4]                     |     *((r6 + r4)) = r6;
    0x0003bb66 movs r6, r0                           |     r6 = r0;
    0x0003bb68 subs r4, 0x94                         |     r4 -= 0x94;
    0x0003bb6a movs r6, r0                           |     r6 = r0;
    0x0003bb6c subs r4, 0x84                         |     r4 -= 0x84;
    0x0003bb6e movs r6, r0                           |     r6 = r0;
                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3dbac */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) sym.sqlite3_create_filename ()                           | void sqlite3_create_filename (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0003dbac svcmi 0xf8e92d                                        |     __asm ("svcmi aav.0x000000ff");
    0x0003dbb0 mov r6, r1                                            |     r6 = r1;
    0x0003dbb2 mov r7, r2                                            |     r7 = r2;
    0x0003dbb4 mov r5, r3                                            |     r5 = r3;
    0x0003dbb6 mov r8, r0                                            |     r8 = r0;
    0x0003dbb8 blx 0x9e8c                                            |     r0 = fcn_00009e8c ();
    0x0003dbbc mov r4, r0                                            |     r4 = r0;
    0x0003dbbe mov r0, r6                                            |     r0 = r6;
    0x0003dbc0 blx 0x9e8c                                            |     r0 = fcn_00009e8c ();
    0x0003dbc4 mov sb, r0                                            |     sb = r0;
    0x0003dbc6 mov r0, r7                                            |     r0 = r7;
    0x0003dbc8 add r4, sb                                            |     r4 += sb;
    0x0003dbca blx 0x9e8c                                            |     fcn_00009e8c ();
    0x0003dbce adds r4, 0xa                                          |     r4 += 0xa;
    0x0003dbd0 lsls r3, r5, 1                                        |     r3 = r5 << 1;
    0x0003dbd2 add r0, r4                                            |     r0 += r4;
    0x0003dbd4 movs r4, 0                                            |     r4 = 0;
    0x0003dbd6 cmp r3, r4                                            |     
                                                                     |     if (r3 <= r4) {
    0x0003dbd8 ble 0x3dc7e                                           |         goto label_1;
                                                                     |     }
    0x0003dbda mov fp, r4                                            |     
    0x0003dbdc ldr r4, [sp, 0x28]                                    |     r4 = *(arg_28h);
    0x0003dbde mov sb, r0                                            |     sb = r0;
    0x0003dbe0 mov sl, r4                                            |     sl = r4;
    0x0003dbe2 add.w r5, r4, r5, lsl 3                               |     r5 = r4 + (r5 << 3);
                                                                     |     do {
    0x0003dbe6 ldr r0, [sl], 4                                       |         r0 = *(sl);
                                                                     |         sl += 4;
    0x0003dbea blx 0x9e8c                                            |         fcn_00009e8c ();
    0x0003dbee adds r0, 1                                            |         r0++;
    0x0003dbf0 adds.w r0, r0, sb                                     |         r0 += sb;
    0x0003dbf4 adc fp, fp, 0                                         |         __asm ("adc fp, fp, 0");
    0x0003dbf8 cmp r5, sl                                            |         
    0x0003dbfa mov sb, r0                                            |         sb = r0;
    0x0003dbfc bne 0x3dbe6                                           |         
                                                                     |     } while (r5 != sl);
    0x0003dbfe mov r1, fp                                            |     r1 = fp;
    0x0003dc00 blx 0xa1f8                                            |     r0 = fcn_0000a1f8 ();
    0x0003dc04 mov sl, r0                                            |     sl = r0;
                                                                     |     if (r0 == 0) {
    0x0003dc06 cbz r0, 0x3dc74                                       |         goto label_2;
                                                                     |     }
    0x0003dc08 movs r3, 0                                            |     r3 = 0;
    0x0003dc0a mov r0, r8                                            |     r0 = r8;
    0x0003dc0c str r3, [sl], 4                                       |     *(sl) = r3;
                                                                     |     sl += 4;
    0x0003dc10 blx 0x9e8c                                            |     fcn_00009e8c ();
    0x0003dc14 mov r1, r8                                            |     r1 = r8;
    0x0003dc16 adds r2, r0, 1                                        |     r2 = r0 + 1;
    0x0003dc18 mov r0, sl                                            |     r0 = sl;
    0x0003dc1a add.w sb, sl, r2                                      |     sb = sl + r2;
    0x0003dc1e blx 0x9e2c                                            |     fcn_00009e2c ();
                                                                     |     do {
    0x0003dc22 ldr fp, [r4], 4                                       |         fp = *(r4);
                                                                     |         r4 += 4;
    0x0003dc26 mov r0, fp                                            |         r0 = fp;
    0x0003dc28 blx 0x9e8c                                            |         r0 = fcn_00009e8c ();
    0x0003dc2c add.w r8, r0, 1                                       |         r8 = r0 + 1;
    0x0003dc30 mov r1, fp                                            |         r1 = fp;
    0x0003dc32 mov r0, sb                                            |         r0 = sb;
    0x0003dc34 mov r2, r8                                            |         r2 = r8;
    0x0003dc36 blx 0x9e2c                                            |         fcn_00009e2c ();
    0x0003dc3a cmp r4, r5                                            |         
    0x0003dc3c add sb, r8                                            |         sb += r8;
    0x0003dc3e bne 0x3dc22                                           |         
                                                                     |     } while (r4 != r5);
                                                                     | label_0:
    0x0003dc40 movs r5, 0                                            |     r5 = 0;
    0x0003dc42 mov r0, r6                                            |     r0 = r6;
    0x0003dc44 strb r5, [sb], 1                                      |     *(sb) = r5;
                                                                     |     sb++;
    0x0003dc48 blx 0x9e8c                                            |     fcn_00009e8c ();
    0x0003dc4c mov r1, r6                                            |     r1 = r6;
    0x0003dc4e adds r2, r0, 1                                        |     r2 = r0 + 1;
    0x0003dc50 mov r0, sb                                            |     r0 = sb;
    0x0003dc52 add.w r6, sb, r2                                      |     r6 = sb + r2;
    0x0003dc56 blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0003dc5a mov r0, r7                                            |     r0 = r7;
    0x0003dc5c blx 0x9e8c                                            |     r0 = fcn_00009e8c ();
    0x0003dc60 adds r4, r0, 1                                        |     r4 = r0 + 1;
    0x0003dc62 mov r1, r7                                            |     r1 = r7;
    0x0003dc64 mov r2, r4                                            |     r2 = r4;
    0x0003dc66 mov r0, r6                                            |     r0 = r6;
    0x0003dc68 blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0003dc6c mov r0, sl                                            |     r0 = sl;
    0x0003dc6e strh r5, [r6, r4]                                     |     *((r6 + r4)) = r5;
    0x0003dc70 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                     |     do {
                                                                     | label_2:
    0x0003dc74 mov.w sl, 0                                           |         sl = 0;
    0x0003dc78 mov r0, sl                                            |         r0 = sl;
    0x0003dc7a pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                     | label_1:
    0x0003dc7e mov r1, r4                                            |         r1 = r4;
    0x0003dc80 blx 0xa1f8                                            |         r0 = fcn_0000a1f8 ();
    0x0003dc84 mov sl, r0                                            |         sl = r0;
    0x0003dc86 cmp r0, 0                                             |         
    0x0003dc88 beq 0x3dc74                                           |         
                                                                     |     } while (r0 == 0);
    0x0003dc8a str r4, [sl], 4                                       |     *(sl) = r4;
                                                                     |     sl += 4;
    0x0003dc8e mov r0, r8                                            |     r0 = r8;
    0x0003dc90 blx 0x9e8c                                            |     fcn_00009e8c ();
    0x0003dc94 mov r1, r8                                            |     r1 = r8;
    0x0003dc96 adds r2, r0, 1                                        |     r2 = r0 + 1;
    0x0003dc98 mov r0, sl                                            |     r0 = sl;
    0x0003dc9a add.w sb, sl, r2                                      |     sb = sl + r2;
    0x0003dc9e blx 0x9e2c                                            |     fcn_00009e2c ();
    0x0003dca2 b 0x3dc40                                             |     goto label_0;
                                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1957c).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x83cb0 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.sqlite3_deserialize ()                           | void sqlite3_deserialize (int16_t arg_240h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_1dh;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_48h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00083cb0 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00083cb4 mov r7, r2                                        |     r7 = r2;
    0x00083cb6 ldr r2, [pc, 0x12c]                               |     
    0x00083cb8 sub sp, 0x14                                      |     
    0x00083cba mov r5, r1                                        |     r5 = r1;
    0x00083cbc mov r4, r0                                        |     r4 = r0;
    0x00083cbe ldr r3, [pc, 0x128]                               |     r3 = *(0x83dea);
    0x00083cc0 add r2, pc                                        |     r2 = 0x107aaa;
    0x00083cc2 ldr r0, [r0, 0xc]                                 |     r0 = *(var_0hxc);
    0x00083cc4 ldrd fp, sl, [sp, 0x40]                           |     __asm ("ldrd fp, sl, [var_40h]");
    0x00083cc8 ldr r3, [r2, r3]                                  |     
    0x00083cca ldr r3, [r3]                                      |     r3 = imp.atan;
    0x00083ccc str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00083cce mov.w r3, 0                                       |     r3 = 0;
    0x00083cd2 movs r3, 0                                        |     r3 = 0;
    0x00083cd4 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00083cd6 blx 0xa12c                                        |     fcn_0000a12c ();
    0x00083cda cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00083cdc beq 0x83dd4                                       |         goto label_5;
                                                                 |     }
                                                                 | label_3:
    0x00083cde mov r1, r5                                        |     r1 = r5;
    0x00083ce0 mov r0, r4                                        |     r0 = r4;
    0x00083ce2 bl 0x17cf8                                        |     r0 = fcn_00017cf8 (r0, r1);
    0x00083ce6 cmp r0, 1                                         |     
    0x00083ce8 mov r6, r0                                        |     r6 = r0;
    0x00083cea ite gt                                            |     
                                                                 |     if (r0 <= 1) {
    0x00083cec movgt r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r0 <= 1) {
    0x00083cf0 mov.w r8, 1                                       |         r8 = 1;
                                                                 |     }
    0x00083cf4 cmp r0, 0                                         |     
    0x00083cf6 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x00083cf8 moveq r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x00083cfc cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00083d00 beq 0x83d3e                                       |         goto label_6;
                                                                 |     }
                                                                 | label_1:
    0x00083d02 mov.w r8, 1                                       |     r8 = 1;
                                                                 | label_0:
    0x00083d06 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00083d08 blx 0x9f34                                        |     fcn_00009f34 ();
                                                                 |     if (r7 == 0) {
    0x00083d0c cbz r7, 0x83d14                                   |         goto label_2;
                                                                 |     }
    0x00083d0e ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00083d10 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
    0x00083d12 bmi 0x83d36                                       |     
                                                                 |     while (1) {
                                                                 | label_2:
    0x00083d14 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x00083d16 blx 0x9d10                                        |         fcn_00009d10 ();
    0x00083d1a ldr r2, [pc, 0xd0]                                |         
    0x00083d1c ldr r3, [pc, 0xc8]                                |         r3 = *(0x83de8);
    0x00083d1e add r2, pc                                        |         r2 = 0x107b10;
    0x00083d20 ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x00083d22 ldr r2, [r3]                                      |         r2 = imp.atan;
    0x00083d24 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00083d26 eors r2, r3                                       |         r2 ^= r3;
    0x00083d28 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00083d2c bne 0x83de0                                       |             goto label_7;
                                                                 |         }
    0x00083d2e mov r0, r8                                        |         r0 = r8;
    0x00083d30 add sp, 0x14                                      |         
    0x00083d32 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00083d36 mov r0, r7                                        |         r0 = r7;
    0x00083d38 blx 0x9c24                                        |         fcn_00009c24 ();
    0x00083d3c b 0x83d14                                         |         
                                                                 |     }
                                                                 | label_6:
    0x00083d3e ldr r0, [pc, 0xb0]                                |     
    0x00083d40 mov r1, r5                                        |     r1 = r5;
    0x00083d42 add r0, pc                                        |     r0 = 0x107b38;
    0x00083d44 blx 0x97f0                                        |     r0 = fcn_000097f0 ();
    0x00083d48 mov sb, r0                                        |     sb = r0;
    0x00083d4a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00083d4c beq 0x83dda                                       |         goto label_8;
                                                                 |     }
    0x00083d4e mov r1, r0                                        |     r1 = r0;
    0x00083d50 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00083d54 add r3, sp, 8                                     |     r3 += var_8h;
    0x00083d56 mov.w r2, -1                                      |     r2 = -1;
    0x00083d5a mov r0, r4                                        |     r0 = r4;
    0x00083d5c blx 0x9a18                                        |     r0 = fcn_00009a18 ();
    0x00083d60 mov r8, r0                                        |     r8 = r0;
    0x00083d62 mov r0, sb                                        |     r0 = sb;
    0x00083d64 blx 0x9c24                                        |     fcn_00009c24 ();
    0x00083d68 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00083d6c bne 0x83d06                                       |         goto label_0;
                                                                 |     }
    0x00083d6e ldrb.w r3, [r4, 0xb2]                             |     r3 = *((r4 + 0xb2));
    0x00083d72 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00083d74 strb.w r6, [r4, 0xb0]                             |     *((r4 + 0xb0)) = r6;
    0x00083d78 orr r3, r3, 4                                     |     r3 |= 4;
    0x00083d7c strb.w r3, [r4, 0xb2]                             |     *((r4 + 0xb2)) = r3;
    0x00083d80 blx 0x9d7c                                        |     fcn_00009d7c ();
    0x00083d84 ldrb.w r3, [r4, 0xb2]                             |     r3 = *((r4 + 0xb2));
    0x00083d88 cmp r0, 0x65                                      |     
    0x00083d8a bfi r3, r8, 2, 1                                  |     value_0 = BIT_MASK (2, 1);
                                                                 |     value_1 = r8 & value_0;
                                                                 |     value_0 = ~value_0;
                                                                 |     r3 &= value_0;
                                                                 |     r3 |= value_1;
    0x00083d8e strb.w r3, [r4, 0xb2]                             |     *((r4 + 0xb2)) = r3;
                                                                 |     if (r0 != 0x65) {
    0x00083d92 bne 0x83d02                                       |         goto label_1;
                                                                 |     }
    0x00083d94 mov r1, r5                                        |     r1 = r5;
    0x00083d96 mov r0, r4                                        |     r0 = r4;
    0x00083d98 bl 0x19f3c                                        |     r0 = fcn_00019f3c ();
    0x00083d9c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00083d9e beq 0x83d02                                       |         goto label_1;
                                                                 |     }
    0x00083da0 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x00083da2 ldrd r1, r2, [sp, 0x38]                           |     __asm ("ldrd r1, r2, [var_38h]");
    0x00083da6 str r7, [r3, 0x18]                                |     *((r3 + 0x18)) = r7;
    0x00083da8 strd r1, r2, [r3]                                 |     __asm ("strd r1, r2, [r3]");
    0x00083dac ldr r2, [pc, 0x44]                                |     
    0x00083dae strd fp, sl, [r3, 8]                              |     __asm ("strd fp, sl, [r3, 8]");
    0x00083db2 add r2, pc                                        |     r2 = 0x107baa;
    0x00083db4 ldrd r1, r2, [r2, 0xf8]                           |     __asm ("ldrd r1, r2, [r2, 0xf8]");
    0x00083db8 cmp r1, fp                                        |     
    0x00083dba sbcs.w r0, r2, sl                                 |     __asm ("sbcs.w r0, r2, sl");
    0x00083dbe ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00083dc0 itt lt                                            |     
                                                                 |     if (r1 >= fp) {
    0x00083dc2 movlt r2, sl                                      |         r2 = sl;
                                                                 |     }
                                                                 |     if (r1 >= fp) {
    0x00083dc4 movlt r1, fp                                      |         r1 = fp;
                                                                 |     }
    0x00083dc6 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x00083dc8 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00083dca str r1, [r3, 0x10]                                |     *((r3 + 0x10)) = r1;
    0x00083dcc str r2, [r3, 0x24]                                |     *((r3 + 0x24)) = r2;
    0x00083dce blx 0x9f34                                        |     fcn_00009f34 ();
    0x00083dd2 b 0x83d14                                         |     goto label_2;
                                                                 | label_5:
    0x00083dd4 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00083dd6 ldr r5, [r3]                                      |     r5 = *(r3);
    0x00083dd8 b 0x83cde                                         |     goto label_3;
                                                                 | label_8:
    0x00083dda mov.w r8, 7                                       |     r8 = 7;
    0x00083dde b 0x83d06                                         |     goto label_0;
                                                                 | label_7:
    0x00083de0 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00083de4 ldm r6, {r6}                                      |     r6 = *(r6);
    0x00083de6 movs r1, r0                                       |     r1 = r0;
    0x00083de8 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00083dea movs r0, r0                                       |     
    0x00083dec ldm r5, {r1, r5, r6, r7}                          |     r1 = *(r5);
                                                                 |     r5 = *((r5 + 4));
                                                                 |     r6 = *((r5 + 8));
                                                                 |     r7 = *((r5 + 12));
    0x00083dee movs r1, r0                                       |     r1 = r0;
    0x00083df0 stc2 p0, c0, [r2], -0                             |     __asm ("stc2 p0, c0, [r2], -0");
                                                                 |     if (r1 >= r0) {
    0x00083df4 bhs 0x83e9c                                       |         goto label_9;
                                                                 |     }
    0x00083df6 movs r1, r0                                       |     r1 = r0;
    0x00083df8 ldrd r3, r2, [r0, 8]                              |     __asm ("ldrd r3, r2, [r0, 8]");
    0x00083dfc push {r4, r5, r6, lr}                             |     
    0x00083dfe mov r4, r0                                        |     r4 = r0;
    0x00083e00 ldr r0, [r0, 4]                                   |     r0 = *((r0 + 4));
    0x00083e02 adds r3, 1                                        |     r3++;
    0x00083e04 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x00083e08 strd r3, r2, [r4, 8]                              |     __asm ("strd r3, r2, [r4, 8]");
    0x00083e0c blx 0x9d7c                                        |     r0 = fcn_00009d7c ();
    0x00083e10 cmp r0, 0x64                                      |     
    0x00083e12 it eq                                             |     
                                                                 |     if (r0 != 0x64) {
    0x00083e14 moveq r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r0 != 0x64) {
    0x00083e16 beq 0x83e3c                                       |         
    0x00083e18 movs r6, 0                                        |         r6 = 0;
    0x00083e1a ldr r0, [r4, 4]                                   |         r0 = *((r4 + 4));
    0x00083e1c blx 0x9f34                                        |         fcn_00009f34 ();
    0x00083e20 str r6, [r4, 4]                                   |         *((r4 + 4)) = r6;
    0x00083e22 mov r5, r0                                        |         r5 = r0;
    0x00083e24 mov r0, r6                                        |         r0 = r6;
    0x00083e26 blx 0x9f34                                        |         fcn_00009f34 ();
    0x00083e2a ldr r0, [r4, 0x10]                                |         r0 = *((r4 + 0x10));
    0x00083e2c str r6, [r4, 4]                                   |         *((r4 + 4)) = r6;
    0x00083e2e blx 0x9c24                                        |         fcn_00009c24 ();
    0x00083e32 ldr r0, [r4, 0x14]                                |         r0 = *((r4 + 0x14));
    0x00083e34 str r6, [r4, 0x10]                                |         *((r4 + 0x10)) = r6;
    0x00083e36 blx 0x9c24                                        |         fcn_00009c24 ();
    0x00083e3a str r6, [r4, 0x14]                                |         *((r4 + 0x14)) = r6;
                                                                 |     }
    0x00083e3c mov r0, r5                                        |     r0 = r5;
    0x00083e3e pop {r4, r5, r6, pc}                              |     
                                                                 |     do {
    0x00083e9a ldr r0, [r4, 4]!                                  |         r0 = *((r4 += 4));
                                                                 | label_9:
    0x00083e9c lsrs r4, r0, 0x1c                                 |         r4 = r0 >> 0x1c;
    0x00083e9e blx 0x9688                                        |         r0 = fcn_00009688 ();
    0x00083ea2 mov r1, r0                                        |         r1 = r0;
                                                                 |         if (r0 != 0) {
    0x00083ea4 cbz r0, 0x83eb4                                   |             
    0x00083ea6 mov r0, r8                                        |             r0 = r8;
    0x00083ea8 blx 0x97f0                                        |             fcn_000097f0 ();
    0x00083eac str.w r0, [r7, sl, lsl 2]                         |             __asm ("str.w r0, [r7, sl, lsl 2]");
    0x00083eb0 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00083eb2 beq 0x83f4c                                       |                 goto label_10;
                                                                 |             }
                                                                 |         }
    0x00083eb4 add.w sl, sl, 1                                   |         sl++;
    0x00083eb8 cmp sl, r5                                        |         
    0x00083eba bne 0x83e9a                                       |         
                                                                 |     } while (sl != r5);
    0x00083ebc ldr.w r2, [sb, 0xc]                               |     r2 = *((sb + 0xc));
    0x00083ec0 add r4, sp, 8                                     |     r4 += var_8h;
    0x00083ec2 ldr r1, [pc, 0xd8]                                |     
    0x00083ec4 movs r3, 0                                        |     r3 = 0;
    0x00083ec6 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00083eca mov r0, r4                                        |     r0 = r4;
    0x00083ecc ldr r2, [r2, 0x7c]                                |     r2 = *((r2 + 0x7c));
    0x00083ece add r1, pc                                        |     r1 = 0x107e70;
    0x00083ed0 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00083ed2 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00083ed4 str r2, [sp, 0x14]                                |     var_14h_2 = r2;
    0x00083ed6 vstr d16, [sp, 8]                                 |     __asm ("vstr d16, [sp, 8]");
    0x00083eda strh.w r3, [sp, 0x1c]                             |     var_1ch_2 = r3;
    0x00083ede blx 0xa0fc                                        |     fcn_0000a0fc ();
    0x00083ee2 ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
                                                                 |     if (r2 != 0) {
    0x00083ee4 cbz r2, 0x83ef0                                   |         
    0x00083ee6 ldr r1, [pc, 0xb8]                                |         
    0x00083ee8 mov r0, r4                                        |         r0 = r4;
    0x00083eea add r1, pc                                        |         r1 = 0x107e90;
    0x00083eec blx 0x982c                                        |         fcn_0000982c ();
                                                                 |     }
    0x00083ef0 ldr.w r3, [sb, 0x10]                              |     r3 = *((sb + 0x10));
    0x00083ef4 mov r0, r4                                        |     r0 = r4;
    0x00083ef6 ldr r1, [r3]                                      |     r1 = *(r3);
    0x00083ef8 blx 0xa0fc                                        |     fcn_0000a0fc ();
    0x00083efc ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
                                                                 |     if (r2 != 0) {
    0x00083efe cbz r2, 0x83f0a                                   |         
    0x00083f00 ldr r1, [pc, 0xa0]                                |         
    0x00083f02 mov r0, r4                                        |         r0 = r4;
    0x00083f04 add r1, pc                                        |         r1 = 0x107eac;
    0x00083f06 blx 0x982c                                        |         fcn_0000982c ();
                                                                 |     }
    0x00083f0a ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
                                                                 |     if (r3 != 0) {
    0x00083f0c cbz r3, 0x83f4c                                   |         
    0x00083f0e ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00083f10 movs r1, 0                                        |         r1 = 0;
    0x00083f12 strb r1, [r3, r2]                                 |         *((r3 + r2)) = r1;
    0x00083f14 ldr r3, [sp, 0x14]                                |         r3 = var_14h_2;
                                                                 |         if (r3 != 0) {
    0x00083f16 cbz r3, 0x83f20                                   |             
    0x00083f18 ldrb.w r3, [sp, 0x1d]                             |             r3 = var_1dh;
    0x00083f1c lsls r3, r3, 0x1d                                 |             r3 <<= 0x1d;
                                                                 |             if (r3 >= r3) {
    0x00083f1e bpl 0x83f82                                       |                 goto label_11;
                                                                 |             }
                                                                 |         }
    0x00083f20 ldr r5, [sp, 0xc]                                 |         r5 = var_ch;
                                                                 |         if (r5 != 0) {
                                                                 | label_4:
    0x00083f22 cbz r5, 0x83f4c                                   |             
    0x00083f24 movs r3, 0                                        |             r3 = 0;
    0x00083f26 ldr.w r0, [sb, 0xc]                               |             r0 = *((sb + 0xc));
    0x00083f2a mov.w r2, -1                                      |             r2 = -1;
    0x00083f2e str r3, [sp]                                      |             *(sp) = r3;
    0x00083f30 mov r1, r5                                        |             r1 = r5;
    0x00083f32 adds r3, r6, 4                                    |             r3 = r6 + 4;
    0x00083f34 blx 0x9a18                                        |             r0 = fcn_00009a18 ();
    0x00083f38 mov r4, r0                                        |             r4 = r0;
    0x00083f3a mov r0, r5                                        |             r0 = r5;
    0x00083f3c blx 0x9c24                                        |             fcn_00009c24 ();
                                                                 |             if (r4 != 0) {
    0x00083f40 cbnz r4, 0x83f6a                                  |                 goto label_12;
                                                                 |             }
    0x00083f42 mov r0, r6                                        |             r0 = r6;
    0x00083f44 bl 0x83df8                                        |             r0 = void (*0x83df8)() ();
    0x00083f48 mov r4, r0                                        |             r4 = r0;
    0x00083f4a b 0x83f4e                                         |             
                                                                 |         }
                                                                 |     } else {
                                                                 | label_10:
    0x00083f4c movs r4, 7                                        |         r4 = 7;
                                                                 |     }
                                                                 |     do {
    0x00083f4e ldr r2, [pc, 0x58]                                |         
    0x00083f50 ldr r3, [pc, 0x40]                                |         r3 = *(0x83f94);
    0x00083f52 add r2, pc                                        |         r2 = 0x107f00;
    0x00083f54 ldr r3, [r2, r3]                                  |         r3 = imp.atan;
    0x00083f56 ldr r2, [r3]                                      |         r2 = imp.atan;
    0x00083f58 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00083f5a eors r2, r3                                       |         r2 ^= r3;
    0x00083f5c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00083f60 bne 0x83f8c                                       |             goto label_13;
                                                                 |         }
    0x00083f62 mov r0, r4                                        |         r0 = r4;
    0x00083f64 add sp, 0x28                                      |         
    0x00083f66 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_12:
    0x00083f6a ldr.w r0, [sb, 0xc]                               |         r0 = *((sb + 0xc));
    0x00083f6e blx 0x9a34                                        |         r0 = fcn_00009a34 ();
    0x00083f72 mov r1, r0                                        |         r1 = r0;
    0x00083f74 ldr r0, [pc, 0x34]                                |         
    0x00083f76 add r0, pc                                        |         r0 = 0x107f26;
    0x00083f78 blx 0x97f0                                        |         fcn_000097f0 ();
    0x00083f7c str.w r0, [sb, 8]                                 |         __asm ("str.w r0, [sb, 8]");
    0x00083f80 b 0x83f4e                                         |         
                                                                 |     } while (1);
                                                                 | label_11:
    0x00083f82 mov r0, r4                                        |     r0 = r4;
    0x00083f84 bl 0x1eb40                                        |     r0 = fcn_0001eb40 (r0);
    0x00083f88 mov r5, r0                                        |     r5 = r0;
    0x00083f8a b 0x83f22                                         |     goto label_4;
                                                                 | label_13:
    0x00083f8c blx 0x9b44                                        |     fcn_00009b44 ();
    0x00083f90 ldm r4, {r2, r4, r5, r7}                          |     r2 = *(r4);
                                                                 |     r4 = *((r4 + 4));
                                                                 |     r5 = *((r4 + 8));
                                                                 |     r7 = *((r4 + 12));
    0x00083f92 movs r1, r0                                       |     r1 = r0;
    0x00083f94 lsls r0, r1, 0x13                                 |     r0 = r1 << 0x13;
    0x00083f96 movs r0, r0                                       |     
    0x00083f98 str r5, [sp, 0x240]                               |     *(arg_240h) = r5;
    0x00083f9a movs r0, r0                                       |     
    0x00083f9c invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x84c30 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.sqlite3_exec ()                                  | void sqlite3_exec (int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     arithmetic 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;
                                                                 |     arithmetic x;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00084c30 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00084c34 mov r7, r2                                        |     r7 = r2;
    0x00084c36 sub sp, 0x34                                      |     
    0x00084c38 ldr r2, [pc, 0x360]                               |     
    0x00084c3a mov r8, r0                                        |     r8 = r0;
    0x00084c3c mov r5, r1                                        |     r5 = r1;
    0x00084c3e str r3, [sp, 8]                                   |     var_8h = r3;
    0x00084c40 ldr r3, [pc, 0x35c]                               |     r3 = *(0x84fa0);
    0x00084c42 add r2, pc                                        |     r2 = 0x109be2;
    0x00084c44 ldr r4, [sp, 0x58]                                |     r4 = *(arg_58h);
    0x00084c46 ldr r3, [r2, r3]                                  |     
    0x00084c48 ldr r3, [r3]                                      |     r3 = imp.atan;
    0x00084c4a str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00084c4c mov.w r3, 0                                       |     r3 = 0;
    0x00084c50 movs r3, 0                                        |     r3 = 0;
    0x00084c52 str r3, [sp, 0x28]                                |     x = r3;
    0x00084c54 bl 0x215c8                                        |     r0 = fcn_000215c8 (r0);
    0x00084c58 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084c5a beq.w 0x84ee6                                     |         goto label_21;
                                                                 |     }
    0x00084c5e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00084c60 beq.w 0x84ee0                                     |         goto label_22;
                                                                 |     }
                                                                 | label_10:
    0x00084c64 ldr.w r0, [r8, 0xc]                               |     r0 = *((r8 + 0xc));
    0x00084c68 blx 0xa12c                                        |     fcn_0000a12c ();
    0x00084c6c ldr.w r3, [r8, 0x120]                             |     r3 = *((r8 + 0x120));
    0x00084c70 movs r1, 0                                        |     r1 = 0;
    0x00084c72 str.w r1, [r8, 0x40]                              |     __asm ("str.w r1, [r8, 0x40]");
    0x00084c76 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00084c78 beq.w 0x84ed6                                     |         goto label_23;
                                                                 |     }
    0x00084c7c mov r0, r8                                        |     r0 = r8;
    0x00084c7e bl 0x14a2c                                        |     fcn_00014a2c (r0, r1);
                                                                 | label_9:
    0x00084c82 add r3, sp, 0x28                                  |     r3 += x;
    0x00084c84 str r4, [sp, 0xc]                                 |     var_ch = r4;
    0x00084c86 mov r4, r7                                        |     r4 = r7;
    0x00084c88 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00084c8a add r3, sp, 0x24                                  |     r3 += var_24h;
    0x00084c8c str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     do {
                                                                 | label_1:
    0x00084c8e ldrb r3, [r5]                                     |         r3 = *(r5);
    0x00084c90 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00084c92 beq.w 0x84f72                                     |             goto label_24;
                                                                 |         }
    0x00084c96 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00084c98 mov r1, r5                                        |         r1 = r5;
    0x00084c9a mov.w r2, -1                                      |         r2 = -1;
    0x00084c9e mov r0, r8                                        |         r0 = r8;
    0x00084ca0 str r3, [sp]                                      |         *(sp) = r3;
    0x00084ca2 movs r3, 0                                        |         r3 = 0;
    0x00084ca4 str r3, [sp, 0x28]                                |         x = r3;
    0x00084ca6 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00084ca8 blx 0x9a18                                        |         fcn_00009a18 ();
    0x00084cac str r0, [sp, 0x10]                                |         var_10h = r0;
    0x00084cae cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00084cb0 bne.w 0x84ece                                     |             goto label_25;
                                                                 |         }
    0x00084cb4 ldr r0, [sp, 0x28]                                |         r0 = x;
    0x00084cb6 ldr r5, [sp, 0x24]                                |         r5 = var_24h;
    0x00084cb8 cmp r0, 0                                         |         
    0x00084cba beq 0x84c8e                                       |         
                                                                 |     } while (r0 == 0);
    0x00084cbc ldr.w sl, [sp, 0x10]                              |     sl = var_10h;
    0x00084cc0 mov r6, sl                                        |     r6 = sl;
    0x00084cc2 mov r7, sl                                        |     r7 = sl;
    0x00084cc4 mov sb, sl                                        |     sb = sl;
                                                                 | label_0:
    0x00084cc6 blx 0x9d7c                                        |     r0 = fcn_00009d7c ();
    0x00084cca mov r5, r0                                        |     r5 = r0;
    0x00084ccc cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00084cce beq 0x84d88                                       |         goto label_26;
                                                                 |     }
    0x00084cd0 cmp r0, 0x64                                      |     
                                                                 |     if (r0 == 0x64) {
    0x00084cd2 beq.w 0x84e46                                     |         goto label_27;
                                                                 |     }
    0x00084cd6 eor r7, r7, 1                                     |     r7 ^= 1;
    0x00084cda cmp r0, 0x65                                      |     
    0x00084cdc ite ne                                            |     
                                                                 |     if (r0 == 0x65) {
    0x00084cde movne r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r0 != 0x65) {
    0x00084ce0 andeq r7, r7, 1                                   |         r7 &= 1;
                                                                 |     }
    0x00084ce4 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00084ce6 beq 0x84d92                                       |         goto label_28;
                                                                 |     }
    0x00084ce8 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x00084cec lsls r0, r3, 0x17                                 |     r0 = r3 << 0x17;
                                                                 |     if (r0 >= r3) {
    0x00084cee bpl 0x84d92                                       |         goto label_28;
                                                                 |     }
                                                                 | label_2:
    0x00084cf0 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00084cf2 blx 0xa0c0                                        |     r0 = fcn_0000a0c0 ();
    0x00084cf6 lsls r2, r0, 3                                    |     r2 = r0 << 3;
    0x00084cf8 mov r6, r0                                        |     r6 = r0;
    0x00084cfa movs r3, 0                                        |     r3 = 0;
    0x00084cfc adds r2, 4                                        |     r2 += 4;
    0x00084cfe mov r0, r8                                        |     r0 = r8;
    0x00084d00 bl 0x1d740                                        |     r0 = fcn_0001d740 (r0, r1);
    0x00084d04 mov sl, r0                                        |     sl = r0;
    0x00084d06 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00084d08 beq.w 0x84f80                                     |         goto label_29;
                                                                 |     }
    0x00084d0c cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x00084d0e ble.w 0x84f34                                     |         goto label_30;
                                                                 |     }
    0x00084d12 subs r7, r0, 4                                    |     r7 = r0 - 4;
    0x00084d14 mov.w fp, 0                                       |     
                                                                 |     do {
    0x00084d18 mov r1, fp                                        |         r1 = fp;
    0x00084d1a ldr r0, [sp, 0x28]                                |         r0 = x;
    0x00084d1c add.w fp, fp, 1                                   |         
    0x00084d20 blx 0x979c                                        |         fcn_0000979c ();
    0x00084d24 cmp r6, fp                                        |         
    0x00084d26 str r0, [r7, 4]!                                  |         *((r7 += 4)) = r0;
    0x00084d2a bne 0x84d18                                       |         
                                                                 |     } while (r6 != fp);
    0x00084d2c cmp r5, 0x64                                      |     
                                                                 |     if (r5 == 0x64) {
    0x00084d2e beq.w 0x84f7a                                     |         goto label_31;
                                                                 |     }
                                                                 | label_14:
    0x00084d32 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00084d34 mov r2, sb                                        |     r2 = sb;
    0x00084d36 mov r1, r6                                        |     r1 = r6;
    0x00084d38 mov r3, sl                                        |     r3 = sl;
    0x00084d3a blx r4                                            |     r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     if (r0 == 0) {
    0x00084d3c cbz r0, 0x84d92                                   |         goto label_28;
                                                                 |     }
                                                                 |     do {
                                                                 | label_15:
    0x00084d3e ldr r5, [sp, 0x28]                                |         r5 = x;
    0x00084d40 mov sb, sl                                        |         sb = sl;
    0x00084d42 ldr r4, [sp, 0xc]                                 |         r4 = var_ch;
    0x00084d44 ldrb.w r3, [r5, 0x95]                             |         r3 = *((r5 + 0x95));
    0x00084d48 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00084d4a bne.w 0x84f6a                                     |             goto label_32;
                                                                 |         }
                                                                 | label_17:
    0x00084d4e movs r6, 4                                        |         r6 = 4;
    0x00084d50 mov r0, r5                                        |         r0 = r5;
    0x00084d52 bl 0x18864                                        |         fcn_00018864 (r0);
    0x00084d56 movs r3, 0                                        |         r3 = 0;
    0x00084d58 mov r1, r6                                        |         r1 = r6;
    0x00084d5a mov r0, r8                                        |         r0 = r8;
    0x00084d5c str.w r6, [r8, 0x40]                              |         __asm ("str.w r6, [r8, 0x40]");
    0x00084d60 mov fp, r6                                        |         
    0x00084d62 str r3, [sp, 0x28]                                |         x = r3;
    0x00084d64 bl 0x14a2c                                        |         fcn_00014a2c (r0, r1);
                                                                 | label_5:
    0x00084d68 ldr r6, [sp, 0x28]                                |         r6 = x;
    0x00084d6a movs r7, 1                                        |         r7 = 1;
    0x00084d6c cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x00084d6e bne 0x84dec                                       |             goto label_19;
                                                                 |         }
    0x00084d70 b 0x84dfc                                         |         goto label_33;
                                                                 | label_3:
    0x00084d72 movs r3, 0                                        |         r3 = 0;
    0x00084d74 ldr r0, [sp, 8]                                   |         r0 = var_8h;
    0x00084d76 str.w r3, [sb, r6, lsl 2]                         |         __asm ("str.w r3, [sb, r6, lsl 2]");
    0x00084d7a mov r2, sb                                        |         r2 = sb;
    0x00084d7c mov r3, sl                                        |         r3 = sl;
    0x00084d7e mov r1, r6                                        |         r1 = r6;
    0x00084d80 blx r4                                            |         r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00084d82 cmp r0, 0                                         |         
    0x00084d84 bne 0x84d3e                                       |         
                                                                 |     } while (r0 != 0);
    0x00084d86 movs r7, 1                                        |     r7 = 1;
                                                                 | label_26:
    0x00084d88 ldr r3, [sp, 0x28]                                |     r3 = x;
    0x00084d8a cmp r5, 0x64                                      |     
    0x00084d8c mov r0, r3                                        |     r0 = r3;
                                                                 |     if (r5 == 0x64) {
    0x00084d8e beq 0x84cc6                                       |         goto label_0;
                                                                 |     }
    0x00084d90 b 0x84d94                                         |     goto label_34;
                                                                 | label_28:
    0x00084d92 ldr r3, [sp, 0x28]                                |     r3 = x;
                                                                 | label_34:
    0x00084d94 ldrb.w r2, [r3, 0x95]                             |     r2 = *((r3 + 0x95));
    0x00084d98 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00084d9a bne.w 0x84f0a                                     |         goto label_35;
                                                                 |     }
                                                                 | label_12:
    0x00084d9e mov r0, r3                                        |     r0 = r3;
    0x00084da0 bl 0x18864                                        |     fcn_00018864 (r0);
    0x00084da4 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00084da6 movs r3, 0                                        |     r3 = 0;
    0x00084da8 ldr r2, [pc, 0x1f8]                               |     
    0x00084daa str r3, [sp, 0x28]                                |     x = r3;
    0x00084dac ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00084dae add r2, pc                                        |     r2 = 0x109d56;
    0x00084db0 add r3, r2                                        |     r3 += r2;
    0x00084db2 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x00084db6 lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
                                                                 |     if (r1 >= r3) {
    0x00084db8 bpl 0x84dc8                                       |         goto label_36;
                                                                 |     }
                                                                 |     do {
    0x00084dba ldrb r3, [r5, 1]!                                 |         r3 = *((r5 += 1));
    0x00084dbe add r3, r2                                        |         r3 += r2;
    0x00084dc0 ldrb.w r3, [r3, 0x40]                             |         r3 = *((r3 + 0x40));
    0x00084dc4 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x00084dc6 bmi 0x84dba                                       |         
                                                                 |     } while (r3 < r3);
                                                                 | label_36:
    0x00084dc8 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00084dcc beq 0x84dd6                                       |         
    0x00084dce mov r1, sl                                        |         r1 = sl;
    0x00084dd0 mov r0, r8                                        |         r0 = r8;
    0x00084dd2 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x00084dd6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00084dd8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00084dda beq.w 0x84c8e                                     |         goto label_1;
                                                                 |     }
    0x00084dde ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00084de0 mov fp, r3                                        |     
    0x00084de2 movs r7, 1                                        |     r7 = 1;
                                                                 | label_8:
    0x00084de4 ldr r6, [sp, 0x28]                                |     r6 = x;
    0x00084de6 movs r3, 0                                        |     r3 = 0;
    0x00084de8 mov sb, r3                                        |     sb = r3;
                                                                 |     if (r6 != 0) {
    0x00084dea cbz r6, 0x84e08                                   |         
                                                                 | label_19:
    0x00084dec ldrb.w r3, [r6, 0x95]                             |         r3 = *((r6 + 0x95));
    0x00084df0 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00084df2 bne.w 0x84f2c                                     |             goto label_37;
                                                                 |         }
                                                                 | label_13:
    0x00084df6 mov r0, r6                                        |         r0 = r6;
    0x00084df8 bl 0x18864                                        |         fcn_00018864 (r0);
                                                                 | label_33:
    0x00084dfc mov r3, sb                                        |         r3 = sb;
                                                                 |         if (r3 == 0) {
    0x00084dfe cbz r3, 0x84e08                                   |             goto label_20;
                                                                 |         }
    0x00084e00 mov r1, sb                                        |         r1 = sb;
    0x00084e02 mov r0, r8                                        |         r0 = r8;
    0x00084e04 bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
                                                                 | label_20:
    0x00084e08 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00084e0c cmp r3, 0                                         |     
    0x00084e0e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00084e10 orrne r7, r7, 1                                   |         r7 |= 1;
                                                                 |     }
    0x00084e14 mov r5, r7                                        |     r5 = r7;
    0x00084e16 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00084e18 bne 0x84e92                                       |         goto label_38;
                                                                 |     }
                                                                 |     if (r4 != 0) {
                                                                 | label_6:
    0x00084e1a cbz r4, 0x84e20                                   |         
    0x00084e1c movs r3, 0                                        |         r3 = 0;
    0x00084e1e str r3, [r4]                                      |         *(r4) = r3;
                                                                 |     }
                                                                 | label_7:
    0x00084e20 ldr.w r0, [r8, 0xc]                               |     r0 = *((r8 + 0xc));
    0x00084e24 blx 0x9d10                                        |     fcn_00009d10 ();
                                                                 | label_11:
    0x00084e28 ldr r2, [pc, 0x17c]                               |     
    0x00084e2a ldr r3, [pc, 0x174]                               |     r3 = *(0x84fa2);
    0x00084e2c add r2, pc                                        |     r2 = 0x109dd8;
    0x00084e2e ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00084e30 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00084e32 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00084e34 eors r2, r3                                       |     r2 ^= r3;
    0x00084e36 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00084e3a bne.w 0x84f96                                     |         goto label_39;
                                                                 |     }
    0x00084e3e mov r0, r5                                        |     r0 = r5;
    0x00084e40 add sp, 0x34                                      |     
    0x00084e42 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_27:
    0x00084e46 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00084e48 beq.w 0x84cf0                                     |         goto label_2;
                                                                 |     }
    0x00084e4c cmp r6, 0                                         |     
    0x00084e4e add.w sb, sl, r6, lsl 2                           |     sb = sl + (r6 << 2);
                                                                 |     if (r6 <= 0) {
    0x00084e52 ble 0x84f3e                                       |         goto label_40;
                                                                 |     }
    0x00084e54 mov fp, r6                                        |     
                                                                 | label_18:
    0x00084e56 sub.w r7, sb, 4                                   |     r7 = sb - 4;
    0x00084e5a movs r6, 0                                        |     r6 = 0;
    0x00084e5c b 0x84e64                                         |     goto label_41;
                                                                 | label_4:
    0x00084e5e adds r6, 1                                        |     r6++;
    0x00084e60 cmp fp, r6                                        |     
                                                                 |     if (fp == r6) {
    0x00084e62 beq 0x84d72                                       |         goto label_3;
                                                                 |     }
                                                                 | label_41:
    0x00084e64 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00084e66 mov r1, r6                                        |     r1 = r6;
    0x00084e68 blx 0x994c                                        |     fcn_0000994c ();
    0x00084e6c str r0, [r7, 4]!                                  |     *((r7 += 4)) = r0;
    0x00084e70 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084e72 bne 0x84e5e                                       |         goto label_4;
                                                                 |     }
    0x00084e74 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00084e76 mov r1, r6                                        |     r1 = r6;
    0x00084e78 blx 0x9518                                        |     r0 = fcn_00009518 ();
    0x00084e7c cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x00084e7e beq 0x84e5e                                       |         goto label_4;
                                                                 |     }
    0x00084e80 ldrb.w r3, [r8, 0x57]                             |     r3 = *((r8 + 0x57));
    0x00084e84 mov sb, sl                                        |     sb = sl;
    0x00084e86 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00084e88 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00084e8a beq 0x84f5a                                       |         goto label_42;
                                                                 |     }
                                                                 | label_16:
    0x00084e8c mov.w fp, 0x64                                    |     
    0x00084e90 b 0x84d68                                         |     goto label_5;
                                                                 | label_38:
    0x00084e92 mov r1, fp                                        |     r1 = fp;
    0x00084e94 mov r0, r8                                        |     r0 = r8;
    0x00084e96 bl 0x14ab4                                        |     r0 = fcn_00014ab4 (r0, r1);
    0x00084e9a cmp r0, 0                                         |     
    0x00084e9c it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x00084e9e cmpne r4, 0                                       |         __asm ("cmpne r4, 0");
                                                                 |     }
    0x00084ea0 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 == 0) {
    0x00084ea2 beq 0x84e1a                                       |         goto label_6;
                                                                 |     }
    0x00084ea4 mov r0, r8                                        |     r0 = r8;
    0x00084ea6 blx 0x9a34                                        |     r0 = fcn_00009a34 ();
    0x00084eaa mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 != 0) {
    0x00084eac cbz r0, 0x84f18                                   |         
    0x00084eae blx 0x9e8c                                        |         r0 = fcn_00009e8c ();
    0x00084eb2 add.w sb, r0, 1                                   |         sb = r0 + 1;
    0x00084eb6 movs r1, 0                                        |         r1 = 0;
    0x00084eb8 mov r0, sb                                        |         r0 = sb;
    0x00084eba bl 0x117c8                                        |         r0 = fcn_000117c8 (r0);
    0x00084ebe mov r7, r0                                        |         r7 = r0;
                                                                 |         if (r0 == 0) {
    0x00084ec0 cbz r0, 0x84f18                                   |             goto label_43;
                                                                 |         }
    0x00084ec2 mov r2, sb                                        |         r2 = sb;
    0x00084ec4 mov r1, r6                                        |         r1 = r6;
    0x00084ec6 blx 0x9e2c                                        |         fcn_00009e2c ();
    0x00084eca str r7, [r4]                                      |         *(r4) = r7;
    0x00084ecc b 0x84e20                                         |         goto label_7;
                                                                 | label_25:
    0x00084ece ldrd r4, fp, [sp, 0xc]                            |         __asm ("ldrd r4, fp, [var_ch]");
    0x00084ed2 movs r7, 1                                        |         r7 = 1;
    0x00084ed4 b 0x84de4                                         |         goto label_8;
                                                                 | label_23:
    0x00084ed6 mov.w r3, -1                                      |         r3 = -1;
    0x00084eda str.w r3, [r8, 0x44]                              |         __asm ("str.w r3, [r8, 0x44]");
    0x00084ede b 0x84c82                                         |         goto label_9;
                                                                 | label_22:
    0x00084ee0 ldr r5, [pc, 0xc8]                                |         
    0x00084ee2 add r5, pc                                        |         r5 = 0x109e92;
    0x00084ee4 b 0x84c64                                         |         goto label_10;
                                                                 | label_21:
    0x00084ee6 blx 0xa230                                        |         fcn_0000a230 ();
    0x00084eea ldr r2, [pc, 0xc4]                                |         
    0x00084eec add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x00084ef0 ldr r1, [pc, 0xc0]                                |         
    0x00084ef2 movw r3, 0xe16                                    |         
    0x00084ef6 movt r3, 2                                        |         r3 = 0x20e16;
    0x00084efa movs r0, 0x15                                     |         r0 = 0x15;
    0x00084efc add r2, pc                                        |         r2 = 0x109eb2;
    0x00084efe str r4, [sp]                                      |         *(sp) = r4;
    0x00084f00 add r1, pc                                        |         r1 = 0x109eb8;
    0x00084f02 movs r5, 0x15                                     |         r5 = 0x15;
    0x00084f04 blx 0x9f00                                        |         fcn_00009f00 ();
    0x00084f08 b 0x84e28                                         |         goto label_11;
                                                                 | label_35:
    0x00084f0a mov r0, r3                                        |         r0 = r3;
    0x00084f0c str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00084f0e bl 0x520bc                                        |         fcn_000520bc (r0);
    0x00084f12 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00084f14 str r0, [sp, 0x10]                                |         var_10h = r0;
    0x00084f16 b 0x84d9e                                         |         goto label_12;
                                                                 |     }
                                                                 | label_43:
    0x00084f18 movs r1, 7                                        |     r1 = 7;
    0x00084f1a movs r3, 0                                        |     r3 = 0;
    0x00084f1c str r3, [r4]                                      |     *(r4) = r3;
    0x00084f1e mov r0, r8                                        |     r0 = r8;
    0x00084f20 str.w r1, [r8, 0x40]                              |     __asm ("str.w r1, [r8, 0x40]");
    0x00084f24 mov r5, r1                                        |     r5 = r1;
    0x00084f26 bl 0x14a2c                                        |     fcn_00014a2c (r0, r1);
    0x00084f2a b 0x84e20                                         |     goto label_7;
                                                                 | label_37:
    0x00084f2c mov r0, r6                                        |     r0 = r6;
    0x00084f2e bl 0x520bc                                        |     fcn_000520bc (r0);
    0x00084f32 b 0x84df6                                         |     goto label_13;
                                                                 | label_30:
    0x00084f34 cmp r5, 0x64                                      |     
                                                                 |     if (r5 != 0x64) {
    0x00084f36 bne.w 0x84d32                                     |         goto label_14;
                                                                 |     }
    0x00084f3a add.w sb, r0, r6, lsl 2                           |     sb = r0 + (r6 << 2);
                                                                 | label_40:
    0x00084f3e movs r3, 0                                        |     r3 = 0;
    0x00084f40 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00084f42 str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x00084f46 mov r2, sb                                        |     r2 = sb;
    0x00084f48 mov r3, sl                                        |     r3 = sl;
    0x00084f4a mov r1, r6                                        |     r1 = r6;
    0x00084f4c blx r4                                            |     r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00084f4e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00084f50 bne.w 0x84d3e                                     |         goto label_15;
                                                                 |     }
    0x00084f54 ldr r0, [sp, 0x28]                                |     r0 = x;
    0x00084f56 movs r7, 1                                        |     r7 = 1;
    0x00084f58 b 0x84cc6                                         |     goto label_0;
                                                                 | label_42:
    0x00084f5a ldrb.w r3, [r8, 0x58]                             |     r3 = *((r8 + 0x58));
    0x00084f5e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00084f60 bne 0x84e8c                                       |         goto label_16;
                                                                 |     }
    0x00084f62 mov r0, r8                                        |     r0 = r8;
    0x00084f64 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x00084f68 b 0x84e8c                                         |     goto label_16;
                                                                 | label_32:
    0x00084f6a mov r0, r5                                        |     r0 = r5;
    0x00084f6c bl 0x520bc                                        |     fcn_000520bc (r0);
    0x00084f70 b 0x84d4e                                         |     goto label_17;
                                                                 | label_24:
    0x00084f72 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00084f74 mov r7, r3                                        |     r7 = r3;
    0x00084f76 mov fp, r3                                        |     
    0x00084f78 b 0x84de4                                         |     goto label_8;
                                                                 | label_31:
    0x00084f7a add.w sb, sl, fp, lsl 2                           |     sb = sl + (fp << 2);
    0x00084f7e b 0x84e56                                         |     goto label_18;
                                                                 | label_29:
    0x00084f80 ldr r6, [sp, 0x28]                                |     r6 = x;
    0x00084f82 subs r7, r5, 0                                    |     r7 = r5 - 0;
    0x00084f84 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00084f86 mov sb, r0                                        |     sb = r0;
    0x00084f88 it ne                                             |     
                                                                 |     if (r7 == r5) {
    0x00084f8a movne r7, 1                                       |         r7 = 1;
                                                                 |     }
    0x00084f8c mov fp, r5                                        |     
    0x00084f8e cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00084f90 bne.w 0x84dec                                     |         goto label_19;
                                                                 |     }
    0x00084f94 b 0x84e08                                         |     goto label_20;
                                                                 | label_39:
    0x00084f96 blx 0x9b44                                        |     fcn_00009b44 ();
    0x00084f9a nop                                               |     
    0x00084f9c bkpt 0xbe                                         |     __asm ("bkpt 0xbe");
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3bbc4).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x42d60).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x45a78 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.sqlite3_randomness ()                            | void sqlite3_randomness (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_3h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_104h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00045a78 ldr r2, [pc, 0x20c]                               |     
    0x00045a7a ldr r3, [pc, 0x210]                               |     r3 = *(0x45c8e);
    0x00045a7c push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x00045a80 sub sp, 0x108                                     |     
    0x00045a82 add r2, pc                                        |     r2 = 0x8b70e;
    0x00045a84 mov r6, r0                                        |     r6 = r0;
    0x00045a86 mov sl, r1                                        |     sl = r1;
    0x00045a88 ldr r3, [r2, r3]                                  |     
    0x00045a8a ldr r3, [r3]                                      |     r3 = *(0x8b70e);
    0x00045a8c str r3, [sp, 0x104]                               |     var_104h = r3;
    0x00045a8e mov.w r3, 0                                       |     r3 = 0;
    0x00045a92 blx 0xa19c                                        |     r0 = fcn_0000a19c ();
    0x00045a96 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00045a98 bne 0x45b4c                                       |         goto label_3;
                                                                 |     }
    0x00045a9a ldr r3, [pc, 0x1f4]                               |     
    0x00045a9c add r3, pc                                        |     r3 = 0x8b732;
    0x00045a9e ldrb r7, [r3, 4]                                  |     r7 = *((r3 + 4));
                                                                 |     if (r7 != 0) {
    0x00045aa0 cbz r7, 0x45aaa                                   |         
    0x00045aa2 ldr r3, [r3, 0x48]                                |         r3 = *((r3 + 0x48));
    0x00045aa4 movs r0, 5                                        |         r0 = 5;
    0x00045aa6 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00045aa8 mov r7, r0                                        |         r7 = r0;
                                                                 |     }
    0x00045aaa mov r0, r7                                        |     r0 = r7;
    0x00045aac blx 0xa12c                                        |     fcn_0000a12c ();
    0x00045ab0 cmp.w sl, 0                                       |     
    0x00045ab4 it ne                                             |     
                                                                 |     if (sl != 0) {
    0x00045ab6 cmpne r6, 0                                       |         __asm ("cmpne r6, 0");
                                                                 |     }
                                                                 |     if (sl <= 0) {
    0x00045ab8 ble.w 0x45c32                                     |         goto label_4;
                                                                 |     }
    0x00045abc ldr.w r8, [pc, 0x1d4]                             |     
    0x00045ac0 add r8, pc                                        |     r8 = 0x8b758;
    0x00045ac2 ldrb.w r4, [r8, 0x300]                            |     r4 = *((r8 + 0x300));
    0x00045ac6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00045ac8 beq 0x45b66                                       |         goto label_5;
                                                                 |     }
    0x00045aca ldrb.w r0, [r8, 0x301]                            |     r0 = *((r8 + 0x301));
    0x00045ace ldrb.w r4, [r8, 0x302]                            |     r4 = *((r8 + 0x302));
                                                                 | label_0:
    0x00045ad2 ldr.w lr, [pc, 0x1c4]                             |     
    0x00045ad6 mov r1, sl                                        |     r1 = sl;
    0x00045ad8 rsb.w sb, r1, 1                                   |     sb = 1 - r1;
    0x00045adc add sl, r6                                        |     sl += r6;
    0x00045ade add sb, r0                                        |     sb += r0;
    0x00045ae0 add lr, pc                                        |     lr = 0x8b77e;
                                                                 |     do {
    0x00045ae2 add.w r3, r1, sb                                  |         r3 = r1 + sb;
    0x00045ae6 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x00045ae8 add r3, lr                                        |         r3 += lr;
    0x00045aea ldrb.w ip, [r3, 0x303]                            |         ip = *((r3 + 0x303));
    0x00045aee add r4, ip                                        |         r4 += ip;
    0x00045af0 uxtb r4, r4                                       |         r4 = (int8_t) r4;
    0x00045af2 add.w r5, lr, r4                                  |         r5 = lr + r4;
    0x00045af6 ldrb.w r8, [r5, 0x303]                            |         r8 = *((r5 + 0x303));
    0x00045afa strb.w r8, [r3, 0x303]                            |         *((r3 + 0x303)) = r8;
    0x00045afe strb.w ip, [r5, 0x303]                            |         *((r5 + 0x303)) = ip;
    0x00045b02 ldrb.w r2, [r3, 0x303]                            |         r2 = *((r3 + 0x303));
    0x00045b06 add r2, ip                                        |         r2 += ip;
    0x00045b08 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x00045b0a add r2, lr                                        |         r2 += lr;
    0x00045b0c ldrb.w r2, [r2, 0x303]                            |         r2 = *((r2 + 0x303));
    0x00045b10 strb r2, [r1], 1                                  |         *(r1) = r2;
                                                                 |         r1++;
    0x00045b14 cmp r1, sl                                        |         
    0x00045b16 bne 0x45ae2                                       |         
                                                                 |     } while (r1 != sl);
    0x00045b18 ldr r2, [pc, 0x180]                               |     
    0x00045b1a add r0, r6                                        |     r0 += r6;
    0x00045b1c strb.w r8, [r3, 0x303]                            |     *((r3 + 0x303)) = r8;
    0x00045b20 ldr r3, [pc, 0x168]                               |     r3 = *(0x45c8c);
    0x00045b22 add r2, pc                                        |     r2 = 0x8b7c2;
    0x00045b24 strb.w ip, [r5, 0x303]                            |     *((r5 + 0x303)) = ip;
    0x00045b28 strb.w r4, [lr, 0x302]                            |     *((lr + 0x302)) = r4;
    0x00045b2c strb.w r0, [lr, 0x301]                            |     *((lr + 0x301)) = r0;
    0x00045b30 ldr r3, [r2, r3]                                  |     r3 = *(0x8b7c2);
    0x00045b32 ldr r2, [r3]                                      |     r2 = *(0x8b7c2);
    0x00045b34 ldr r3, [sp, 0x104]                               |     r3 = var_104h;
    0x00045b36 eors r2, r3                                       |     r2 ^= r3;
    0x00045b38 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00045b3c bne.w 0x45c52                                     |         goto label_6;
                                                                 |     }
                                                                 | label_1:
    0x00045b40 mov r0, r7                                        |     r0 = r7;
    0x00045b42 add sp, 0x108                                     |     
    0x00045b44 pop.w {r4, r5, r6, r7, r8, sb, sl, lr}            |     
    0x00045b48 b.w 0x9d0c                                        |     void (*0x9d0c)() ();
                                                                 | label_3:
    0x00045b4c ldr r2, [pc, 0x150]                               |     
    0x00045b4e ldr r3, [pc, 0x13c]                               |     r3 = *(0x45c8e);
    0x00045b50 add r2, pc                                        |     r2 = 0x8b7f4;
    0x00045b52 ldr r3, [r2, r3]                                  |     r3 = *(0x8b7f4);
    0x00045b54 ldr r2, [r3]                                      |     r2 = *(0x8b7f4);
    0x00045b56 ldr r3, [sp, 0x104]                               |     r3 = var_104h;
    0x00045b58 eors r2, r3                                       |     r2 ^= r3;
    0x00045b5a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00045b5e bne 0x45c52                                       |         goto label_6;
                                                                 |     }
    0x00045b60 add sp, 0x108                                     |     
    0x00045b62 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |     
                                                                 | label_5:
    0x00045b66 mov r0, r4                                        |     r0 = r4;
    0x00045b68 blx 0x9f8c                                        |     fcn_00009f8c ();
    0x00045b6c strh.w r4, [r8, 0x301]                            |     *((r8 + 0x301)) = r4;
    0x00045b70 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00045b72 beq 0x45c56                                       |         goto label_7;
                                                                 |     }
    0x00045b74 ldr r2, [pc, 0x12c]                               |     
    0x00045b76 add r2, pc                                        |     r2 = 0x8b81e;
    0x00045b78 ldr.w r5, [r2, 0x114]                             |     r5 = *(0x8b932);
    0x00045b7c cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00045b7e bne 0x45c66                                       |         goto label_8;
                                                                 |     }
    0x00045b80 ldr r3, [r0, 0x38]                                |     r3 = *((r0 + 0x38));
    0x00045b82 add r2, sp, 4                                     |     r2 += var_4h;
    0x00045b84 mov.w r1, 0x100                                   |     r1 = 0x100;
    0x00045b88 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00045b8a ldrb.w r4, [r8, 0x302]                            |     r4 = *((r8 + 0x302));
    0x00045b8e ldrb.w r0, [r8, 0x301]                            |     r0 = *((r8 + 0x301));
                                                                 | label_2:
    0x00045b92 ldr r2, [pc, 0x114]                               |     
    0x00045b94 vmov.i32 q2, 0x10                                 |     __asm ("vmov.i32 q2, 0x10");
    0x00045b98 vmov.i32 q3, 4                                    |     __asm ("vmov.i32 q3, 4");
    0x00045b9c add r2, pc                                        |     r2 = 0x8b84a;
    0x00045b9e vmov.i32 q15, 8                                   |     __asm ("vmov.i32 q15, 8");
    0x00045ba2 vmov.i32 q14, 0xc                                 |     __asm ("vmov.i32 q14, 0xc");
    0x00045ba6 add.w r8, r2, 0x300                               |     r8 = r2 + 0x300;
    0x00045baa addw r3, r2, 0x303                                |     __asm ("addw r3, r2, aav.0x000000ff");
    0x00045bae vldr d18, [pc, 0xc8]                              |     __asm ("vldr d18, aav.0x000000ff");
    0x00045bb2 vldr d19, [pc, 0xcc]                              |     __asm ("vldr d19, aav.0x000000ff");
    0x00045bb6 addw r2, r2, 0x403                                |     __asm ("addw r2, r2, aav.0x000000ff");
                                                                 |     do {
    0x00045bba vorr q8, q9, q9                                   |         __asm ("vorr q8, q9, q9");
    0x00045bbe vadd.i32 q9, q9, q2                               |         __asm ("vadd.i32 q9, q9, q2");
    0x00045bc2 vadd.i32 q10, q8, q3                              |         __asm ("vadd.i32 q10, q8, q3");
    0x00045bc6 vadd.i32 q13, q8, q15                             |         __asm ("vadd.i32 q13, q8, q15");
    0x00045bca vadd.i32 q12, q8, q14                             |         __asm ("vadd.i32 q12, q8, q14");
    0x00045bce vmovn.i32 d22, q8                                 |         __asm ("vmovn.i32 d22, q8");
    0x00045bd2 vmovn.i32 d23, q10                                |         __asm ("vmovn.i32 d23, q10");
    0x00045bd6 vmovn.i32 d20, q13                                |         __asm ("vmovn.i32 d20, q13");
    0x00045bda vmovn.i32 d21, q12                                |         __asm ("vmovn.i32 d21, q12");
    0x00045bde vmovn.i16 d16, q11                                |         __asm ("vmovn.i16 d16, q11");
    0x00045be2 vmovn.i16 d17, q10                                |         __asm ("vmovn.i16 d17, q10");
    0x00045be6 vst1.8 {d16, d17}, [r3]!                          |         __asm ("vst1.8 {d16, d17}, [r3]!");
    0x00045bea cmp r3, r2                                        |         
    0x00045bec bne 0x45bba                                       |         
                                                                 |     } while (r3 != r2);
    0x00045bee ldr.w lr, [pc, 0xbc]                              |     
    0x00045bf2 add.w r8, r8, 0x102                               |     r8 += 0x102;
    0x00045bf6 add.w ip, sp, 3                                   |     
    0x00045bfa add lr, pc                                        |     lr += pc;
    0x00045bfc addw r2, lr, 0x302                                |     __asm ("addw r2, lr, aav.0x000000ff");
                                                                 |     do {
    0x00045c00 ldrb r1, [r2, 1]!                                 |         r1 = *((r2 += 1));
    0x00045c04 ldrb r3, [ip, 1]!                                 |         r3 = var_4h;
    0x00045c08 cmp r2, r8                                        |         
    0x00045c0a add r3, r1                                        |         r3 += r1;
    0x00045c0c add r3, r4                                        |         r3 += r4;
    0x00045c0e uxtb r4, r3                                       |         r4 = (int8_t) r3;
    0x00045c10 add.w r3, lr, r4                                  |         r3 = lr + r4;
    0x00045c14 ldrb.w sb, [r3, 0x303]                            |         sb = *((r3 + 0x303));
    0x00045c18 strb.w r1, [r3, 0x303]                            |         *((r3 + 0x303)) = r1;
    0x00045c1c strb.w sb, [r2]                                   |         *(r2) = sb;
    0x00045c20 bne 0x45c00                                       |         
                                                                 |     } while (r2 != r8);
    0x00045c22 strb.w r1, [r3, 0x303]                            |     *((r3 + 0x303)) = r1;
    0x00045c26 movs r3, 1                                        |     r3 = 1;
    0x00045c28 strb.w sb, [lr, 0x402]                            |     *((lr + 0x402)) = sb;
    0x00045c2c strb.w r3, [lr, 0x300]                            |     *((lr + 0x300)) = r3;
    0x00045c30 b 0x45ad2                                         |     goto label_0;
                                                                 | label_4:
    0x00045c32 ldr r3, [pc, 0x7c]                                |     
    0x00045c34 movs r2, 0                                        |     r2 = 0;
    0x00045c36 add r3, pc                                        |     r3 = 0x8b8ec;
    0x00045c38 strb.w r2, [r3, 0x300]                            |     *((r3 + 0x300)) = r2;
    0x00045c3c ldr r2, [pc, 0x74]                                |     
    0x00045c3e ldr r3, [pc, 0x4c]                                |     r3 = *(0x45c8e);
    0x00045c40 add r2, pc                                        |     r2 = 0x8b8f8;
    0x00045c42 ldr r3, [r2, r3]                                  |     r3 = *(0x8b8f8);
    0x00045c44 ldr r2, [r3]                                      |     r2 = *(0x8b8f8);
    0x00045c46 ldr r3, [sp, 0x104]                               |     r3 = var_104h;
    0x00045c48 eors r2, r3                                       |     r2 ^= r3;
    0x00045c4a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x00045c4e beq.w 0x45b40                                     |         goto label_1;
                                                                 |     }
                                                                 | label_6:
    0x00045c52 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_7:
    0x00045c56 mov.w r2, 0x100                                   |     r2 = 0x100;
    0x00045c5a mov r1, r4                                        |     r1 = r4;
    0x00045c5c add r0, sp, 4                                     |     r0 += var_4h;
    0x00045c5e blx 0x97d4                                        |     fcn_000097d4 ();
                                                                 |     do {
    0x00045c62 movs r0, 0                                        |         r0 = 0;
    0x00045c64 b 0x45b92                                         |         goto label_2;
                                                                 | label_8:
    0x00045c66 movs r2, 0xfc                                     |         r2 = 0xfc;
    0x00045c68 mov r1, r4                                        |         r1 = r4;
    0x00045c6a add r0, sp, 8                                     |         r0 += var_8h;
    0x00045c6c blx 0x97d4                                        |         fcn_000097d4 ();
    0x00045c70 str r5, [sp, 4]                                   |         var_4h = r5;
    0x00045c72 b 0x45c62                                         |         
                                                                 |     } while (1);
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x25adc */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.sqlite3_result_value ()          | void sqlite3_result_value (int16_t arg1) {
                                                 |     r0 = arg1;
    0x00025adc push {r3, r4, r5, lr}             |     
    0x00025ade mov r5, r0                        |     r5 = r0;
    0x00025ae0 ldr r4, [r0]                      |     r4 = *(r0);
    0x00025ae2 mov r0, r4                        |     r0 = r4;
    0x00025ae4 bl 0x1b294                        |     fcn_0001b294 (r0, r1);
    0x00025ae8 ldrh r3, [r4, 0x10]               |     r3 = *((r4 + 0x10));
    0x00025aea ldrb r1, [r5, 0x18]               |     r1 = *((r5 + 0x18));
    0x00025aec lsls r2, r3, 0x1e                 |     r2 = r3 << 0x1e;
    0x00025aee it pl                             |     
                                                 |     if (r2 < r3) {
    0x00025af0 strbpl r1, [r4, 0x12]             |         *((r4 + 0x12)) = r1;
                                                 |     }
                                                 |     if (r2 < r3) {
    0x00025af2 bpl 0x25b02                       |         
    0x00025af4 ldrb r2, [r4, 0x12]               |         r2 = *((r4 + 0x12));
    0x00025af6 cmp r2, r1                        |         
                                                 |         if (r2 == r1) {
    0x00025af8 beq 0x25b02                       |             goto label_0;
                                                 |         }
    0x00025afa mov r0, r4                        |         r0 = r4;
    0x00025afc bl 0x1f1ec                        |         fcn_0001f1ec (r0, r1);
    0x00025b00 ldrh r3, [r4, 0x10]               |         r3 = *((r4 + 0x10));
                                                 |     }
                                                 | label_0:
    0x00025b02 tst.w r3, 0x12                    |     
    0x00025b06 bne 0x25b0a                       |     
                                                 |     while (r3 >= r2) {
    0x00025b08 pop {r3, r4, r5, pc}              |         
    0x00025b0a lsls r3, r3, 0x15                 |         r3 <<= 0x15;
    0x00025b0c ldr r2, [r4, 0xc]                 |         r2 = *((r4 + 0xc));
    0x00025b0e itt mi                            |         
                                                 |         if (r3 >= r3) {
    0x00025b10 ldrmi r3, [r4]                    |             r3 = *(r4);
                                                 |         }
                                                 |         if (r3 >= r3) {
    0x00025b12 addmi r2, r2, r3                  |             r2 += r3;
                                                 |         }
    0x00025b14 ldr r3, [r4, 0x14]                |         r3 = *((r4 + 0x14));
    0x00025b16 ldr r3, [r3, 0x78]                |         r3 = *((r3 + 0x78));
    0x00025b18 cmp r3, r2                        |         
    0x00025b1a bge 0x25b08                       |         
                                                 |     }
    0x00025b1c mov r0, r5                        |     r0 = r5;
    0x00025b1e pop.w {r3, r4, r5, lr}            |     
    0x00025b22 b.w 0x9a6c                        |     return void (*0x9a6c)() ();
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x82eac */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.sqlite3_step ()                                  | void sqlite3_step (int16_t arg_4h, uint32_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     arithmetic x;
                                                                 |     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_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_144h;
                                                                 |     r0 = arg1;
    0x00082eac ldr.w r3, [pc, 0x948]                             |     r3 = *(0x000837f8);
    0x00082eb0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00082eb4 sub sp, 0x14c                                     |     
    0x00082eb6 ldr.w r2, [pc, 0x944]                             |     r2 = *(0x000837fc);
    0x00082eba add r3, pc                                        |     r3 += pc;
    0x00082ebc str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00082ebe ldr.w r3, [pc, 0x940]                             |     
    0x00082ec2 add r2, pc                                        |     r2 += pc;
    0x00082ec4 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00082ec6 ldr r3, [r3]                                      |     r3 = *(0x83802);
    0x00082ec8 str r3, [sp, 0x144]                               |     var_144h = r3;
    0x00082eca mov.w r3, 0                                       |     r3 = 0;
    0x00082ece cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00082ed0 beq.w 0x835dc                                     |         goto label_42;
                                                                 |     }
    0x00082ed4 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00082ed6 mov sb, r0                                        |     sb = r0;
    0x00082ed8 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00082eda beq.w 0x8360a                                     |         goto label_43;
                                                                 |     }
    0x00082ede movw r3, 0xf240                                   |     
    0x00082ee2 movs r2, 0x33                                     |     r2 = 0x33;
    0x00082ee4 movt r3, 0xffff                                   |     r3 = 0xfffff240;
    0x00082ee8 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00082eea str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00082eec str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00082eee blx 0xa12c                                        |     fcn_0000a12c ();
    0x00082ef2 str r4, [sp, 0x24]                                |     var_24h = r4;
                                                                 | label_3:
    0x00082ef4 ldrb.w r3, [sb, 0x95]                             |     r3 = *((sb + 0x95));
    0x00082ef8 ldr.w r6, [sb]                                    |     r6 = *(sb);
    0x00082efc cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00082efe beq 0x82f1a                                       |         goto label_44;
                                                                 |     }
    0x00082f00 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00082f02 bne 0x82f16                                       |         goto label_45;
                                                                 |     }
    0x00082f04 b 0x8336a                                         |     goto label_46;
                                                                 |     do {
    0x00082f06 mov r0, sb                                        |         r0 = sb;
    0x00082f08 blx 0x9558                                        |         fcn_00009558 ();
    0x00082f0c ldrb.w r3, [sb, 0x95]                             |         r3 = *((sb + 0x95));
    0x00082f10 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00082f12 beq.w 0x8336a                                     |             goto label_46;
                                                                 |         }
                                                                 | label_45:
    0x00082f16 cmp r3, 3                                         |         
    0x00082f18 beq 0x82f06                                       |         
                                                                 |     } while (r3 == 3);
                                                                 | label_44:
    0x00082f1a ldrb.w r3, [sb, 0x96]                             |     r3 = *((sb + 0x96));
                                                                 | label_7:
    0x00082f1e ands r3, r3, 0xc                                  |     r3 &= 0xc;
                                                                 |     if (r3 == r3) {
    0x00082f22 beq.w 0x8326c                                     |         goto label_47;
                                                                 |     }
    0x00082f26 ldr.w r2, [sb, 0x58]                              |     r2 = *((sb + 0x58));
    0x00082f2a cmp r3, 4                                         |     
    0x00082f2c ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x00082f30 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00082f32 add.w r2, r2, 0x28                                |     r2 += 0x28;
    0x00082f36 str r1, [sp, 0x1c]                                |     x = r1;
    0x00082f38 mov.w r1, 8                                       |     r1 = 8;
    0x00082f3c str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 |     if (r3 == 4) {
    0x00082f3e beq.w 0x830b8                                     |         goto label_48;
                                                                 |     }
    0x00082f42 ldrd r3, r0, [sp, 0x1c]                           |     __asm ("ldrd r3, r0, [x]");
    0x00082f46 ldr r4, [r3, 0x20]                                |     r4 = *((r3 + 0x20));
    0x00082f48 bl 0x14448                                        |     fcn_00014448 (r0, r1);
    0x00082f4c movs r3, 0                                        |     r3 = 0;
    0x00082f4e str.w r3, [sb, 0x78]                              |     __asm ("str.w r3, [sb, 0x78]");
    0x00082f52 ldr.w r3, [sb, 0x24]                              |     r3 = *((sb + 0x24));
    0x00082f56 cmp r3, 7                                         |     
                                                                 |     if (r3 == 7) {
    0x00082f58 beq.w 0x8358c                                     |         goto label_49;
                                                                 |     }
    0x00082f5c ldr.w fp, [sb, 0x6c]                              |     fp = *((sb + 0x6c));
    0x00082f60 and r4, r4, 0x1000000                             |     r4 &= 0x1000000;
    0x00082f64 ldrb.w r3, [sb, 0x96]                             |     r3 = *((sb + 0x96));
    0x00082f68 mov r2, fp                                        |     r2 = fp;
    0x00082f6a and sl, r3, 0xc                                   |     sl = r3 & 0xc;
    0x00082f6e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00082f70 bne.w 0x830d6                                     |         goto label_50;
                                                                 |     }
    0x00082f74 mov r8, r4                                        |     r8 = r4;
    0x00082f76 mov ip, r4                                        |     
    0x00082f78 mov r2, r4                                        |     r2 = r4;
                                                                 | label_0:
    0x00082f7a ldr.w r5, [sb, 0x20]                              |     r5 = *((sb + 0x20));
    0x00082f7e str r6, [sp, 0x28]                                |     var_28h = r6;
                                                                 |     do {
    0x00082f80 mov r4, r5                                        |         r4 = r5;
    0x00082f82 adds r5, 1                                        |         r5++;
    0x00082f84 cmp r4, fp                                        |         
                                                                 |         if (r4 >= fp) {
    0x00082f86 bge.w 0x833ee                                     |             goto label_51;
                                                                 |         }
    0x00082f8a ldr.w r3, [sb, 0x6c]                              |         r3 = *((sb + 0x6c));
    0x00082f8e cmp r4, r3                                        |         
                                                                 |         if (r4 >= r3) {
    0x00082f90 bge.w 0x83112                                     |             goto label_52;
                                                                 |         }
    0x00082f94 ldr.w r7, [sb, 0x68]                              |         r7 = *((sb + 0x68));
                                                                 | label_1:
    0x00082f98 cmp.w r8, 0                                       |         
                                                                 |         if (r8 != 0) {
    0x00082f9c beq 0x82fb0                                       |             
    0x00082f9e add.w r6, r4, r4, lsl 2                           |             r6 = r4 + (r4 << 2);
    0x00082fa2 add.w r6, r7, r6, lsl 2                           |             r6 = r7 + (r6 << 2);
    0x00082fa6 ldrsb.w r3, [r6, 1]                               |             r3 = *((r6 + 1));
    0x00082faa adds r3, 4                                        |             r3 += 4;
                                                                 |             if (r3 == 4) {
    0x00082fac beq.w 0x83130                                     |                 goto label_53;
                                                                 |             }
                                                                 |         }
                                                                 | label_2:
    0x00082fb0 cmp.w sl, 8                                       |         
                                                                 |         if (sl != 8) {
    0x00082fb4 bne 0x82fd8                                       |             goto label_54;
                                                                 |         }
    0x00082fb6 add.w r3, r4, r4, lsl 2                           |         r3 = r4 + (r4 << 2);
    0x00082fba ldrb.w r3, [r7, r3, lsl 2]                        |         offset_0 = r3 << 2;
                                                                 |         r3 = *((r7 + offset_0));
    0x00082fbe cmp r3, 0xb9                                      |         
                                                                 |         if (r3 == 0xb9) {
    0x00082fc0 beq 0x82fd8                                       |             goto label_54;
                                                                 |         }
    0x00082fc2 sub.w r3, r3, 0x40                                |         r3 -= 0x40;
    0x00082fc6 cmp r5, 1                                         |         
    0x00082fc8 clz r3, r3                                        |         r3 &= r3;
    0x00082fcc lsr.w r3, r3, 5                                   |         r3 >>= 5;
    0x00082fd0 it le                                             |         
                                                                 |         if (r5 > 1) {
    0x00082fd2 movle r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00082fd4 cmp r3, 0                                         |         
    0x00082fd6 beq 0x82f80                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_54:
    0x00082fd8 ldr r3, [sp, 0x1c]                                |     r3 = x;
    0x00082fda ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x00082fdc str.w r5, [sb, 0x20]                              |     __asm ("str.w r5, [sb, 0x20]");
    0x00082fe0 ldr.w r3, [r3, 0x128]                             |     r3 = *((r3 + 0x128));
    0x00082fe4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00082fe6 beq.w 0x83542                                     |         goto label_55;
                                                                 |     }
    0x00082fea ldr.w r1, [pc, 0x818]                             |     r1 = *(0x00083804);
    0x00082fee movs r3, 9                                        |     r3 = 9;
    0x00082ff0 mov r0, sb                                        |     r0 = sb;
    0x00082ff2 str.w r3, [sb, 0x24]                              |     __asm ("str.w r3, [sb, 0x24]");
    0x00082ff6 add r1, pc                                        |     r1 += pc;
    0x00082ff8 bl 0x20e24                                        |     fcn_00020e24 (r0);
                                                                 | label_20:
    0x00082ffc ldrd r2, r3, [sb, 0x88]                           |     __asm ("ldrd r2, r3, [sb, 0x88]");
    0x00083000 cmp r2, 1                                         |     
    0x00083002 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 >= 1) {
    0x00083006 bge.w 0x834b8                                     |         goto label_56;
                                                                 |     }
                                                                 | label_16:
    0x0008300a movs r4, 1                                        |     r4 = 1;
                                                                 | label_4:
    0x0008300c ldrsb.w r3, [sb, 0x94]                            |     r3 = *((sb + 0x94));
    0x00083010 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00083012 blt.w 0x833e4                                     |         goto label_57;
                                                                 |     }
                                                                 | label_9:
    0x00083016 ldr.w sl, [sb, 0x24]                              |     sl = *((sb + 0x24));
    0x0008301a ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x0008301e subs.w r3, sl, 0                                  |     r3 = sl - 0;
    0x00083022 it ne                                             |     
                                                                 |     if (r3 == sl) {
    0x00083024 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 | label_5:
    0x00083026 str r4, [r6, 0x40]                                |     *((r6 + 0x40)) = r4;
    0x00083028 ldrb.w r2, [r0, 0x57]                             |     r2 = *((r0 + 0x57));
    0x0008302c cmp r2, 0                                         |     
    0x0008302e it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x00083030 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00083034 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00083036 bne.w 0x83320                                     |         goto label_58;
                                                                 |     }
                                                                 | label_6:
    0x0008303a ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x0008303c ands r4, r3                                       |     r4 &= r3;
    0x0008303e cmp r4, 0x11                                      |     
                                                                 |     if (r4 != 0x11) {
    0x00083040 bne.w 0x83616                                     |         goto label_59;
                                                                 |     }
    0x00083044 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00083046 subs r3, 1                                        |     r3--;
    0x00083048 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     if (r3 == 1) {
    0x0008304a beq.w 0x83616                                     |         goto label_59;
                                                                 |     }
    0x0008304e mov r0, sb                                        |     r0 = sb;
    0x00083050 ldr.w r5, [sb, 0x20]                              |     r5 = *((sb + 0x20));
    0x00083054 blx 0x9838                                        |     fcn_00009838 ();
    0x00083058 ldr.w r7, [sb]                                    |     r7 = *(sb);
    0x0008305c mov r1, r0                                        |     r1 = r0;
    0x0008305e add r4, sp, 0x40                                  |     r4 += var_40h;
    0x00083060 movs r0, 0                                        |     r0 = 0;
    0x00083062 ldrb.w r3, [sb, 0x94]                             |     r3 = *((sb + 0x94));
    0x00083066 mov.w r2, -1                                      |     r2 = -1;
    0x0008306a strd r4, r0, [sp, 4]                              |     __asm ("strd r4, r0, [var_4h]");
    0x0008306e mov r0, r7                                        |     r0 = r7;
    0x00083070 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00083074 bl 0x720a4                                        |     r0 = fcn_000720a4 (r0, r1, r2, r3, r4, r5, r6);
    0x00083078 mov r8, r0                                        |     r8 = r0;
    0x0008307a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0008307c beq.w 0x831a4                                     |         goto label_60;
                                                                 |     }
    0x00083080 cmp r0, 7                                         |     
    0x00083082 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
                                                                 |     if (r0 == 7) {
    0x00083084 beq.w 0x834ce                                     |         goto label_61;
                                                                 |     }
                                                                 | label_17:
    0x00083088 ldr.w r0, [r4, 0x120]                             |     r0 = *((r4 + 0x120));
    0x0008308c blx 0x9688                                        |     fcn_00009688 ();
    0x00083090 ldr.w r1, [sb, 0x7c]                              |     r1 = *((sb + 0x7c));
    0x00083094 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r1 != 0) {
    0x00083096 cbz r1, 0x8309e                                   |         
    0x00083098 mov r0, r4                                        |         r0 = r4;
    0x0008309a bl 0x137d0                                        |         fcn_000137d0 (r0, r1);
                                                                 |     }
    0x0008309e ldrb.w r3, [r4, 0x57]                             |     r3 = *((r4 + 0x57));
    0x000830a2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000830a4 beq.w 0x835be                                     |         goto label_62;
                                                                 |     }
    0x000830a8 movs r3, 7                                        |     r3 = 7;
    0x000830aa movs r2, 0                                        |     r2 = 0;
    0x000830ac mov r5, r3                                        |     r5 = r3;
    0x000830ae str.w r2, [sb, 0x7c]                              |     __asm ("str.w r2, [sb, 0x7c]");
    0x000830b2 str.w r3, [sb, 0x24]                              |     __asm ("str.w r3, [sb, 0x24]");
    0x000830b6 b 0x83342                                         |     goto label_15;
                                                                 | label_48:
    0x000830b8 mov r0, r2                                        |     r0 = r2;
    0x000830ba bl 0x14448                                        |     fcn_00014448 (r0, r1);
    0x000830be movs r3, 0                                        |     r3 = 0;
    0x000830c0 str.w r3, [sb, 0x78]                              |     __asm ("str.w r3, [sb, 0x78]");
    0x000830c4 ldr.w r3, [sb, 0x24]                              |     r3 = *((sb + 0x24));
    0x000830c8 cmp r3, 7                                         |     
                                                                 |     if (r3 == 7) {
    0x000830ca beq.w 0x8358c                                     |         goto label_49;
                                                                 |     }
    0x000830ce ldrb.w r3, [sb, 0x96]                             |     r3 = *((sb + 0x96));
    0x000830d2 ldr.w r2, [sb, 0x6c]                              |     r2 = *((sb + 0x6c));
                                                                 | label_50:
    0x000830d6 and sl, r3, 0xc                                   |     sl = r3 & 0xc;
    0x000830da ldr.w r3, [sb, 0x58]                              |     r3 = *((sb + 0x58));
    0x000830de mov fp, r2                                        |     
    0x000830e0 ldrh.w ip, [r3, 0x178]                            |     ip = *((r3 + 0x178));
    0x000830e4 add.w r8, r3, 0x168                               |     r8 = r3 + 0x168;
    0x000830e8 ands ip, ip, 0x10                                 |     
    0x000830ec it eq                                             |     
                                                                 |     if (ip == ip) {
    0x000830ee moveq r2, ip                                      |         r2 = ip;
                                                                 |         goto label_63;
                                                                 |     }
                                                                 |     if (ip == ip) {
                                                                 | label_63:
    0x000830f0 beq.w 0x82f7a                                     |         goto label_0;
                                                                 |     }
    0x000830f4 ldrd ip, r2, [r3, 0x170]                          |     __asm ("ldrd ip, r2, aav.0x000000ff");
    0x000830f8 lsrs r2, r2, 2                                    |     r2 >>= 2;
                                                                 |     if (r2 == r2) {
    0x000830fa beq.w 0x82f7a                                     |         goto label_0;
                                                                 |     }
    0x000830fe add.w r0, ip, r2, lsl 2                           |     r0 = ip + (r2 << 2);
    0x00083102 mov r3, ip                                        |     r3 = ip;
                                                                 |     do {
    0x00083104 ldr r1, [r3], 4                                   |         r1 = *(r3);
                                                                 |         r3 += 4;
    0x00083108 ldr r1, [r1, 4]                                   |         r1 = *((r1 + 4));
    0x0008310a cmp r0, r3                                        |         
    0x0008310c add fp, r1                                        |         
    0x0008310e bne 0x83104                                       |         
                                                                 |     } while (r0 != r3);
    0x00083110 b 0x82f7a                                         |     goto label_0;
                                                                 | label_52:
    0x00083112 ldr.w r1, [ip]                                    |     r1 = *(ip);
    0x00083116 subs r4, r4, r3                                   |     r4 -= r3;
    0x00083118 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0008311a cmp r3, r4                                        |     
                                                                 |     if (r3 > r4) {
    0x0008311c bgt 0x8312c                                       |         goto label_64;
                                                                 |     }
    0x0008311e mov r0, ip                                        |     r0 = ip;
                                                                 |     do {
    0x00083120 ldr r1, [r0, 4]!                                  |         r1 = *((r0 += 4));
    0x00083124 subs r4, r4, r3                                   |         r4 -= r3;
    0x00083126 ldr r3, [r1, 4]                                   |         r3 = *((r1 + 4));
    0x00083128 cmp r3, r4                                        |         
    0x0008312a ble 0x83120                                       |         
                                                                 |     } while (r3 <= r4);
                                                                 | label_64:
    0x0008312c ldr r7, [r1]                                      |     r7 = *(r1);
    0x0008312e b 0x82f98                                         |     goto label_1;
                                                                 | label_53:
    0x00083130 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00083132 ble.w 0x835aa                                     |         goto label_65;
                                                                 |     }
    0x00083136 ldr.w lr, [r6, 0x10]                              |     
    0x0008313a sub.w r1, ip, 4                                   |     r1 = ip - 4;
    0x0008313e movs r3, 0                                        |     r3 = 0;
    0x00083140 b 0x83148                                         |     
                                                                 |     while (r0 != lr) {
    0x00083142 adds r3, 1                                        |         r3++;
    0x00083144 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x00083146 beq 0x83156                                       |             goto label_21;
                                                                 |         }
    0x00083148 ldr r0, [r1, 4]!                                  |         r0 = *((r1 += 4));
    0x0008314c cmp r0, lr                                        |         
    0x0008314e bne 0x83142                                       |         
                                                                 |     }
    0x00083150 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00083152 bne.w 0x82fb0                                     |         goto label_2;
                                                                 |     }
                                                                 | label_21:
    0x00083156 adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x00083158 subs r2, 0                                        |     
    0x0008315a lsl.w r1, r3, 2                                   |     r1 = r3 << 2;
    0x0008315e it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x00083160 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00083162 mov r0, r8                                        |     r0 = r8;
    0x00083164 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00083166 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x00083168 bl 0x1b028                                        |     fcn_0001b028 (r0, r1, r2);
    0x0008316c str.w r0, [sb, 0x24]                              |     __asm ("str.w r0, [sb, 0x24]");
    0x00083170 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00083172 bne.w 0x834a4                                     |         goto label_66;
                                                                 |     }
    0x00083176 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00083178 ldr r0, [r6, 0x10]                                |     r0 = *((r6 + 0x10));
    0x0008317a ldrh.w r6, [r8, 0x10]                             |     r6 = *((r8 + 0x10));
    0x0008317e mov r2, r3                                        |     r2 = r3;
    0x00083180 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00083182 ldr.w ip, [r8, 8]                                 |     ip = *((r8 + 8));
    0x00083186 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00083188 ands r6, r3                                       |     r6 &= r3;
    0x0008318a ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0008318c orr r6, r6, 0x10                                  |     r6 |= 0x10;
    0x00083190 add fp, r3                                        |     
    0x00083192 add.w r3, ip, r1                                  |     r3 = ip + r1;
    0x00083196 str r0, [r3, -0x4]                                |     *((r3 - 0x4)) = r0;
    0x0008319a strh.w r6, [r8, 0x10]                             |     *((r8 + 0x10)) = r6;
    0x0008319e str.w r1, [r8, 0xc]                               |     __asm ("str.w r1, [r8, 0xc]");
    0x000831a2 b 0x82fb0                                         |     goto label_2;
                                                                 | label_60:
    0x000831a4 ldr r4, [r4]                                      |     r4 = *(r4);
    0x000831a6 add r6, sp, 0x58                                  |     r6 += var_58h;
    0x000831a8 movs r2, 0xe8                                     |     r2 = 0xe8;
    0x000831aa mov r0, r6                                        |     r0 = r6;
    0x000831ac mov r1, r4                                        |     r1 = r4;
    0x000831ae blx 0x9e2c                                        |     fcn_00009e2c ();
    0x000831b2 movs r2, 0xe8                                     |     r2 = 0xe8;
    0x000831b4 mov r1, sb                                        |     r1 = sb;
    0x000831b6 mov r0, r4                                        |     r0 = r4;
    0x000831b8 blx 0x9e2c                                        |     fcn_00009e2c ();
    0x000831bc movs r2, 0xe8                                     |     r2 = 0xe8;
    0x000831be mov r1, r6                                        |     r1 = r6;
    0x000831c0 mov r0, sb                                        |     r0 = sb;
    0x000831c2 blx 0x9e2c                                        |     r0 = fcn_00009e2c ();
    0x000831c6 ldrd r1, r0, [r4, 4]                              |     __asm ("ldrd r1, r0, [r4, 4]");
    0x000831ca add.w ip, r4, 0xc0                                |     
    0x000831ce ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x000831d2 ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x000831d6 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x000831d8 ldr.w r3, [r4, 0xc4]                              |     r3 = *((r4 + 0xc4));
    0x000831dc str.w r0, [sb, 8]                                 |     __asm ("str.w r0, [sb, 8]");
    0x000831e0 str r2, [r4, 4]                                   |     *((r4 + 4)) = r2;
    0x000831e2 ldr.w r2, [sb, 0xc4]                              |     r2 = *((sb + 0xc4));
    0x000831e6 str.w r1, [sb, 4]                                 |     __asm ("str.w r1, [sb, 4]");
    0x000831ea ldr.w r1, [r4, 0xd8]                              |     r1 = *((r4 + 0xd8));
    0x000831ee str.w r2, [r4, 0xc4]                              |     __asm ("str.w r2, [r4, 0xc4]");
    0x000831f2 add.w r2, sb, 0xa0                                |     r2 = sb + 0xa0;
    0x000831f6 str.w r3, [sb, 0xc4]                              |     __asm ("str.w r3, [sb, 0xc4]");
    0x000831fa add.w r3, r4, 0xa0                                |     r3 = r4 + 0xa0;
    0x000831fe str.w r1, [sb, 0xd8]                              |     __asm ("str.w r1, [sb, 0xd8]");
    0x00083202 ldrb.w r1, [r4, 0x94]                             |     r1 = *((r4 + 0x94));
    0x00083206 strb.w r1, [sb, 0x94]                             |     *((sb + 0x94)) = r1;
                                                                 |     do {
    0x0008320a ldr r7, [r3]                                      |         r7 = *(r3);
    0x0008320c adds r3, 0x10                                     |         r3 += 0x10;
    0x0008320e ldr r6, [r3, -0xc]                                |         r6 = *((r3 - 0xc));
    0x00083212 adds r2, 0x10                                     |         r2 += 0x10;
    0x00083214 ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x00083218 ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0008321c cmp r3, ip                                        |         
    0x0008321e str r7, [r2, -0x10]                               |         *((r2 - 0x10)) = r7;
    0x00083222 str r6, [r2, -0xc]                                |         *((r2 - 0xc)) = r6;
    0x00083226 str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0008322a str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0008322e bne 0x8320a                                       |         
                                                                 |     } while (r3 != ip);
    0x00083230 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00083232 mov r1, sb                                        |     r1 = sb;
    0x00083234 mov r0, r4                                        |     r0 = r4;
    0x00083236 str r3, [r2]                                      |     *(r2) = r3;
    0x00083238 ldr.w r3, [sb, 0xb4]                              |     r3 = *((sb + 0xb4));
    0x0008323c adds r3, 1                                        |     r3++;
    0x0008323e str.w r3, [sb, 0xb4]                              |     __asm ("str.w r3, [sb, 0xb4]");
    0x00083242 bl 0x13cd4                                        |     fcn_00013cd4 (r0, r1, r2, r3, r4);
    0x00083246 ldrb.w r3, [r4, 0x95]                             |     r3 = *((r4 + 0x95));
    0x0008324a movs r2, 0                                        |     r2 = 0;
    0x0008324c str r2, [r4, 0x24]                                |     *((r4 + 0x24)) = r2;
    0x0008324e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00083250 bne.w 0x833dc                                     |         goto label_67;
                                                                 |     }
                                                                 | label_8:
    0x00083254 mov r0, r4                                        |     r0 = r4;
    0x00083256 bl 0x18864                                        |     fcn_00018864 (r0);
    0x0008325a mov r0, sb                                        |     r0 = sb;
    0x0008325c blx 0x9558                                        |     fcn_00009558 ();
    0x00083260 cmp r5, 0                                         |     
    0x00083262 itt ge                                            |     
                                                                 |     if (r5 < 0) {
    0x00083264 movge r3, 0xfe                                    |         r3 = 0xfe;
                                                                 |     }
                                                                 |     if (r5 < 0) {
    0x00083266 strbge r3, [sb, 0x93]                             |         *((sb + 0x93)) = r3;
                                                                 |     }
    0x0008326a b 0x82ef4                                         |     goto label_3;
                                                                 | label_47:
    0x0008326c ldr.w r3, [r6, 0xc4]                              |     r3 = *((r6 + 0xc4));
    0x00083270 mov r0, sb                                        |     r0 = sb;
    0x00083272 adds r3, 1                                        |     r3++;
    0x00083274 str.w r3, [r6, 0xc4]                              |     __asm ("str.w r3, [r6, 0xc4]");
    0x00083278 bl 0x7c2d4                                        |     fcn_0007c2d4 (r0, r1, r2, r3, r4, r5, r6);
    0x0008327c ldr.w r3, [r6, 0xc4]                              |     r3 = *((r6 + 0xc4));
    0x00083280 cmp r0, 0x64                                      |     
    0x00083282 mov r4, r0                                        |     r4 = r0;
    0x00083284 add.w r3, r3, -1                                  |     r3 += -1;
    0x00083288 str.w r3, [r6, 0xc4]                              |     __asm ("str.w r3, [r6, 0xc4]");
                                                                 |     if (r0 == 0x64) {
    0x0008328c beq.w 0x834c2                                     |         goto label_68;
                                                                 |     }
    0x00083290 ldrd r2, r3, [sb, 0x88]                           |     __asm ("ldrd r2, r3, [sb, 0x88]");
    0x00083294 cmp r2, 1                                         |     
    0x00083296 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 >= 1) {
    0x0008329a blt 0x832a4                                       |         
    0x0008329c mov r1, sb                                        |         r1 = sb;
    0x0008329e mov r0, r6                                        |         r0 = r6;
    0x000832a0 bl 0xe8d8                                         |         fcn_0000e8d8 (r0, r1);
                                                                 |     }
    0x000832a4 cmp r4, 0x65                                      |     
                                                                 |     if (r4 != 0x65) {
    0x000832a6 bne.w 0x8300c                                     |         goto label_4;
                                                                 |     }
                                                                 | label_10:
    0x000832aa ldrb.w r3, [r6, 0x55]                             |     r3 = *((r6 + 0x55));
    0x000832ae cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000832b0 bne.w 0x8341a                                     |         goto label_69;
                                                                 |     }
                                                                 | label_11:
    0x000832b4 ldr.w sl, [sb, 0x24]                              |     sl = *((sb + 0x24));
    0x000832b8 movs r4, 0x65                                     |     r4 = 0x65;
    0x000832ba ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x000832be subs.w r3, sl, 0                                  |     r3 = sl - 0;
    0x000832c2 it ne                                             |     
                                                                 |     if (r3 == sl) {
    0x000832c4 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000832c6 b 0x83026                                         |     goto label_5;
                                                                 | label_13:
    0x000832c8 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000832ca ldr r1, [r1]                                      |     r1 = *(r1);
    0x000832cc ldr.w r1, [r1, 0xf8]                              |     r1 = *((r1 + 0xf8));
                                                                 |     if (r1 != 0) {
    0x000832d0 cbz r1, 0x83304                                   |         
    0x000832d2 ldr r2, [r1, 0xc]                                 |         r2 = *((r1 + 0xc));
    0x000832d4 str r3, [r1, 0xc]                                 |         *((r1 + 0xc)) = r3;
    0x000832d6 mov fp, r2                                        |         
                                                                 | label_14:
    0x000832d8 cmp.w fp, 0                                       |         
                                                                 |         if (fp > 0) {
    0x000832dc ble 0x83302                                       |             
    0x000832de ldr.w r4, [r6, 0x10c]                             |             r4 = *((r6 + 0x10c));
    0x000832e2 clz r3, sl                                        |             r3 &= sl;
    0x000832e6 lsrs r3, r3, 5                                    |             r3 >>= 5;
    0x000832e8 cmp r4, 0                                         |             
    0x000832ea it eq                                             |             
                                                                 |             if (r4 != 0) {
    0x000832ec moveq r3, 0                                       |                 r3 = 0;
                                                                 |             }
                                                                 |             if (r3 == 0) {
    0x000832ee cbz r3, 0x83302                                   |                 goto label_19;
                                                                 |             }
    0x000832f0 ldr r2, [r6, 0x10]                                |             r2 = *((r6 + 0x10));
    0x000832f2 mov r3, fp                                        |             r3 = fp;
    0x000832f4 ldr.w r0, [r6, 0x110]                             |             r0 = *((r6 + 0x110));
    0x000832f8 mov r1, r6                                        |             r1 = r6;
    0x000832fa ldr.w r2, [r2, r8]                                |             r2 = *((r2 + r8));
    0x000832fe blx r4                                            |             r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00083300 mov sl, r0                                        |             sl = r0;
                                                                 |         }
                                                                 | label_19:
    0x00083302 ldr r2, [r6, 0x14]                                |         r2 = *((r6 + 0x14));
                                                                 |     }
                                                                 | label_12:
    0x00083304 adds r5, 1                                        |     r5++;
    0x00083306 cmp r5, r2                                        |     
                                                                 |     if (r5 < r2) {
    0x00083308 blt.w 0x8342c                                     |         goto label_70;
                                                                 |     }
    0x0008330c ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x00083310 str.w sl, [sb, 0x24]                              |     __asm ("str.w sl, [sb, 0x24]");
    0x00083314 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00083318 beq.w 0x8353a                                     |         goto label_71;
                                                                 |     }
    0x0008331c movs r4, 1                                        |     r4 = 1;
    0x0008331e str r4, [r6, 0x40]                                |     *((r6 + 0x40)) = r4;
                                                                 | label_58:
    0x00083320 mov r1, sl                                        |     r1 = sl;
    0x00083322 bl 0x14ab4                                        |     r0 = fcn_00014ab4 (r0, r1);
    0x00083326 cmp r0, 7                                         |     
                                                                 |     if (r0 != 7) {
    0x00083328 bne.w 0x8303a                                     |         goto label_6;
                                                                 |     }
    0x0008332c ldrsb.w r3, [sb, 0x94]                            |     r3 = *((sb + 0x94));
    0x00083330 str.w r0, [sb, 0x24]                              |     __asm ("str.w r0, [sb, 0x24]");
    0x00083334 cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00083336 bge.w 0x8303a                                     |         goto label_6;
                                                                 |     }
    0x0008333a ldr r5, [r6, 0x48]                                |     r5 = *((r6 + 0x48));
    0x0008333c ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x0008333e and r5, r5, 7                                     |     r5 &= 7;
                                                                 | label_15:
    0x00083342 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00083344 blx 0x9d10                                        |     fcn_00009d10 ();
                                                                 | label_22:
    0x00083348 ldr.w r2, [pc, 0x4bc]                             |     
    0x0008334c ldr.w r3, [pc, 0x4b0]                             |     r3 = *(0x83800);
    0x00083350 add r2, pc                                        |     r2 = 0x106b5c;
    0x00083352 ldr r3, [r2, r3]                                  |     r3 = imp.atan;
    0x00083354 ldr r2, [r3]                                      |     r2 = imp.atan;
    0x00083356 ldr r3, [sp, 0x144]                               |     r3 = var_144h;
    0x00083358 eors r2, r3                                       |     r2 ^= r3;
    0x0008335a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0008335e bne.w 0x83aa0                                     |         goto label_72;
                                                                 |     }
    0x00083362 mov r0, r5                                        |     r0 = r5;
    0x00083364 add sp, 0x14c                                     |     
    0x00083366 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_46:
    0x0008336a ldrb.w r3, [sb, 0x96]                             |     r3 = *((sb + 0x96));
    0x0008336e lsls r4, r3, 0x1e                                 |     r4 = r3 << 0x1e;
                                                                 |     if (r4 != r3) {
    0x00083370 bne.w 0x8348a                                     |         goto label_73;
                                                                 |     }
    0x00083374 ldr.w r3, [r6, 0xb8]                              |     r3 = *((r6 + 0xb8));
    0x00083378 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0008337a beq.w 0x8350c                                     |         goto label_74;
                                                                 |     }
                                                                 | label_18:
    0x0008337e ldrb.w r3, [r6, 0x5e]                             |     r3 = *((r6 + 0x5e));
    0x00083382 tst.w r3, 0x82                                    |     
                                                                 |     if ((r3 & 0x82) != 0) {
    0x00083386 beq 0x8339e                                       |         
    0x00083388 ldrb.w r3, [r6, 0xb1]                             |         r3 = *((r6 + 0xb1));
                                                                 |         if (r3 != 0) {
    0x0008338c cbnz r3, 0x8339e                                  |             goto label_75;
                                                                 |         }
    0x0008338e ldr.w r3, [sb, 0xc4]                              |         r3 = *((sb + 0xc4));
                                                                 |         if (r3 == 0) {
    0x00083392 cbz r3, 0x8339e                                   |             goto label_75;
                                                                 |         }
    0x00083394 ldr r0, [r6]                                      |         r0 = *(r6);
    0x00083396 add.w r1, sb, 0x88                                |         r1 = sb + 0x88;
    0x0008339a bl 0xe840                                         |         fcn_0000e840 (r0, r1, r2);
                                                                 |     }
                                                                 | label_75:
    0x0008339e ldrb.w r3, [sb, 0x96]                             |     r3 = *((sb + 0x96));
    0x000833a2 ldr.w r2, [r6, 0xb8]                              |     r2 = *((r6 + 0xb8));
    0x000833a6 lsls r0, r3, 0x19                                 |     r0 = r3 << 0x19;
    0x000833a8 add.w r2, r2, 1                                   |     r2++;
    0x000833ac str.w r2, [r6, 0xb8]                              |     __asm ("str.w r2, [r6, 0xb8]");
    0x000833b0 ittt pl                                           |     
                                                                 |     if (r0 < r3) {
    0x000833b2 ldrpl r2, [r6, 0xc0]                              |         r2 = *((r6 + 0xc0));
                                                                 |     }
                                                                 |     if (r0 < r3) {
    0x000833b6 addpl r2, 1                                       |         r2++;
                                                                 |     }
                                                                 |     if (r0 >= r3) {
    0x000833b8 str.w r2, [r6, 0xc0]                              |         __asm ("str.w r2, [r6, 0xc0]");
                                                                 |     }
    0x000833bc lsls r1, r3, 0x18                                 |     r1 = r3 << 0x18;
    0x000833be it mi                                             |     
                                                                 |     if (r1 >= r3) {
    0x000833c0 ldrmi r2, [r6, 0xbc]                              |         r2 = *((r6 + 0xbc));
                                                                 |     }
    0x000833c4 mov.w r1, 0                                       |     r1 = 0;
    0x000833c8 itt mi                                            |     
                                                                 |     if (r1 >= r3) {
    0x000833ca addmi r2, 1                                       |         r2++;
                                                                 |     }
                                                                 |     if (r1 >= r3) {
    0x000833cc strmi r2, [r6, 0xbc]                              |         *((r6 + 0xbc)) = r2;
                                                                 |     }
    0x000833d0 movs r2, 2                                        |     r2 = 2;
    0x000833d2 str.w r1, [sb, 0x20]                              |     __asm ("str.w r1, [sb, 0x20]");
    0x000833d6 strb.w r2, [sb, 0x95]                             |     *((sb + 0x95)) = r2;
    0x000833da b 0x82f1e                                         |     goto label_7;
                                                                 | label_67:
    0x000833dc mov r0, r4                                        |     r0 = r4;
    0x000833de bl 0x520bc                                        |     fcn_000520bc (r0);
    0x000833e2 b 0x83254                                         |     goto label_8;
                                                                 | label_57:
    0x000833e4 mov r0, sb                                        |     r0 = sb;
    0x000833e6 bl 0x27a94                                        |     r0 = fcn_00027a94 (r0, r1);
    0x000833ea mov r4, r0                                        |     r4 = r0;
    0x000833ec b 0x83016                                         |     goto label_9;
                                                                 | label_51:
    0x000833ee movs r3, 0                                        |     r3 = 0;
    0x000833f0 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x000833f2 str.w r3, [sb, 0x24]                              |     __asm ("str.w r3, [sb, 0x24]");
    0x000833f6 ldrd r2, r3, [sb, 0x88]                           |     __asm ("ldrd r2, r3, [sb, 0x88]");
    0x000833fa str.w r5, [sb, 0x20]                              |     __asm ("str.w r5, [sb, 0x20]");
    0x000833fe cmp r2, 1                                         |     
    0x00083400 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 < 1) {
    0x00083404 blt.w 0x832aa                                     |         goto label_10;
                                                                 |     }
    0x00083408 mov r1, sb                                        |     r1 = sb;
    0x0008340a mov r0, r6                                        |     r0 = r6;
    0x0008340c bl 0xe8d8                                         |     fcn_0000e8d8 (r0, r1);
    0x00083410 ldrb.w r3, [r6, 0x55]                             |     r3 = *((r6 + 0x55));
    0x00083414 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00083416 beq.w 0x832b4                                     |         goto label_11;
                                                                 |     }
                                                                 | label_69:
    0x0008341a ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x0008341c cmp r2, 0                                         |     
    0x0008341e ittt gt                                           |     
                                                                 |     if (r2 <= 0) {
    0x00083420 movgt sl, 0                                       |         sl = 0;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x00083424 movgt r5, sl                                      |         r5 = sl;
                                                                 |     }
                                                                 |     if (r2 > 0) {
    0x00083426 mov r7, sl                                        |         r7 = sl;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x00083428 ble.w 0x83530                                     |         goto label_76;
                                                                 |     }
                                                                 | label_70:
    0x0008342c ldr r3, [r6, 0x10]                                |     r3 = *((r6 + 0x10));
    0x0008342e lsl.w r8, r5, 4                                   |     r8 = r5 << 4;
    0x00083432 add r3, r8                                        |     r3 += r8;
    0x00083434 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x00083436 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00083438 beq.w 0x83304                                     |         goto label_12;
                                                                 |     }
    0x0008343c ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x0008343e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00083440 beq.w 0x832c8                                     |         goto label_13;
                                                                 |     }
    0x00083444 ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x00083446 ldrb.w fp, [r4, 0xa]                              |     fp = *((r4 + 0xa));
    0x0008344a adds r2, r1, 1                                    |     r2 = r1 + 1;
    0x0008344c str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x0008344e cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00083452 bne 0x834ea                                       |         goto label_77;
                                                                 |     }
    0x00083454 mov r0, r4                                        |     r0 = r4;
    0x00083456 bl 0x11258                                        |     fcn_00011258 (r0);
    0x0008345a ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0008345c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0008345e ldr.w r3, [r3, 0xf8]                              |     r3 = *((r3 + 0xf8));
    0x00083462 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00083464 beq 0x83512                                       |         goto label_78;
                                                                 |     }
    0x00083466 ldrb r2, [r4, 9]                                  |     r2 = *((r4 + 9));
    0x00083468 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x0008346a str.w fp, [r3, 0xc]                               |     __asm ("str.w fp, [r3, 0xc]");
    0x0008346e mov fp, r1                                        |     
    0x00083470 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00083472 beq.w 0x832d8                                     |         goto label_14;
                                                                 |     }
    0x00083476 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x00083478 subs r2, 1                                        |     r2--;
    0x0008347a str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x0008347c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0008347e bne.w 0x832d8                                     |         goto label_14;
                                                                 |     }
    0x00083482 mov r0, r4                                        |     r0 = r4;
    0x00083484 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x00083488 b 0x832d8                                         |     goto label_14;
                                                                 | label_73:
    0x0008348a ldrsb.w r3, [sb, 0x94]                            |     r3 = *((sb + 0x94));
    0x0008348e movs r2, 0x11                                     |     r2 = 0x11;
    0x00083490 str.w r2, [sb, 0x24]                              |     __asm ("str.w r2, [sb, 0x24]");
    0x00083494 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00083496 blt.w 0x835b4                                     |         goto label_79;
                                                                 |     }
    0x0008349a ldr r5, [r6, 0x48]                                |     r5 = *((r6 + 0x48));
    0x0008349c ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x0008349e and r5, r5, 1                                     |     r5 &= 1;
    0x000834a2 b 0x83342                                         |     goto label_15;
                                                                 | label_66:
    0x000834a4 ldrd r2, r3, [sb, 0x88]                           |     __asm ("ldrd r2, r3, [sb, 0x88]");
    0x000834a8 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x000834aa str.w r5, [sb, 0x20]                              |     __asm ("str.w r5, [sb, 0x20]");
    0x000834ae cmp r2, 1                                         |     
    0x000834b0 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 < 1) {
    0x000834b4 blt.w 0x8300a                                     |         goto label_16;
                                                                 |     }
                                                                 | label_56:
    0x000834b8 mov r1, sb                                        |     r1 = sb;
    0x000834ba mov r0, r6                                        |     r0 = r6;
    0x000834bc bl 0xe8d8                                         |     fcn_0000e8d8 (r0, r1);
    0x000834c0 b 0x8300a                                         |     goto label_16;
                                                                 | label_68:
    0x000834c2 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x000834c4 mov r2, r6                                        |     r2 = r6;
                                                                 | label_28:
    0x000834c6 movs r3, 0x64                                     |     r3 = 0x64;
    0x000834c8 mov r5, r3                                        |     r5 = r3;
    0x000834ca str r3, [r2, 0x40]                                |     *((r2 + 0x40)) = r3;
    0x000834cc b 0x83342                                         |     goto label_15;
                                                                 | label_61:
    0x000834ce ldrb.w r3, [r7, 0x57]                             |     r3 = *((r7 + 0x57));
    0x000834d2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000834d4 bne.w 0x83088                                     |         goto label_17;
                                                                 |     }
    0x000834d8 ldrb.w r3, [r7, 0x58]                             |     r3 = *((r7 + 0x58));
    0x000834dc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000834de bne.w 0x83088                                     |         goto label_17;
                                                                 |     }
    0x000834e2 mov r0, r7                                        |     r0 = r7;
    0x000834e4 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x000834e8 b 0x83088                                         |     goto label_17;
                                                                 | label_77:
    0x000834ea ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x000834ec ldr r3, [r3]                                      |     r3 = *(r3);
    0x000834ee ldr.w r3, [r3, 0xf8]                              |     r3 = *((r3 + 0xf8));
                                                                 |     if (r3 == 0) {
    0x000834f2 cbz r3, 0x8351e                                   |         goto label_80;
                                                                 |     }
    0x000834f4 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x000834f6 subs r2, 1                                        |     r2--;
    0x000834f8 str r7, [r3, 0xc]                                 |     *((r3 + 0xc)) = r7;
    0x000834fa str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x000834fc mov fp, r1                                        |     
    0x000834fe cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00083500 bne.w 0x832d8                                     |         goto label_14;
                                                                 |     }
    0x00083504 mov r0, r4                                        |     r0 = r4;
    0x00083506 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0008350a b 0x832d8                                         |     goto label_14;
                                                                 | label_74:
    0x0008350c str.w r3, [r6, 0x128]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00083510 b 0x8337e                                         |     goto label_18;
                                                                 | label_78:
    0x00083512 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00083514 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00083516 beq.w 0x83302                                     |         goto label_19;
                                                                 |     }
    0x0008351a ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x0008351c subs r1, 1                                        |     r1--;
                                                                 | label_80:
    0x0008351e str r1, [r4, 0xc]                                 |     *((r4 + 0xc)) = r1;
    0x00083520 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00083522 bne.w 0x83302                                     |         goto label_19;
                                                                 |     }
    0x00083526 mov r0, r4                                        |     r0 = r4;
    0x00083528 bl 0xb868                                         |     fcn_0000b868 (r0);
    0x0008352c ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x0008352e b 0x83304                                         |     goto label_12;
                                                                 | label_76:
    0x00083530 ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x00083534 movs r3, 0                                        |     r3 = 0;
    0x00083536 str.w r3, [sb, 0x24]                              |     __asm ("str.w r3, [sb, 0x24]");
                                                                 | label_71:
    0x0008353a movs r3, 0                                        |     r3 = 0;
    0x0008353c movs r4, 0x65                                     |     r4 = 0x65;
    0x0008353e mov sl, r3                                        |     sl = r3;
    0x00083540 b 0x83026                                         |     goto label_5;
                                                                 | label_55:
    0x00083542 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00083544 add r5, sp, 0x40                                  |     r5 += var_40h;
    0x00083546 strh.w r3, [sp, 0x54]                             |     var_54h = r3;
    0x0008354a add.w r3, r4, r4, lsl 2                           |     r3 = r4 + (r4 << 2);
    0x0008354e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00083552 add.w r8, r7, r3, lsl 2                           |     r8 = r7 + (r3 << 2);
    0x00083556 vldr d17, [pc, 0x298]                             |     __asm ("vldr d17, aav.0x000000ff");
    0x0008355a vstr d16, [sp, 0x40]                              |     __asm ("vstr d16, [sp, 0x40]");
    0x0008355e vstr d17, [sp, 0x48]                              |     __asm ("vstr d17, [sp, 0x48]");
    0x00083562 ldrsb.w r3, [r8, 1]                               |     r3 = *((r8 + 1));
    0x00083566 adds r3, 0xf                                      |     r3 += 0xf;
    0x00083568 cmp r3, 0xd                                       |     
                                                                 |     if (r3 > 0xd) {
    0x0008356a bhi 0x8361c                                       |         goto label_81;
                                                                 |     }
                                                                 |     /* switch table (15 cases) at 0x83570 */
    0x0008356c tbh [pc, r3, lsl 1]                               |     __asm ("tbh [pc, r3, lsl 1]");
                                                                 | label_49:
    0x0008358c ldr r3, [sp, 0x1c]                                |     r3 = x;
    0x0008358e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 87));
    0x00083592 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00083594 bne.w 0x82ffc                                     |         goto label_20;
                                                                 |     }
    0x00083598 ldr r0, [sp, 0x1c]                                |     r0 = x;
    0x0008359a ldrb.w r3, [r0, 0x58]                             |     r3 = *((r0 + 0x58));
    0x0008359e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000835a0 bne.w 0x82ffc                                     |         goto label_20;
                                                                 |     }
    0x000835a4 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x000835a8 b 0x82ffc                                         |     goto label_20;
                                                                 | label_65:
    0x000835aa movs r3, 0                                        |     r3 = 0;
    0x000835ac cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000835ae bne.w 0x82fb0                                     |         goto label_2;
                                                                 |     }
    0x000835b2 b 0x83156                                         |     goto label_21;
                                                                 | label_79:
    0x000835b4 mov r0, sb                                        |     r0 = sb;
    0x000835b6 bl 0x27a94                                        |     r0 = fcn_00027a94 (r0, r1);
    0x000835ba mov r4, r0                                        |     r4 = r0;
    0x000835bc b 0x8303a                                         |     goto label_6;
                                                                 | label_62:
    0x000835be mov r1, r5                                        |     r1 = r5;
    0x000835c0 mov r0, r4                                        |     r0 = r4;
    0x000835c2 bl 0x1e948                                        |     r0 = fcn_0001e948 (r0, r1);
    0x000835c6 mov r3, r0                                        |     r3 = r0;
    0x000835c8 mov r1, r8                                        |     r1 = r8;
    0x000835ca mov r0, r4                                        |     r0 = r4;
    0x000835cc str.w r3, [sb, 0x7c]                              |     __asm ("str.w r3, [sb, 0x7c]");
    0x000835d0 bl 0x14ab4                                        |     r0 = fcn_00014ab4 (r0, r1);
    0x000835d4 mov r5, r0                                        |     r5 = r0;
    0x000835d6 str.w r0, [sb, 0x24]                              |     __asm ("str.w r0, [sb, 0x24]");
    0x000835da b 0x83342                                         |     goto label_15;
                                                                 | label_42:
    0x000835dc ldr r1, [pc, 0x22c]                               |     
    0x000835de movs r0, 0x15                                     |     r0 = 0x15;
    0x000835e0 add r1, pc                                        |     r1 = 0x106df0;
    0x000835e2 blx 0x9f00                                        |     fcn_00009f00 ();
                                                                 |     do {
    0x000835e6 blx 0xa230                                        |         fcn_0000a230 ();
    0x000835ea ldr r2, [pc, 0x224]                               |         
    0x000835ec add.w r4, r0, 0x14                                |         r4 = r0 + 0x14;
    0x000835f0 ldr r1, [pc, 0x220]                               |         
    0x000835f2 movw r3, 0x5475                                   |         
    0x000835f6 movt r3, 1                                        |         r3 = 0x15475;
    0x000835fa movs r0, 0x15                                     |         r0 = 0x15;
    0x000835fc add r2, pc                                        |         r2 = 0x106e12;
    0x000835fe str r4, [sp]                                      |         *(sp) = r4;
    0x00083600 add r1, pc                                        |         r1 = 0x106e18;
    0x00083602 movs r5, 0x15                                     |         r5 = 0x15;
    0x00083604 blx 0x9f00                                        |         fcn_00009f00 ();
    0x00083608 b 0x83348                                         |         goto label_22;
                                                                 | label_43:
    0x0008360a ldr r1, [pc, 0x20c]                               |         
    0x0008360c movs r0, 0x15                                     |         r0 = 0x15;
    0x0008360e add r1, pc                                        |         r1 = 0x106e2c;
    0x00083610 blx 0x9f00                                        |         fcn_00009f00 ();
    0x00083614 b 0x835e6                                         |         
                                                                 |     } while (1);
                                                                 | label_59:
    0x00083616 mov r5, r4                                        |     r5 = r4;
    0x00083618 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x0008361a b 0x83342                                         |     goto label_15;
                                                                 | label_81:
    0x0008361c ldr.w r1, [r8, 0x10]                              |     r1 = *((r8 + 0x10));
                                                                 | label_24:
    0x00083620 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00083622 beq.w 0x839fc                                     |         goto label_82;
                                                                 |     }
                                                                 | label_27:
    0x00083626 mov r0, r5                                        |     r0 = r5;
    0x00083628 blx 0xa0fc                                        |     fcn_0000a0fc ();
                                                                 | label_23:
    0x0008362c ldrb r3, [r5, 0x14]                               |     r3 = *((r5 + 0x14));
    0x0008362e lsls r0, r3, 0x1d                                 |     r0 = r3 << 0x1d;
                                                                 |     if (r0 != r3) {
    0x00083630 bne.w 0x839e0                                     |         goto label_83;
                                                                 |     }
                                                                 | label_30:
    0x00083634 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00083636 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00083638 beq.w 0x839fc                                     |         goto label_82;
                                                                 |     }
    0x0008363c ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x0008363e movs r1, 0                                        |     r1 = 0;
    0x00083640 strb r1, [r3, r2]                                 |     *((r3 + r2)) = r1;
    0x00083642 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
                                                                 |     if (r3 != 0) {
    0x00083644 cbz r3, 0x8364e                                   |         
    0x00083646 ldrb r3, [r5, 0x15]                               |         r3 = *((r5 + 0x15));
    0x00083648 lsls r1, r3, 0x1d                                 |         r1 = r3 << 0x1d;
                                                                 |         if (r1 >= r3) {
    0x0008364a bpl.w 0x83a72                                     |             goto label_84;
                                                                 |         }
                                                                 |     }
    0x0008364e ldr r5, [r5, 4]                                   |     r5 = *((r5 + 4));
                                                                 | label_31:
    0x00083650 ldrb.w r3, [sb, 0x96]                             |     r3 = *((sb + 0x96));
    0x00083654 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00083656 and r3, r3, 0xc                                   |     r3 &= 0xc;
    0x0008365a ldrh r2, [r2, 0x38]                               |     r2 = *((r2 + 0x38));
    0x0008365c cmp r3, 8                                         |     
    0x0008365e and r1, r2, 0x9000                                |     r1 = r2 & 0x9000;
                                                                 |     if (r3 == 8) {
    0x00083662 beq.w 0x8396e                                     |         goto label_85;
                                                                 |     }
    0x00083666 asrs r3, r4, 0x1f                                 |     r3 = r4 >> 0x1f;
    0x00083668 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0008366a bne.w 0x83a00                                     |         goto label_86;
                                                                 |     }
    0x0008366e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00083670 strd r4, r3, [r2, 0x28]                           |     __asm ("strd r4, r3, [r2, 0x28]");
    0x00083674 movs r3, 4                                        |     r3 = 4;
    0x00083676 strh r3, [r2, 0x38]                               |     *((r2 + 0x38)) = r3;
                                                                 | label_32:
    0x00083678 ldrb.w r2, [r8]                                   |     r2 = *(r8);
    0x0008367c ldr r3, [pc, 0x19c]                               |     
    0x0008367e ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00083680 add r3, pc                                        |     r3 = 0x106ea0;
    0x00083682 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00083686 movs r2, 0                                        |     r2 = 0;
    0x00083688 add.w r0, r4, 0x50                                |     r0 = r4 + 0x50;
    0x0008368c ldr.w r1, [r3, 0xb30]                             |     r1 = *((r3 + 0xb30));
    0x00083690 movs r3, 1                                        |     r3 = 1;
    0x00083692 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x00083694 adds r2, 0                                        |     r2 += 0;
    0x00083696 mov.w r2, -1                                      |     r2 = -1;
    0x0008369a mov.w r3, -1                                      |     r3 = -1;
    0x0008369e bl 0x252e0                                        |     fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
    0x000836a2 ldrh.w r1, [r4, 0x88]                             |     r1 = *((r4 + 0x88));
    0x000836a6 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x000836aa tst.w r1, 0x9000                                  |     
    0x000836ae ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x000836b0 asr.w r3, r2, 0x1f                                |     r3 = r2 >> 0x1f;
                                                                 |     if ((r1 & 0x9000) != 0) {
    0x000836b4 bne.w 0x83a38                                     |         goto label_87;
                                                                 |     }
    0x000836b8 str r3, [r1, 0x7c]                                |     *((r1 + 0x7c)) = r3;
    0x000836ba movs r3, 4                                        |     r3 = 4;
    0x000836bc str r2, [r1, 0x78]                                |     *((r1 + 0x78)) = r2;
    0x000836be strh.w r3, [r1, 0x88]                             |     *((r1 + 0x88)) = r3;
                                                                 | label_37:
    0x000836c2 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000836c4 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x000836c8 ldrh.w r1, [r3, 0xb0]                             |     r1 = *((r3 + 0xb0));
    0x000836cc asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x000836ce tst.w r1, 0x9000                                  |     
    0x000836d2 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
                                                                 |     if ((r1 & 0x9000) != 0) {
    0x000836d4 bne.w 0x83a2e                                     |         goto label_88;
                                                                 |     }
    0x000836d8 str.w r3, [r1, 0xa4]                              |     __asm ("str.w r3, [r1, 0xa4]");
    0x000836dc movs r3, 4                                        |     r3 = 4;
    0x000836de str.w r2, [r1, 0xa0]                              |     __asm ("str.w r2, [r1, 0xa0]");
    0x000836e2 strh.w r3, [r1, 0xb0]                             |     *((r1 + 0xb0)) = r3;
                                                                 | label_36:
    0x000836e6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000836e8 ldr.w r2, [r8, 0xc]                               |     r2 = *((r8 + 0xc));
    0x000836ec ldrh.w r1, [r3, 0xd8]                             |     r1 = *((r3 + 0xd8));
    0x000836f0 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x000836f2 tst.w r1, 0x9000                                  |     
    0x000836f6 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
                                                                 |     if ((r1 & 0x9000) != 0) {
    0x000836f8 bne.w 0x83a24                                     |         goto label_89;
                                                                 |     }
    0x000836fc str.w r3, [r1, 0xcc]                              |     __asm ("str.w r3, [r1, 0xcc]");
    0x00083700 movs r3, 4                                        |     r3 = 4;
    0x00083702 str.w r2, [r1, 0xc8]                              |     __asm ("str.w r2, [r1, 0xc8]");
    0x00083706 strh.w r3, [r1, 0xd8]                             |     *((r1 + 0xd8)) = r3;
                                                                 | label_35:
    0x0008370a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0008370c ldrh.w r2, [r8, 2]                                |     r2 = *((r8 + 2));
    0x00083710 ldrh.w r3, [r3, 0x128]                            |     r3 = *((r3 + 0x128));
    0x00083714 ands r3, r3, 0x9000                               |     r3 &= 0x9000;
                                                                 |     if (r3 != r3) {
    0x00083718 bne.w 0x83a16                                     |         goto label_90;
                                                                 |     }
    0x0008371c ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0008371e str.w r3, [r1, 0x11c]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00083722 movs r3, 4                                        |     r3 = 4;
    0x00083724 str.w r2, [r1, 0x118]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x00083728 strh.w r3, [r1, 0x128]                            |     *((r1 + 0x128)) = r3;
                                                                 | label_34:
    0x0008372c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0008372e ldrh.w r3, [r3, 0x150]                            |     r3 = *((r3 + 0x150));
    0x00083732 tst.w r3, 0x9000                                  |     
                                                                 |     if ((r3 & 0x9000) != 0) {
    0x00083736 bne.w 0x83a0a                                     |         goto label_91;
                                                                 |     }
    0x0008373a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0008373c movs r3, 1                                        |     r3 = 1;
    0x0008373e strh.w r3, [r2, 0x150]                            |     *((r2 + 0x150)) = r3;
                                                                 | label_33:
    0x00083742 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00083744 mov r1, r5                                        |     r1 = r5;
    0x00083746 ldr r3, [pc, 0xd8]                                |     r3 = *(0x83822);
    0x00083748 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0008374a ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0008374c mov.w r2, -1                                      |     r2 = -1;
    0x00083750 adds r0, 0xf0                                     |     r0 += 0xf0;
    0x00083752 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00083754 movs r3, 1                                        |     r3 = 1;
    0x00083756 str r3, [sp]                                      |     *(sp) = r3;
    0x00083758 mov.w r3, -1                                      |     r3 = -1;
    0x0008375c bl 0x252e0                                        |     fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
    0x00083760 movs r3, 8                                        |     r3 = 8;
                                                                 | label_29:
    0x00083762 strh.w r3, [sb, 0x90]                             |     *((sb + 0x90)) = r3;
    0x00083766 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00083768 str.w r3, [sb, 0x78]                              |     __asm ("str.w r3, [sb, 0x78]");
    0x0008376c ldr r3, [sp, 0x1c]                                |     r3 = x;
    0x0008376e ldrb.w r3, [r3, 0x57]                             |     r3 = *((r3 + 0x57));
    0x00083772 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00083774 beq.w 0x83964                                     |         goto label_92;
                                                                 |     }
    0x00083778 ldrd r2, r3, [sb, 0x88]                           |     __asm ("ldrd r2, r3, [sb, 0x88]");
    0x0008377c movs r1, 7                                        |     r1 = 7;
    0x0008377e str.w r1, [sb, 0x24]                              |     __asm ("str.w r1, [sb, 0x24]");
    0x00083782 cmp r2, 1                                         |     
    0x00083784 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 < 1) {
    0x00083788 blt.w 0x8300a                                     |         goto label_16;
                                                                 |     }
    0x0008378c mov r1, sb                                        |     r1 = sb;
    0x0008378e mov r0, r6                                        |     r0 = r6;
    0x00083790 bl 0xe8d8                                         |     fcn_0000e8d8 (r0, r1);
    0x00083794 b 0x8300a                                         |     goto label_16;
    0x00083796 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0008379a mov r0, r5                                        |     r0 = r5;
    0x0008379c ldr r1, [pc, 0x84]                                |     
    0x0008379e ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x000837a0 add r1, pc                                        |     r1 = 0x106fc8;
    0x000837a2 blx 0x982c                                        |     fcn_0000982c ();
    0x000837a6 b 0x8362c                                         |     goto label_23;
    0x000837a8 ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x000837ac ldrh r3, [r2, 0x10]                               |     r3 = *((r2 + 0x10));
    0x000837ae lsls r0, r3, 0x1e                                 |     r0 = r3 << 0x1e;
                                                                 |     if (r0 >= r3) {
    0x000837b0 bpl.w 0x83a7c                                     |         goto label_93;
                                                                 |     }
    0x000837b4 ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x000837b6 b 0x83620                                         |     goto label_24;
    0x000837b8 ldr.w r7, [r8, 0x10]                              |     r7 = *((r8 + 0x10));
    0x000837bc mov r0, r5                                        |     r0 = r5;
    0x000837be ldr r1, [pc, 0x68]                                |     
    0x000837c0 ldrh r2, [r7, 6]                                  |     r2 = *((r7 + 6));
    0x000837c2 add r1, pc                                        |     r1 = 0x106ff0;
    0x000837c4 blx 0x982c                                        |     fcn_0000982c ();
    0x000837c8 ldrh r3, [r7, 6]                                  |     r3 = *((r7 + 6));
    0x000837ca cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000837cc beq.w 0x83a64                                     |         goto label_94;
                                                                 |     }
    0x000837d0 ldr r3, [pc, 0x58]                                |     
    0x000837d2 add.w fp, r7, 0x10                                |     
    0x000837d6 mov.w sl, 0                                       |     sl = 0;
    0x000837da str r4, [sp, 0x3c]                                |     var_3ch = r4;
    0x000837dc add r3, pc                                        |     r3 = 0x10700c;
    0x000837de str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000837e0 ldr r3, [pc, 0x4c]                                |     
    0x000837e2 add r3, pc                                        |     r3 = 0x107016;
    0x000837e4 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000837e6 ldr r3, [pc, 0x4c]                                |     
    0x000837e8 add r3, pc                                        |     r3 = 0x107022;
    0x000837ea str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000837ec b 0x8385e                                         |     
                                                                 |     while (r2 >= r1) {
    0x00083838 ldr r2, [pc, 0x280]                               |         
    0x0008383a lsls r3, r1, 0x1e                                 |         r3 = r1 << 0x1e;
    0x0008383c add r2, pc                                        |         r2 = 0x1072fc;
                                                                 |         if (r3 >= r1) {
    0x0008383e bpl 0x8388c                                       |             goto label_95;
                                                                 |         }
                                                                 | label_25:
    0x00083840 ldr r1, [pc, 0x27c]                               |         
    0x00083842 add r1, pc                                        |         r1 = 0x107306;
                                                                 | label_26:
    0x00083844 mov r3, r1                                        |         r3 = r1;
    0x00083846 ldr r1, [pc, 0x27c]                               |         
    0x00083848 mov r0, r5                                        |         r0 = r5;
    0x0008384a str r4, [sp]                                      |         *(sp) = r4;
    0x0008384c add.w sl, sl, 1                                   |         sl++;
    0x00083850 add r1, pc                                        |         r1 = 0x10731a;
    0x00083852 blx 0x982c                                        |         fcn_0000982c ();
    0x00083856 ldrh r3, [r7, 6]                                  |         r3 = *((r7 + 6));
    0x00083858 cmp sl, r3                                        |         
                                                                 |         if (sl >= r3) {
    0x0008385a bge.w 0x83a62                                     |             goto label_96;
                                                                 |         }
    0x0008385e ldr r3, [fp, 4]!                                  |         r3 = *(arg_4h);
    0x00083862 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00083864 beq.w 0x83a42                                     |             goto label_97;
                                                                 |         }
    0x00083868 ldr r4, [r3]                                      |         r4 = *(r3);
    0x0008386a ldr r1, [sp, 0x28]                                |         r1 = var_28h;
    0x0008386c mov r0, r4                                        |         r0 = r4;
    0x0008386e blx 0x9fb0                                        |         fcn_00009fb0 ();
    0x00083872 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00083874 cmp r0, 0                                         |         
    0x00083876 it eq                                             |         
                                                                 |         if (r0 != 0) {
    0x00083878 moveq r4, r3                                      |             r4 = r3;
                                                                 |         }
                                                                 | label_38:
    0x0008387a ldr r2, [r7, 0x10]                                |         r2 = *((r7 + 0x10));
    0x0008387c ldrb.w r1, [r2, sl]                               |         r1 = *((r2 + sl));
    0x00083880 lsls r2, r1, 0x1f                                 |         r2 = r1 << 0x1f;
    0x00083882 bpl 0x83838                                       |         
                                                                 |     }
    0x00083884 ldr r2, [pc, 0x240]                               |     
    0x00083886 lsls r3, r1, 0x1e                                 |     r3 = r1 << 0x1e;
    0x00083888 add r2, pc                                        |     r2 = 0x107354;
                                                                 |     if (r3 < r1) {
    0x0008388a bmi 0x83840                                       |         goto label_25;
                                                                 |     }
                                                                 | label_95:
    0x0008388c ldr r1, [pc, 0x23c]                               |     
    0x0008388e add r1, pc                                        |     r1 = 0x10735e;
    0x00083890 b 0x83844                                         |     goto label_26;
    0x00083892 ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x00083896 mov r0, r5                                        |     r0 = r5;
    0x00083898 ldr r1, [pc, 0x234]                               |     
    0x0008389a ldrsb.w r3, [r2]                                  |     r3 = *(r2);
    0x0008389e add r1, pc                                        |     r1 = 0x107372;
    0x000838a0 ldr r2, [r2, 0x20]                                |     r2 = *((r2 + 0x20));
    0x000838a2 blx 0x982c                                        |     fcn_0000982c ();
    0x000838a6 b 0x8362c                                         |     goto label_23;
    0x000838a8 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x000838ac ldr r1, [r3]                                      |     r1 = *(r3);
    0x000838ae b 0x83620                                         |     goto label_24;
    0x000838b0 ldr r1, [pc, 0x220]                               |     
    0x000838b2 add r1, pc                                        |     r1 = 0x10738a;
    0x000838b4 b 0x83626                                         |     goto label_27;
    0x000838b6 ldr r1, [pc, 0x220]                               |     
    0x000838b8 mov r0, r5                                        |     r0 = r5;
    0x000838ba ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x000838be add r1, pc                                        |     r1 = 0x10739c;
    0x000838c0 blx 0x982c                                        |     fcn_0000982c ();
    0x000838c4 b 0x8362c                                         |     goto label_23;
    0x000838c6 ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x000838ca mov r0, r5                                        |     r0 = r5;
    0x000838cc ldr r3, [pc, 0x20c]                               |     
    0x000838ce ldr r1, [pc, 0x210]                               |     
    0x000838d0 ldrb r7, [r2, 4]                                  |     r7 = *((r2 + 4));
    0x000838d2 add r3, pc                                        |     r3 = 0x1073b2;
    0x000838d4 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000838d6 add r1, pc                                        |     r1 = 0x1073bc;
    0x000838d8 add.w r3, r3, r7, lsl 2                           |     r3 += (r7 << 2);
    0x000838dc ldr.w r3, [r3, 0xb20]                             |     r3 = *((r3 + 0xb20));
    0x000838e0 blx 0x982c                                        |     fcn_0000982c ();
    0x000838e4 b 0x8362c                                         |     goto label_23;
    0x000838e6 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x000838ea mov r0, r5                                        |     r0 = r5;
    0x000838ec ldr r1, [pc, 0x1f4]                               |     
    0x000838ee ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000838f0 add r1, pc                                        |     r1 = 0x1073d8;
    0x000838f2 ldrsb.w r3, [r2]                                  |     r3 = *(r2);
    0x000838f6 ldr r2, [r2, 0x20]                                |     r2 = *((r2 + 0x20));
    0x000838f8 blx 0x982c                                        |     fcn_0000982c ();
    0x000838fc b 0x8362c                                         |     goto label_23;
    0x000838fe ldr.w r2, [r8, 0x10]                              |     r2 = *((r8 + 0x10));
    0x00083902 ldr.w fp, [r2]                                    |     fp = *(r2);
    0x00083906 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0008390a beq 0x8392e                                       |         goto label_98;
                                                                 |     }
    0x0008390c ldr r3, [pc, 0x1d8]                               |     
    0x0008390e mov sl, r2                                        |     sl = r2;
    0x00083910 movs r7, 1                                        |     r7 = 1;
    0x00083912 movs r2, 0x5b                                     |     r2 = 0x5b;
    0x00083914 add r3, pc                                        |     r3 = 0x107400;
    0x00083916 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     do {
    0x00083918 ldr r3, [sl, 4]!                                  |         r3 = *((sl += 4));
    0x0008391c adds r7, 1                                        |         r7++;
    0x0008391e ldr r1, [sp, 0x28]                                |         r1 = var_28h;
    0x00083920 mov r0, r5                                        |         r0 = r5;
    0x00083922 blx 0x982c                                        |         fcn_0000982c ();
    0x00083926 cmp fp, r7                                        |         
    0x00083928 mov.w r2, 0x2c                                    |         r2 = 0x2c;
    0x0008392c bhs 0x83918                                       |         
                                                                 |     } while (fp >= r7);
                                                                 | label_98:
    0x0008392e ldr r1, [pc, 0x1bc]                               |     
    0x00083930 movs r2, 1                                        |     r2 = 1;
    0x00083932 mov r0, r5                                        |     r0 = r5;
    0x00083934 add r1, pc                                        |     r1 = 0x107426;
    0x00083936 blx 0x9d54                                        |     fcn_00009d54 ();
    0x0008393a b 0x8362c                                         |     goto label_23;
    0x0008393c ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x00083940 mov r0, r5                                        |     r0 = r5;
    0x00083942 ldr r1, [pc, 0x1ac]                               |     
    0x00083944 ldrd r2, r3, [r3]                                 |     __asm ("ldrd r2, r3, [r3]");
    0x00083948 add r1, pc                                        |     r1 = 0x10743e;
    0x0008394a blx 0x982c                                        |     fcn_0000982c ();
    0x0008394e b 0x8362c                                         |     goto label_23;
    0x00083950 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x00083954 mov r0, r5                                        |     r0 = r5;
    0x00083956 ldr r1, [pc, 0x19c]                               |     
    0x00083958 ldrd r2, r3, [r3]                                 |     __asm ("ldrd r2, r3, [r3]");
    0x0008395c add r1, pc                                        |     r1 = 0x107456;
    0x0008395e blx 0x982c                                        |     fcn_0000982c ();
    0x00083962 b 0x8362c                                         |     goto label_23;
                                                                 | label_92:
    0x00083964 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00083966 mov r2, r6                                        |     r2 = r6;
    0x00083968 str.w r3, [sb, 0x24]                              |     __asm ("str.w r3, [sb, 0x24]");
    0x0008396c b 0x834c6                                         |     goto label_28;
                                                                 | label_85:
    0x0008396e ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x00083972 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x00083974 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00083976 bne 0x83a5a                                       |         goto label_99;
                                                                 |     }
    0x00083978 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0008397a str r3, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r3;
    0x0008397c movs r3, 4                                        |     r3 = 4;
    0x0008397e str r2, [r1, 0x28]                                |     *((r1 + 0x28)) = r2;
    0x00083980 strh r3, [r1, 0x38]                               |     *((r1 + 0x38)) = r3;
                                                                 | label_41:
    0x00083982 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00083984 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x00083988 ldrh.w r1, [r3, 0x60]                             |     r1 = *((r3 + 0x60));
    0x0008398c asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0008398e tst.w r1, 0x9000                                  |     
    0x00083992 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
                                                                 |     if ((r1 & 0x9000) != 0) {
    0x00083994 bne 0x83a50                                       |         goto label_100;
                                                                 |     }
    0x00083996 str r3, [r1, 0x54]                                |     *((r1 + 0x54)) = r3;
    0x00083998 movs r3, 4                                        |     r3 = 4;
    0x0008399a str r2, [r1, 0x50]                                |     *((r1 + 0x50)) = r2;
    0x0008399c strh.w r3, [r1, 0x60]                             |     *((r1 + 0x60)) = r3;
                                                                 | label_40:
    0x000839a0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000839a2 ldr.w r2, [r8, 0xc]                               |     r2 = *((r8 + 0xc));
    0x000839a6 ldrh.w r1, [r3, 0x88]                             |     r1 = *((r3 + 0x88));
    0x000839aa asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x000839ac tst.w r1, 0x9000                                  |     
    0x000839b0 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
                                                                 |     if ((r1 & 0x9000) != 0) {
    0x000839b2 bne 0x83a46                                       |         goto label_101;
                                                                 |     }
    0x000839b4 str r3, [r1, 0x7c]                                |     *((r1 + 0x7c)) = r3;
    0x000839b6 movs r3, 4                                        |     r3 = 4;
    0x000839b8 str r2, [r1, 0x78]                                |     *((r1 + 0x78)) = r2;
    0x000839ba strh.w r3, [r1, 0x88]                             |     *((r1 + 0x88)) = r3;
                                                                 | label_39:
    0x000839be ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000839c0 mov r1, r5                                        |     r1 = r5;
    0x000839c2 ldr r3, [pc, 0x134]                               |     r3 = *(0x83afa);
    0x000839c4 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x000839c6 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x000839c8 mov.w r2, -1                                      |     r2 = -1;
    0x000839cc adds r0, 0xa0                                     |     r0 += 0xa0;
    0x000839ce str r3, [sp, 4]                                   |     var_4h = r3;
    0x000839d0 movs r3, 1                                        |     r3 = 1;
    0x000839d2 str r3, [sp]                                      |     *(sp) = r3;
    0x000839d4 mov.w r3, -1                                      |     r3 = -1;
    0x000839d8 bl 0x252e0                                        |     fcn_000252e0 (r0, r1, r2, r3, r4, r5, r6);
    0x000839dc movs r3, 4                                        |     r3 = 4;
    0x000839de b 0x83762                                         |     goto label_29;
                                                                 | label_83:
    0x000839e0 ldr r0, [sp, 0x1c]                                |     r0 = x;
    0x000839e2 ldrb.w r3, [r0, 0x57]                             |     r3 = *((r0 + 0x57));
    0x000839e6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000839e8 bne.w 0x83634                                     |         goto label_30;
                                                                 |     }
    0x000839ec ldrb.w r3, [r0, 0x58]                             |     r3 = *((r0 + 0x58));
    0x000839f0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000839f2 bne.w 0x83634                                     |         goto label_30;
                                                                 |     }
    0x000839f6 bl 0x1d600                                        |     fcn_0001d600 (r0);
    0x000839fa b 0x83634                                         |     goto label_30;
                                                                 | label_82:
    0x000839fc movs r5, 0                                        |     r5 = 0;
    0x000839fe b 0x83650                                         |     goto label_31;
                                                                 | label_86:
    0x00083a00 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00083a02 mov r2, r4                                        |     r2 = r4;
    0x00083a04 bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a08 b 0x83678                                         |     goto label_32;
                                                                 | label_91:
    0x00083a0a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00083a0c add.w r0, r3, 0x140                               |     r0 = r3 + 0x140;
    0x00083a10 bl 0x1390c                                        |     fcn_0001390c (r0);
    0x00083a14 b 0x83742                                         |     goto label_33;
                                                                 | label_90:
    0x00083a16 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00083a18 movs r3, 0                                        |     r3 = 0;
    0x00083a1a add.w r0, r1, 0x118                               |     r0 = r1 + 0x118;
    0x00083a1e bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a22 b 0x8372c                                         |     goto label_34;
                                                                 | label_89:
    0x00083a24 add.w r0, r1, 0xc8                                |     r0 = r1 + 0xc8;
    0x00083a28 bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a2c b 0x8370a                                         |     goto label_35;
                                                                 | label_88:
    0x00083a2e add.w r0, r1, 0xa0                                |     r0 = r1 + 0xa0;
    0x00083a32 bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a36 b 0x836e6                                         |     goto label_36;
                                                                 | label_87:
    0x00083a38 add.w r0, r1, 0x78                                |     r0 = r1 + 0x78;
    0x00083a3c bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a40 b 0x836c2                                         |     goto label_37;
                                                                 | label_97:
    0x00083a42 ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x00083a44 b 0x8387a                                         |     goto label_38;
                                                                 | label_101:
    0x00083a46 add.w r0, r1, 0x78                                |     r0 = r1 + 0x78;
    0x00083a4a bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a4e b 0x839be                                         |     goto label_39;
                                                                 | label_100:
    0x00083a50 add.w r0, r1, 0x50                                |     r0 = r1 + 0x50;
    0x00083a54 bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a58 b 0x839a0                                         |     goto label_40;
                                                                 | label_99:
    0x00083a5a ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00083a5c bl 0x13964                                        |     fcn_00013964 (r0, r1, r2, r3, r4, r5, r6);
    0x00083a60 b 0x83982                                         |     goto label_41;
                                                                 | label_96:
    0x00083a62 ldr r4, [sp, 0x3c]                                |     r4 = var_3ch;
                                                                 | label_94:
    0x00083a64 ldr r1, [pc, 0x94]                                |     
    0x00083a66 movs r2, 1                                        |     r2 = 1;
    0x00083a68 mov r0, r5                                        |     r0 = r5;
    0x00083a6a add r1, pc                                        |     r1 = 0x10756a;
    0x00083a6c blx 0x9d54                                        |     fcn_00009d54 ();
    0x00083a70 b 0x8362c                                         |     goto label_23;
                                                                 | label_84:
    0x00083a72 mov r0, r5                                        |     r0 = r5;
    0x00083a74 bl 0x1eb40                                        |     r0 = fcn_0001eb40 (r0);
    0x00083a78 mov r5, r0                                        |     r5 = r0;
    0x00083a7a b 0x83650                                         |     goto label_31;
                                                                 | label_93:
    0x00083a7c tst.w r3, 0x24                                    |     
                                                                 |     if ((r3 & 0x24) == 0) {
    0x00083a80 bne 0x83a90                                       |         
    0x00083a82 lsls r1, r3, 0x1c                                 |         r1 = r3 << 0x1c;
                                                                 |         if (r1 < r3) {
    0x00083a84 bmi 0x83aaa                                       |             goto label_102;
                                                                 |         }
    0x00083a86 lsls r7, r3, 0x1f                                 |         r7 = r3 << 0x1f;
                                                                 |         if (r7 < r3) {
    0x00083a88 bmi 0x83aa4                                       |             goto label_103;
                                                                 |         }
    0x00083a8a ldr r1, [pc, 0x74]                                |         
    0x00083a8c add r1, pc                                        |         r1 = 0x107592;
    0x00083a8e b 0x83626                                         |         goto label_27;
                                                                 |     }
    0x00083a90 ldr r1, [pc, 0x70]                                |     
    0x00083a92 mov r0, r5                                        |     r0 = r5;
    0x00083a94 ldrd r2, r3, [r2]                                 |     __asm ("ldrd r2, r3, [r2]");
    0x00083a98 add r1, pc                                        |     r1 = 0x1075a0;
    0x00083a9a blx 0x982c                                        |     fcn_0000982c ();
    0x00083a9e b 0x8362c                                         |     goto label_23;
                                                                 | label_72:
    0x00083aa0 blx 0x9b44                                        |     fcn_00009b44 ();
                                                                 | label_103:
    0x00083aa4 ldr r1, [pc, 0x60]                                |     
    0x00083aa6 add r1, pc                                        |     r1 = 0x1075b2;
    0x00083aa8 b 0x83626                                         |     goto label_27;
                                                                 | label_102:
    0x00083aaa ldr r1, [pc, 0x60]                                |     
    0x00083aac mov r0, r5                                        |     r0 = r5;
    0x00083aae ldrd r2, r3, [r2]                                 |     __asm ("ldrd r2, r3, [r2]");
    0x00083ab2 add r1, pc                                        |     r1 = 0x1075c4;
    0x00083ab4 blx 0x982c                                        |     fcn_0000982c ();
    0x00083ab8 b 0x8362c                                         |     goto label_23;
    0x00096b7e subs r5, 0x54                                     |     r5 -= 0x54;
    0x00096b80 adds r0, 0x35                                     |     r0 += 0x35;
    0x00096b82 movs r0, r6                                       |     r0 = r6;
    0x00096b84 adcs r5, r1                                       |     __asm ("adcs r5, r1");
    0x00096b86 ldrsh r0, [r3, r5]                                |     r0 = *((r3 + r5));
    0x00096b88 cmp r4, r8                                        |     
    0x00096b8a adcs r6, r0                                       |     __asm ("adcs r6, r0");
    0x00096b8c ldr r4, [pc, 0x154]                               |     r4 = *(0x96ce4);
    0x00096b8e ldrsh r4, [r2, r5]                                |     r4 = *((r2 + r5));
    0x00096b90 adcs r0, r2                                       |     __asm ("adcs r0, r2");
    0x00096b92 cmp r7, r8                                        |     
    0x00096b94 strh r7, [r3, r5]                                 |     *((r3 + r5)) = r7;
    0x00096b96 ldrh r1, [r1, r1]                                 |     r1 = *((r1 + r1));
    0x00096b98 subs r5, 0x45                                     |     r5 -= 0x45;
    0x00096b9a adds r1, 0x38                                     |     r1 += 0x38;
    0x00096b9c adds r2, 0x39                                     |     r2 += 0x39;
    0x00096b9e movs r0, r0                                       |     
    0x00096ba0 adcs r5, r1                                       |     __asm ("adcs r5, r1");
    0x00096ba2 ldrsh r0, [r3, r5]                                |     r0 = *((r3 + r5));
    0x00096ba4 ldr r5, [r0, r1]                                  |     r5 = *((r0 + r1));
    0x00096ba6 strh r0, [r2, r1]                                 |     *((r2 + r1)) = r0;
    0x00096ba8 add r7, fp                                        |     r7 += fp;
    0x00096baa str r5, [r0, r1]                                  |     *((r0 + r1)) = r5;
    0x00096bac ldr r0, [pc, 0x150]                               |     r0 = "THREADSAFE=1";
    0x00096bae adds r1, 0x3d                                     |     r1 += 0x3d;
    0x00096bb0 adds r0, 0x30                                     |     r0 += 0x30;
    0x00096bb2 movs r0, r6                                       |     r0 = r6;
    0x00096bb4 adcs r5, r1                                       |     __asm ("adcs r5, r1");
    0x00096bb6 ldrsh r0, [r3, r5]                                |     r0 = *((r3 + r5));
    0x00096bb8 strb r6, [r0, r5]                                 |     *((r0 + r5)) = r6;
    0x00096bba muls r6, r1, r6                                   |     r6 = r1 * r6;
    0x00096bbc ldr r1, [pc, 0x150]                               |     r1 = "USE_URI";
    0x00096bbe ldr r6, [pc, 0x13c]                               |     r6 = *(0x96cfe);
    0x00096bc0 adcs r7, r3                                       |     __asm ("adcs r7, r3");
    0x00096bc2 bx sl                                             |     return uint32_t (*sl)() ();
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1ae28 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.sqlite3_str_appendchar ()            | void sqlite3_str_appendchar (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x0001ae28 push {r3, r4, r5, r6, r7, lr}         |     
    0x0001ae2a mov r6, r2                            |     r6 = r2;
    0x0001ae2c ldr r2, [r0, 0x10]                    |     r2 = *((r0 + 0x10));
    0x0001ae2e asrs r5, r1, 0x1f                     |     r5 = r1 >> 0x1f;
    0x0001ae30 mov r4, r0                            |     r4 = r0;
    0x0001ae32 ldr r7, [r0, 8]                       |     r7 = *((r0 + 8));
    0x0001ae34 adds.w ip, r2, r1                     |     
    0x0001ae38 adc r5, r5, 0                         |     __asm ("adc r5, r5, 0");
    0x0001ae3c cmp ip, r7                            |     
    0x0001ae3e sbcs r5, r5, 0                        |     __asm ("sbcs r5, r5, 0");
                                                     |     if (ip >= r7) {
    0x0001ae42 bge 0x1ae6c                           |         goto label_1;
                                                     |     }
    0x0001ae44 mov r3, r1                            |     r3 = r1;
    0x0001ae46 subs r1, 1                            |     r1--;
    0x0001ae48 cmp r3, 0                             |     
                                                     |     if (r3 <= 0) {
    0x0001ae4a ble 0x1ae6a                           |         goto label_2;
                                                     |     }
                                                     | label_0:
    0x0001ae4c ldr r3, [r4, 4]                       |     r3 = *((r4 + 4));
    0x0001ae4e adds r0, r2, 1                        |     r0 = r2 + 1;
    0x0001ae50 str r0, [r4, 0x10]                    |     *((r4 + 0x10)) = r0;
    0x0001ae52 strb r6, [r3, r2]                     |     *((r3 + r2)) = r6;
    0x0001ae54 subs r3, r1, 1                        |     r3 = r1 - 1;
                                                     |     if (r1 == 0) {
    0x0001ae56 cbz r1, 0x1ae6a                       |         goto label_2;
                                                     |     }
                                                     |     do {
    0x0001ae58 ldr r1, [r4, 0x10]                    |         r1 = *((r4 + 0x10));
    0x0001ae5a subs r3, 1                            |         r3--;
    0x0001ae5c ldr r0, [r4, 4]                       |         r0 = *((r4 + 4));
    0x0001ae5e adds r2, r3, 1                        |         r2 = r3 + 1;
    0x0001ae60 add.w r5, r1, 1                       |         r5 = r1 + 1;
    0x0001ae64 str r5, [r4, 0x10]                    |         *((r4 + 0x10)) = r5;
    0x0001ae66 strb r6, [r0, r1]                     |         *((r0 + r1)) = r6;
    0x0001ae68 bne 0x1ae58                           |         
                                                     |     } while (r2 != r3);
                                                     |     do {
                                                     | label_2:
    0x0001ae6a pop {r3, r4, r5, r6, r7, pc}          |         
                                                     | label_1:
    0x0001ae6c bl 0x1ace8                            |         r0 = fcn_0001ace8 (r0, r1);
    0x0001ae70 cmp r0, 0                             |         
    0x0001ae72 ble 0x1ae6a                           |         
                                                     |     } while (r0 <= 0);
    0x0001ae74 ldr r2, [r4, 0x10]                    |     r2 = *((r4 + 0x10));
    0x0001ae76 subs r1, r0, 1                        |     r1 = r0 - 1;
    0x0001ae78 b 0x1ae4c                             |     goto label_0;
                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1bf34 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) sym.sqlite3_str_vappendf ()                              | void sqlite3_str_vappendf (int16_t arg_1h, int16_t arg_388h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                     |     int16_t var_bp_4h;
                                                                     |     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_44h;
                                                                     |     int16_t var_45h;
                                                                     |     int16_t var_46h;
                                                                     |     int16_t var_47h;
                                                                     |     int16_t var_0h_2;
                                                                     |     int16_t var_8ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0001bf34 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001bf38 mov r4, r1                                            |     r4 = r1;
    0x0001bf3a vpush {d8}                                            |     __asm ("vpush {d8}");
    0x0001bf3e sub sp, 0x94                                          |     
    0x0001bf40 str r0, [sp, 0x14]                                    |     var_14h = r0;
    0x0001bf42 ldrb r3, [r0, 0x15]                                   |     r3 = *((r0 + 0x15));
    0x0001bf44 ldr.w r0, [pc, 0x670]                                 |     
    0x0001bf48 ldr.w r1, [pc, 0x670]                                 |     r1 = *(0x1c5bc);
    0x0001bf4c add r0, pc                                            |     r0 = 0x38508;
    0x0001bf4e ldr r1, [r0, r1]                                      |     
    0x0001bf50 ldr r1, [r1]                                          |     r1 = *(0x38508);
    0x0001bf52 str r1, [sp, 0x8c]                                    |     var_8ch = r1;
    0x0001bf54 mov.w r1, 0                                           |     r1 = 0;
    0x0001bf58 ands r1, r3, 2                                        |     r1 = r3 & 2;
    0x0001bf5c str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0001bf5e str r1, [sp, 0x20]                                    |     var_20h = r1;
                                                                     |     if (r1 == r3) {
    0x0001bf60 beq.w 0x1c918                                         |         goto label_75;
                                                                     |     }
    0x0001bf64 mov r3, r2                                            |     r3 = r2;
    0x0001bf66 ldr r2, [r3], 4                                       |     r2 = *(r3);
                                                                     |     r3 += 4;
    0x0001bf6a str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0001bf6c movs r3, 1                                            |     r3 = 1;
    0x0001bf6e str r2, [sp, 0x34]                                    |     var_34h = r2;
    0x0001bf70 str r3, [sp, 0x20]                                    |     var_20h = r3;
                                                                     | label_18:
    0x0001bf72 ldrb r3, [r4]                                         |     r3 = *(r4);
    0x0001bf74 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001bf76 beq.w 0x1c634                                         |         goto label_9;
                                                                     |     }
    0x0001bf7a ldr.w r2, [pc, 0x644]                                 |     r2 = *(0x0001c5c0);
    0x0001bf7e mov.w sl, 0                                           |     sl = 0;
    0x0001bf82 add r2, pc                                            |     r2 += pc;
    0x0001bf84 str r2, [sp, 0x30]                                    |     var_30h = r2;
                                                                     | label_6:
    0x0001bf86 cmp r3, 0x25                                          |     
                                                                     |     if (r3 != 0x25) {
    0x0001bf88 beq 0x1bfaa                                           |         
    0x0001bf8a movs r1, 0x25                                         |         r1 = 0x25;
    0x0001bf8c mov r0, r4                                            |         r0 = r4;
    0x0001bf8e blx 0x9b94                                            |         fcn_00009b94 ();
    0x0001bf92 mov r1, r4                                            |         r1 = r4;
    0x0001bf94 mov r5, r0                                            |         r5 = r0;
    0x0001bf96 subs r2, r0, r4                                       |         r2 = r0 - r4;
    0x0001bf98 ldr r0, [sp, 0x14]                                    |         r0 = var_14h;
    0x0001bf9a blx 0x9d54                                            |         fcn_00009d54 ();
    0x0001bf9e ldrb r3, [r5]                                         |         r3 = *(r5);
    0x0001bfa0 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0001bfa2 beq.w 0x1c634                                         |             goto label_9;
                                                                     |         }
    0x0001bfa6 mov sl, r4                                            |         sl = r4;
    0x0001bfa8 mov r4, r5                                            |         r4 = r5;
                                                                     |     }
    0x0001bfaa ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001bfac adds r4, 1                                            |     r4++;
    0x0001bfae cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001bfb0 beq.w 0x1d1a4                                         |         goto label_76;
                                                                     |     }
    0x0001bfb4 movs r6, 0                                            |     r6 = 0;
    0x0001bfb6 mov.w r2, -1                                          |     r2 = -1;
    0x0001bfba mov r7, r6                                            |     r7 = r6;
    0x0001bfbc str r6, [sp, 0x24]                                    |     var_24h = r6;
    0x0001bfbe strd r6, r6, [sp, 0x18]                               |     __asm ("strd r6, r6, [var_1ch]");
    0x0001bfc2 str r6, [sp, 8]                                       |     var_8h = r6;
    0x0001bfc4 str r6, [sp, 0x10]                                    |     var_10h = r6;
    0x0001bfc6 str r2, [sp, 4]                                       |     var_4h = r2;
                                                                     | label_0:
    0x0001bfc8 sub.w r2, r3, 0x20                                    |     r2 = r3 - 0x20;
    0x0001bfcc cmp r2, 0x4c                                          |     
                                                                     |     if (r2 <= 0x4c) {
    0x0001bfce bhi 0x1c06e                                           |         
                                                                     |         /* switch table (78 cases) at 0x1bfd4 */
    0x0001bfd0 tbh [pc, r2, lsl 1]                                   |         __asm ("tbh [pc, r2, lsl 1]");
                                                                     |     }
                                                                     | label_3:
    0x0001c06e mov fp, r7                                            |     
                                                                     | label_12:
    0x0001c070 movs r0, 0                                            |     r0 = 0;
                                                                     | label_1:
    0x0001c072 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0001c074 movs r5, 0                                            |     r5 = 0;
    0x0001c076 addw r2, r2, 0xd94                                    |     __asm ("addw r2, r2, aav.0x000000ff");
    0x0001c07a b 0x1c086                                             |     
                                                                     |     while (r1 != r3) {
    0x0001c07c adds r5, 1                                            |         r5++;
    0x0001c07e adds r2, 6                                            |         r2 += 6;
    0x0001c080 cmp r5, 0x17                                          |         
                                                                     |         if (r5 == 0x17) {
    0x0001c082 beq.w 0x1c634                                         |             goto label_9;
                                                                     |         }
    0x0001c086 ldrb r1, [r2]                                         |         r1 = *(r2);
    0x0001c088 cmp r1, r3                                            |         
    0x0001c08a bne 0x1c07c                                           |         
                                                                     |     }
    0x0001c08c ldr.w r3, [pc, 0x534]                                 |     r3 = *(0x0001c5c4);
    0x0001c090 lsls r2, r5, 1                                        |     r2 = r5 << 1;
    0x0001c092 str r2, [sp, 0x28]                                    |     var_28h = r2;
    0x0001c094 add r2, r5                                            |     r2 += r5;
    0x0001c096 add r3, pc                                            |     r3 += pc;
    0x0001c098 add.w r3, r3, r2, lsl 1                               |     r3 += (r2 << 1);
    0x0001c09c ldrb.w sb, [r3, 0xd97]                                |     sb = *((r3 + 0xd97));
    0x0001c0a0 cmp.w sb, 0x10                                        |     
                                                                     |     if (sb > 0x10) {
    0x0001c0a4 bhi.w 0x1c634                                         |         goto label_9;
                                                                     |     }
                                                                     |     /* switch table (18 cases) at 0x1c0ac */
    0x0001c0a8 tbh [pc, sb, lsl 1]                                   |     __asm ("tbh [pc, sb, lsl 1]");
    0x0001c0ce ldrb r2, [r4, 1]                                      |     r2 = *((r4 + 1));
    0x0001c0d0 sub.w r7, r3, 0x30                                    |     r7 = r3 - 48;
    0x0001c0d4 mov r3, r7                                            |     r3 = r7;
    0x0001c0d6 adds r1, r4, 1                                        |     r1 = r4 + 1;
    0x0001c0d8 sub.w r0, r2, 0x30                                    |     r0 = r2 - 0x30;
    0x0001c0dc cmp r0, 9                                             |     
                                                                     |     if (r0 > 9) {
    0x0001c0de bhi 0x1c0fe                                           |         goto label_77;
                                                                     |     }
                                                                     |     do {
    0x0001c0e0 add.w r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
    0x0001c0e4 mov r4, r1                                            |         r4 = r1;
    0x0001c0e6 add.w r2, r2, r3, lsl 1                               |         r2 += (r3 << 1);
    0x0001c0ea sub.w r3, r2, 0x30                                    |         r3 = r2 - 0x30;
    0x0001c0ec lsls r0, r6, 0xc                                      |         r0 = r6 << 0xc;
    0x0001c0ee ldrb r2, [r1, 1]!                                     |         r2 = *((r1 += 1));
    0x0001c0f2 sub.w r0, r2, 0x30                                    |         r0 = r2 - 0x30;
    0x0001c0f6 cmp r0, 9                                             |         
    0x0001c0f8 bls 0x1c0e0                                           |         
                                                                     |     } while (r0 < 9);
    0x0001c0fa bic r7, r3, 0x80000000                                |     r7 = BIT_MASK (r3, 0x80000000);
                                                                     | label_77:
    0x0001c0fe cmp r2, 0x2e                                          |     
    0x0001c100 it ne                                                 |     
                                                                     |     if (r2 != 0x2e) {
    0x0001c102 cmpne r2, 0x6c                                        |         __asm ("cmpne r2, 0x6c");
                                                                     |     }
    0x0001c104 mov r3, r2                                            |     r3 = r2;
                                                                     |     if (r2 != 0x2e) {
    0x0001c106 bne.w 0x1c7b4                                         |         goto label_78;
                                                                     |     }
    0x0001c10a ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c10c adds r4, 1                                            |     r4++;
    0x0001c10e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c110 bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
                                                                     | label_2:
    0x0001c114 mov fp, r7                                            |     
    0x0001c116 mov r0, r3                                            |     r0 = r3;
    0x0001c118 b 0x1c072                                             |     goto label_1;
    0x0001c11a ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c11c movs r2, 1                                            |     r2 = 1;
    0x0001c11e adds r4, 1                                            |     r4++;
    0x0001c120 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0001c122 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c124 bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c128 b 0x1c114                                             |     goto label_2;
    0x0001c12a ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c12c movs r2, 1                                            |     r2 = 1;
    0x0001c12e adds r4, 1                                            |     r4++;
    0x0001c130 str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x0001c132 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c134 bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c138 b 0x1c114                                             |     goto label_2;
    0x0001c13a ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c13c movs r6, 0x2c                                         |     r6 = 0x2c;
    0x0001c13e adds r4, 1                                            |     r4++;
    0x0001c140 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c142 bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c146 b 0x1c114                                             |     goto label_2;
    0x0001c148 ldrb r3, [r4, 1]!                                     |     r3 = *((r4 += 1));
    0x0001c14c movs r2, 0x2b                                         |     r2 = 0x2b;
    0x0001c14e str r2, [sp, 8]                                       |     var_8h = r2;
    0x0001c150 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c152 bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c156 b 0x1c114                                             |     goto label_2;
    0x0001c158 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0001c15a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c15c bne.w 0x1c796                                         |         goto label_79;
                                                                     |     }
    0x0001c160 ldr r5, [sp, 0xc]                                     |     r5 = var_ch;
    0x0001c162 ldr r7, [r5], 4                                       |     r7 = *(r5);
                                                                     |     r5 += 4;
                                                                     | label_13:
    0x0001c166 cmp r7, 0                                             |     
                                                                     |     if (r7 < 0) {
    0x0001c168 bge 0x1c178                                           |         
    0x0001c16a cmp.w r7, -0x80000000                                 |         
                                                                     |         if (r7 == -0x80000000) {
    0x0001c16e beq.w 0x1c7bc                                         |             goto label_80;
                                                                     |         }
    0x0001c172 rsbs r7, r7, 0                                        |         r7 -= ;
    0x0001c174 movs r3, 1                                            |         r3 = 1;
    0x0001c176 str r3, [sp, 0x10]                                    |         var_10h = r3;
                                                                     |     }
                                                                     | label_14:
    0x0001c178 ldrb r3, [r4, 1]!                                     |     r3 = *((r4 += 1));
    0x0001c17c cmp r3, 0x2e                                          |     
                                                                     |     if (r3 != 0x2e) {
    0x0001c17e bne.w 0x1c778                                         |         goto label_81;
                                                                     |     }
                                                                     | label_20:
    0x0001c182 ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c184 cmp r3, 0x2a                                          |     
                                                                     |     if (r3 != 0x2a) {
    0x0001c186 bne.w 0x1c74c                                         |         goto label_82;
                                                                     |     }
    0x0001c18a ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0001c18c cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c18e bne.w 0x1c7c4                                         |         goto label_83;
                                                                     |     }
    0x0001c192 mov r3, r5                                            |     r3 = r5;
    0x0001c194 ldr r2, [r3], 4                                       |     r2 = *(r3);
                                                                     |     r3 += 4;
    0x0001c198 str r2, [sp, 4]                                       |     var_4h = r2;
    0x0001c19a str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     | label_16:
    0x0001c19c ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001c19e cmp r3, 0                                             |     
                                                                     |     if (r3 < 0) {
    0x0001c1a0 bge 0x1c1b0                                           |         
    0x0001c1a2 cmp.w r3, -0x80000000                                 |         
    0x0001c1a6 ite ne                                                |         
                                                                     |         if (r3 != -0x80000000) {
    0x0001c1a8 rsbne r3, r3, 0                                       |             __asm ("rsbne r3, r3, 0");
                                                                     |         }
                                                                     |         if (r3 != -0x80000000) {
    0x0001c1aa moveq r3, -1                                          |             r3 = -1;
                                                                     |         }
    0x0001c1ae str r3, [sp, 4]                                       |         var_4h = r3;
                                                                     |     }
                                                                     | label_15:
    0x0001c1b0 ldrb r3, [r4, 2]                                      |     r3 = *((r4 + 2));
    0x0001c1b2 adds r4, 2                                            |     r4 += 2;
                                                                     | label_11:
    0x0001c1b4 cmp r3, 0x6c                                          |     
                                                                     |     if (r3 != 0x6c) {
    0x0001c1b6 bne.w 0x1c06e                                         |         goto label_3;
                                                                     |     }
    0x0001c1ba ldrb r3, [r4]                                         |     r3 = *(r4);
    0x0001c1bc cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c1be bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c1c2 b 0x1c114                                             |     goto label_2;
    0x0001c1c4 ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c1c6 movs r2, 1                                            |     r2 = 1;
    0x0001c1c8 adds r4, 1                                            |     r4++;
    0x0001c1ca str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0001c1cc cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c1ce bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c1d2 b 0x1c114                                             |     goto label_2;
    0x0001c1d4 ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c1d6 movs r2, 1                                            |     r2 = 1;
    0x0001c1d8 adds r4, 1                                            |     r4++;
    0x0001c1da str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0001c1dc cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c1de bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c1e2 b 0x1c114                                             |     goto label_2;
    0x0001c1e4 ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c1e6 movs r2, 0x20                                         |     r2 = 0x20;
    0x0001c1e8 adds r4, 1                                            |     r4++;
    0x0001c1ea str r2, [sp, 8]                                       |     var_8h = r2;
    0x0001c1ec cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c1ee bne.w 0x1bfc8                                         |         goto label_0;
                                                                     |     }
    0x0001c1f2 b 0x1c114                                             |     goto label_2;
    0x0001c1f4 cmp.w sb, 0xe                                         |     
    0x0001c1f8 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
                                                                     |     if (sb == 0xe) {
    0x0001c1fa beq.w 0x1cc08                                         |         goto label_84;
                                                                     |     }
    0x0001c1fe cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c200 bne.w 0x1d1e4                                         |         goto label_85;
                                                                     |     }
    0x0001c204 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001c206 movs r6, 0x27                                         |     r6 = 0x27;
    0x0001c208 ldr r5, [r3], 4                                       |     r5 = *(r3);
                                                                     |     r3 += 4;
    0x0001c20c str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     | label_61:
    0x0001c20e cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0001c210 beq.w 0x1d206                                         |         goto label_86;
                                                                     |     }
    0x0001c214 ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0001c216 mov r3, r1                                            |     r3 = r1;
    0x0001c218 asrs r2, r1, 0x1f                                     |     r2 = r1 >> 0x1f;
    0x0001c21a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001c21c beq.w 0x1d3f4                                         |         goto label_87;
                                                                     |     }
    0x0001c220 sub.w sb, sb, 0xa                                     |     sb -= 0xa;
    0x0001c224 clz sb, sb                                            |     sb &= sb;
    0x0001c228 lsr.w sb, sb, 5                                       |     sb >>= 5;
                                                                     | label_34:
    0x0001c22c movs r1, 0                                            |     r1 = 0;
    0x0001c22e mov ip, r4                                            |     
    0x0001c230 mov lr, r1                                            |     lr = r1;
    0x0001c232 ldr r4, [sp, 0x1c]                                    |     r4 = var_1ch;
    0x0001c234 mov r7, r1                                            |     r7 = r1;
    0x0001c236 mov r8, r1                                            |     r8 = r1;
    0x0001c238 b 0x1c25a                                             |     
                                                                     |     if (r4 != 0) {
                                                                     |         while (r6 != r0) {
    0x0001c23a cbz r4, 0x1c246                                       |             
    0x0001c23c and r0, r0, 0xc0                                      |             r0 &= 0xc0;
    0x0001c240 cmp r0, 0xc0                                          |             
                                                                     |             if (r0 == 0xc0) {
    0x0001c242 beq.w 0x1cac2                                         |                 goto label_88;
                                                                     |             }
                                                                     |         }
                                                                     | label_4:
    0x0001c246 adds r7, 1                                            |         r7++;
    0x0001c248 adc r8, r8, 0                                         |         __asm ("adc r8, r8, 0");
    0x0001c24c subs r3, 1                                            |         r3--;
    0x0001c24e sbc r2, r2, 0                                         |         __asm ("sbc r2, r2, 0");
    0x0001c252 orrs.w r0, r3, r2                                     |         r0 = r3 | r2;
                                                                     |         if (r0 == r3) {
    0x0001c256 beq.w 0x1ca2c                                         |             goto label_89;
                                                                     |         }
    0x0001c25a ldrb r0, [r5, r7]                                     |         r0 = *((r5 + r7));
    0x0001c25c cmp r0, 0                                             |         
                                                                     |         if (r0 == 0) {
    0x0001c25e beq.w 0x1ca2c                                         |             goto label_89;
                                                                     |         }
    0x0001c262 cmp r6, r0                                            |         
    0x0001c264 bne 0x1c23a                                           |         
                                                                     |     }
    0x0001c266 adds r1, 1                                            |     r1++;
    0x0001c268 adc lr, lr, 0                                         |     __asm ("adc lr, lr, 0");
    0x0001c26c b 0x1c246                                             |     goto label_4;
    0x0001c26e ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0001c270 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c272 bne.w 0x1cd48                                         |         goto label_90;
                                                                     |     }
    0x0001c276 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001c278 adds r3, 7                                            |     r3 += 7;
    0x0001c27a bic r3, r3, 7                                         |     r3 = BIT_MASK (r3, 7);
    0x0001c27e vldmia r3!, {d8}                                      |     __asm ("vldmia r3!, {d8}");
    0x0001c282 str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     | label_41:
    0x0001c284 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001c286 adds r3, 1                                            |     r3++;
    0x0001c288 itt eq                                                |     
                                                                     |     if (r3 != 1) {
    0x0001c28a moveq r1, 1                                           |         r1 = 1;
                                                                     |     }
                                                                     |     if (r3 != 1) {
    0x0001c28c moveq r8, 6                                           |         r8 = 6;
                                                                     |     }
                                                                     |     if (r3 != 1) {
    0x0001c290 beq 0x1c2ae                                           |         
                                                                     | label_66:
    0x0001c292 ldr r2, [sp, 4]                                       |         r2 = var_4h;
    0x0001c294 mov.w r3, 0xe100                                      |         
    0x0001c298 movt r3, 0x5f5                                        |         r3 = 0x5f5e100;
    0x0001c29c cmp r2, r3                                            |         
    0x0001c29e mov r1, r2                                            |         r1 = r2;
    0x0001c2a0 it ge                                                 |         
                                                                     |         if (r2 < r3) {
    0x0001c2a2 movge r1, r3                                          |             r1 = r3;
                                                                     |         }
    0x0001c2a4 cmp r2, 0                                             |         
    0x0001c2a6 mov r8, r1                                            |         r8 = r1;
    0x0001c2a8 ite le                                                |         
                                                                     |         if (r2 > 0) {
    0x0001c2aa movle r1, 0                                           |             r1 = 0;
                                                                     |         }
                                                                     |         if (r2 > 0) {
    0x0001c2ac movgt r1, 1                                           |             r1 = 1;
                                                                     |             goto label_91;
                                                                     |         }
                                                                     |     }
                                                                     | label_91:
    0x0001c2ae sub.w r2, sb, 3                                       |     r2 = sb - 3;
    0x0001c2b2 vcmpe.f64 d8, 0                                       |     __asm ("vcmpe.f64 d8, 0");
    0x0001c2b6 clz r2, r2                                            |     r2 &= r2;
    0x0001c2ba vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0001c2be lsr.w r2, r2, 5                                       |     r2 >>= 5;
    0x0001c2c2 ittt mi                                               |     
                                                                     |     if (r2 >= 0) {
    0x0001c2c4 movmi r3, 0x2d                                        |         r3 = 0x2d;
                                                                     |     }
                                                                     |     if (r2 < 0) {
    0x0001c2c6 vnegmi d8, d8                                         |         __asm ("vnegmi d8, d8");
                                                                     |     }
                                                                     |     if (r2 < 0) {
    0x0001c2ca str r3, [sp, 8]                                       |         var_8h = r3;
                                                                     |     }
    0x0001c2cc ands r1, r2                                           |     r1 &= r2;
                                                                     |     if (r1 == r2) {
    0x0001c2ce beq.w 0x1cb80                                         |         goto label_92;
                                                                     |     }
    0x0001c2d2 add.w r8, r8, -1                                      |     r8 += -1;
    0x0001c2d6 movw r2, 0xcccd                                       |     
    0x0001c2da ubfx r3, r8, 0, 0xc                                   |     r3 = (r8 >> 0) & ((1 << 0xc) - 1);
    0x0001c2de movt r2, 0xcccc                                       |     
    0x0001c2e2 umull r0, r2, r2, r3                                  |     r0:r2 = r2 * r3;
    0x0001c2e6 ldr r0, [pc, 0x2e0]                                   |     
    0x0001c2e8 cmp r3, 9                                             |     
    0x0001c2ea add r0, pc                                            |     
    0x0001c2ec add.w r0, r0, 0xe60                                   |     r0 = 0x39718;
    0x0001c2f0 lsr.w r2, r2, 3                                       |     r2 >>= 3;
    0x0001c2f4 add.w r2, r2, r2, lsl 2                               |     r2 = 0xcccccccd;
    0x0001c2f8 sub.w r2, r3, r2, lsl 1                               |     r2 = r3 - (r2 << 1);
    0x0001c2fc add.w r2, r0, r2, lsl 3                               |     r2 = r0 + (r2 << 3);
    0x0001c300 vldr d16, [r2]                                        |     __asm ("vldr d16, [r2]");
    0x0001c304 mov r2, r1                                            |     r2 = r1;
                                                                     |     if (r3 <= 9) {
    0x0001c306 ble 0x1c31e                                           |         goto label_52;
                                                                     |     }
                                                                     | label_28:
    0x0001c308 vldr d17, [pc, 0x2a4]                                 |     __asm ("vldr d17, aav.0x000000ff");
                                                                     |     do {
    0x0001c30c subs r3, 0xa                                          |         r3 -= 0xa;
    0x0001c30e vmul.f64 d16, d16, d17                                |         __asm ("vmul.f64 d16, d16, d17");
    0x0001c312 cmp r3, 9                                             |         
    0x0001c314 bgt 0x1c30c                                           |         
                                                                     |     } while (r3 > 9);
                                                                     | label_29:
    0x0001c316 cmp.w sb, 1                                           |     
                                                                     |     if (sb == 1) {
    0x0001c31a beq.w 0x1cea0                                         |         goto label_93;
                                                                     |     }
                                                                     | label_52:
    0x0001c31e vcmp.f64 d8, d8                                       |     __asm ("vcmp.f64 d8, d8");
    0x0001c322 vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0001c326 bvs.w 0x1d2ea                                         |     __asm ("bvs.w aav.0x000000ff");
    0x0001c32a vcmpe.f64 d8, 0                                       |     __asm ("vcmpe.f64 d8, 0");
    0x0001c32e vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                     |     if (sb > 1) {
    0x0001c332 bgt.w 0x1ced6                                         |         goto label_94;
                                                                     |     }
                                                                     | label_73:
    0x0001c336 movs r6, 0                                            |     r6 = 0;
                                                                     | label_54:
    0x0001c338 cmp.w sb, 1                                           |     
                                                                     |     if (sb == 1) {
    0x0001c33c beq.w 0x1d194                                         |         goto label_95;
                                                                     |     }
    0x0001c340 vadd.f64 d8, d8, d16                                  |     __asm ("vadd.f64 d8, d8, d16");
    0x0001c344 vmov.f64 d16, 1.000000e+01                            |     __asm ("vmov.f64 d16, 1");
    0x0001c348 vcmpe.f64 d8, d16                                     |     __asm ("vcmpe.f64 d8, d16");
    0x0001c34c vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                     |     if (sb >= 1) {
    0x0001c350 bge.w 0x1cda8                                         |         goto label_96;
                                                                     |     }
    0x0001c354 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0001c356 bne.w 0x1cdb8                                         |         goto label_97;
                                                                     |     }
                                                                     | label_45:
    0x0001c35a mov r3, r2                                            |     r3 = r2;
    0x0001c35c ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0001c35e mov r1, r3                                            |     r1 = r3;
    0x0001c360 mov.w sb, 2                                           |     sb = 2;
    0x0001c364 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0001c366 str r2, [sp, 0x38]                                    |     var_38h = r2;
                                                                     | label_46:
    0x0001c368 adds.w r3, r8, r3                                     |     r3 = r8 + r3;
    0x0001c36c adc.w r1, r1, r8, asr 31                              |     __asm ("adc.w r1, r1, r8, asr 31");
    0x0001c370 adds.w r3, r3, fp                                     |     r3 += fp;
    0x0001c374 adc.w r1, r1, fp, asr 31                              |     __asm ("adc.w r1, r1, fp, asr 31");
    0x0001c378 adds.w r2, r3, 0xf                                    |     r2 = r3 + 0xf;
    0x0001c37c adc r3, r1, 0                                         |     __asm ("adc r3, r1, 0");
    0x0001c380 cmp r2, 0x47                                          |     
    0x0001c382 sbcs r1, r3, 0                                        |     __asm ("sbcs r1, r3, 0");
    0x0001c386 ittt lt                                               |     
                                                                     |     if (r2 >= 0x47) {
    0x0001c388 movlt r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r2 >= 0x47) {
    0x0001c38a addlt sl, sp, 0x44                                    |         sl += var_44h;
                                                                     |     }
                                                                     |     if (r2 < 0x47) {
    0x0001c38e str r3, [sp, 0x2c]                                    |         var_2ch = r3;
                                                                     |     }
                                                                     |     if (r2 >= 0x47) {
    0x0001c390 bge.w 0x1d112                                         |         goto label_98;
                                                                     |     }
                                                                     | label_59:
    0x0001c394 ldrd r3, r1, [sp, 0x18]                               |     __asm ("ldrd r3, r1, [var_1ch]");
    0x0001c398 movs r7, 0xa                                          |     r7 = 0xa;
    0x0001c39a movs r2, 0x10                                         |     r2 = 0x10;
    0x0001c39c mov r0, sl                                            |     r0 = sl;
    0x0001c39e orrs r3, r1                                           |     r3 |= r1;
    0x0001c3a0 cmp.w r8, 0                                           |     
    0x0001c3a4 it gt                                                 |     
                                                                     |     if (r8 <= 0) {
    0x0001c3a6 orrgt r3, r3, 1                                       |         r3 |= 1;
                                                                     |     }
    0x0001c3aa str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0001c3ac smlabb r7, r7, r1, r2                                 |     __asm ("smlabb r7, r7, r1, r2");
    0x0001c3b0 ldr r3, [sp, 8]                                       |     r3 = var_8h;
                                                                     |     if (r3 != 0) {
    0x0001c3b2 cbz r3, 0x1c3b8                                       |         
    0x0001c3b4 strb r3, [r0], 1                                      |         *(r0) = r3;
                                                                     |         r0++;
                                                                     |     }
    0x0001c3b8 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001c3ba cmp r3, 0                                             |     
                                                                     |     if (r3 >= 0) {
    0x0001c3bc bge.w 0x1d0c4                                         |         goto label_99;
                                                                     |     }
    0x0001c3c0 movs r2, 0x30                                         |     r2 = 0x30;
    0x0001c3c2 strb r2, [r0]                                         |     *(r0) = r2;
    0x0001c3c4 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0001c3c6 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001c3c8 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c3ca bne.w 0x1cd98                                         |         goto label_100;
                                                                     |     }
    0x0001c3ce adds r3, r0, 1                                        |     r3 = r0 + 1;
    0x0001c3d0 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0001c3d2 beq.w 0x1d40c                                         |         goto label_101;
                                                                     |     }
                                                                     | label_43:
    0x0001c3d6 rsbs r2, r2, 0                                        |     r2 -= ;
    0x0001c3d8 mov r0, r3                                            |     r0 = r3;
    0x0001c3da movs r1, 0x30                                         |     r1 = 0x30;
    0x0001c3dc add r3, r2                                            |     r3 += r2;
    0x0001c3de str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0001c3e0 blx 0x97d4                                            |     fcn_000097d4 ();
    0x0001c3e4 ldr r2, [sp, 4]                                       |     r2 = var_4h;
    0x0001c3e6 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0001c3e8 add r2, r8                                            |     r2 += r8;
    0x0001c3ea add.w r8, r2, 1                                       |     r8 = r2 + 1;
                                                                     | label_44:
    0x0001c3ee cmp.w r8, 0                                           |     
                                                                     |     if (r8 <= 0) {
    0x0001c3f2 ble.w 0x1d3d2                                         |         goto label_102;
                                                                     |     }
    0x0001c3f6 add.w r0, r3, r8                                      |     r0 = r3 + r8;
    0x0001c3fa vmov.f64 d17, 1.000000e+01                            |     __asm ("vmov.f64 d17, 1");
    0x0001c3fe add.w r8, r3, -1                                      |     r8 = r3 + -1;
    0x0001c402 subs r1, r0, 1                                        |     r1 = r0 - 1;
                                                                     |     do {
    0x0001c404 cmp r7, 0                                             |         
    0x0001c406 it le                                                 |         
                                                                     |         if (r7 > 0) {
    0x0001c408 movle r3, 0x30                                        |             r3 = 0x30;
                                                                     |         }
                                                                     |         if (r7 > 0) {
    0x0001c40a ble 0x1c426                                           |             
    0x0001c40c vcvt.s32.f64 s15, d8                                  |             __asm ("vcvt.s32.f64 s15, d8");
    0x0001c410 subs r7, 1                                            |             r7--;
    0x0001c412 vcvt.f64.s32 d16, s15                                 |             __asm ("vcvt.f64.s32 d16, s15");
    0x0001c416 vmov r3, s15                                          |             __asm ("vmov r3, s15");
    0x0001c41a adds r3, 0x30                                         |             r3 += 0x30;
    0x0001c41c uxtb r3, r3                                           |             r3 = (int8_t) r3;
    0x0001c41e vsub.f64 d8, d8, d16                                  |             __asm ("vsub.f64 d8, d8, d16");
    0x0001c422 vmul.f64 d8, d8, d17                                  |             __asm ("vmul.f64 d8, d8, d17");
                                                                     |         }
    0x0001c426 strb r3, [r8, 1]!                                     |         *((r8 += 1)) = r3;
    0x0001c42a cmp r8, r1                                            |         
    0x0001c42c bne 0x1c404                                           |         
                                                                     |     } while (r8 != r1);
    0x0001c42e mov r2, r0                                            |     r2 = r0;
                                                                     | label_72:
    0x0001c430 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001c432 ldr r1, [sp, 0x38]                                    |     r1 = var_38h;
    0x0001c434 tst r3, r1                                            |     
                                                                     |     if ((r3 & r1) != 0) {
    0x0001c436 bne.w 0x1d1b4                                         |         goto label_103;
                                                                     |     }
                                                                     | label_58:
    0x0001c43a cmp.w sb, 2                                           |     
                                                                     |     if (sb == 2) {
    0x0001c43e beq.w 0x1d126                                         |         goto label_104;
                                                                     |     }
                                                                     | label_60:
    0x0001c442 movs r3, 0                                            |     r3 = 0;
    0x0001c444 ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0001c446 strb r3, [r2]                                         |     *(r2) = r3;
    0x0001c448 sub.w sb, r2, sl                                      |     sb = r2 - sl;
    0x0001c44c ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0001c44e sub.w r6, fp, sb                                      |     r6 = fp - sb;
    0x0001c452 eor r3, r3, 1                                         |     r3 ^= 1;
    0x0001c456 tst r1, r3                                            |     
                                                                     |     if ((r1 & r3) == 0) {
    0x0001c458 beq.w 0x1c6f0                                         |         goto label_17;
                                                                     |     }
    0x0001c45c cmp sb, fp                                            |     
                                                                     |     if (sb < fp) {
    0x0001c45e blt.w 0x1d300                                         |         goto label_105;
                                                                     |     }
    0x0001c462 cmp r6, 0                                             |     
                                                                     |     if (r6 <= 0) {
    0x0001c464 ble.w 0x1d32e                                         |         goto label_106;
                                                                     |     }
                                                                     | label_8:
    0x0001c468 ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0001c46a mov r1, r6                                            |     r1 = r6;
    0x0001c46c movs r2, 0x20                                         |     r2 = 0x20;
    0x0001c46e mov r0, r5                                            |     r0 = r5;
    0x0001c470 blx 0x9cac                                            |     fcn_00009cac ();
    0x0001c474 mov r2, sb                                            |     r2 = sb;
    0x0001c476 mov r1, sl                                            |     r1 = sl;
    0x0001c478 mov r0, r5                                            |     r0 = r5;
    0x0001c47a blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001c47e b 0x1c714                                             |     goto label_69;
    0x0001c480 movs r6, 0                                            |     r6 = 0;
    0x0001c482 ldr r3, [pc, 0x148]                                   |     
    0x0001c484 ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0001c486 add r3, pc                                            |     r3 = 0x38a58;
    0x0001c488 add r2, r5                                            |     r2 += r5;
    0x0001c48a add.w r3, r3, r2, lsl 1                               |     r3 += (r2 << 1);
    0x0001c48e ldrb.w r3, [r3, 0xd96]                                |     r3 = *((r3 + 0xd96));
    0x0001c492 tst.w r3, 1                                           |     
    0x0001c496 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
                                                                     |     if ((r3 & 1) == 0) {
    0x0001c498 beq.w 0x1c7ea                                         |         goto label_107;
                                                                     |     }
    0x0001c49c cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c49e bne 0x1c592                                           |         goto label_108;
                                                                     |     }
    0x0001c4a0 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001c4a2 bne.w 0x1d22e                                         |         goto label_109;
                                                                     |     }
                                                                     |     do {
                                                                     | label_63:
    0x0001c4a6 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0001c4a8 ldr r7, [r3], 4                                       |         r7 = *(r3);
                                                                     |         r3 += 4;
    0x0001c4ac str r3, [sp, 0xc]                                     |         var_ch = r3;
    0x0001c4ae asrs r1, r7, 0x1f                                     |         r1 = r7 >> 0x1f;
                                                                     | label_5:
    0x0001c4b0 subs.w r8, r1, 0                                      |         r8 = r1 - 0;
                                                                     |         if (r8 >= r1) {
    0x0001c4b4 bge.w 0x1c804                                         |             goto label_21;
                                                                     |         }
    0x0001c4b8 rsbs r7, r7, 0                                        |         r7 -= ;
    0x0001c4ba mov.w r3, 0x2d                                        |         r3 = 0x2d;
    0x0001c4be sbc.w r8, r8, r8, lsl 1                               |         __asm ("sbc.w r8, r8, r8, lsl 1");
    0x0001c4c2 str r3, [sp, 8]                                       |         var_8h = r3;
    0x0001c4c4 b 0x1c810                                             |         goto label_22;
    0x0001c4c6 ldr r3, [sp, 0x20]                                    |         r3 = var_20h;
    0x0001c4c8 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0001c4ca bne.w 0x1ccf0                                         |             goto label_110;
                                                                     |         }
    0x0001c4ce ldr r7, [sp, 0xc]                                     |         r7 = var_ch;
    0x0001c4d0 ldr r3, [r7], 4                                       |         r3 = *(r7);
                                                                     |         r7 += 4;
    0x0001c4d4 str r3, [sp, 0x2c]                                    |         var_2ch = r3;
    0x0001c4d6 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0001c4d8 beq.w 0x1d226                                         |             goto label_111;
                                                                     |         }
    0x0001c4dc cmp.w sb, 6                                           |         
                                                                     |         if (sb != 6) {
    0x0001c4e0 bne.w 0x1cdf8                                         |             goto label_112;
                                                                     |         }
    0x0001c4e4 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0001c4e6 ldr r3, [r2, 0x10]                                    |         r3 = *((r2 + 0x10));
    0x0001c4e8 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0001c4ea bne.w 0x1ce9a                                         |             goto label_113;
                                                                     |         }
    0x0001c4ee ldr r3, [r2, 0xc]                                     |         r3 = *((r2 + 0xc));
    0x0001c4f0 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0001c4f2 beq.w 0x1ce9a                                         |             goto label_113;
                                                                     |         }
    0x0001c4f6 ldr r3, [sp, 4]                                       |         r3 = var_4h;
    0x0001c4f8 lsrs r3, r3, 0x1f                                     |         r3 >>= 0x1f;
    0x0001c4fa cmp.w fp, 0                                           |         
    0x0001c4fe ite ne                                                |         
                                                                     |         if (fp == 0) {
    0x0001c500 movne r3, 0                                           |             r3 = 0;
                                                                     |         }
                                                                     |         if (fp != 0) {
    0x0001c502 andeq r3, r3, 1                                       |             r3 &= 1;
                                                                     |         }
    0x0001c506 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0001c508 beq.w 0x1ce9a                                         |             goto label_113;
                                                                     |         }
    0x0001c50c ldrb r3, [r2, 0x14]                                   |         r3 = *((r2 + 0x14));
    0x0001c50e ldr.w sl, [sp, 0x2c]                                  |         sl = var_2ch;
    0x0001c512 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0001c514 bne.w 0x1ce06                                         |             goto label_114;
                                                                     |         }
    0x0001c518 ldr r3, [r2]                                          |         r3 = *(r2);
    0x0001c51a ldr r1, [sp, 0x2c]                                    |         r1 = var_2ch;
    0x0001c51c str r1, [r2, 4]                                       |         *((r2 + 4)) = r1;
                                                                     |         if (r3 != 0) {
    0x0001c51e cbz r3, 0x1c542                                       |             
    0x0001c520 ldr.w r2, [r3, 0x164]                                 |             r2 = *((r3 + 0x164));
    0x0001c524 cmp r2, r1                                            |             
                                                                     |             if (r2 < r1) {
    0x0001c526 bls 0x1c542                                           |                 goto label_115;
                                                                     |             }
    0x0001c528 ldr.w r2, [r3, 0x15c]                                 |             r2 = *((r3 + 0x15c));
    0x0001c52c cmp r2, r1                                            |             
    0x0001c52e it ls                                                 |             
                                                                     |             if (r2 > r1) {
    0x0001c530 movls r0, 0x80                                        |                 r0 = 0x80;
                                                                     |             }
                                                                     |             if (r2 < r1) {
    0x0001c532 bls 0x1c54c                                           |                 goto label_116;
                                                                     |             }
    0x0001c534 ldr.w r2, [r3, 0x160]                                 |             r2 = *((r3 + 0x160));
    0x0001c538 cmp r2, r1                                            |             
    0x0001c53a it ls                                                 |             
                                                                     |             if (r2 <= r1) {
    0x0001c53c ldrhls r0, [r3, 0x136]                                |                 __asm ("ldrhls r0, aav.0x000000ff");
                                                                     |             }
                                                                     |             if (r2 < r1) {
    0x0001c540 bls 0x1c54c                                           |                 goto label_116;
                                                                     |             }
                                                                     |         }
                                                                     | label_115:
    0x0001c542 ldr r3, [pc, 0x8c]                                    |         
    0x0001c544 ldr r0, [sp, 0x2c]                                    |         r0 = var_2ch;
    0x0001c546 add r3, pc                                            |         
    0x0001c548 ldr r3, [r3, 0x2c]                                    |         r3 = *(0x38b48);
    0x0001c54a blx r3                                                |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                                     | label_116:
    0x0001c54c ldr r5, [sp, 0x14]                                    |         r5 = var_14h;
    0x0001c54e ldr r6, [sp, 0x2c]                                    |         r6 = var_2ch;
    0x0001c550 str r7, [sp, 0xc]                                     |         var_ch = r7;
    0x0001c552 str r0, [r5, 8]                                       |         *((r5 + 8)) = r0;
    0x0001c554 mov r0, r6                                            |         r0 = r6;
    0x0001c556 mov sl, r6                                            |         sl = r6;
    0x0001c558 blx 0x9e8c                                            |         fcn_00009e8c ();
    0x0001c55c ldrb r3, [r5, 0x15]                                   |         r3 = *((r5 + 0x15));
    0x0001c55e movs r2, 0                                            |         r2 = 0;
    0x0001c560 str r0, [r5, 0x10]                                    |         *((r5 + 0x10)) = r0;
    0x0001c562 mov r1, r6                                            |         r1 = r6;
    0x0001c564 mov r0, r5                                            |         r0 = r5;
    0x0001c566 orr r3, r3, 4                                         |         r3 |= 4;
    0x0001c56a strb r3, [r5, 0x15]                                   |         *((r5 + 0x15)) = r3;
    0x0001c56c blx 0x9d54                                            |         fcn_00009d54 ();
    0x0001c570 b 0x1c720                                             |         goto label_10;
    0x0001c572 ldr r3, [pc, 0x60]                                    |         
    0x0001c574 ldr r2, [sp, 0x28]                                    |         r2 = var_28h;
    0x0001c576 add r3, pc                                            |         r3 = 0x38b50;
    0x0001c578 add r2, r5                                            |         r2 += r5;
    0x0001c57a add.w r3, r3, r2, lsl 1                               |         r3 += (r2 << 1);
    0x0001c57e ldrb.w r6, [r3, 0xd96]                                |         r6 = *((r3 + 0xd96));
    0x0001c582 ands r6, r6, 1                                        |         r6 &= 1;
                                                                     |         if (r6 == r6) {
    0x0001c586 beq.w 0x1c934                                         |             goto label_117;
                                                                     |         }
    0x0001c58a ldr r6, [sp, 0x20]                                    |         r6 = var_20h;
    0x0001c58c cmp r6, 0                                             |         
    0x0001c58e beq 0x1c4a6                                           |         
                                                                     |     } while (r6 == 0);
    0x0001c590 movs r6, 0                                            |     r6 = 0;
                                                                     | label_108:
    0x0001c592 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0001c594 ldrd r2, r3, [r1]                                     |     __asm ("ldrd r2, r3, [r1]");
    0x0001c598 cmp r2, r3                                            |     
                                                                     |     if (r2 <= r3) {
    0x0001c59a ble.w 0x1c80a                                         |         goto label_118;
                                                                     |     }
    0x0001c59e ldr r2, [r1, 8]                                       |     r2 = *((r1 + 8));
    0x0001c5a0 ldr.w r0, [r2, r3, lsl 2]                             |     offset_0 = r3 << 2;
                                                                     |     r0 = *((r2 + offset_0));
    0x0001c5a4 adds r3, 1                                            |     r3++;
    0x0001c5a6 str r3, [r1, 4]                                       |     *((r1 + 4)) = r3;
    0x0001c5a8 blx 0x9da0                                            |     r0 = fcn_00009da0 ();
    0x0001c5ac mov r7, r0                                            |     r7 = r0;
    0x0001c5ae b 0x1c4b0                                             |     goto label_5;
    0x0001c5d8 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0001c5da ldrb r3, [r3, 0x15]                                   |     r3 = *((r3 + 0x15));
    0x0001c5dc lsls r3, r3, 0x1f                                     |     r3 <<= 0x1f;
                                                                     |     if (r3 >= r3) {
    0x0001c5de bpl 0x1c634                                           |         goto label_9;
                                                                     |     }
    0x0001c5e0 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001c5e2 ldr r5, [r3]                                          |     r5 = *(r3);
    0x0001c5e4 ldr r1, [r5, 0xc]                                     |     r1 = *((r5 + 0xc));
    0x0001c5e6 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001c5e8 beq.w 0x1cd6a                                         |         goto label_119;
                                                                     |     }
    0x0001c5ec ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
                                                                     |     if (r3 != 0) {
    0x0001c5ee cbz r3, 0x1c612                                       |         
    0x0001c5f0 ldr r6, [r5, 8]                                       |         r6 = *((r5 + 8));
                                                                     |         if (r6 == 0) {
    0x0001c5f2 cbz r6, 0x1c612                                       |             goto label_120;
                                                                     |         }
                                                                     | label_42:
    0x0001c5f4 ldr r1, [r5, 4]                                       |         r1 = *((r5 + 4));
                                                                     |         if (r1 != 0) {
    0x0001c5f6 cbz r1, 0x1c610                                       |             
    0x0001c5f8 ldr r6, [sp, 0x14]                                    |             r6 = var_14h;
    0x0001c5fa mov r0, r6                                            |             r0 = r6;
    0x0001c5fc blx 0xa0fc                                            |             fcn_0000a0fc ();
    0x0001c600 ldr.w r1, [pc, 0xa9c]                                 |             
    0x0001c604 mov r0, r6                                            |             r0 = r6;
    0x0001c606 movs r2, 1                                            |             r2 = 1;
    0x0001c608 add r1, pc                                            |             r1 = sqlcipher_codec_ctx_get_plaintext_header_size;
    0x0001c60a blx 0x9d54                                            |             fcn_00009d54 ();
    0x0001c60e ldr r6, [r5, 8]                                       |             r6 = *((r5 + 8));
                                                                     |         }
    0x0001c610 mov r1, r6                                            |         r1 = r6;
                                                                     |     }
                                                                     | label_120:
    0x0001c612 ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0001c614 mov r0, r5                                            |     r0 = r5;
    0x0001c616 blx 0xa0fc                                            |     fcn_0000a0fc ();
    0x0001c61a movs r2, 0                                            |     r2 = 0;
    0x0001c61c mov r1, sl                                            |     r1 = sl;
    0x0001c61e mov r0, r5                                            |     r0 = r5;
    0x0001c620 blx 0x9d54                                            |     fcn_00009d54 ();
                                                                     | label_7:
    0x0001c624 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001c626 adds r4, 1                                            |     r4++;
    0x0001c628 adds r3, 4                                            |     r3 += 4;
    0x0001c62a str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0001c62c ldrb r3, [r4]                                         |     r3 = *(r4);
    0x0001c62e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c630 bne.w 0x1bf86                                         |         goto label_6;
                                                                     |     }
                                                                     |     do {
                                                                     | label_9:
    0x0001c634 ldr.w r2, [pc, 0xa6c]                                 |         
    0x0001c638 ldr.w r3, [pc, 0xa6c]                                 |         r3 = *(0x1d0a8);
    0x0001c63c add r2, pc                                            |         r2 = 0x396e4;
    0x0001c63e ldr r3, [r2, r3]                                      |         r3 = *(0x396e4);
    0x0001c640 ldr r2, [r3]                                          |         r2 = *(0x396e4);
    0x0001c642 ldr r3, [sp, 0x8c]                                    |         r3 = var_8ch;
    0x0001c644 eors r2, r3                                           |         r2 ^= r3;
    0x0001c646 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0001c64a bne.w 0x1d41e                                         |             goto label_121;
                                                                     |         }
    0x0001c64e add sp, 0x94                                          |         
    0x0001c650 vpop {d8}                                             |         __asm ("vpop {d8}");
    0x0001c654 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
    0x0001c658 ldr r3, [sp, 0x14]                                    |         r3 = var_14h;
    0x0001c65a ldrb r3, [r3, 0x15]                                   |         r3 = *((r3 + 0x15));
    0x0001c65c lsls r1, r3, 0x1f                                     |         r1 = r3 << 0x1f;
    0x0001c65e bpl 0x1c634                                           |         
                                                                     |     } while (r1 >= r3);
    0x0001c660 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001c662 ldr r5, [r3]                                          |     r5 = *(r3);
    0x0001c664 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001c666 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001c668 beq.w 0x1c948                                         |         goto label_122;
                                                                     |     }
                                                                     |     if (r5 != 0) {
    0x0001c66c cbz r5, 0x1c676                                       |         
    0x0001c66e ldr r3, [r5, 4]                                       |         r3 = *((r5 + 4));
    0x0001c670 lsls r2, r3, 0x14                                     |         r2 = r3 << 0x14;
                                                                     |         if (r2 >= r3) {
    0x0001c672 bpl.w 0x1ce20                                         |             goto label_123;
                                                                     |         }
                                                                     |     }
                                                                     | label_49:
    0x0001c676 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001c678 movs r2, 0                                            |     r2 = 0;
    0x0001c67a mov r1, sl                                            |     r1 = sl;
    0x0001c67c blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001c680 b 0x1c624                                             |     goto label_7;
    0x0001c682 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0001c684 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c686 bne.w 0x1cc96                                         |         goto label_124;
                                                                     |     }
    0x0001c68a ldr r2, [sp, 0xc]                                     |     r2 = var_ch;
    0x0001c68c ldr r3, [r2], 4                                       |     r3 = *(r2);
                                                                     |     r2 += 4;
    0x0001c690 cmp r3, 0x7f                                          |     
                                                                     |     if (r3 < 0x7f) {
    0x0001c692 bls.w 0x1cc3a                                         |         goto label_125;
                                                                     |     }
    0x0001c696 cmp.w r3, 0x800                                       |     
    0x0001c69a and r0, r3, 0x3f                                      |     r0 = r3 & 0x3f;
    0x0001c69e orr r0, r0, 0x80                                      |     r0 |= 0x80;
    0x0001c6a2 ubfx r1, r3, 6, 8                                     |     r1 = (r3 >> 6) & ((1 << 8) - 1);
                                                                     |     if (r3 >= 0x800) {
    0x0001c6a6 bhs.w 0x1d268                                         |         goto label_126;
                                                                     |     }
    0x0001c6aa mov.w sb, 2                                           |     sb = 2;
    0x0001c6ae add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001c6b2 subs r1, 0x40                                         |     r1 -= 0x40;
    0x0001c6b4 strb.w r0, [sp, 0x45]                                 |     var_45h = r0;
    0x0001c6b8 strb.w r1, [sp, 0x44]                                 |     var_44h = r1;
    0x0001c6bc str r2, [sp, 0xc]                                     |     var_ch = r2;
                                                                     | label_39:
    0x0001c6be ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001c6c0 cmp r3, 1                                             |     
                                                                     |     if (r3 > 1) {
    0x0001c6c2 bgt.w 0x1cc50                                         |         goto label_127;
                                                                     |     }
                                                                     | label_35:
    0x0001c6c6 cmp.w fp, 0                                           |     
    0x0001c6ca ite le                                                |     
                                                                     |     if (fp > 0) {
    0x0001c6cc movle r7, 0                                           |         r7 = 0;
                                                                     |     }
                                                                     |     if (fp <= 0) {
    0x0001c6ce movgt r7, 1                                           |         r7 = 1;
                                                                     |     }
    0x0001c6d0 cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0001c6d2 bne.w 0x1cc90                                         |         goto label_128;
                                                                     |     }
                                                                     | label_36:
    0x0001c6d6 str r7, [sp, 0x2c]                                    |     var_2ch = r7;
    0x0001c6d8 b 0x1cabc                                             |     goto label_27;
    0x0001c6da movs r3, 0x25                                         |     r3 = 0x25;
    0x0001c6dc add.w r6, fp, -1                                      |     r6 = fp + -1;
    0x0001c6e0 mov.w sb, 1                                           |     sb = 1;
    0x0001c6e4 add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001c6e8 strb.w r3, [sp, 0x44]                                 |     var_44h = r3;
    0x0001c6ec movs r3, 0                                            |     r3 = 0;
    0x0001c6ee str r3, [sp, 0x2c]                                    |     var_2ch = r3;
                                                                     | label_17:
    0x0001c6f0 cmp r6, 0                                             |     
                                                                     |     if (r6 <= 0) {
    0x0001c6f2 ble.w 0x1d32e                                         |         goto label_106;
                                                                     |     }
    0x0001c6f6 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0001c6f8 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001c6fa beq.w 0x1c468                                         |         goto label_8;
                                                                     |     }
    0x0001c6fe ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0001c700 mov r2, sb                                            |     r2 = sb;
    0x0001c702 mov r1, sl                                            |     r1 = sl;
    0x0001c704 mov r0, r5                                            |     r0 = r5;
    0x0001c706 blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001c70a movs r2, 0x20                                         |     r2 = 0x20;
    0x0001c70c mov r1, r6                                            |     r1 = r6;
    0x0001c70e mov r0, r5                                            |     r0 = r5;
    0x0001c710 blx 0x9cac                                            |     fcn_00009cac ();
                                                                     | label_69:
    0x0001c714 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
                                                                     |     if (r1 != 0) {
    0x0001c716 cbz r1, 0x1c720                                       |         
    0x0001c718 ldr r3, [sp, 0x14]                                    |         r3 = var_14h;
    0x0001c71a ldr r0, [r3]                                          |         r0 = *(r3);
    0x0001c71c bl 0x137d0                                            |         fcn_000137d0 (r0, r1);
                                                                     |     }
                                                                     | label_10:
    0x0001c720 ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c722 adds r4, 1                                            |     r4++;
    0x0001c724 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c726 bne.w 0x1bf86                                         |         goto label_6;
                                                                     |     }
    0x0001c72a b 0x1c634                                             |     goto label_9;
    0x0001c72c ldr r5, [sp, 0x20]                                    |     r5 = var_20h;
    0x0001c72e cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0001c730 bne.w 0x1c928                                         |         goto label_129;
                                                                     |     }
    0x0001c734 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001c736 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001c738 ldr r2, [r3], 4                                       |     r2 = *(r3);
                                                                     |     r3 += 4;
    0x0001c73c ldr r1, [r0, 0x10]                                    |     r1 = *((r0 + 0x10));
    0x0001c73e str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0001c740 str r1, [r2]                                          |     *(r2) = r1;
    0x0001c742 mov r2, r5                                            |     r2 = r5;
    0x0001c744 mov r1, sl                                            |     r1 = sl;
    0x0001c746 blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001c74a b 0x1c720                                             |     goto label_10;
                                                                     | label_82:
    0x0001c74c sub.w r1, r3, 0x30                                    |     r1 = r3 - 0x30;
    0x0001c750 adds r4, 1                                            |     r4++;
    0x0001c752 cmp r1, 9                                             |     
    0x0001c754 mov.w r2, 0                                           |     r2 = 0;
                                                                     |     if (r1 > 9) {
    0x0001c758 bhi 0x1c772                                           |         goto label_130;
                                                                     |     }
                                                                     |     do {
    0x0001c75a ldrb r3, [r4, 1]!                                     |         r3 = *((r4 += 1));
    0x0001c75e add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0001c762 add.w r2, r1, r2, lsl 1                               |         r2 = r1 + (r2 << 1);
    0x0001c766 sub.w r1, r3, 0x30                                    |         r1 = r3 - 0x30;
    0x0001c76a cmp r1, 9                                             |         
    0x0001c76c bls 0x1c75a                                           |         
                                                                     |     } while (r1 < 9);
    0x0001c76e bic r2, r2, 0x80000000                                |     r2 = BIT_MASK (r2, 0x80000000);
                                                                     | label_130:
    0x0001c772 str r2, [sp, 4]                                       |     var_4h = r2;
    0x0001c774 str r5, [sp, 0xc]                                     |     var_ch = r5;
    0x0001c776 b 0x1c1b4                                             |     goto label_11;
                                                                     | label_81:
    0x0001c778 cmp r3, 0x6c                                          |     
    0x0001c77a mov fp, r7                                            |     
    0x0001c77c str r5, [sp, 0xc]                                     |     var_ch = r5;
                                                                     |     if (r3 != 0x6c) {
    0x0001c77e bne.w 0x1c070                                         |         goto label_12;
                                                                     |     }
                                                                     | label_19:
    0x0001c782 ldrb r3, [r4, 1]                                      |     r3 = *((r4 + 1));
    0x0001c784 cmp r3, 0x6c                                          |     
    0x0001c786 iteet eq                                              |     
                                                                     |     if (r3 != 0x6c) {
    0x0001c788 ldrbeq r3, [r4, 2]                                    |         r3 = *((r4 + 2));
                                                                     |     }
                                                                     |     if (r3 == 0x6c) {
    0x0001c78a addne r4, 1                                           |         r4++;
                                                                     |     }
                                                                     |     if (r3 == 0x6c) {
    0x0001c78c movne r0, 1                                           |         r0 = 1;
                                                                     |     }
                                                                     |     if (r3 != 0x6c) {
    0x0001c78e addeq r4, 2                                           |         r4 += 2;
                                                                     |     }
    0x0001c790 it eq                                                 |     
                                                                     |     if (r3 != 0x6c) {
    0x0001c792 moveq r0, 2                                           |         r0 = 2;
                                                                     |     }
    0x0001c794 b 0x1c072                                             |     goto label_1;
                                                                     | label_79:
    0x0001c796 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0001c798 ldr r5, [sp, 0xc]                                     |     r5 = var_ch;
    0x0001c79a ldrd r2, r3, [r1]                                     |     __asm ("ldrd r2, r3, [r1]");
    0x0001c79e cmp r2, r3                                            |     
                                                                     |     if (r2 > r3) {
    0x0001c7a0 ble 0x1c7c0                                           |         
    0x0001c7a2 ldr r2, [r1, 8]                                       |         r2 = *((r1 + 8));
    0x0001c7a4 ldr.w r0, [r2, r3, lsl 2]                             |         offset_1 = r3 << 2;
                                                                     |         r0 = *((r2 + offset_1));
    0x0001c7a8 adds r3, 1                                            |         r3++;
    0x0001c7aa str r3, [r1, 4]                                       |         *((r1 + 4)) = r3;
    0x0001c7ac blx 0x9da0                                            |         r0 = fcn_00009da0 ();
    0x0001c7b0 mov r7, r0                                            |         r7 = r0;
    0x0001c7b2 b 0x1c166                                             |         goto label_13;
                                                                     | label_78:
    0x0001c7b4 mov fp, r7                                            |         
    0x0001c7b6 mov r4, r1                                            |         r4 = r1;
    0x0001c7b8 movs r0, 0                                            |         r0 = 0;
    0x0001c7ba b 0x1c072                                             |         goto label_1;
                                                                     | label_80:
    0x0001c7bc movs r3, 1                                            |         r3 = 1;
    0x0001c7be str r3, [sp, 0x10]                                    |         var_10h = r3;
                                                                     |     }
    0x0001c7c0 movs r7, 0                                            |     r7 = 0;
    0x0001c7c2 b 0x1c178                                             |     goto label_14;
                                                                     | label_83:
    0x0001c7c4 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0001c7c6 str r5, [sp, 0xc]                                     |     var_ch = r5;
    0x0001c7c8 ldrd r2, r3, [r1]                                     |     __asm ("ldrd r2, r3, [r1]");
    0x0001c7cc cmp r2, r3                                            |     
    0x0001c7ce itt le                                                |     
                                                                     |     if (r2 > r3) {
    0x0001c7d0 movle r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r2 <= r3) {
    0x0001c7d2 strle r3, [sp, 4]                                     |         var_4h = r3;
                                                                     |         goto label_131;
                                                                     |     }
                                                                     |     if (r2 <= r3) {
                                                                     | label_131:
    0x0001c7d4 ble.w 0x1c1b0                                         |         goto label_15;
                                                                     |     }
    0x0001c7d8 ldr r2, [r1, 8]                                       |     r2 = *((r1 + 8));
    0x0001c7da ldr.w r0, [r2, r3, lsl 2]                             |     offset_2 = r3 << 2;
                                                                     |     r0 = *((r2 + offset_2));
    0x0001c7de adds r3, 1                                            |     r3++;
    0x0001c7e0 str r3, [r1, 4]                                       |     *((r1 + 4)) = r3;
    0x0001c7e2 blx 0x9da0                                            |     fcn_00009da0 ();
    0x0001c7e6 str r0, [sp, 4]                                       |     var_4h = r0;
    0x0001c7e8 b 0x1c19c                                             |     goto label_16;
                                                                     | label_107:
    0x0001c7ea cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001c7ec bne.w 0x1c95e                                         |         goto label_132;
                                                                     |     }
    0x0001c7f0 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001c7f2 bne.w 0x1d248                                         |         goto label_133;
                                                                     |     }
    0x0001c7f6 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001c7f8 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0001c7fa ldr r7, [r3], 4                                       |     r7 = *(r3);
                                                                     |     r3 += 4;
    0x0001c7fe mov r8, r2                                            |     r8 = r2;
    0x0001c800 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0001c802 str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     | label_21:
    0x0001c804 orrs.w r3, r7, r8                                     |     r3 = r7 | r8;
                                                                     |     if (r3 == r7) {
    0x0001c808 bne 0x1c810                                           |         
                                                                     | label_118:
    0x0001c80a movs r7, 0                                            |         r7 = 0;
    0x0001c80c mov r8, r7                                            |         r8 = r7;
    0x0001c80e str r7, [sp, 0x18]                                    |         var_18h = r7;
                                                                     |     }
                                                                     | label_22:
    0x0001c810 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
                                                                     |     if (r3 != 0) {
    0x0001c812 cbz r3, 0x1c82a                                       |         
    0x0001c814 ldr r3, [sp, 8]                                       |         r3 = var_8h;
    0x0001c816 ldr r2, [sp, 4]                                       |         r2 = var_4h;
    0x0001c818 cmp r3, 0                                             |         
    0x0001c81a ite eq                                                |         
                                                                     |         if (r3 != 0) {
    0x0001c81c moveq r3, fp                                          |             r3 = fp;
                                                                     |         }
                                                                     |         if (r3 == 0) {
    0x0001c81e subne r3, fp, 1                                       |             r3 = fp - 1;
                                                                     |         }
    0x0001c822 cmp r2, r3                                            |         
    0x0001c824 it lt                                                 |         
                                                                     |         if (r2 >= r3) {
    0x0001c826 movlt r2, r3                                          |             r2 = r3;
                                                                     |         }
    0x0001c828 str r2, [sp, 4]                                       |         var_4h = r2;
                                                                     |     }
    0x0001c82a ldr r0, [sp, 4]                                       |     r0 = var_4h;
    0x0001c82c cmp r0, 0x24                                          |     
                                                                     |     if (r0 <= 0x24) {
    0x0001c82e ble.w 0x1c974                                         |         goto label_134;
                                                                     |     }
    0x0001c832 asrs r1, r0, 0x1f                                     |     r1 = r0 >> 0x1f;
    0x0001c834 adds.w sl, r0, 0xa                                    |     sl = r0 + 0xa;
    0x0001c838 adc r3, r1, 0                                         |     __asm ("adc r3, r1, 0");
                                                                     |     if (r6 != 0) {
    0x0001c83c cbz r6, 0x1c854                                       |         
    0x0001c83e movw r2, 0x5556                                       |         
                                                                     |         /* if there is a right shift of 0, then it's a division by 1/3 */
    0x0001c842 movt r2, 0x5555                                       |         r2 = 0x55555556;
    0x0001c846 smull r0, r2, r2, r0                                  |         r0:r2 = r2 * r0;
    0x0001c84a subs r2, r2, r1                                       |         r2 -= r1;
    0x0001c84c adds.w sl, r2, sl                                     |         sl = r2 + sl;
    0x0001c850 adc.w r3, r3, r2, asr 31                              |         __asm ("adc.w r3, r3, r2, asr 31");
                                                                     |     }
    0x0001c854 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001c856 mov r2, sl                                            |     r2 = sl;
    0x0001c858 bl 0x1ead0                                            |     r0 = fcn_0001ead0 (r0, r1, r2);
    0x0001c85c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001c85e beq.w 0x1c634                                         |         goto label_9;
                                                                     |     }
    0x0001c862 add.w sl, sl, -1                                      |     sl += -1;
    0x0001c866 str r0, [sp, 0x2c]                                    |     var_2ch = r0;
                                                                     | label_23:
    0x0001c868 cmp.w sb, 0xf                                         |     
    0x0001c86c add.w r3, r0, sl                                      |     r3 = r0 + sl;
    0x0001c870 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0001c872 it ne                                                 |     
                                                                     |     if (sb == 0xf) {
    0x0001c874 ldrne sl, [sp, 0x1c]                                  |         sl = var_1ch;
                                                                     |     }
                                                                     |     if (sb == 0xf) {
    0x0001c878 beq.w 0x1c980                                         |         goto label_135;
                                                                     |     }
                                                                     | label_24:
    0x0001c87c ldr.w r2, [pc, 0x82c]                                 |     
    0x0001c880 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0001c882 str r4, [sp, 0x24]                                    |     var_24h = r4;
    0x0001c884 add r2, pc                                            |     r2 = 0x39934;
    0x0001c886 add r3, r5                                            |     r3 += r5;
    0x0001c888 mov r1, r2                                            |     r1 = r2;
    0x0001c88a add.w r3, r2, r3, lsl 1                               |     r3 = r2 + (r3 << 1);
    0x0001c88e ldrb.w r2, [r3, 0xd98]                                |     r2 = *((r3 + 0xd98));
    0x0001c892 ldrb.w sb, [r3, 0xd95]                                |     sb = *((r3 + 0xd95));
    0x0001c896 adds r2, r1, r2                                       |     r2 = r1 + r2;
    0x0001c898 mov r4, r2                                            |     r4 = r2;
                                                                     |     do {
    0x0001c89a mov r0, r7                                            |         r0 = r7;
    0x0001c89c mov r1, r8                                            |         r1 = r8;
    0x0001c89e mov r2, sb                                            |         r2 = sb;
    0x0001c8a0 movs r3, 0                                            |         r3 = 0;
    0x0001c8a2 bl 0x8caec                                            |         fcn_0008caec (r0, r1, r2, r3);
    0x0001c8a6 add r2, r4                                            |         r2 += r4;
    0x0001c8a8 ldrb.w r3, [r2, 0xe30]                                |         r3 = *((r2 + 0xe30));
    0x0001c8ac mov r2, r7                                            |         r2 = r7;
    0x0001c8ae cmp r2, sb                                            |         
    0x0001c8b0 mov r7, r0                                            |         r7 = r0;
    0x0001c8b2 strb r3, [sl, -0x1]!                                  |         *((sl -= 0x1)) = r3;
    0x0001c8b6 mov r3, r8                                            |         r3 = r8;
    0x0001c8b8 sbcs r3, r3, 0                                        |         __asm ("sbcs r3, r3, 0");
    0x0001c8bc mov r8, r1                                            |         r8 = r1;
    0x0001c8be bhs 0x1c89a                                           |         
                                                                     |     } while (r2 >= sb);
    0x0001c8c0 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0001c8c2 ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0001c8c4 ldr r4, [sp, 0x24]                                    |     r4 = var_24h;
    0x0001c8c6 sub.w r2, r3, sl                                      |     r2 = r3 - sl;
    0x0001c8ca cmp r1, r2                                            |     
                                                                     |     if (r1 <= r2) {
    0x0001c8cc ble.w 0x1ced2                                         |         goto label_136;
                                                                     |     }
    0x0001c8d0 subs r3, r2, r1                                       |     r3 = r2 - r1;
    0x0001c8d2 subs r2, r1, r2                                       |     r2 = r1 - r2;
    0x0001c8d4 add sl, r3                                            |     sl += r3;
    0x0001c8d6 movs r1, 0x30                                         |     r1 = 0x30;
    0x0001c8d8 mov r0, sl                                            |     r0 = sl;
    0x0001c8da blx 0x97d4                                            |     fcn_000097d4 ();
                                                                     | label_53:
    0x0001c8de cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0001c8e0 bne.w 0x1caec                                         |         goto label_137;
                                                                     |     }
                                                                     | label_25:
    0x0001c8e4 ldr r3, [sp, 8]                                       |     r3 = var_8h;
                                                                     |     if (r3 != 0) {
    0x0001c8e6 cbz r3, 0x1c8f0                                       |         
    0x0001c8e8 strb r3, [sl, -0x1]                                   |         *((sl - 0x1)) = r3;
    0x0001c8ec add.w sl, sl, -1                                      |         sl += -1;
                                                                     |     }
    0x0001c8f0 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
                                                                     |     if (r3 != 0) {
    0x0001c8f2 cbz r3, 0x1c90c                                       |         
    0x0001c8f4 ldr r2, [sp, 0x28]                                    |         r2 = var_28h;
    0x0001c8f6 ldr.w r3, [pc, 0x7b8]                                 |         
    0x0001c8fa add r2, r5                                            |         r2 += r5;
    0x0001c8fc add r3, pc                                            |         r3 = 0x399b2;
    0x0001c8fe add.w r2, r3, r2, lsl 1                               |         r2 = r3 + (r2 << 1);
    0x0001c902 ldrb.w r2, [r2, 0xd99]                                |         r2 = *((r2 + 0xd99));
    0x0001c906 cmp r2, 0                                             |         
                                                                     |         if (r2 != 0) {
    0x0001c908 bne.w 0x1cbe8                                         |             goto label_138;
                                                                     |         }
                                                                     |     }
                                                                     | label_33:
    0x0001c90c ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0001c90e sub.w sb, r3, sl                                      |     sb = r3 - sl;
    0x0001c912 sub.w r6, fp, sb                                      |     r6 = fp - sb;
    0x0001c916 b 0x1c6f0                                             |     goto label_17;
                                                                     | label_75:
    0x0001c918 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0001c91a str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0001c91c b.w 0x1bf72                                           |     goto label_18;
    0x0001c920 mov fp, r7                                            |     
    0x0001c922 b 0x1c782                                             |     goto label_19;
    0x0001c924 ldr r5, [sp, 0xc]                                     |     r5 = var_ch;
    0x0001c926 b 0x1c182                                             |     goto label_20;
                                                                     | label_129:
    0x0001c928 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001c92a movs r2, 0                                            |     r2 = 0;
    0x0001c92c mov r1, sl                                            |     r1 = sl;
    0x0001c92e blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001c932 b 0x1c720                                             |     goto label_10;
                                                                     | label_117:
    0x0001c934 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
                                                                     |     if (r3 == 0) {
    0x0001c936 cbnz r3, 0x1c95e                                      |         
                                                                     | label_64:
    0x0001c938 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0001c93a mov.w r8, 0                                           |         r8 = 0;
    0x0001c93e ldr r7, [r3], 4                                       |         r7 = *(r3);
                                                                     |         r3 += 4;
    0x0001c942 strd r8, r3, [sp, 8]                                  |         __asm ("strd r8, r3, [var_ch]");
    0x0001c946 b 0x1c804                                             |         goto label_21;
                                                                     |         if (r5 != 0) {
                                                                     | label_122:
    0x0001c948 cbz r5, 0x1c952                                       |             
    0x0001c94a ldr r2, [r5, 4]                                       |             r2 = *((r5 + 4));
    0x0001c94c cmp r2, 0                                             |             
                                                                     |             if (r2 != 0) {
    0x0001c94e bne.w 0x1ce44                                         |                 goto label_139;
                                                                     |             }
                                                                     |         }
                                                                     | label_50:
    0x0001c952 ldr r2, [sp, 0x18]                                    |         r2 = var_18h;
    0x0001c954 mov r1, sl                                            |         r1 = sl;
    0x0001c956 ldr r0, [sp, 0x14]                                    |         r0 = var_14h;
    0x0001c958 blx 0x9d54                                            |         fcn_00009d54 ();
    0x0001c95c b 0x1c624                                             |         goto label_7;
                                                                     |     }
                                                                     | label_132:
    0x0001c95e ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0001c960 ldrd r2, r3, [r1]                                     |     __asm ("ldrd r2, r3, [r1]");
    0x0001c964 cmp r2, r3                                            |     
                                                                     |     if (r2 > r3) {
    0x0001c966 bgt.w 0x1cde0                                         |         goto label_140;
                                                                     |     }
    0x0001c96a movs r7, 0                                            |     r7 = 0;
    0x0001c96c mov r8, r7                                            |     r8 = r7;
    0x0001c96e str r7, [sp, 8]                                       |     var_8h = r7;
    0x0001c970 str r7, [sp, 0x18]                                    |     var_18h = r7;
    0x0001c972 b 0x1c810                                             |     goto label_22;
                                                                     | label_134:
    0x0001c974 movs r3, 0                                            |     r3 = 0;
    0x0001c976 mov.w sl, 0x45                                        |     sl = 0x45;
    0x0001c97a add r0, sp, 0x44                                      |     r0 += var_44h;
    0x0001c97c str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001c97e b 0x1c868                                             |     goto label_23;
                                                                     | label_135:
    0x0001c980 adds.w r1, r7, r8                                     |     r1 = r7 + r8;
    0x0001c984 movw r0, 0xcccd                                       |     
    0x0001c988 adc r1, r1, 0                                         |     __asm ("adc r1, r1, 0");
    0x0001c98c movt r0, 0xcccc                                       |     r0 = 0xcccccccd;
    0x0001c990 umull r3, ip, r0, r1                                  |     r3:ip = r0 * r1;
    0x0001c994 mov.w r2, -0x33333334                                 |     r2 = -0x33333334;
    0x0001c998 mov.w lr, 5                                           |     lr = 5;
    0x0001c99c bic r3, ip, 3                                         |     r3 = BIT_MASK (ip, 3);
    0x0001c9a0 add.w r3, r3, ip, lsr 2                               |     r3 += (ip >> 2);
    0x0001c9a4 subs r1, r1, r3                                       |     r1 -= r3;
    0x0001c9a6 subs r3, r7, r1                                       |     r3 = r7 - r1;
    0x0001c9a8 mul ip, r2, r3                                        |     
    0x0001c9ac sbc sl, r8, 0                                         |     __asm ("sbc sl, r8, 0");
    0x0001c9b0 umull r3, sb, r3, r0                                  |     r3:sb = r3 * r0;
    0x0001c9b4 mla ip, r0, sl, ip                                    |     __asm ("mla ip, r0, sl, ip");
    0x0001c9b8 add sb, ip                                            |     sb += ip;
    0x0001c9ba and ip, r3, 1                                         |     
    0x0001c9be umull ip, lr, ip, lr                                  |     ip:lr = ip * lr;
    0x0001c9c2 lsrs r3, r3, 1                                        |     r3 >>= 1;
    0x0001c9c4 orr.w r3, r3, sb, lsl 31                              |     r3 |= (sb << 31);
    0x0001c9c8 lsr.w sb, sb, 1                                       |     sb >>= 1;
    0x0001c9cc adds.w ip, ip, r1                                     |     
    0x0001c9d0 cmp.w ip, 3                                           |     
                                                                     |     if (ip <= 3) {
    0x0001c9d4 bgt 0x1ca1c                                           |         
    0x0001c9d6 mul r2, r3, r2                                        |         r2 = r3 * r2;
    0x0001c9da mla r2, r0, sb, r2                                    |         __asm ("mla r2, r0, sb, r2");
    0x0001c9de umull r3, r0, r3, r0                                  |         r3:r0 = r3 * r0;
    0x0001c9e2 adds.w r3, r3, 0x33333333                             |         r3 += 0x33333333;
    0x0001c9e6 add r2, r0                                            |         r2 += r0;
    0x0001c9e8 lsr.w r1, r3, 1                                       |         r1 = r3 >> 1;
    0x0001c9ec adc r2, r2, 0x33333333                                |         __asm ("adc r2, r2, aav.0x000000ff");
    0x0001c9f0 mov.w r0, -0x66666667                                 |         r0 = -0x66666667;
    0x0001c9f4 orr.w r1, r1, r2, lsl 31                              |         r1 |= (r2 << 31);
    0x0001c9f8 lsrs r2, r2, 1                                        |         r2 >>= 1;
    0x0001c9fa orr.w r3, r2, r3, lsl 31                              |         r3 = r2 | (r3 << 31);
    0x0001c9fe movw r2, 0x9999                                       |         
    0x0001ca02 movt r2, 0x1999                                       |         r2 = 0x19999999;
    0x0001ca06 cmp r0, r1                                            |         
    0x0001ca08 sbcs r2, r3                                           |         __asm ("sbcs r2, r3");
                                                                     |         if (r0 < r1) {
    0x0001ca0a bhs 0x1ca1c                                           |             
    0x0001ca0c ldr.w r3, [pc, 0x6a4]                                 |             
    0x0001ca10 add r3, pc                                            |             r3 = 0x39ac8;
    0x0001ca12 add.w r3, r3, ip, lsl 1                               |             r3 += (ip << 1);
    0x0001ca16 ldrh.w r3, [r3, 0xe20]                                |             r3 = *((r3 + 0xe20));
    0x0001ca1a b 0x1ca20                                             |             
                                                                     |         }
                                                                     |     } else {
    0x0001ca1c movw r3, 0x6874                                       |         r3 = 0x6874;
                                                                     |     }
    0x0001ca20 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0001ca22 sub.w sl, r2, 2                                       |     sl = r2 - 2;
    0x0001ca26 strh r3, [r2, -0x2]                                   |     *((r2 - 0x2)) = r3;
    0x0001ca2a b 0x1c87c                                             |     goto label_24;
                                                                     | label_89:
    0x0001ca2c adds r3, r7, 3                                        |     r3 = r7 + 3;
    0x0001ca2e mov r4, ip                                            |     r4 = ip;
    0x0001ca30 adc r0, r8, 0                                         |     __asm ("adc r0, r8, 0");
    0x0001ca34 adds r2, r3, r1                                       |     r2 = r3 + r1;
    0x0001ca36 adc.w r3, lr, r0                                      |     __asm ("adc.w r3, lr, r0");
    0x0001ca3a cmp r2, 0x47                                          |     
    0x0001ca3c sbcs r1, r3, 0                                        |     __asm ("sbcs r1, r3, 0");
                                                                     |     if (r2 < 0x47) {
    0x0001ca40 blt.w 0x1cbd2                                         |         goto label_141;
                                                                     |     }
    0x0001ca44 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001ca46 bl 0x1ead0                                            |     r0 = fcn_0001ead0 (r0, r1, r2);
    0x0001ca4a mov sl, r0                                            |     sl = r0;
    0x0001ca4c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001ca4e beq.w 0x1c634                                         |         goto label_9;
                                                                     |     }
    0x0001ca52 str r0, [sp, 0x2c]                                    |     var_2ch = r0;
                                                                     | label_31:
    0x0001ca54 cmp.w sb, 0                                           |     
                                                                     |     if (sb != 0) {
    0x0001ca58 bne.w 0x1cbb8                                         |         goto label_142;
                                                                     |     }
    0x0001ca5c orrs.w r3, r7, r8                                     |     r3 = r7 | r8;
    0x0001ca60 it eq                                                 |     
                                                                     |     if (r3 != r7) {
    0x0001ca62 moveq r3, sl                                          |         r3 = sl;
                                                                     |     }
                                                                     |     if (r3 == r7) {
    0x0001ca64 beq 0x1caa6                                           |         goto label_32;
                                                                     |     }
    0x0001ca66 mov r2, sb                                            |     r2 = sb;
                                                                     | label_30:
    0x0001ca68 movs r3, 0                                            |     r3 = 0;
    0x0001ca6a subs r5, 1                                            |     r5--;
    0x0001ca6c mov r1, r3                                            |     r1 = r3;
                                                                     |     do {
    0x0001ca6e ldrb r0, [r5, 1]!                                     |         r0 = *((r5 += 1));
    0x0001ca72 adds.w ip, r2, 1                                      |         
    0x0001ca76 cmp r6, r0                                            |         
    0x0001ca78 strb.w r0, [sl, r2]                                   |         *((sl + r2)) = r0;
    0x0001ca7c it ne                                                 |         
                                                                     |         if (r6 == r0) {
    0x0001ca7e movne r2, ip                                          |             r2 = ip;
                                                                     |         }
                                                                     |         if (r6 == r0) {
    0x0001ca80 bne 0x1ca88                                           |             
    0x0001ca82 adds r2, 2                                            |             r2 += 2;
    0x0001ca84 strb.w r6, [sl, ip]                                   |             *((sl + ip)) = r6;
                                                                     |         }
    0x0001ca88 adds r3, 1                                            |         r3++;
    0x0001ca8a adc r1, r1, 0                                         |         __asm ("adc r1, r1, 0");
    0x0001ca8e cmp r3, r7                                            |         
    0x0001ca90 sbcs.w r0, r1, r8                                     |         __asm ("sbcs.w r0, r1, r8");
    0x0001ca94 blt 0x1ca6e                                           |         
                                                                     |     } while (r3 < r7);
    0x0001ca96 mov r1, r2                                            |     r1 = r2;
    0x0001ca98 cmp.w sb, 0                                           |     
                                                                     |     if (sb != 0) {
    0x0001ca9c bne.w 0x1cbdc                                         |         goto label_143;
                                                                     |     }
    0x0001caa0 add.w r3, sl, r2                                      |     r3 = sl + r2;
    0x0001caa4 mov sb, r2                                            |     sb = r2;
                                                                     | label_32:
    0x0001caa6 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0001caa8 movs r1, 0                                            |     r1 = 0;
    0x0001caaa strb r1, [r3]                                         |     *(r3) = r1;
    0x0001caac cmp.w fp, 0                                           |     
    0x0001cab0 ite le                                                |     
                                                                     |     if (fp > 0) {
    0x0001cab2 movle r2, 0                                           |         r2 = 0;
                                                                     |     }
                                                                     |     if (fp <= 0) {
    0x0001cab4 andgt r2, r2, 1                                       |         r2 &= 1;
                                                                     |     }
                                                                     | label_48:
    0x0001cab8 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0001caba bne 0x1cb4e                                           |         goto label_144;
                                                                     |     }
                                                                     | label_27:
    0x0001cabc sub.w r6, fp, sb                                      |     r6 = fp - sb;
    0x0001cac0 b 0x1c6f0                                             |     goto label_17;
                                                                     | label_88:
    0x0001cac2 adds r0, r5, r7                                       |     r0 = r5 + r7;
    0x0001cac4 ldrb r0, [r0, 1]                                      |     r0 = *((r0 + 1));
    0x0001cac6 and r0, r0, 0xc0                                      |     r0 &= 0xc0;
    0x0001caca cmp r0, 0x80                                          |     
                                                                     |     if (r0 != 0x80) {
    0x0001cacc bne.w 0x1c246                                         |         goto label_4;
                                                                     |     }
    0x0001cad0 adds.w sl, r7, 1                                      |     sl = r7 + 1;
    0x0001cad4 add sl, r5                                            |     sl += r5;
                                                                     |     do {
    0x0001cad6 ldrb r0, [sl, 1]!                                     |         r0 = *((sl += 1));
    0x0001cada adds r7, 1                                            |         r7++;
    0x0001cadc adc r8, r8, 0                                         |         __asm ("adc r8, r8, 0");
    0x0001cae0 and r0, r0, 0xc0                                      |         r0 &= 0xc0;
    0x0001cae4 cmp r0, 0x80                                          |         
    0x0001cae6 beq 0x1cad6                                           |         
                                                                     |     } while (r0 == 0x80);
    0x0001cae8 b.w 0x1c246                                           |     goto label_4;
                                                                     | label_137:
    0x0001caec ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001caee movw r2, 0x5556                                       |     
                                                                     |     /* if there is a right shift of 0, then it's a division by 1/3 */
    0x0001caf2 movt r2, 0x5555                                       |     r2 = 0x55555556;
    0x0001caf6 subs r3, 1                                            |     r3--;
    0x0001caf8 smull r1, r2, r2, r3                                  |     r1:r2 = r2 * r3;
    0x0001cafc sub.w r1, r2, r3, asr 31                              |     r1 = r2 - (r3 >> 31);
    0x0001cb00 add.w r2, r1, r1, lsl 1                               |     r2 = r1 + (r1 << 1);
    0x0001cb04 sub.w sl, sl, r1                                      |     sl -= r1;
    0x0001cb08 subs r3, r3, r2                                       |     r3 -= r2;
    0x0001cb0a adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0001cb0c cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001cb0e beq.w 0x1c8e4                                         |         goto label_25;
                                                                     |     }
    0x0001cb12 movs r3, 0                                            |     r3 = 0;
    0x0001cb14 add.w r7, sl, r1                                      |     r7 = sl + r1;
                                                                     |     do {
                                                                     | label_26:
    0x0001cb18 ldrb r0, [r7, r3]                                     |         r0 = *((r7 + r3));
    0x0001cb1a subs r2, 1                                            |         r2--;
    0x0001cb1c strb.w r0, [sl, r3]                                   |         *((sl + r3)) = r0;
    0x0001cb20 it ne                                                 |         
                                                                     |         if (r2 == 1) {
    0x0001cb22 addne r3, 1                                           |             r3++;
                                                                     |         }
    0x0001cb24 bne 0x1cb18                                           |         
                                                                     |     } while (r2 != 1);
    0x0001cb26 subs r1, 1                                            |     r1--;
    0x0001cb28 add.w r2, sl, r3                                      |     r2 = sl + r3;
    0x0001cb2c strb r6, [r2, 1]                                      |     *((r2 + 1)) = r6;
                                                                     |     if (r1 == 1) {
    0x0001cb2e beq.w 0x1c8e4                                         |         goto label_25;
                                                                     |     }
    0x0001cb32 adds r3, 2                                            |     r3 += 2;
    0x0001cb34 movs r2, 3                                            |     r2 = 3;
    0x0001cb36 add.w r7, sl, r1                                      |     r7 = sl + r1;
    0x0001cb3a b 0x1cb18                                             |     goto label_26;
                                                                     | label_56:
    0x0001cb3c sub.w sb, r2, sl                                      |     sb = r2 - sl;
                                                                     | label_55:
    0x0001cb40 cmp.w fp, 0                                           |     
    0x0001cb44 str r7, [sp, 0xc]                                     |     var_ch = r7;
    0x0001cb46 it le                                                 |     
                                                                     |     if (fp <= 0) {
    0x0001cb48 movle fp, 0                                           |         goto label_145;
                                                                     |     }
                                                                     |     if (fp <= 0) {
                                                                     | label_145:
    0x0001cb4c ble 0x1cabc                                           |         goto label_27;
                                                                     |     }
                                                                     | label_144:
    0x0001cb4e cmp.w sb, 0                                           |     
                                                                     |     if (sb <= 0) {
    0x0001cb52 ble 0x1cabc                                           |         goto label_27;
                                                                     |     }
                                                                     | label_37:
    0x0001cb54 add.w r2, sl, sb                                      |     r2 = sl + sb;
                                                                     |     do {
    0x0001cb58 ldrb r3, [r2, -0x1]!                                  |         r3 = *((r2 -= 0x1));
    0x0001cb5c and r3, r3, 0xc0                                      |         r3 &= 0xc0;
    0x0001cb60 cmp r3, 0x80                                          |         
    0x0001cb62 it eq                                                 |         
                                                                     |         if (r3 != 0x80) {
    0x0001cb64 addeq fp, fp, 1                                       |             
                                                                     |         }
    0x0001cb68 cmp r2, sl                                            |         
    0x0001cb6a bne 0x1cb58                                           |         
                                                                     |     } while (r2 != sl);
    0x0001cb6c b 0x1cabc                                             |     goto label_27;
                                                                     | label_65:
    0x0001cb6e cmp.w sb, 3                                           |     
                                                                     |     if (sb == 3) {
    0x0001cb72 beq.w 0x1d3d8                                         |         goto label_146;
                                                                     |     }
    0x0001cb76 vmov.i64 d8, 0                                        |     __asm ("vmov.i64 d8, 0");
    0x0001cb7a mov.w r8, 6                                           |     r8 = 6;
    0x0001cb7e movs r2, 0                                            |     r2 = 0;
                                                                     | label_92:
    0x0001cb80 movw r1, 0xcccd                                       |     
    0x0001cb84 ubfx r3, r8, 0, 0xc                                   |     r3 = (r8 >> 0) & ((1 << 0xc) - 1);
    0x0001cb88 movt r1, 0xcccc                                       |     
    0x0001cb8c cmp r3, 9                                             |     
    0x0001cb8e umull r0, r1, r1, r3                                  |     r0:r1 = r1 * r3;
    0x0001cb92 ldr.w r0, [pc, 0x524]                                 |     r0 = *(0x0001d0b8);
    0x0001cb96 add r0, pc                                            |     r0 += pc;
    0x0001cb98 add.w r0, r0, 0xe60                                   |     r0 += 0xe60;
    0x0001cb9c lsr.w r1, r1, 3                                       |     r1 >>= 3;
    0x0001cba0 add.w r1, r1, r1, lsl 2                               |     r1 = 0xcccccccd;
    0x0001cba4 sub.w r1, r3, r1, lsl 1                               |     r1 = r3 - (r1 << 1);
    0x0001cba8 add.w r1, r0, r1, lsl 3                               |     r1 = r0 + (r1 << 3);
    0x0001cbac vldr d16, [r1]                                        |     __asm ("vldr d16, [r1]");
                                                                     |     if (r3 > 9) {
    0x0001cbb0 bgt.w 0x1c308                                         |         goto label_28;
                                                                     |     }
    0x0001cbb4 b.w 0x1c316                                           |     goto label_29;
                                                                     | label_142:
    0x0001cbb8 orrs.w r3, r7, r8                                     |     r3 = r7 | r8;
    0x0001cbbc strb.w r6, [sl]                                       |     *(sl) = r6;
    0x0001cbc0 it ne                                                 |     
                                                                     |     if (r3 != r7) {
    0x0001cbc2 movne r2, 1                                           |         r2 = 1;
                                                                     |         goto label_147;
                                                                     |     }
                                                                     |     if (r3 != r7) {
                                                                     | label_147:
    0x0001cbc4 bne.w 0x1ca68                                         |         goto label_30;
                                                                     |     }
                                                                     | label_74:
    0x0001cbc8 mov.w sb, 2                                           |     sb = 2;
    0x0001cbcc movs r1, 1                                            |     r1 = 1;
    0x0001cbce mov r3, sb                                            |     r3 = sb;
    0x0001cbd0 b 0x1cbe0                                             |     goto label_148;
                                                                     | label_141:
    0x0001cbd2 movs r3, 0                                            |     r3 = 0;
    0x0001cbd4 add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001cbd8 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001cbda b 0x1ca54                                             |     goto label_31;
                                                                     | label_143:
    0x0001cbdc adds r3, r2, 1                                        |     r3 = r2 + 1;
    0x0001cbde mov sb, r3                                            |     sb = r3;
                                                                     | label_148:
    0x0001cbe0 add r3, sl                                            |     r3 += sl;
    0x0001cbe2 strb.w r6, [sl, r1]                                   |     *((sl + r1)) = r6;
    0x0001cbe6 b 0x1caa6                                             |     goto label_32;
                                                                     | label_138:
    0x0001cbe8 adds r1, r3, r2                                       |     r1 = r3 + r2;
    0x0001cbea addw r3, r3, 0xe54                                    |     __asm ("addw r3, r3, aav.0x000000ff");
    0x0001cbee add r3, r2                                            |     r3 += r2;
    0x0001cbf0 ldrb.w r2, [r1, 0xe54]                                |     r2 = *((r1 + 0xe54));
    0x0001cbf4 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0001cbf6 beq.w 0x1c90c                                         |         goto label_33;
                                                                     |     }
                                                                     |     do {
    0x0001cbfa strb r2, [sl, -0x1]!                                  |         *((sl -= 0x1)) = r2;
    0x0001cbfe ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0001cc02 cmp r2, 0                                             |         
    0x0001cc04 bne 0x1cbfa                                           |         
                                                                     |     } while (r2 != 0);
    0x0001cc06 b 0x1c90c                                             |     goto label_33;
                                                                     | label_84:
    0x0001cc08 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001cc0a bne.w 0x1d2c4                                         |         goto label_149;
                                                                     |     }
    0x0001cc0e ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0001cc10 ldr r5, [r1], 4                                       |     r5 = *(r1);
                                                                     |     r1 += 4;
    0x0001cc14 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0001cc16 beq.w 0x1d3cc                                         |         goto label_150;
                                                                     |     }
                                                                     | label_71:
    0x0001cc1a ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001cc1c mov.w sb, 0                                           |     sb = 0;
    0x0001cc20 movs r6, 0x22                                         |     r6 = 0x22;
    0x0001cc22 str r1, [sp, 0xc]                                     |     var_ch = r1;
    0x0001cc24 asrs r2, r3, 0x1f                                     |     r2 = r3 >> 0x1f;
    0x0001cc26 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001cc28 bne.w 0x1c22c                                         |         goto label_34;
                                                                     |     }
                                                                     | label_62:
    0x0001cc2c mov.w sb, 0                                           |     sb = 0;
    0x0001cc30 add r3, sp, 0x44                                      |     r3 += var_44h;
    0x0001cc32 mov sl, r3                                            |     sl = r3;
    0x0001cc34 str.w sb, [sp, 0x2c]                                  |     __asm ("str.w sb, [var_2ch]");
    0x0001cc38 b 0x1caa6                                             |     goto label_32;
                                                                     | label_125:
    0x0001cc3a strb.w r3, [sp, 0x44]                                 |     var_44h = r3;
    0x0001cc3e str r2, [sp, 0xc]                                     |     var_ch = r2;
                                                                     | label_38:
    0x0001cc40 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001cc42 mov.w sb, 1                                           |     sb = 1;
    0x0001cc46 add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001cc4a cmp r3, 1                                             |     
                                                                     |     if (r3 <= 1) {
    0x0001cc4c ble.w 0x1c6c6                                         |         goto label_35;
                                                                     |     }
                                                                     | label_127:
    0x0001cc50 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001cc52 subs r6, r3, 1                                        |     r6 = r3 - 1;
    0x0001cc54 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0001cc56 sub.w fp, fp, r6                                      |     
    0x0001cc5a eor r3, r3, 1                                         |     r3 ^= 1;
    0x0001cc5e cmp.w fp, 1                                           |     
    0x0001cc62 ite le                                                |     
                                                                     |     if (fp > 1) {
    0x0001cc64 movle r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (fp <= 1) {
    0x0001cc66 andgt r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0001cc6a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001cc6c bne.w 0x1d2ae                                         |         goto label_151;
                                                                     |     }
    0x0001cc70 ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0001cc72 cmp.w fp, 0                                           |     
    0x0001cc76 ite le                                                |     
                                                                     |     if (fp > 0) {
    0x0001cc78 movle r7, 0                                           |         r7 = 0;
                                                                     |     }
    0x0001cc7a movgt r7, 1                                           |     r7 = 1;
                                                                     |     while (r6 != 1) {
                                                                     | label_67:
    0x0001cc7c mov r2, sb                                            |         r2 = sb;
    0x0001cc7e mov r1, sl                                            |         r1 = sl;
    0x0001cc80 mov r0, r5                                            |         r0 = r5;
    0x0001cc82 blx 0x9d54                                            |         fcn_00009d54 ();
    0x0001cc86 subs r6, 1                                            |         r6--;
    0x0001cc88 bne 0x1cc7c                                           |         
                                                                     |     }
    0x0001cc8a cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0001cc8c beq.w 0x1c6d6                                         |         goto label_36;
                                                                     |     }
                                                                     | label_128:
    0x0001cc90 movs r3, 0                                            |     r3 = 0;
    0x0001cc92 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001cc94 b 0x1cb54                                             |     goto label_37;
                                                                     | label_124:
    0x0001cc96 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0001cc98 ldrd r2, r3, [r1]                                     |     __asm ("ldrd r2, r3, [r1]");
    0x0001cc9c cmp r2, r3                                            |     
                                                                     |     if (r2 <= r3) {
    0x0001cc9e ble.w 0x1d2a6                                         |         goto label_152;
                                                                     |     }
    0x0001cca2 ldr r2, [r1, 8]                                       |     r2 = *((r1 + 8));
    0x0001cca4 ldr.w r0, [r2, r3, lsl 2]                             |     offset_3 = r3 << 2;
                                                                     |     r0 = *((r2 + offset_3));
    0x0001cca8 adds r3, 1                                            |     r3++;
    0x0001ccaa str r3, [r1, 4]                                       |     *((r1 + 4)) = r3;
    0x0001ccac blx 0x9688                                            |     r0 = fcn_00009688 ();
    0x0001ccb0 mov r3, r0                                            |     r3 = r0;
    0x0001ccb2 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001ccb4 beq.w 0x1d2a6                                         |         goto label_152;
                                                                     |     }
    0x0001ccb8 ldrb r2, [r0]                                         |     r2 = *(r0);
    0x0001ccba strb.w r2, [sp, 0x44]                                 |     var_44h = r2;
    0x0001ccbe and r2, r2, 0xc0                                      |     r2 &= 0xc0;
    0x0001ccc2 cmp r2, 0xc0                                          |     
    0x0001ccc4 ittt eq                                               |     
                                                                     |     if (r2 != 0xc0) {
    0x0001ccc6 addeq sl, sp, 0x44                                    |         sl += var_44h;
                                                                     |     }
                                                                     |     if (r2 != 0xc0) {
    0x0001ccca moveq sb, 1                                           |         sb = 1;
                                                                     |     }
                                                                     |     if (r2 != 0xc0) {
    0x0001ccce mov r2, sl                                            |         r2 = sl;
                                                                     |         goto label_153;
                                                                     |     }
                                                                     |     if (r2 != 0xc0) {
                                                                     | label_153:
    0x0001ccd0 bne 0x1cc40                                           |         goto label_38;
                                                                     |     }
                                                                     | label_40:
    0x0001ccd2 ldrb r1, [r3, 1]!                                     |     r1 = *((r3 += 1));
    0x0001ccd6 and r0, r1, 0xc0                                      |     r0 = r1 & 0xc0;
    0x0001ccda cmp r0, 0x80                                          |     
                                                                     |     if (r0 != 0x80) {
    0x0001ccdc bne.w 0x1c6be                                         |         goto label_39;
                                                                     |     }
    0x0001cce0 add.w sb, sb, 1                                       |     sb++;
    0x0001cce4 strb r1, [r2, 1]!                                     |     *((r2 += 1)) = r1;
    0x0001cce8 cmp.w sb, 4                                           |     
                                                                     |     if (sb != 4) {
    0x0001ccec bne 0x1ccd2                                           |         goto label_40;
                                                                     |     }
    0x0001ccee b 0x1c6be                                             |     goto label_39;
                                                                     | label_110:
    0x0001ccf0 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0001ccf2 ldrd r2, r3, [r1]                                     |     __asm ("ldrd r2, r3, [r1]");
    0x0001ccf6 cmp r2, r3                                            |     
                                                                     |     if (r2 <= r3) {
    0x0001ccf8 ble.w 0x1d33c                                         |         goto label_154;
                                                                     |     }
    0x0001ccfc ldr r2, [r1, 8]                                       |     r2 = *((r1 + 8));
    0x0001ccfe ldr.w r0, [r2, r3, lsl 2]                             |     offset_4 = r3 << 2;
                                                                     |     r0 = *((r2 + offset_4));
    0x0001cd02 adds r3, 1                                            |     r3++;
    0x0001cd04 str r3, [r1, 4]                                       |     *((r1 + 4)) = r3;
    0x0001cd06 blx 0x9688                                            |     r0 = fcn_00009688 ();
    0x0001cd0a mov sl, r0                                            |     sl = r0;
    0x0001cd0c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001cd0e beq.w 0x1d33c                                         |         goto label_154;
                                                                     |     }
    0x0001cd12 ldr r7, [sp, 0xc]                                     |     r7 = var_ch;
    0x0001cd14 movs r3, 0                                            |     r3 = 0;
    0x0001cd16 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
                                                                     | label_51:
    0x0001cd18 ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0001cd1a adds r0, r1, 1                                        |     r0 = r1 + 1;
                                                                     |     if (r0 == r1) {
    0x0001cd1c beq 0x1ce06                                           |         goto label_114;
                                                                     |     }
                                                                     | label_47:
    0x0001cd1e ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0001cd20 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001cd22 bne.w 0x1d028                                         |         goto label_155;
                                                                     |     }
    0x0001cd26 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001cd28 beq.w 0x1d412                                         |         goto label_156;
                                                                     |     }
    0x0001cd2c mov sb, r3                                            |     sb = r3;
    0x0001cd2e add.w r3, sl, -1                                      |     r3 = sl + -1;
    0x0001cd32 b 0x1cd3c                                             |     
                                                                     |     while (r2 != 0) {
    0x0001cd34 add.w sb, sb, 1                                       |         sb++;
    0x0001cd38 cmp r1, sb                                            |         
                                                                     |         if (r1 == sb) {
    0x0001cd3a beq 0x1cd44                                           |             goto label_157;
                                                                     |         }
    0x0001cd3c ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0001cd40 cmp r2, 0                                             |         
    0x0001cd42 bne 0x1cd34                                           |         
                                                                     |     }
                                                                     | label_157:
    0x0001cd44 str r7, [sp, 0xc]                                     |     var_ch = r7;
    0x0001cd46 b 0x1cabc                                             |     goto label_27;
                                                                     | label_90:
    0x0001cd48 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0001cd4a ldrd r2, r3, [r1]                                     |     __asm ("ldrd r2, r3, [r1]");
    0x0001cd4e cmp r2, r3                                            |     
                                                                     |     if (r2 <= r3) {
    0x0001cd50 ble.w 0x1d296                                         |         goto label_158;
                                                                     |     }
    0x0001cd54 ldr r2, [r1, 8]                                       |     r2 = *((r1 + 8));
    0x0001cd56 ldr.w r0, [r2, r3, lsl 2]                             |     offset_5 = r3 << 2;
                                                                     |     r0 = *((r2 + offset_5));
    0x0001cd5a adds r3, 1                                            |     r3++;
    0x0001cd5c str r3, [r1, 4]                                       |     *((r1 + 4)) = r3;
    0x0001cd5e blx 0x989c                                            |     fcn_0000989c ();
    0x0001cd62 vmov.f64 d8, d0                                       |     __asm ("vmov.f64 d8, d0");
    0x0001cd66 b.w 0x1c284                                           |     goto label_41;
                                                                     | label_119:
    0x0001cd6a ldr r6, [r5, 8]                                       |     r6 = *((r5 + 8));
    0x0001cd6c cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0001cd6e bne.w 0x1c5f4                                         |         goto label_42;
                                                                     |     }
    0x0001cd72 ldr r3, [r5, 0x14]                                    |     r3 = *((r5 + 0x14));
    0x0001cd74 ldr r5, [r3, 4]                                       |     r5 = *((r3 + 4));
    0x0001cd76 ldr r2, [r3, 0x10]                                    |     r2 = *((r3 + 0x10));
    0x0001cd78 ands r5, r5, 0x800                                    |     r5 &= 0x800;
                                                                     |     if (r5 == r5) {
    0x0001cd7c beq.w 0x1d3a4                                         |         goto label_159;
                                                                     |     }
    0x0001cd80 ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0001cd82 ldr r1, [pc, 0x338]                                   |     
    0x0001cd84 mov r0, r5                                            |     r0 = r5;
    0x0001cd86 add r1, pc                                            |     r1 = 0x39e48;
    0x0001cd88 blx 0x982c                                            |     fcn_0000982c ();
    0x0001cd8c mov r2, r6                                            |     r2 = r6;
    0x0001cd8e mov r1, sl                                            |     r1 = sl;
    0x0001cd90 mov r0, r5                                            |     r0 = r5;
    0x0001cd92 blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001cd96 b 0x1c624                                             |     goto label_7;
                                                                     | label_100:
    0x0001cd98 movs r1, 0x2e                                         |     r1 = 0x2e;
    0x0001cd9a adds r3, r0, 2                                        |     r3 = r0 + 2;
    0x0001cd9c strb r1, [r0, 1]                                      |     *((r0 + 1)) = r1;
    0x0001cd9e cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0001cda0 bne.w 0x1c3d6                                         |         goto label_43;
                                                                     |     }
    0x0001cda4 b.w 0x1c3ee                                           |     goto label_44;
                                                                     | label_96:
    0x0001cda8 vldr d16, [pc, 0x2c4]                                 |     __asm ("vldr d16, aav.0x000000ff");
    0x0001cdac adds r6, 1                                            |     r6++;
    0x0001cdae vmul.f64 d8, d8, d16                                  |     __asm ("vmul.f64 d8, d8, d16");
    0x0001cdb2 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0001cdb4 beq.w 0x1c35a                                         |         goto label_45;
                                                                     |     }
                                                                     | label_97:
    0x0001cdb8 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001cdba cmn.w r6, 4                                           |     
    0x0001cdbe it ge                                                 |     
                                                                     |     if (r6 >= 4) {
    0x0001cdc0 cmpge r8, r6                                          |         __asm ("cmpge r8, r6");
                                                                     |     }
    0x0001cdc2 eor r3, r3, 1                                         |     r3 ^= 1;
    0x0001cdc6 str r3, [sp, 0x38]                                    |     var_38h = r3;
                                                                     |     if (r6 < 4) {
    0x0001cdc8 blt.w 0x1d34a                                         |         goto label_160;
                                                                     |     }
    0x0001cdcc bic.w r3, r6, r6, asr 31                              |     r3 = BIT_MASK (r6, r6);
    0x0001cdd0 sub.w r8, r8, r6                                      |     r8 -= r6;
    0x0001cdd4 mov.w sb, 1                                           |     sb = 1;
    0x0001cdd8 str r6, [sp, 4]                                       |     var_4h = r6;
    0x0001cdda asrs r1, r3, 0x1f                                     |     r1 = r3 >> 0x1f;
    0x0001cddc b.w 0x1c368                                           |     goto label_46;
                                                                     | label_140:
    0x0001cde0 ldr r2, [r1, 8]                                       |     r2 = *((r1 + 8));
    0x0001cde2 ldr.w r0, [r2, r3, lsl 2]                             |     offset_6 = r3 << 2;
                                                                     |     r0 = *((r2 + offset_6));
    0x0001cde6 adds r3, 1                                            |     r3++;
    0x0001cde8 str r3, [r1, 4]                                       |     *((r1 + 4)) = r3;
    0x0001cdea movs r3, 0                                            |     r3 = 0;
    0x0001cdec str r3, [sp, 8]                                       |     var_8h = r3;
    0x0001cdee blx 0x9da0                                            |     r0 = fcn_00009da0 ();
    0x0001cdf2 mov r7, r0                                            |     r7 = r0;
    0x0001cdf4 mov r8, r1                                            |     r8 = r1;
    0x0001cdf6 b 0x1c804                                             |     goto label_21;
                                                                     | label_112:
    0x0001cdf8 ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0001cdfa ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0001cdfc ldr.w sl, [sp, 0x2c]                                  |     sl = var_2ch;
    0x0001ce00 adds r0, r1, 1                                        |     r0 = r1 + 1;
    0x0001ce02 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
                                                                     |     if (r0 != r1) {
    0x0001ce04 bne 0x1cd1e                                           |         goto label_47;
                                                                     |     }
                                                                     | label_114:
    0x0001ce06 mov r0, sl                                            |     r0 = sl;
    0x0001ce08 str r7, [sp, 0xc]                                     |     var_ch = r7;
    0x0001ce0a blx 0x9e8c                                            |     fcn_00009e8c ();
    0x0001ce0e ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0001ce10 mov sb, r0                                            |     sb = r0;
    0x0001ce12 cmp.w fp, 0                                           |     
    0x0001ce16 ite le                                                |     
                                                                     |     if (fp > 0) {
    0x0001ce18 movle r2, 0                                           |         r2 = 0;
                                                                     |     }
                                                                     |     if (fp <= 0) {
    0x0001ce1a andgt r2, r2, 1                                       |         r2 &= 1;
                                                                     |     }
    0x0001ce1e b 0x1cab8                                             |     goto label_48;
                                                                     | label_123:
    0x0001ce20 ldr r6, [sp, 0x14]                                    |     r6 = var_14h;
    0x0001ce22 ldr r1, [r5, 8]                                       |     r1 = *((r5 + 8));
    0x0001ce24 mov r0, r6                                            |     r0 = r6;
    0x0001ce26 blx 0xa0fc                                            |     fcn_0000a0fc ();
    0x0001ce2a ldr r1, [r6]                                          |     r1 = *(r6);
                                                                     |     do {
    0x0001ce2c ldr r3, [r5, 4]                                       |         r3 = *((r5 + 4));
    0x0001ce2e ands r2, r3, 3                                        |         r2 = r3 & 3;
                                                                     |         if (r2 == r3) {
    0x0001ce32 bne 0x1ce3c                                           |             
    0x0001ce34 ldr r3, [r5, 0x24]                                    |             r3 = *((r5 + 0x24));
    0x0001ce36 cmp r3, 0                                             |             
                                                                     |             if (r3 > 0) {
    0x0001ce38 bgt.w 0x1d358                                         |                 goto label_161;
                                                                     |             }
                                                                     |         }
    0x0001ce3c ldr r5, [r5, 0xc]                                     |         r5 = *((r5 + 0xc));
    0x0001ce3e cmp r5, 0                                             |         
    0x0001ce40 bne 0x1ce2c                                           |         
                                                                     |     } while (r5 != 0);
    0x0001ce42 b 0x1c676                                             |     goto label_49;
                                                                     | label_139:
    0x0001ce44 ldr r6, [sp, 0x14]                                    |     r6 = var_14h;
    0x0001ce46 ldr r1, [r5]                                          |     r1 = *(r5);
    0x0001ce48 mov r0, r6                                            |     r0 = r6;
    0x0001ce4a blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001ce4e str r6, [sp, 0x14]                                    |     var_14h = r6;
    0x0001ce50 ldr r6, [r6]                                          |     r6 = *(r6);
    0x0001ce52 ldr r5, [r5]                                          |     r5 = *(r5);
    0x0001ce54 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0001ce56 beq.w 0x1c952                                         |         goto label_50;
                                                                     |     }
    0x0001ce5a ldr r3, [r6, 0x44]                                    |     r3 = *((r6 + 0x44));
    0x0001ce5c adds r3, 2                                            |     r3 += 2;
                                                                     |     if (r3 != 2) {
    0x0001ce5e bne.w 0x1c952                                         |         goto label_50;
                                                                     |     }
    0x0001ce62 ldr.w r3, [r6, 0x108]                                 |     r3 = *((r6 + 0x108));
    0x0001ce66 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001ce68 beq.w 0x1c952                                         |         goto label_50;
                                                                     |     }
    0x0001ce6c ldr.w r7, [r3, 0xe8]                                  |     r7 = *((r3 + 0xe8));
    0x0001ce70 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0001ce72 beq.w 0x1c952                                         |         goto label_50;
                                                                     |     }
    0x0001ce76 mov r0, r7                                            |     r0 = r7;
    0x0001ce78 blx 0x9e8c                                            |     r0 = fcn_00009e8c ();
    0x0001ce7c adds r3, r7, r0                                       |     r3 = r7 + r0;
    0x0001ce7e cmp r7, r5                                            |     
    0x0001ce80 it ls                                                 |     
                                                                     |     if (r7 > r5) {
    0x0001ce82 cmpls r5, r3                                          |         __asm ("cmpls r5, r3");
                                                                     |         goto label_162;
                                                                     |     }
                                                                     |     if (r7 >= r5) {
                                                                     | label_162:
    0x0001ce84 bhs.w 0x1c952                                         |         goto label_50;
                                                                     |     }
    0x0001ce88 subs r5, r5, r7                                       |     r5 -= r7;
    0x0001ce8a ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0001ce8c ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001ce8e mov r1, sl                                            |     r1 = sl;
    0x0001ce90 str r5, [r6, 0x44]                                    |     *((r6 + 0x44)) = r5;
    0x0001ce92 blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001ce96 b.w 0x1c624                                           |     goto label_7;
                                                                     | label_113:
    0x0001ce9a ldr.w sl, [sp, 0x2c]                                  |     sl = var_2ch;
    0x0001ce9e b 0x1cd18                                             |     goto label_51;
                                                                     | label_93:
    0x0001cea0 vmov r3, s17                                          |     __asm ("vmov r3, s17");
    0x0001cea4 ubfx r1, r3, 0x14, 0xb                                |     r1 = (r3 >> 0x14) & ((1 << 0xb) - 1);
    0x0001cea8 movw r3, 0x5556                                       |     
    0x0001ceac subw r1, r1, 0x3ff                                    |     __asm ("subw r1, r1, aav.0x000000ff");
                                                                     |     /* if there is a right shift of 0, then it's a division by 1/3 */
    0x0001ceb0 movt r3, 0x5555                                       |     r3 = 0x55555556;
    0x0001ceb4 smull r0, r3, r3, r1                                  |     r0:r3 = r3 * r1;
    0x0001ceb8 sub.w r3, r3, r1, asr 31                              |     r3 -= (r1 >> 31);
    0x0001cebc add r3, r8                                            |     r3 += r8;
    0x0001cebe cmp r3, 0xe                                           |     
                                                                     |     if (r3 <= 0xe) {
    0x0001cec0 bgt 0x1ceca                                           |         
    0x0001cec2 vldr d17, [pc, 0x1b4]                                 |         __asm ("vldr d17, aav.0x000000ff");
    0x0001cec6 vmla.f64 d16, d8, d17                                 |         __asm ("vmla.f64 d16, d8, d17");
                                                                     |     }
    0x0001ceca vadd.f64 d8, d8, d16                                  |     __asm ("vadd.f64 d8, d8, d16");
    0x0001cece b.w 0x1c31e                                           |     goto label_52;
                                                                     | label_136:
    0x0001ced2 str r2, [sp, 4]                                       |     var_4h = r2;
    0x0001ced4 b 0x1c8de                                             |     goto label_53;
                                                                     | label_94:
    0x0001ced6 vldr d17, [pc, 0x1a8]                                 |     __asm ("vldr d17, aav.0x000000ff");
    0x0001ceda vcmpe.f64 d8, d17                                     |     __asm ("vcmpe.f64 d8, d17");
    0x0001cede vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                     |     if (r3 < 0xe) {
    0x0001cee2 blt.w 0x1d3be                                         |         goto label_163;
                                                                     |     }
    0x0001cee6 vmov.f64 d19, d17                                     |     __asm ("vmov.f64 d19, d17");
    0x0001ceea movs r6, 0                                            |     r6 = 0;
                                                                     |     do {
    0x0001ceec vmov.f64 d18, d17                                     |         __asm ("vmov.f64 d18, d17");
    0x0001cef0 adds r6, 0x64                                         |         r6 += 0x64;
    0x0001cef2 vmul.f64 d17, d17, d19                                |         __asm ("vmul.f64 d17, d17, d19");
    0x0001cef6 cmp.w r6, 0x15e                                       |         
    0x0001cefa ite gt                                                |         
                                                                     |         if (r6 <= 0x15e) {
    0x0001cefc movgt r3, 0                                           |             r3 = 0;
                                                                     |         }
                                                                     |         if (r6 > 0x15e) {
    0x0001cefe movle r3, 1                                           |             r3 = 1;
                                                                     |         }
    0x0001cf00 and r1, r3, 1                                         |         r1 = r3 & 1;
    0x0001cf04 vcmpe.f64 d17, d8                                     |         __asm ("vcmpe.f64 d17, d8");
    0x0001cf08 vmrs apsr_nzcv, fpscr                                 |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001cf0c it hi                                                 |         
                                                                     |         if (r6 <= 0x15e) {
    0x0001cf0e movhi r1, 0                                           |             r1 = 0;
                                                                     |         }
    0x0001cf10 cmp r1, 0                                             |         
    0x0001cf12 bne 0x1ceec                                           |         
                                                                     |     } while (r1 != 0);
    0x0001cf14 vldr d17, [pc, 0x170]                                 |     __asm ("vldr d17, aav.0x000000ff");
    0x0001cf18 vmul.f64 d17, d18, d17                                |     __asm ("vmul.f64 d17, d18, d17");
                                                                     | label_70:
    0x0001cf1c vcmpe.f64 d8, d17                                     |     __asm ("vcmpe.f64 d8, d17");
    0x0001cf20 and r1, r3, 1                                         |     r1 = r3 & 1;
    0x0001cf24 vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0001cf28 it lt                                                 |     
                                                                     |     if (r1 >= 0) {
    0x0001cf2a movlt r1, 0                                           |         r1 = 0;
                                                                     |     }
                                                                     |     if (r1 == 0) {
    0x0001cf2c cbz r1, 0x1cf5a                                       |         goto label_164;
                                                                     |     }
    0x0001cf2e vldr d19, [pc, 0x158]                                 |     __asm ("vldr d19, aav.0x000000ff");
                                                                     |     do {
    0x0001cf32 vmov.f64 d18, d17                                     |         __asm ("vmov.f64 d18, d17");
    0x0001cf36 adds r6, 0xa                                          |         r6 += 0xa;
    0x0001cf38 vmul.f64 d17, d17, d19                                |         __asm ("vmul.f64 d17, d17, d19");
    0x0001cf3c cmp.w r6, 0x15e                                       |         
    0x0001cf40 ite gt                                                |         
                                                                     |         if (r6 <= 0x15e) {
    0x0001cf42 movgt r3, 0                                           |             r3 = 0;
                                                                     |         }
                                                                     |         if (r6 > 0x15e) {
    0x0001cf44 movle r3, 1                                           |             r3 = 1;
                                                                     |         }
    0x0001cf46 and r1, r3, 1                                         |         r1 = r3 & 1;
    0x0001cf4a vcmpe.f64 d17, d8                                     |         __asm ("vcmpe.f64 d17, d8");
    0x0001cf4e vmrs apsr_nzcv, fpscr                                 |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001cf52 it hi                                                 |         
                                                                     |         if (r6 <= 0x15e) {
    0x0001cf54 movhi r1, 0                                           |             r1 = 0;
                                                                     |         }
    0x0001cf56 cmp r1, 0                                             |         
    0x0001cf58 bne 0x1cf32                                           |         
                                                                     |     } while (r1 != 0);
                                                                     | label_164:
    0x0001cf5a vmov.f64 d19, 1.000000e+01                            |     __asm ("vmov.f64 d19, 1");
    0x0001cf5e and r3, r3, 1                                         |     r3 &= 1;
    0x0001cf62 vmul.f64 d17, d18, d19                                |     __asm ("vmul.f64 d17, d18, d19");
    0x0001cf66 vcmpe.f64 d8, d17                                     |     __asm ("vcmpe.f64 d8, d17");
    0x0001cf6a vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0001cf6e it lt                                                 |     
                                                                     |     if (r1 >= 0) {
    0x0001cf70 movlt r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0001cf72 cbz r3, 0x1cf9c                                       |         goto label_165;
                                                                     |     }
                                                                     |     do {
    0x0001cf74 vmov.f64 d18, d17                                     |         __asm ("vmov.f64 d18, d17");
    0x0001cf78 adds r6, 1                                            |         r6++;
    0x0001cf7a vmul.f64 d17, d17, d19                                |         __asm ("vmul.f64 d17, d17, d19");
    0x0001cf7e vcmpe.f64 d17, d8                                     |         __asm ("vcmpe.f64 d17, d8");
    0x0001cf82 vmrs apsr_nzcv, fpscr                                 |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001cf86 ite ls                                                |         
                                                                     |         if (r6 > 1) {
    0x0001cf88 movls r3, 1                                           |             r3 = 1;
                                                                     |         }
                                                                     |         if (r6 <= 1) {
    0x0001cf8a movhi r3, 0                                           |             r3 = 0;
                                                                     |         }
    0x0001cf8c cmp.w r6, 0x15e                                       |         
    0x0001cf90 ite gt                                                |         
                                                                     |         if (r6 <= 0x15e) {
    0x0001cf92 movgt r3, 0                                           |             r3 = 0;
                                                                     |         }
                                                                     |         if (r6 > 0x15e) {
    0x0001cf94 andle r3, r3, 1                                       |             r3 &= 1;
                                                                     |         }
    0x0001cf98 cmp r3, 0                                             |         
    0x0001cf9a bne 0x1cf74                                           |         
                                                                     |     } while (r3 != 0);
                                                                     | label_165:
    0x0001cf9c vdiv.f64 d8, d8, d18                                  |     __asm ("vdiv.f64 d8, d8, d18");
    0x0001cfa0 vldr d17, [pc, 0xec]                                  |     __asm ("vldr d17, aav.0x000000ff");
    0x0001cfa4 vcmpe.f64 d8, d17                                     |     __asm ("vcmpe.f64 d8, d17");
    0x0001cfa8 vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                     |     if (r3 >= 0) {
    0x0001cfac bpl 0x1cfc2                                           |         goto label_166;
                                                                     |     }
    0x0001cfae vldr d18, [pc, 0xe8]                                  |     __asm ("vldr d18, aav.0x000000ff");
                                                                     |     do {
    0x0001cfb2 vmul.f64 d8, d8, d18                                  |         __asm ("vmul.f64 d8, d8, d18");
    0x0001cfb6 subs r6, 8                                            |         r6 -= 8;
    0x0001cfb8 vcmpe.f64 d8, d17                                     |         __asm ("vcmpe.f64 d8, d17");
    0x0001cfbc vmrs apsr_nzcv, fpscr                                 |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001cfc0 bmi 0x1cfb2                                           |         
                                                                     |     } while (r6 < 8);
                                                                     | label_166:
    0x0001cfc2 vmov.f64 d17, 1.000000e+00                            |     __asm ("vmov.f64 d17, 1");
    0x0001cfc6 vcmpe.f64 d8, d17                                     |     __asm ("vcmpe.f64 d8, d17");
    0x0001cfca vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                     |     if (r6 >= 8) {
    0x0001cfce bpl 0x1cfe4                                           |         goto label_167;
                                                                     |     }
    0x0001cfd0 vmov.f64 d18, 1.000000e+01                            |     __asm ("vmov.f64 d18, 1");
                                                                     |     do {
    0x0001cfd4 vmul.f64 d8, d8, d18                                  |         __asm ("vmul.f64 d8, d8, d18");
    0x0001cfd8 subs r6, 1                                            |         r6--;
    0x0001cfda vcmpe.f64 d8, d17                                     |         __asm ("vcmpe.f64 d8, d17");
    0x0001cfde vmrs apsr_nzcv, fpscr                                 |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001cfe2 bmi 0x1cfd4                                           |         
                                                                     |     } while (r6 < 1);
                                                                     | label_167:
    0x0001cfe4 cmp.w r6, 0x15e                                       |     
                                                                     |     if (r6 <= 0x15e) {
    0x0001cfe8 ble.w 0x1c338                                         |         goto label_54;
                                                                     |     }
    0x0001cfec ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0001cfee add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001cff2 cmp r3, 0                                             |     
    0x0001cff4 strb.w r3, [sp, 0x44]                                 |     var_44h = r3;
    0x0001cff8 ldr r3, [pc, 0xc4]                                    |     
    0x0001cffa ittee ne                                              |     
                                                                     |     if (r3 == 0) {
    0x0001cffc subne r6, fp, 4                                       |         r6 = fp - 4;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0001d000 moveq sb, 4                                           |         sb = 4;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0001d004 sub.w r6, fp, 3                                       |         r6 = fp - 3;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0001d008 mov.w sb, 3                                           |         sb = 3;
                                                                     |     }
    0x0001d00c add r3, pc                                            |     r3 = 0x3a0d0;
    0x0001d00e ldr r0, [r3]                                          |     r0 = *(0x3a0d0);
    0x0001d010 ite ne                                                |     
                                                                     |     if (r3 == 0) {
    0x0001d012 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0001d014 moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0001d016 str.w r0, [sl, r3]                                    |     __asm ("str.w r0, [sl, r3]");
    0x0001d01a itete ne                                              |     
                                                                     |     if (r3 == 0) {
    0x0001d01c movne r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0001d01e ldreq r3, [sp, 8]                                     |         r3 = var_8h;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0001d020 strne r3, [sp, 0x2c]                                  |         var_2ch = r3;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0001d022 streq r3, [sp, 0x2c]                                  |         var_2ch = r3;
                                                                     |     }
    0x0001d024 b.w 0x1c6f0                                           |     goto label_17;
                                                                     | label_155:
    0x0001d028 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001d02a mov sb, r3                                            |     sb = r3;
    0x0001d02c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d02e beq.w 0x1cb40                                         |         goto label_55;
                                                                     |     }
    0x0001d032 ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0001d034 mov r2, sl                                            |     r2 = sl;
    0x0001d036 b 0x1d03e                                             |     goto label_168;
                                                                     | label_57:
    0x0001d038 subs r1, 1                                            |     r1--;
                                                                     |     if (r1 == 1) {
    0x0001d03a beq.w 0x1cb3c                                         |         goto label_56;
                                                                     |     }
                                                                     | label_168:
    0x0001d03e ldrb r3, [r2]                                         |     r3 = *(r2);
    0x0001d040 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d042 beq.w 0x1cb3c                                         |         goto label_56;
                                                                     |     }
    0x0001d046 cmp r3, 0xbf                                          |     
    0x0001d048 add.w r0, r2, 1                                       |     r0 = r2 + 1;
    0x0001d04c it ls                                                 |     
                                                                     |     if (r3 <= 0xbf) {
    0x0001d04e movls r2, r0                                          |         r2 = r0;
                                                                     |         goto label_169;
                                                                     |     }
                                                                     |     if (r3 < 0xbf) {
                                                                     | label_169:
    0x0001d050 bls 0x1d038                                           |         goto label_57;
                                                                     |     }
    0x0001d052 ldrb r3, [r2, 1]                                      |     r3 = *((r2 + 1));
    0x0001d054 mov r2, r0                                            |     r2 = r0;
    0x0001d056 and r3, r3, 0xc0                                      |     r3 &= 0xc0;
    0x0001d05a cmp r3, 0x80                                          |     
                                                                     |     if (r3 != 0x80) {
    0x0001d05c bne 0x1d038                                           |         goto label_57;
                                                                     |     }
                                                                     |     do {
    0x0001d05e ldrb r3, [r2, 1]!                                     |         r3 = *((r2 += 1));
    0x0001d062 and r3, r3, 0xc0                                      |         r3 &= 0xc0;
    0x0001d066 cmp r3, 0x80                                          |         
    0x0001d068 beq 0x1d05e                                           |         
                                                                     |     } while (r3 == 0x80);
    0x0001d06a b 0x1d038                                             |     goto label_57;
                                                                     | label_99:
    0x0001d0c4 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001d0c6 subs r1, r0, 1                                        |     r1 = r0 - 1;
    0x0001d0c8 vmov.f64 d17, 1.000000e+01                            |     __asm ("vmov.f64 d17, 1");
    0x0001d0cc add.w ip, r0, r3                                      |     
                                                                     |     do {
    0x0001d0d0 cmp r7, 0                                             |         
    0x0001d0d2 it le                                                 |         
                                                                     |         if (r7 > 0) {
    0x0001d0d4 movle r3, 0x30                                        |             r3 = 0x30;
                                                                     |         }
                                                                     |         if (r7 > 0) {
    0x0001d0d6 ble 0x1d0f2                                           |             
    0x0001d0d8 vcvt.s32.f64 s15, d8                                  |             __asm ("vcvt.s32.f64 s15, d8");
    0x0001d0dc subs r7, 1                                            |             r7--;
    0x0001d0de vcvt.f64.s32 d16, s15                                 |             __asm ("vcvt.f64.s32 d16, s15");
    0x0001d0e2 vmov r3, s15                                          |             __asm ("vmov r3, s15");
    0x0001d0e6 adds r3, 0x30                                         |             r3 += 0x30;
    0x0001d0e8 uxtb r3, r3                                           |             r3 = (int8_t) r3;
    0x0001d0ea vsub.f64 d8, d8, d16                                  |             __asm ("vsub.f64 d8, d8, d16");
    0x0001d0ee vmul.f64 d8, d8, d17                                  |             __asm ("vmul.f64 d8, d8, d17");
                                                                     |         }
    0x0001d0f2 strb r3, [r1, 1]!                                     |         *((r1 += 1)) = r3;
    0x0001d0f6 cmp r1, ip                                            |         
    0x0001d0f8 bne 0x1d0d0                                           |         
                                                                     |     } while (r1 != ip);
    0x0001d0fa ldr r1, [sp, 4]                                       |     r1 = var_4h;
    0x0001d0fc ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001d0fe adds r1, 1                                            |     r1++;
    0x0001d100 adds r2, r0, r1                                       |     r2 = r0 + r1;
    0x0001d102 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d104 beq.w 0x1c43a                                         |         goto label_58;
                                                                     |     }
    0x0001d108 adds r3, r2, 1                                        |     r3 = r2 + 1;
    0x0001d10a movs r2, 0x2e                                         |     r2 = 0x2e;
    0x0001d10c strb r2, [r0, r1]                                     |     *((r0 + r1)) = r2;
    0x0001d10e b.w 0x1c3ee                                           |     goto label_44;
                                                                     | label_98:
    0x0001d112 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001d114 bl 0x1ead0                                            |     r0 = fcn_0001ead0 (r0, r1, r2);
    0x0001d118 mov sl, r0                                            |     sl = r0;
    0x0001d11a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001d11c beq.w 0x1c634                                         |         goto label_9;
                                                                     |     }
    0x0001d120 str r0, [sp, 0x2c]                                    |     var_2ch = r0;
    0x0001d122 b.w 0x1c394                                           |     goto label_59;
                                                                     | label_104:
    0x0001d126 ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0001d128 cmp r6, 0                                             |     
    0x0001d12a ldr r3, [pc, 0x30c]                                   |     
    0x0001d12c it lt                                                 |     
                                                                     |     if (r6 < 0) {
    0x0001d12e rsblt r6, r6, 0                                       |         __asm ("rsblt r6, r6, 0");
                                                                     |     }
    0x0001d130 add r1, r5                                            |     r1 += r5;
    0x0001d132 add r3, pc                                            |     r3 = 0x3a570;
    0x0001d134 add.w r1, r3, r1, lsl 1                               |     r1 = r3 + (r1 << 1);
    0x0001d138 ldrb.w r1, [r1, 0xd98]                                |     r1 = *((r1 + 0xd98));
    0x0001d13c add r3, r1                                            |     r3 += r1;
    0x0001d13e ldrb.w r3, [r3, 0xe30]                                |     r3 = *((r3 + 0xe30));
    0x0001d142 strb r3, [r2]                                         |     *(r2) = r3;
    0x0001d144 ite lt                                                |     
                                                                     |     if (r6 >= 0) {
    0x0001d146 movlt r3, 0x2d                                        |         r3 = 0x2d;
                                                                     |     }
                                                                     |     if (r6 < 0) {
    0x0001d148 movge r3, 0x2b                                        |         r3 = 0x2b;
                                                                     |     }
    0x0001d14a cmp r6, 0x63                                          |     
    0x0001d14c it le                                                 |     
                                                                     |     if (r6 > 0x63) {
    0x0001d14e addle r0, r2, 2                                       |         r0 = r2 + 2;
                                                                     |     }
    0x0001d150 strb r3, [r2, 1]                                      |     *((r2 + 1)) = r3;
                                                                     |     if (r6 > 0x63) {
    0x0001d152 ble 0x1d16e                                           |         
    0x0001d154 movw r3, 0x851f                                       |         
    0x0001d158 adds r0, r2, 3                                        |         r0 = r2 + 3;
                                                                     |         /* if there is a right shift of 5, then it's a division by 1/100 */
    0x0001d15a movt r3, 0x51eb                                       |         r3 = 0x51eb851f;
    0x0001d15e umull r1, r3, r3, r6                                  |         r1:r3 = r3 * r6;
    0x0001d162 movs r1, 0x64                                         |         r1 = 0x64;
    0x0001d164 lsrs r3, r3, 5                                        |         r3 >>= 5;
    0x0001d166 mls r6, r1, r3, r6                                    |         __asm ("mls r6, r1, r3, r6");
    0x0001d16a adds r3, 0x30                                         |         r3 += 0x30;
    0x0001d16c strb r3, [r2, 2]                                      |         *((r2 + 2)) = r3;
                                                                     |     }
    0x0001d16e movw r3, 0xcccd                                       |     
    0x0001d172 movt r3, 0xcccc                                       |     r3 = 0xcccccccd;
    0x0001d176 umull r2, r3, r3, r6                                  |     r2:r3 = r3 * r6;
    0x0001d17a mov r2, r0                                            |     r2 = r0;
    0x0001d17c lsrs r1, r3, 3                                        |     r1 = r3 >> 3;
    0x0001d17e add.w r3, r1, r1, lsl 2                               |     r3 = r1 + (r1 << 2);
    0x0001d182 adds r1, 0x30                                         |     r1 += 0x30;
    0x0001d184 strb r1, [r2], 2                                      |     *(r2) = r1;
                                                                     |     r2 += 2;
    0x0001d188 sub.w r3, r6, r3, lsl 1                               |     r3 = r6 - (r3 << 1);
    0x0001d18c adds r3, 0x30                                         |     r3 += 0x30;
    0x0001d18e strb r3, [r0, 1]                                      |     *((r0 + 1)) = r3;
    0x0001d190 b.w 0x1c442                                           |     goto label_60;
                                                                     | label_95:
    0x0001d194 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0001d196 bic.w r3, r6, r6, asr 31                              |     r3 = BIT_MASK (r6, r6);
    0x0001d19a str r6, [sp, 4]                                       |     var_4h = r6;
    0x0001d19c asrs r1, r3, 0x1f                                     |     r1 = r3 >> 0x1f;
    0x0001d19e str r2, [sp, 0x38]                                    |     var_38h = r2;
    0x0001d1a0 b.w 0x1c368                                           |     goto label_46;
                                                                     | label_76:
    0x0001d1a4 ldr r1, [pc, 0x294]                                   |     
    0x0001d1a6 movs r2, 1                                            |     r2 = 1;
    0x0001d1a8 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001d1aa add r1, pc                                            |     r1 = 0x3a5ea;
    0x0001d1ac blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001d1b0 b.w 0x1c634                                           |     goto label_9;
                                                                     | label_103:
    0x0001d1b4 ldrb r1, [r2, -0x1]                                   |     r1 = *((r2 - 0x1));
    0x0001d1b8 cmp r1, 0x30                                          |     
                                                                     |     if (r1 != 0x30) {
    0x0001d1ba bne 0x1d1cc                                           |         goto label_170;
                                                                     |     }
    0x0001d1bc subs r3, r2, 1                                        |     r3 = r2 - 1;
    0x0001d1be movs r0, 0                                            |     r0 = 0;
                                                                     |     do {
    0x0001d1c0 mov r2, r3                                            |         r2 = r3;
    0x0001d1c2 strb r0, [r3]                                         |         *(r3) = r0;
    0x0001d1c4 ldrb r1, [r3, -0x1]!                                  |         r1 = *((r3 -= 0x1));
    0x0001d1c8 cmp r1, 0x30                                          |         
    0x0001d1ca beq 0x1d1c0                                           |         
                                                                     |     } while (r1 == 0x30);
                                                                     | label_170:
    0x0001d1cc cmp r1, 0x2e                                          |     
                                                                     |     if (r1 != 0x2e) {
    0x0001d1ce bne.w 0x1c43a                                         |         goto label_58;
                                                                     |     }
    0x0001d1d2 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0001d1d4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d1d6 beq.w 0x1d3ea                                         |         goto label_171;
                                                                     |     }
    0x0001d1da movs r3, 0x30                                         |     r3 = 0x30;
    0x0001d1dc strb r3, [r2], 1                                      |     *(r2) = r3;
                                                                     |     r2++;
    0x0001d1e0 b.w 0x1c43a                                           |     goto label_58;
                                                                     | label_85:
    0x0001d1e4 ldr r2, [sp, 0x34]                                    |     r2 = var_34h;
    0x0001d1e6 movs r6, 0x27                                         |     r6 = 0x27;
    0x0001d1e8 ldrd r2, r3, [r2]                                     |     __asm ("ldrd r2, r3, [r2]");
    0x0001d1ec cmp r2, r3                                            |     
                                                                     |     if (r2 > r3) {
    0x0001d1ee ble 0x1d206                                           |         
                                                                     | label_68:
    0x0001d1f0 ldr r1, [sp, 0x34]                                    |         r1 = var_34h;
    0x0001d1f2 ldr r2, [r1, 8]                                       |         r2 = *((r1 + 8));
    0x0001d1f4 ldr.w r0, [r2, r3, lsl 2]                             |         offset_7 = r3 << 2;
                                                                     |         r0 = *((r2 + offset_7));
    0x0001d1f8 adds r3, 1                                            |         r3++;
    0x0001d1fa str r3, [r1, 4]                                       |         *((r1 + 4)) = r3;
    0x0001d1fc blx 0x9688                                            |         r0 = fcn_00009688 ();
    0x0001d200 mov r5, r0                                            |         r5 = r0;
    0x0001d202 b.w 0x1c20e                                           |         goto label_61;
                                                                     |     }
                                                                     | label_86:
    0x0001d206 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001d208 cmp.w sb, 0xa                                         |     
    0x0001d20c asr.w r2, r3, 0x1f                                    |     r2 = r3 >> 0x1f;
                                                                     |     if (sb != 0xa) {
    0x0001d210 bne.w 0x1d366                                         |         goto label_172;
                                                                     |     }
    0x0001d214 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d216 beq.w 0x1cc2c                                         |         goto label_62;
                                                                     |     }
    0x0001d21a ldr r5, [pc, 0x224]                                   |     
    0x0001d21c mov.w sb, 0                                           |     sb = 0;
    0x0001d220 add r5, pc                                            |     r5 = 0x3a666;
    0x0001d222 b.w 0x1c22c                                           |     goto label_34;
                                                                     | label_111:
    0x0001d226 ldr.w sl, [pc, 0x21c]                                 |     sl = *(0x0001d444);
    0x0001d22a add sl, pc                                            |     sl += pc;
    0x0001d22c b 0x1cd18                                             |     goto label_51;
                                                                     | label_109:
    0x0001d22e cmp r0, 2                                             |     
                                                                     |     if (r0 != 2) {
    0x0001d230 bne.w 0x1c4a6                                         |         goto label_63;
                                                                     |     }
    0x0001d234 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001d236 adds r3, 7                                            |     r3 += 7;
    0x0001d238 bic r3, r3, 7                                         |     r3 = BIT_MASK (r3, 7);
    0x0001d23c ldr r1, [r3, 4]                                       |     r1 = *((r3 + 4));
    0x0001d23e ldr r7, [r3], 8                                       |     r7 = *(r3);
                                                                     |     r3 += 8;
    0x0001d242 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0001d244 b.w 0x1c4b0                                           |     goto label_5;
                                                                     | label_133:
    0x0001d248 cmp r0, 2                                             |     
                                                                     |     if (r0 != 2) {
    0x0001d24a bne.w 0x1c938                                         |         goto label_64;
                                                                     |     }
    0x0001d24e ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001d250 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0001d252 adds r3, 7                                            |     r3 += 7;
    0x0001d254 bic r3, r3, 7                                         |     r3 = BIT_MASK (r3, 7);
    0x0001d258 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0001d25a ldr.w r8, [r3, 4]                                     |     r8 = *((r3 + 4));
    0x0001d25e ldr r7, [r3], 8                                       |     r7 = *(r3);
                                                                     |     r3 += 8;
    0x0001d262 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0001d264 b.w 0x1c804                                           |     goto label_21;
                                                                     | label_126:
    0x0001d268 cmp.w r3, 0x10000                                     |     
    0x0001d26c and r1, r1, 0x3f                                      |     r1 &= 0x3f;
    0x0001d270 orr r1, r1, 0x80                                      |     r1 |= 0x80;
    0x0001d274 ubfx r5, r3, 0xc, 8                                   |     r5 = (r3 >> 0xc) & ((1 << 8) - 1);
                                                                     |     if (r3 >= 0x10000) {
    0x0001d278 bhs 0x1d378                                           |         goto label_173;
                                                                     |     }
    0x0001d27a subs r5, 0x20                                         |     r5 -= 0x20;
    0x0001d27c mov.w sb, 3                                           |     sb = 3;
    0x0001d280 add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001d284 strb.w r1, [sp, 0x45]                                 |     var_45h = r1;
    0x0001d288 strb.w r0, [sp, 0x46]                                 |     var_46h = r0;
    0x0001d28c strb.w r5, [sp, 0x44]                                 |     var_44h = r5;
    0x0001d290 str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0001d292 b.w 0x1c6be                                           |     goto label_39;
                                                                     | label_158:
    0x0001d296 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001d298 adds r3, 1                                            |     r3++;
                                                                     |     if (r3 == 1) {
    0x0001d29a beq.w 0x1cb6e                                         |         goto label_65;
                                                                     |     }
    0x0001d29e vmov.i64 d8, 0                                        |     __asm ("vmov.i64 d8, 0");
    0x0001d2a2 b.w 0x1c292                                           |     goto label_66;
                                                                     | label_152:
    0x0001d2a6 movs r3, 0                                            |     r3 = 0;
    0x0001d2a8 strb.w r3, [sp, 0x44]                                 |     var_44h = r3;
    0x0001d2ac b 0x1cc40                                             |     goto label_38;
                                                                     | label_151:
    0x0001d2ae ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0001d2b0 add.w r1, fp, -1                                      |     r1 = fp + -1;
    0x0001d2b4 movs r2, 0x20                                         |     r2 = 0x20;
    0x0001d2b6 mov.w fp, 0                                           |     
    0x0001d2ba mov r7, fp                                            |     r7 = fp;
    0x0001d2bc mov r0, r5                                            |     r0 = r5;
    0x0001d2be blx 0x9cac                                            |     fcn_00009cac ();
    0x0001d2c2 b 0x1cc7c                                             |     goto label_67;
                                                                     | label_149:
    0x0001d2c4 ldr r2, [sp, 0x34]                                    |     r2 = var_34h;
    0x0001d2c6 ldrd r2, r3, [r2]                                     |     __asm ("ldrd r2, r3, [r2]");
    0x0001d2ca cmp r3, r2                                            |     
    0x0001d2cc it lt                                                 |     
                                                                     |     if (r3 < r2) {
    0x0001d2ce movlt r6, 0x22                                        |         r6 = 0x22;
                                                                     |         goto label_174;
                                                                     |     }
                                                                     |     if (r3 < r2) {
                                                                     | label_174:
    0x0001d2d0 blt 0x1d1f0                                           |         goto label_68;
                                                                     |     }
    0x0001d2d2 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001d2d4 asrs r2, r3, 0x1f                                     |     r2 = r3 >> 0x1f;
    0x0001d2d6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d2d8 beq.w 0x1cc2c                                         |         goto label_62;
                                                                     |     }
    0x0001d2dc ldr r5, [pc, 0x168]                                   |     
    0x0001d2de mov.w sb, 0                                           |     sb = 0;
    0x0001d2e2 movs r6, 0x22                                         |     r6 = 0x22;
    0x0001d2e4 add r5, pc                                            |     r5 = 0x3a730;
    0x0001d2e6 b.w 0x1c22c                                           |     goto label_34;
    0x0001d2ea ldr.w sl, [pc, 0x160]                                 |     sl = *(0x0001d44c);
    0x0001d2ee movs r3, 0                                            |     r3 = 0;
    0x0001d2f0 sub.w r6, fp, 3                                       |     r6 = fp - 3;
    0x0001d2f4 mov.w sb, 3                                           |     sb = 3;
    0x0001d2f8 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001d2fa add sl, pc                                            |     sl += pc;
    0x0001d2fc b.w 0x1c6f0                                           |     goto label_17;
                                                                     | label_105:
    0x0001d300 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0001d302 subs r0, r3, 0                                        |     r0 = r3 - 0;
    0x0001d304 it ne                                                 |     
                                                                     |     if (r0 == r3) {
    0x0001d306 movne r0, 1                                           |         r0 = 1;
                                                                     |     }
    0x0001d308 cmp fp, r6                                            |     
    0x0001d30a itt ge                                                |     
                                                                     |     if (fp < r6) {
    0x0001d30c addge r1, fp, 1                                       |         r1 += arg_1h;
                                                                     |     }
                                                                     |     if (fp >= r6) {
    0x0001d310 add r1, sl                                            |         r1 += sl;
                                                                     |     }
                                                                     |     if (fp < r6) {
    0x0001d312 blt 0x1d322                                           |         goto label_175;
                                                                     |     }
                                                                     |     do {
    0x0001d314 ldrb r3, [r2]                                         |         r3 = *(r2);
    0x0001d316 cmp r2, sl                                            |         
    0x0001d318 add.w r2, r2, -1                                      |         r2 += -1;
    0x0001d31c strb r3, [r1, -0x1]!                                  |         *((r1 -= 0x1)) = r3;
    0x0001d320 bne 0x1d314                                           |         
                                                                     |     } while (r2 != sl);
                                                                     | label_175:
    0x0001d322 mov r2, r6                                            |     r2 = r6;
    0x0001d324 add r0, sl                                            |     r0 += sl;
    0x0001d326 movs r1, 0x30                                         |     r1 = 0x30;
    0x0001d328 mov sb, fp                                            |     sb = fp;
    0x0001d32a blx 0x97d4                                            |     fcn_000097d4 ();
                                                                     | label_106:
    0x0001d32e ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001d330 mov r2, sb                                            |     r2 = sb;
    0x0001d332 mov r1, sl                                            |     r1 = sl;
    0x0001d334 blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001d338 b.w 0x1c714                                           |     goto label_69;
                                                                     | label_154:
    0x0001d33c ldr.w sl, [pc, 0x110]                                 |     sl = *(0x0001d450);
    0x0001d340 movs r3, 0                                            |     r3 = 0;
    0x0001d342 ldr r7, [sp, 0xc]                                     |     r7 = var_ch;
    0x0001d344 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001d346 add sl, pc                                            |     sl += pc;
    0x0001d348 b 0x1cd18                                             |     goto label_51;
                                                                     | label_160:
    0x0001d34a movs r3, 0                                            |     r3 = 0;
    0x0001d34c mov.w sb, 2                                           |     sb = 2;
    0x0001d350 mov r1, r3                                            |     r1 = r3;
    0x0001d352 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0001d354 b.w 0x1c368                                           |     goto label_46;
                                                                     | label_161:
    0x0001d358 str r3, [r1, 0x44]                                    |     *((r1 + 0x44)) = r3;
    0x0001d35a mov r1, sl                                            |     r1 = sl;
    0x0001d35c ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0001d35e blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001d362 b.w 0x1c624                                           |     goto label_7;
                                                                     | label_172:
    0x0001d366 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d368 beq.w 0x1cc2c                                         |         goto label_62;
                                                                     |     }
    0x0001d36c ldr r5, [pc, 0xe4]                                    |     
    0x0001d36e mov.w sb, 0                                           |     sb = 0;
    0x0001d372 add r5, pc                                            |     r5 = 0x3a7ca;
    0x0001d374 b.w 0x1c22c                                           |     goto label_34;
                                                                     | label_173:
    0x0001d378 ubfx r3, r3, 0x12, 3                                  |     r3 = (r3 >> 0x12) & ((1 << 3) - 1);
    0x0001d37c and r5, r5, 0x3f                                      |     r5 &= 0x3f;
    0x0001d380 subs r3, 0x10                                         |     r3 -= 0x10;
    0x0001d382 mov.w sb, 4                                           |     sb = 4;
    0x0001d386 strb.w r3, [sp, 0x44]                                 |     var_44h = r3;
    0x0001d38a sub.w r3, r5, 0x80                                    |     r3 = r5 - 0x80;
    0x0001d38e add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001d392 strb.w r1, [sp, 0x46]                                 |     var_46h = r1;
    0x0001d396 strb.w r0, [sp, 0x47]                                 |     var_47h = r0;
    0x0001d39a str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0001d39c strb.w r3, [sp, 0x45]                                 |     var_45h = r3;
    0x0001d3a0 b.w 0x1c6be                                           |     goto label_39;
                                                                     | label_159:
    0x0001d3a4 ldr r6, [sp, 0x14]                                    |     r6 = var_14h;
    0x0001d3a6 ldr r1, [pc, 0xb0]                                    |     
    0x0001d3a8 mov r0, r6                                            |     r0 = r6;
    0x0001d3aa add r1, pc                                            |     r1 = 0x3a808;
    0x0001d3ac blx 0x982c                                            |     fcn_0000982c ();
    0x0001d3b0 mov r2, r5                                            |     r2 = r5;
    0x0001d3b2 mov r1, sl                                            |     r1 = sl;
    0x0001d3b4 mov r0, r6                                            |     r0 = r6;
    0x0001d3b6 blx 0x9d54                                            |     fcn_00009d54 ();
    0x0001d3ba b.w 0x1c624                                           |     goto label_7;
                                                                     | label_163:
    0x0001d3be vldr d17, [pc, 0x68]                                  |     __asm ("vldr d17, aav.0x000000ff");
    0x0001d3c2 movs r3, 1                                            |     r3 = 1;
    0x0001d3c4 vmov.f64 d18, 1.000000e+00                            |     __asm ("vmov.f64 d18, 1");
    0x0001d3c8 movs r6, 0                                            |     r6 = 0;
    0x0001d3ca b 0x1cf1c                                             |     goto label_70;
                                                                     | label_150:
    0x0001d3cc ldr r5, [pc, 0x8c]                                    |     
    0x0001d3ce add r5, pc                                            |     r5 = 0x3a82e;
    0x0001d3d0 b 0x1cc1a                                             |     goto label_71;
                                                                     | label_102:
    0x0001d3d2 mov r2, r3                                            |     r2 = r3;
    0x0001d3d4 b.w 0x1c430                                           |     goto label_72;
                                                                     | label_146:
    0x0001d3d8 vldr d16, [pc, 0x54]                                  |     __asm ("vldr d16, aav.0x000000ff");
    0x0001d3dc movs r2, 1                                            |     r2 = 1;
    0x0001d3de vmov.i64 d8, 0                                        |     __asm ("vmov.i64 d8, 0");
    0x0001d3e2 mov.w r8, 5                                           |     r8 = 5;
    0x0001d3e6 b.w 0x1c336                                           |     goto label_73;
                                                                     | label_171:
    0x0001d3ea ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0001d3ec subs r2, 1                                            |     r2--;
    0x0001d3ee strb r3, [r2]                                         |     *(r2) = r3;
    0x0001d3f0 b.w 0x1c43a                                           |     goto label_58;
                                                                     | label_87:
    0x0001d3f4 cmp.w sb, 0xa                                         |     
                                                                     |     if (sb != 0xa) {
    0x0001d3f8 bne.w 0x1cc2c                                         |         goto label_62;
                                                                     |     }
    0x0001d3fc ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001d3fe add.w sl, sp, 0x44                                    |     sl += var_44h;
    0x0001d402 strb.w r6, [sp, 0x44]                                 |     var_44h = r6;
    0x0001d406 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001d408 b.w 0x1cbc8                                           |     goto label_74;
                                                                     | label_101:
    0x0001d40c mov r2, r3                                            |     r2 = r3;
    0x0001d40e b.w 0x1c43a                                           |     goto label_58;
                                                                     | label_156:
    0x0001d412 ldr.w sb, [sp, 4]                                     |     sb = var_4h;
    0x0001d416 mov r6, fp                                            |     r6 = fp;
    0x0001d418 str r7, [sp, 0xc]                                     |     var_ch = r7;
    0x0001d41a b.w 0x1c6f0                                           |     goto label_17;
                                                                     | label_121:
    0x0001d41e blx 0x9b44                                            |     fcn_00009b44 ();
    0x0001d422 nop                                                   |     
    0x0001d424 nop.w                                                 |     
    0x0001d428 movs r0, r0                                           |     
    0x0001d42a movs r0, 0                                            |     r0 = 0;
    0x0001d42c adr r0, 0x17c                                         |     r0 = 0x17c;
    0x0001d42e tst r2, r0                                            |     
    0x0001d430 ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0001d432 ldrh r3, [r4, 6]                                      |     r3 = *((r4 + 6));
    0x0001d434 ldrh.w r3, [r5, 0xed4]                                |     r3 = *((r5 + 0xed4));
    0x0001d438 ldr r3, [sp, 0x388]                                   |     r3 = *(arg_388h);
    0x0001d43a movs r7, r0                                           |     r7 = r0;
    0x0001d43c asrs r2, r3, 5                                        |     r2 = r3 >> 5;
    0x0001d43e movs r7, r0                                           |     r7 = r0;
    0x0001d440 ldrsb r0, [r3, r6]                                    |     r0 = *((r3 + r6));
    0x0001d442 movs r7, r0                                           |     r7 = r0;
    0x0001d444 strb r6, [r3, 8]                                      |     *((r3 + 8)) = r6;
    0x0001d446 movs r7, r0                                           |     r7 = r0;
    0x0001d448 ldc2 p0, c0, [ip], -0x18                              |     __asm ("ldc2 p0, c0, [ip], -0x18");
    0x0001d44c stc2 p0, c0, [lr], -0x18                              |     __asm ("stc2 p0, c0, [lr], -0x18");
    0x0001d450 strb r2, [r0, 4]                                      |     *((r0 + 4)) = r2;
    0x0001d452 movs r7, r0                                           |     r7 = r0;
    0x0001d454 umull r0, r0, lr, r6                                  |     r0:r0 = lr * r6;
    0x0001d458 invalid                                               |     
    0x0002b170 push {r4, r5, lr}                                     |     
    0x0002b172 mov r4, r0                                            |     r4 = r0;
    0x0002b174 sub sp, 0xc                                           |     
    0x0002b176 mov r5, r1                                            |     r5 = r1;
    0x0002b178 cmp r3, r2                                            |     
                                                                     |     if (r3 >= r2) {
    0x0002b17a bge 0x2b1f8                                           |         goto label_176;
                                                                     |     }
    0x0002b17c add.w ip, r3, r3, lsl 2                               |     
    0x0002b180 ldr r0, [r0, 0x68]                                    |     r0 = *((r0 + 0x68));
    0x0002b182 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0002b184 vldr d16, [pc, 0x98]                                  |     __asm ("vldr d16, aav.0x000000ff");
    0x0002b188 lsl.w ip, ip, 2                                       |     
    0x0002b18c movs r1, 0x75                                         |     r1 = 0x75;
    0x0002b18e str r2, [r4, 0x6c]                                    |     *((r4 + 0x6c)) = r2;
    0x0002b190 movs r2, 0                                            |     r2 = 0;
    0x0002b192 str.w r1, [r0, ip]                                    |     __asm ("str.w r1, [r0, ip]");
    0x0002b196 add r0, ip                                            |     r0 += ip;
    0x0002b198 adds r1, r0, 4                                        |     r1 = r0 + 4;
    0x0002b19a vst1.32 {d16}, [r1]                                   |     __asm ("vst1.32 {d16}, [r1]");
    0x0002b19e strd r2, r2, [r0, 0xc]                                |     __asm ("strd r2, r2, [r0, 0xc]");
                                                                     |     do {
    0x0002b1a2 ldr r2, [r4]                                          |         r2 = *(r4);
    0x0002b1a4 ldrb.w r2, [r2, 0x57]                                 |         r2 = *((r2 + 0x57));
                                                                     |         if (r2 == 0) {
    0x0002b1a8 cbnz r2, 0x2b1ca                                      |             
    0x0002b1aa cmp r3, 0                                             |             
    0x0002b1ac ldr r1, [r4, 0x68]                                    |             r1 = *((r4 + 0x68));
    0x0002b1ae it lt                                                 |             
                                                                     |             if (r3 >= 0) {
    0x0002b1b0 ldrlt r3, [r4, 0x6c]                                  |                 r3 = *((r4 + 0x6c));
                                                                     |             }
    0x0002b1b2 mov r2, r5                                            |             r2 = r5;
    0x0002b1b4 it lt                                                 |             
                                                                     |             if (r3 >= 0) {
    0x0002b1b6 addlt r3, r3, -1                                      |                 r3 += -1;
                                                                     |             }
    0x0002b1ba add.w r0, r3, r3, lsl 2                               |             r0 = r3 + (r3 << 2);
    0x0002b1be movs r3, 0                                            |             r3 = 0;
    0x0002b1c0 add.w r1, r1, r0, lsl 2                               |             r1 += (r0 << 2);
    0x0002b1c4 mov r0, r4                                            |             r0 = r4;
    0x0002b1c6 bl 0x1ebdc                                            |             fcn_0001ebdc (r0, r1, r2, r3);
                                                                     |         }
    0x0002b1ca ldrd r3, r2, [r4, 0x6c]                               |         __asm ("ldrd r3, r2, [r4, 0x6c]");
    0x0002b1ce cmp r3, r2                                            |         
                                                                     |         if (r3 >= r2) {
    0x0002b1d0 bge 0x2b208                                           |             goto label_177;
                                                                     |         }
    0x0002b1d2 add.w r2, r3, r3, lsl 2                               |         r2 = r3 + (r3 << 2);
    0x0002b1d6 ldr r0, [r4, 0x68]                                    |         r0 = *((r4 + 0x68));
    0x0002b1d8 adds r3, 1                                            |         r3++;
    0x0002b1da vmov.i32 d16, 1                                       |         __asm ("vmov.i32 d16, 1");
    0x0002b1de lsls r2, r2, 2                                        |         r2 <<= 2;
    0x0002b1e0 str r3, [r4, 0x6c]                                    |         *((r4 + 0x6c)) = r3;
    0x0002b1e2 movs r4, 0x54                                         |         r4 = 0x54;
    0x0002b1e4 adds r3, r0, r2                                       |         r3 = r0 + r2;
    0x0002b1e6 str r4, [r0, r2]                                      |         *((r0 + r2)) = r4;
    0x0002b1e8 adds r2, r3, 4                                        |         r2 = r3 + 4;
    0x0002b1ea movs r1, 0                                            |         r1 = 0;
    0x0002b1ec vst1.32 {d16}, [r2]                                   |         __asm ("vst1.32 {d16}, [r2]");
    0x0002b1f0 strd r1, r1, [r3, 0xc]                                |         __asm ("strd r1, r1, [r3, 0xc]");
    0x0002b1f4 add sp, 0xc                                           |         
    0x0002b1f6 pop {r4, r5, pc}                                      |         
                                                                     | label_176:
    0x0002b1f8 movs r2, 0                                            |         r2 = 0;
    0x0002b1fa movs r3, 1                                            |         r3 = 1;
    0x0002b1fc movs r1, 0x75                                         |         r1 = 0x75;
    0x0002b1fe str r2, [sp]                                          |         *(sp) = r2;
    0x0002b200 bl 0x29a7c                                            |         r0 = fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0002b204 mov r3, r0                                            |         r3 = r0;
    0x0002b206 b 0x2b1a2                                             |         
                                                                     |     } while (1);
                                                                     | label_177:
    0x0002b208 movs r3, 1                                            |     r3 = 1;
    0x0002b20a movs r5, 0                                            |     r5 = 0;
    0x0002b20c mov r2, r3                                            |     r2 = r3;
    0x0002b20e movs r1, 0x54                                         |     r1 = 0x54;
    0x0002b210 mov r0, r4                                            |     r0 = r4;
    0x0002b212 str r5, [sp]                                          |     *(sp) = r5;
    0x0002b214 bl 0x29a7c                                            |     fcn_00029a7c (r0, r1, r2, r3, r4);
    0x0002b218 add sp, 0xc                                           |     
    0x0002b21a pop {r4, r5, pc}                                      |     
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x7bfb0 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) sym.sqlite3_table_column_metadata ()                     | void sqlite3_table_column_metadata (int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h;
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int32_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_2ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0007bfb0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0007bfb4 sub sp, 0x34                                          |     
    0x0007bfb6 strd r2, r3, [sp, 0x14]                               |     __asm ("strd r2, r3, [var_14h]");
    0x0007bfba mov r4, r0                                            |     r4 = r0;
    0x0007bfbc mov r5, r1                                            |     r5 = r1;
    0x0007bfbe ldr r2, [pc, 0x2d0]                                   |     
    0x0007bfc0 ldr r0, [sp, 0x58]                                    |     r0 = *(arg_58h);
    0x0007bfc2 ldr r3, [pc, 0x2d0]                                   |     r3 = *(0x7c296);
    0x0007bfc4 add r2, pc                                            |     r2 = 0xf825a;
    0x0007bfc6 str r0, [sp]                                          |     *(sp) = r0;
    0x0007bfc8 ldr r3, [r2, r3]                                      |     
    0x0007bfca ldr r0, [r4, 0xc]                                     |     r0 = *((r4 + 0xc));
    0x0007bfcc ldr r3, [r3]                                          |     r3 = *(0xf825a);
    0x0007bfce str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0007bfd0 mov.w r3, 0                                           |     r3 = 0;
    0x0007bfd4 movs r3, 0                                            |     r3 = 0;
    0x0007bfd6 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0007bfd8 ldr r3, [sp, 0x5c]                                    |     r3 = *(arg_5ch);
    0x0007bfda str r3, [sp, 4]                                       |     var_4h = r3;
    0x0007bfdc ldr r3, [sp, 0x60]                                    |     r3 = *(arg_60h);
    0x0007bfde str r3, [sp, 8]                                       |     var_8h = r3;
    0x0007bfe0 ldr r3, [sp, 0x64]                                    |     r3 = *(arg_64h);
    0x0007bfe2 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0007bfe4 ldr r3, [sp, 0x68]                                    |     r3 = *(arg_68h);
    0x0007bfe6 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0007bfe8 blx 0xa12c                                            |     fcn_0000a12c ();
    0x0007bfec ldrb.w r3, [r4, 0x5f]                                 |     r3 = *((r4 + 0x5f));
    0x0007bff0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007bff2 beq.w 0x7c1da                                         |         goto label_9;
                                                                     |     }
                                                                     | label_5:
    0x0007bff6 add r1, sp, 0x28                                      |     r1 += var_28h;
    0x0007bff8 mov r0, r4                                            |     r0 = r4;
    0x0007bffa bl 0x72abc                                            |     r0 = fcn_00072abc (r0, r1);
    0x0007bffe mov r6, r0                                            |     r6 = r0;
    0x0007c000 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007c002 beq 0x7c0c4                                           |         goto label_10;
                                                                     |     }
                                                                     | label_0:
    0x0007c004 movs r7, 0                                            |     r7 = 0;
    0x0007c006 mov fp, r7                                            |     
    0x0007c008 mov sl, r7                                            |     sl = r7;
    0x0007c00a mov r5, r7                                            |     r5 = r7;
    0x0007c00c mov sb, r7                                            |     sb = r7;
    0x0007c00e mov r8, r7                                            |     r8 = r7;
                                                                     | label_2:
    0x0007c010 ldrb.w r3, [r4, 0x5f]                                 |     r3 = *((r4 + 0x5f));
    0x0007c014 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007c016 beq.w 0x7c1e2                                         |         goto label_11;
                                                                     |     }
                                                                     | label_6:
    0x0007c01a ldr r3, [sp]                                          |     r3 = *(sp);
                                                                     |     if (r3 != 0) {
    0x0007c01c cbz r3, 0x7c022                                       |         
    0x0007c01e str.w sb, [r3]                                        |         __asm ("str.w sb, [r3]");
                                                                     |     }
    0x0007c022 ldr r3, [sp, 4]                                       |     r3 = var_4h;
                                                                     |     if (r3 != 0) {
    0x0007c024 cbz r3, 0x7c028                                       |         
    0x0007c026 str r5, [r3]                                          |         *(r3) = r5;
                                                                     |     }
    0x0007c028 ldr r3, [sp, 8]                                       |     r3 = var_8h;
                                                                     |     if (r3 != 0) {
    0x0007c02a cbz r3, 0x7c030                                       |         
    0x0007c02c str.w sl, [r3]                                        |         __asm ("str.w sl, [r3]");
                                                                     |     }
    0x0007c030 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
                                                                     |     if (r3 != 0) {
    0x0007c032 cbz r3, 0x7c038                                       |         
    0x0007c034 str.w fp, [r3]                                        |         __asm ("str.w fp, [r3]");
                                                                     |     }
    0x0007c038 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
                                                                     |     if (r3 != 0) {
    0x0007c03a cbz r3, 0x7c03e                                       |         
    0x0007c03c str r7, [r3]                                          |         *(r3) = r7;
                                                                     |     }
    0x0007c03e orrs.w r8, r8, r6                                     |     r8 |= r6;
    0x0007c042 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
                                                                     |     if (r8 == r8) {
    0x0007c044 beq 0x7c0a2                                           |         goto label_12;
                                                                     |     }
    0x0007c046 subs r5, r6, 0                                        |     r5 = r6 - 0;
    0x0007c048 it ne                                                 |     
    0x0007c04a movne r5, 1                                           |     r5 = 1;
                                                                     |     while (1) {
    0x0007c04c mov r2, r3                                            |         r2 = r3;
                                                                     |         if (r3 != 0) {
    0x0007c04e cbz r3, 0x7c054                                       |             
    0x0007c050 ldr r2, [pc, 0x244]                                   |             
    0x0007c052 add r2, pc                                            |             r2 = 0xf82ee;
                                                                     |         }
    0x0007c054 mov r1, r6                                            |         r1 = r6;
    0x0007c056 mov r0, r4                                            |         r0 = r4;
    0x0007c058 bl 0x27670                                            |         fcn_00027670 (r0, r1, r2);
    0x0007c05c ldr r1, [sp, 0x28]                                    |         r1 = var_28h;
                                                                     |         if (r1 != 0) {
    0x0007c05e cbz r1, 0x7c066                                       |             
    0x0007c060 mov r0, r4                                            |             r0 = r4;
    0x0007c062 bl 0x137d0                                            |             fcn_000137d0 (r0, r1);
                                                                     |         }
    0x0007c066 ldrb.w r3, [r4, 0x57]                                 |         r3 = *((r4 + 0x57));
    0x0007c06a cmp r3, 0                                             |         
    0x0007c06c it ne                                                 |         
                                                                     |         if (r3 == 0) {
    0x0007c06e orrne r5, r5, 1                                       |             r5 |= 1;
                                                                     |         }
                                                                     |         if (r5 != 0) {
    0x0007c072 cbz r5, 0x7c07e                                       |             
    0x0007c074 mov r1, r6                                            |             r1 = r6;
    0x0007c076 mov r0, r4                                            |             r0 = r4;
    0x0007c078 bl 0x14ab4                                            |             r0 = fcn_00014ab4 (r0, r1);
    0x0007c07c mov r5, r0                                            |             r5 = r0;
                                                                     |         }
    0x0007c07e ldr r0, [r4, 0xc]                                     |         r0 = *((r4 + 0xc));
    0x0007c080 blx 0x9d10                                            |         fcn_00009d10 ();
    0x0007c084 ldr r2, [pc, 0x214]                                   |         
    0x0007c086 ldr r3, [pc, 0x20c]                                   |         r3 = *(0x7c296);
    0x0007c088 add r2, pc                                            |         r2 = 0xf8328;
    0x0007c08a ldr r3, [r2, r3]                                      |         r3 = *(0xf8328);
    0x0007c08c ldr r2, [r3]                                          |         r2 = *(0xf8328);
    0x0007c08e ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0007c090 eors r2, r3                                           |         r2 ^= r3;
    0x0007c092 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0007c096 bne.w 0x7c27a                                         |             goto label_13;
                                                                     |         }
    0x0007c09a mov r0, r5                                            |         r0 = r5;
    0x0007c09c add sp, 0x34                                          |         
    0x0007c09e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     |         if (r3 != 0) {
                                                                     | label_12:
    0x0007c0a2 cbz r3, 0x7c0ac                                       |             
    0x0007c0a4 mov r1, r3                                            |             r1 = r3;
    0x0007c0a6 mov r0, r4                                            |             r0 = r4;
    0x0007c0a8 bl 0x137d0                                            |             fcn_000137d0 (r0, r1);
                                                                     |         }
    0x0007c0ac ldr r1, [pc, 0x1f0]                                   |         
    0x0007c0ae mov r0, r4                                            |         r0 = r4;
    0x0007c0b0 ldrd r2, r3, [sp, 0x14]                               |         __asm ("ldrd r2, r3, [var_14h]");
    0x0007c0b4 movs r5, 1                                            |         r5 = 1;
    0x0007c0b6 mov r6, r5                                            |         r6 = r5;
    0x0007c0b8 add r1, pc                                            |         r1 = 0xf835c;
    0x0007c0ba bl 0x20e84                                            |         r0 = fcn_00020e84 (r0);
    0x0007c0be mov r3, r0                                            |         r3 = r0;
    0x0007c0c0 str r0, [sp, 0x28]                                    |         var_28h = r0;
    0x0007c0c2 b 0x7c04c                                             |         
                                                                     |     }
                                                                     | label_10:
    0x0007c0c4 ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0007c0c6 mov r2, r5                                            |     r2 = r5;
    0x0007c0c8 mov r0, r4                                            |     r0 = r4;
    0x0007c0ca bl 0x38d4c                                            |     r0 = fcn_00038d4c (r0, r1, r2, r3);
    0x0007c0ce mov r8, r0                                            |     r8 = r0;
    0x0007c0d0 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007c0d2 beq 0x7c004                                           |         goto label_0;
                                                                     |     }
    0x0007c0d4 ldrb.w r3, [r0, 0x2b]                                 |     r3 = *((r0 + 0x2b));
    0x0007c0d8 cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0007c0da beq 0x7c004                                           |         goto label_0;
                                                                     |     }
    0x0007c0dc ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0007c0de cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0007c0e0 beq.w 0x7c1ea                                         |         goto label_14;
                                                                     |     }
    0x0007c0e4 ldrsh.w sb, [r0, 0x22]                                |     sb = *((r0 + 0x22));
    0x0007c0e8 cmp.w sb, 0                                           |     
                                                                     |     if (sb <= 0) {
    0x0007c0ec ble.w 0x7c25e                                         |         goto label_15;
                                                                     |     }
    0x0007c0f0 ldr r1, [pc, 0x1b0]                                   |     
    0x0007c0f2 mov r7, r6                                            |     r7 = r6;
    0x0007c0f4 ldr r0, [r0, 4]                                       |     r0 = *((r0 + 4));
    0x0007c0f6 add.w fp, r3, -1                                      |     
    0x0007c0fa add r1, pc                                            |     r1 = 0xf83a2;
                                                                     | label_1:
    0x0007c0fc ldr r5, [r0]                                          |     r5 = *(r0);
    0x0007c0fe mov sl, r0                                            |     sl = r0;
    0x0007c100 mov lr, fp                                            |     lr = fp;
    0x0007c102 add.w ip, r5, -1                                      |     
                                                                     |     do {
                                                                     | label_3:
    0x0007c106 ldrb r3, [ip, 1]!                                     |         r3 = *((ip += 1));
    0x0007c10a ldrb r2, [lr, 1]!                                     |         r2 = *((lr += 1));
    0x0007c10e cmp r3, r2                                            |         
                                                                     |         if (r3 == r2) {
    0x0007c110 beq 0x7c174                                           |             goto label_16;
                                                                     |         }
    0x0007c112 add r3, r1                                            |         r3 += r1;
    0x0007c114 add r2, r1                                            |         r2 += r1;
    0x0007c116 ldrb.w r3, [r3, 0x140]                                |         r3 = *((r3 + 0x140));
    0x0007c11a ldrb.w r2, [r2, 0x140]                                |         r2 = *((r2 + 0x140));
    0x0007c11e cmp r3, r2                                            |         
    0x0007c120 beq 0x7c106                                           |         
                                                                     |     } while (r3 == r2);
    0x0007c122 adds r7, 1                                            |     r7++;
    0x0007c124 adds r0, 0xc                                          |     r0 += 0xc;
    0x0007c126 cmp sb, r7                                            |     
                                                                     |     if (sb != r7) {
    0x0007c128 bne 0x7c0fc                                           |         goto label_1;
                                                                     |     }
                                                                     | label_4:
    0x0007c12a ldr.w r5, [r8, 0x1c]                                  |     r5 = *((r8 + 0x1c));
    0x0007c12e ands r5, r5, 0x80                                     |     r5 &= 0x80;
                                                                     |     if (r5 != r5) {
    0x0007c132 bne.w 0x7c004                                         |         goto label_0;
                                                                     |     }
    0x0007c136 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0007c138 bl 0x1a774                                            |     r0 = fcn_0001a774 (r0);
    0x0007c13c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0007c13e beq.w 0x7c004                                         |         goto label_0;
                                                                     |     }
    0x0007c142 ldrsh.w r3, [r8, 0x20]                                |     r3 = *((r8 + 0x20));
    0x0007c146 cmp r3, 0                                             |     
    0x0007c148 mov r7, r3                                            |     r7 = r3;
                                                                     |     if (r3 < 0) {
    0x0007c14a blt 0x7c246                                           |         goto label_17;
                                                                     |     }
    0x0007c14c add.w r2, r3, r3, lsl 1                               |     r2 = r3 + (r3 << 1);
    0x0007c150 ldr.w r1, [r8, 4]                                     |     r1 = *((r8 + 4));
    0x0007c154 lsls r2, r2, 2                                        |     r2 <<= 2;
    0x0007c156 adds.w sl, r1, r2                                     |     sl = r1 + r2;
                                                                     |     if (sl != r1) {
    0x0007c15a bne.w 0x7c27e                                         |         goto label_18;
                                                                     |     }
    0x0007c15e ldr r5, [pc, 0x148]                                   |     
    0x0007c160 mov r7, sl                                            |     r7 = sl;
    0x0007c162 ldr.w sb, [pc, 0x148]                                 |     
    0x0007c166 mov.w fp, 1                                           |     
    0x0007c16a add r5, pc                                            |     r5 = 0xf8418;
    0x0007c16c addw r5, r5, 0xeec                                    |     __asm ("addw r5, r5, aav.0x000000ff");
    0x0007c170 add sb, pc                                            |     sb = 0xf8422;
    0x0007c172 b 0x7c010                                             |     goto label_2;
                                                                     | label_16:
    0x0007c174 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0007c176 bne 0x7c106                                           |         goto label_3;
                                                                     |     }
    0x0007c178 cmp sb, r7                                            |     
                                                                     |     if (sb == r7) {
    0x0007c17a beq 0x7c12a                                           |         goto label_4;
                                                                     |     }
    0x0007c17c ldrsh.w r3, [r8, 0x20]                                |     r3 = *((r8 + 0x20));
                                                                     | label_8:
    0x0007c180 ldrh.w r2, [sl, 0xa]                                  |     r2 = *((sl + 0xa));
    0x0007c184 ldrb.w sl, [sl, 4]                                    |     sl = *((sl + 4));
    0x0007c188 ands r1, r2, 4                                        |     r1 = r2 & 4;
                                                                     |     if (r1 != r2) {
    0x0007c18c bne 0x7c216                                           |         goto label_19;
                                                                     |     }
    0x0007c18e cmp.w sl, 0xf                                         |     
    0x0007c192 it ls                                                 |     
                                                                     |     if (sl > 0xf) {
    0x0007c194 movls sb, r1                                          |         sb = r1;
                                                                     |     }
                                                                     |     if (sl > 0xf) {
    0x0007c196 bhi 0x7c204                                           |         goto label_20;
                                                                     |     }
                                                                     | label_7:
    0x0007c198 ands sl, sl, 0xf                                      |     sl &= 0xf;
    0x0007c19c and fp, r2, 1                                         |     
    0x0007c1a0 it ne                                                 |     
                                                                     |     if (sl == sl) {
    0x0007c1a2 movne sl, 1                                           |         sl = 1;
                                                                     |     }
    0x0007c1a6 ands r2, r2, 0x200                                    |     r2 &= 0x200;
                                                                     |     if (r2 == r2) {
    0x0007c1aa beq 0x7c230                                           |         goto label_21;
                                                                     |     }
    0x0007c1ac ldrb r2, [r5]                                         |     r2 = *(r5);
                                                                     |     if (r2 == 0) {
    0x0007c1ae cbz r2, 0x7c1b8                                       |         goto label_22;
                                                                     |     }
                                                                     |     do {
    0x0007c1b0 ldrb r2, [r5, 1]!                                     |         r2 = *((r5 += 1));
    0x0007c1b4 cmp r2, 0                                             |         
    0x0007c1b6 bne 0x7c1b0                                           |         
                                                                     |     } while (r2 != 0);
                                                                     |     if (r1 == 0) {
                                                                     | label_22:
    0x0007c1b8 cbz r1, 0x7c1c2                                       |         goto label_23;
                                                                     |     }
                                                                     |     do {
    0x0007c1ba ldrb r2, [r5, 1]!                                     |         r2 = *((r5 += 1));
    0x0007c1be cmp r2, 0                                             |         
    0x0007c1c0 bne 0x7c1ba                                           |         
                                                                     |     } while (r2 != 0);
                                                                     | label_23:
    0x0007c1c2 cmp r3, r7                                            |     
    0x0007c1c4 add.w r5, r5, 1                                       |     r5++;
    0x0007c1c8 it ne                                                 |     
                                                                     |     if (r3 != r7) {
    0x0007c1ca movne r7, 0                                           |         r7 = 0;
                                                                     |         goto label_24;
                                                                     |     }
                                                                     |     if (r3 != r7) {
                                                                     | label_24:
    0x0007c1cc bne.w 0x7c010                                         |         goto label_2;
                                                                     |     }
    0x0007c1d0 ldr.w r7, [r8, 0x1c]                                  |     r7 = *((r8 + 0x1c));
    0x0007c1d4 ubfx r7, r7, 3, 1                                     |     r7 = (r7 >> 3) & ((1 << 1) - 1);
    0x0007c1d8 b 0x7c010                                             |     goto label_2;
                                                                     | label_9:
    0x0007c1da mov r0, r4                                            |     r0 = r4;
    0x0007c1dc bl 0x14528                                            |     fcn_00014528 (r0);
    0x0007c1e0 b 0x7bff6                                             |     goto label_5;
                                                                     | label_11:
    0x0007c1e2 mov r0, r4                                            |     r0 = r4;
    0x0007c1e4 bl 0x133b8                                            |     fcn_000133b8 (r0);
    0x0007c1e8 b 0x7c01a                                             |     goto label_6;
                                                                     | label_14:
    0x0007c1ea ldr r5, [pc, 0xc4]                                    |     
    0x0007c1ec mov.w fp, 1                                           |     
    0x0007c1f0 ldr.w sb, [pc, 0xc0]                                  |     sb = *(0x0007c2b4);
    0x0007c1f4 ldr.w sl, [sp, 0x18]                                  |     sl = var_18h;
    0x0007c1f8 add r5, pc                                            |     r5 = 0xf84ae;
    0x0007c1fa addw r5, r5, 0xeec                                    |     __asm ("addw r5, r5, aav.0x000000ff");
    0x0007c1fe add sb, pc                                            |     sb += pc;
    0x0007c200 mov r7, sl                                            |     r7 = sl;
    0x0007c202 b 0x7c010                                             |     goto label_2;
                                                                     | label_20:
    0x0007c204 ldr r0, [pc, 0xb0]                                    |     
    0x0007c206 lsr.w ip, sl, 4                                       |     
    0x0007c20a add.w ip, ip, -1                                      |     
    0x0007c20e add r0, pc                                            |     r0 = 0xf84ca;
    0x0007c210 ldr.w sb, [r0, ip, lsl 2]                             |     sb = *(0xf84ca);
    0x0007c214 b 0x7c198                                             |     goto label_7;
                                                                     | label_19:
    0x0007c216 mov r0, r5                                            |     r0 = r5;
    0x0007c218 strd r1, r3, [sp, 0x20]                               |     __asm ("strd r1, r3, [var_24h]");
    0x0007c21c str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0007c21e blx 0x9e8c                                            |     r0 = fcn_00009e8c ();
    0x0007c222 add.w sb, r0, 1                                       |     sb = r0 + 1;
    0x0007c226 ldrd r2, r1, [sp, 0x1c]                               |     __asm ("ldrd r2, r1, [var_1ch]");
    0x0007c22a ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0007c22c add sb, r5                                            |     sb += r5;
    0x0007c22e b 0x7c198                                             |     goto label_7;
                                                                     | label_21:
    0x0007c230 cmp r3, r7                                            |     
                                                                     |     if (r3 != r7) {
    0x0007c232 bne 0x7c282                                           |         goto label_25;
                                                                     |     }
    0x0007c234 ldr r5, [pc, 0x84]                                    |     
    0x0007c236 ldr.w r7, [r8, 0x1c]                                  |     r7 = *((r8 + 0x1c));
    0x0007c23a add r5, pc                                            |     r5 = 0xf84fa;
    0x0007c23c ubfx r7, r7, 3, 1                                     |     r7 = (r7 >> 3) & ((1 << 1) - 1);
    0x0007c240 addw r5, r5, 0xeec                                    |     __asm ("addw r5, r5, aav.0x000000ff");
    0x0007c244 b 0x7c010                                             |     goto label_2;
                                                                     | label_17:
    0x0007c246 mov r7, r5                                            |     r7 = r5;
    0x0007c248 ldr r5, [pc, 0x74]                                    |     
    0x0007c24a ldr.w sb, [pc, 0x78]                                  |     sb = *(0x0007c2c4);
    0x0007c24e mov sl, r7                                            |     sl = r7;
    0x0007c250 mov.w fp, 1                                           |     
    0x0007c254 add r5, pc                                            |     r5 = 0xf8518;
    0x0007c256 addw r5, r5, 0xeec                                    |     __asm ("addw r5, r5, aav.0x000000ff");
    0x0007c25a add sb, pc                                            |     sb += pc;
    0x0007c25c b 0x7c010                                             |     goto label_2;
                                                                     |     if (r3 == r7) {
                                                                     | label_15:
    0x0007c25e beq.w 0x7c12a                                         |         goto label_4;
                                                                     |     }
    0x0007c262 ldr r5, [pc, 0x64]                                    |     
    0x0007c264 mov r7, r6                                            |     r7 = r6;
    0x0007c266 ldr.w sb, [pc, 0x64]                                  |     sb = *(0x0007c2cc);
    0x0007c26a mov sl, r6                                            |     sl = r6;
    0x0007c26c mov.w fp, 1                                           |     
    0x0007c270 add r5, pc                                            |     r5 = 0xf853e;
    0x0007c272 addw r5, r5, 0xeec                                    |     __asm ("addw r5, r5, aav.0x000000ff");
    0x0007c276 add sb, pc                                            |     sb += pc;
    0x0007c278 b 0x7c010                                             |     goto label_2;
                                                                     | label_13:
    0x0007c27a blx 0x9b44                                            |     fcn_00009b44 ();
                                                                     | label_18:
    0x0007c27e ldr r5, [r1, r2]                                      |     r5 = *((r1 + r2));
    0x0007c280 b 0x7c180                                             |     goto label_8;
                                                                     | label_25:
    0x0007c282 ldr r5, [pc, 0x4c]                                    |     
    0x0007c284 mov r7, r2                                            |     r7 = r2;
    0x0007c286 add r5, pc                                            |     r5 = 0xf855c;
    0x0007c288 addw r5, r5, 0xeec                                    |     __asm ("addw r5, r5, aav.0x000000ff");
    0x0007c28c b 0x7c010                                             |     goto label_2;
                                                                     | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x30948 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.sqlite3_vtab_rhs_value ()        | void sqlite3_vtab_rhs_value (int16_t arg1, uint32_t arg2, int16_t arg3) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
    0x00030948 cmp r1, 0                         |     
    0x0003094a push {r4, r5, r6, r7, lr}         |     
    0x0003094c mov r4, r2                        |     r4 = r2;
    0x0003094e sub sp, 0xc                       |     
                                                 |     if (r1 >= 0) {
    0x00030950 blt 0x30958                       |         
    0x00030952 ldr r3, [r0]                      |         r3 = *(r0);
    0x00030954 cmp r3, r1                        |         
                                                 |         if (r3 > r1) {
    0x00030956 bgt 0x30962                       |             goto label_0;
                                                 |         }
                                                 |     }
    0x00030958 movs r5, 0                        |     r5 = 0;
    0x0003095a movs r0, 0x15                     |     r0 = 0x15;
                                                 |     do {
    0x0003095c str r5, [r4]                      |         *(r4) = r5;
    0x0003095e add sp, 0xc                       |         
    0x00030960 pop {r4, r5, r6, r7, pc}          |         
                                                 | label_0:
    0x00030962 add.w r6, r0, r1, lsl 2           |         r6 = r0 + (r1 << 2);
    0x00030966 ldr r5, [r6, 0x5c]                |         r5 = *((r6 + 0x5c));
                                                 |         if (r5 != 0) {
    0x00030968 cbz r5, 0x30972                   |             
    0x0003096a movs r0, 0                        |             r0 = 0;
    0x0003096c str r5, [r4]                      |             *(r4) = r5;
    0x0003096e add sp, 0xc                       |             
    0x00030970 pop {r4, r5, r6, r7, pc}          |             
                                                 |         }
    0x00030972 ldr r3, [r0, 4]                   |         r3 = *((r0 + 4));
    0x00030974 add.w r2, r1, r1, lsl 1           |         r2 = r1 + (r1 << 1);
    0x00030978 ldrd r7, r1, [r0, 0x48]           |         __asm ("ldrd r7, r1, [r0, 0x48]");
    0x0003097c add.w r3, r3, r2, lsl 2           |         r3 += (r2 << 2);
    0x00030980 ldr r0, [r7, 0x18]                |         r0 = *((r7 + 0x18));
    0x00030982 ldr r2, [r3, 8]                   |         r2 = *((r3 + 8));
    0x00030984 add.w r3, r6, 0x5c                |         r3 = r6 + 0x5c;
    0x00030988 add.w r2, r2, r2, lsl 1           |         r2 += (r2 << 1);
    0x0003098c lsls r2, r2, 4                    |         r2 <<= 4;
    0x0003098e ldr r2, [r0, r2]                  |         r2 = *((r0 + r2));
    0x00030990 ldr r0, [r1]                      |         r0 = *(r1);
    0x00030992 ldr r1, [r2, 0x10]                |         r1 = *((r2 + 0x10));
    0x00030994 ldrb.w r2, [r0, 0x54]             |         r2 = *((r0 + 0x54));
                                                 |         if (r1 != 0) {
    0x00030998 cbz r1, 0x309aa                   |             
    0x0003099a str r3, [sp]                      |             *(sp) = r3;
    0x0003099c movs r3, 0x41                     |             r3 = 0x41;
    0x0003099e bl 0x30528                        |             fcn_00030528 (r0, r1, r2, r3, r4);
    0x000309a2 ldr r3, [r6, 0x5c]                |             r3 = *((r6 + 0x5c));
    0x000309a4 orrs.w r2, r3, r0                 |             r2 = r3 | r0;
                                                 |             if (r2 != r3) {
    0x000309a8 bne 0x309b2                       |                 goto label_1;
                                                 |             }
                                                 |         }
    0x000309aa movs r0, 0xc                      |         r0 = 0xc;
    0x000309ac str r5, [r4]                      |         *(r4) = r5;
    0x000309ae add sp, 0xc                       |         
    0x000309b0 pop {r4, r5, r6, r7, pc}          |         
                                                 | label_1:
    0x000309b2 mov r5, r3                        |         r5 = r3;
    0x000309b4 b 0x3095c                         |         
                                                 |     } while (1);
                                                 | }

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